Merge branch 'stable-2.12' into stable-2.13
[ganeti-github.git] / test / hs / Test / Ganeti / Objects.hs
index 363dbc0..06f15c4 100644 (file)
@@ -64,11 +64,14 @@ import GHC.Exts (IsString(..))
 import System.Time (ClockTime(..))
 import qualified Text.JSON as J
 
+import Test.Ganeti.Query.Language ()
+import Test.Ganeti.SlotMap (genSlotLimit)
 import Test.Ganeti.TestHelper
 import Test.Ganeti.TestCommon
 import Test.Ganeti.Types ()
 
 import qualified Ganeti.Constants as C
+import qualified Ganeti.ConstantUtils as CU
 import Ganeti.Network
 import Ganeti.Objects as Objects
 import qualified Ganeti.Objects.BitArray as BA
@@ -77,6 +80,15 @@ import Ganeti.Types
 
 -- * Arbitrary instances
 
+instance Arbitrary (Container DataCollectorConfig) where
+  arbitrary = do
+    let names = CU.toList C.dataCollectorNames
+    activations <- vector $ length names
+    timeouts <- vector $ length names
+    let configs = zipWith DataCollectorConfig activations timeouts
+    return GenericContainer {
+      fromContainer = Map.fromList $ zip names configs }
+
 $(genArbitrary ''PartialNDParams)
 
 instance Arbitrary Node where
@@ -278,6 +290,30 @@ instance Arbitrary AddressPool where
 instance Arbitrary Network where
   arbitrary = genValidNetwork
 
+instance Arbitrary FilterAction where
+  arbitrary = oneof
+    [ pure Accept
+    , pure Pause
+    , pure Reject
+    , pure Continue
+    , RateLimit <$> genSlotLimit
+    ]
+
+instance Arbitrary FilterPredicate where
+  arbitrary = oneof
+    [ FPJobId <$> arbitrary
+    , FPOpCode <$> arbitrary
+    , FPReason <$> arbitrary
+    ]
+
+instance Arbitrary FilterRule where
+  arbitrary = FilterRule <$> arbitrary
+                         <*> arbitrary
+                         <*> arbitrary
+                         <*> arbitrary
+                         <*> arbitrary
+                         <*> genUUID
+
 -- | Generates a network instance with minimum netmasks of /24. Generating
 -- bigger networks slows down the tests, because long bit strings are generated
 -- for the reservations.
@@ -333,6 +369,7 @@ genEmptyCluster ncount = do
       continsts = GenericContainer Map.empty
       networks = GenericContainer Map.empty
       disks = GenericContainer Map.empty
+      filters = GenericContainer Map.empty
   let contgroups = GenericContainer $ Map.singleton guuid grp
   serial <- arbitrary
   -- timestamp fields
@@ -340,7 +377,7 @@ genEmptyCluster ncount = do
   mtime <- arbitrary
   cluster <- resize 8 arbitrary
   let c = ConfigData version cluster contnodes contgroups continsts networks
-            disks ctime mtime serial
+            disks filters ctime mtime serial
   return c
 
 -- | FIXME: make an even simpler base version of creating a cluster.
@@ -421,6 +458,14 @@ prop_AddressPool_serialisation = testSerialisation
 prop_Network_serialisation :: Network -> Property
 prop_Network_serialisation = testSerialisation
 
+-- | Check that filter action serialisation is idempotent.
+prop_FilterAction_serialisation :: FilterAction -> Property
+prop_FilterAction_serialisation = testSerialisation
+
+-- | Check that filter predicate serialisation is idempotent.
+prop_FilterPredicate_serialisation :: FilterPredicate -> Property
+prop_FilterPredicate_serialisation = testSerialisation
+
 -- | Check config serialisation.
 prop_Config_serialisation :: Property
 prop_Config_serialisation =
@@ -675,6 +720,8 @@ testSuite "Objects"
   , 'prop_Network_serialisation
   , 'prop_Node_serialisation
   , 'prop_Config_serialisation
+  , 'prop_FilterAction_serialisation
+  , 'prop_FilterPredicate_serialisation
   , 'casePyCompatNetworks
   , 'casePyCompatNodegroups
   , 'casePyCompatInstances