On Mon, Mar 4, 2013 at 3:22 PM, Iustin Pop <[email protected]> wrote:
> When file storage is disabled at ./configure time, we shouldn't pass > opcodes containing DTFile/DTSharedFile/StorageFile to Python for > validation, as they will fail. > > This patch implements this by simply tweaking the Arbitrary instances > for DiskTemplate and StorageType (which IMHO is a nice and clean > way!), and also fixing the generation of arbitrary IPolicies to use > the correct 'allDiskTemplates' list (otherwise we'd loop forever > trying to generate a list of all templates). > > Signed-off-by: Iustin Pop <[email protected]> > --- > test/hs/Test/Ganeti/HTools/Types.hs | 8 ++------ > test/hs/Test/Ganeti/Types.hs | 33 ++++++++++++++++++++++++++++++--- > 2 files changed, 32 insertions(+), 9 deletions(-) > > diff --git a/test/hs/Test/Ganeti/HTools/Types.hs > b/test/hs/Test/Ganeti/HTools/Types.hs > index 0cb187a..da21725 100644 > --- a/test/hs/Test/Ganeti/HTools/Types.hs > +++ b/test/hs/Test/Ganeti/HTools/Types.hs > @@ -7,7 +7,7 @@ > > {- > > -Copyright (C) 2009, 2010, 2011, 2012 Google Inc. > +Copyright (C) 2009, 2010, 2011, 2012, 2013 Google Inc. > > This program is free software; you can redistribute it and/or modify > it under the terms of the GNU General Public License as published by > @@ -46,7 +46,7 @@ import Data.List (sort) > import Test.Ganeti.TestHelper > import Test.Ganeti.TestCommon > import Test.Ganeti.TestHTools > -import Test.Ganeti.Types () > +import Test.Ganeti.Types (allDiskTemplates) > > import Ganeti.BasicTypes > import qualified Ganeti.Constants as C > @@ -56,10 +56,6 @@ import qualified Ganeti.HTools.Types as Types > > -- * Helpers > > --- | All disk templates (used later) > -allDiskTemplates :: [Types.DiskTemplate] > -allDiskTemplates = [minBound..maxBound] > - > -- * Arbitrary instance > > $(genArbitrary ''Types.FailMode) > diff --git a/test/hs/Test/Ganeti/Types.hs b/test/hs/Test/Ganeti/Types.hs > index 6246e6e..3eff2f0 100644 > --- a/test/hs/Test/Ganeti/Types.hs > +++ b/test/hs/Test/Ganeti/Types.hs > @@ -30,13 +30,14 @@ module Test.Ganeti.Types > ( testTypes > , AllocPolicy(..) > , DiskTemplate(..) > + , allDiskTemplates > , InstanceStatus(..) > , NonEmpty(..) > , Hypervisor(..) > , JobId(..) > ) where > > -import Data.List (sort) > +import Data.List (delete, sort) > import Test.QuickCheck as QuickCheck hiding (Result) > import Test.HUnit > import qualified Text.JSON as J > @@ -78,7 +79,22 @@ instance (Arbitrary a) => Arbitrary (Types.NonEmpty a) > where > > $(genArbitrary ''AllocPolicy) > > -$(genArbitrary ''DiskTemplate) > +-- | Valid disk templates (depending on configure options). > +allDiskTemplates :: [DiskTemplate] > +allDiskTemplates = > + let all_vals = [minBound..maxBound]::[DiskTemplate] > + sel1 = if C.enableFileStorage > + then all_vals > + else delete DTFile all_vals > + sel2 = if C.enableSharedFileStorage > + then sel1 > + else delete DTSharedFile sel1 > + in sel2 > + > +-- | Custom 'Arbitrary' instance for 'DiskTemplate', which needs to > +-- handle the case of file storage being disabled at configure time. > +instance Arbitrary DiskTemplate where > + arbitrary = elements allDiskTemplates > > $(genArbitrary ''InstanceStatus) > > @@ -96,7 +112,18 @@ $(genArbitrary ''Hypervisor) > > $(genArbitrary ''OobCommand) > > -$(genArbitrary ''StorageType) > +-- | Valid storage types. > +allStorageTypes :: [StorageType] > +allStorageTypes = > + let all_vals = [minBound..maxBound]::[StorageType] > + in if C.enableFileStorage > + then all_vals > + else delete StorageFile all_vals > + > +-- | Custom 'Arbitrary' instance for 'StorageType', which needs to > +-- handle the case of file storage being disabled at configure time. > +instance Arbitrary StorageType where > + arbitrary = elements allStorageTypes > > $(genArbitrary ''NodeEvacMode) > > -- > 1.8.1.3 > > LGTM, thanks. Michele
