This commit improves some of the test data generation in the ConfigData
dummy values of quickcheck, to have a saner and more robust testing
infrastructure.

Signed-off-by: Federico Morg Pareschi <m...@google.com>
---
 test/hs/Test/Ganeti/JQueue/LockDecls.hs |  26 ++----
 test/hs/Test/Ganeti/Objects.hs          |  38 +++++---
 test/hs/Test/Ganeti/OpCodes.hs          | 158 +++++++++++++++++---------------
 3 files changed, 119 insertions(+), 103 deletions(-)

diff --git a/test/hs/Test/Ganeti/JQueue/LockDecls.hs 
b/test/hs/Test/Ganeti/JQueue/LockDecls.hs
index fb3d8e5..ff11be4 100644
--- a/test/hs/Test/Ganeti/JQueue/LockDecls.hs
+++ b/test/hs/Test/Ganeti/JQueue/LockDecls.hs
@@ -38,9 +38,7 @@ module Test.Ganeti.JQueue.LockDecls (testLockDecls) where
 
 import Test.QuickCheck
 import Test.HUnit
-import qualified Data.Foldable as F
 import Data.List
-import qualified Data.Map as Map
 import Data.Maybe
 
 import Prelude ()
@@ -51,13 +49,9 @@ import Test.Ganeti.Objects
 import Test.Ganeti.OpCodes (genOpCodeFromId)
 
 import qualified Ganeti.Constants as C
-import Ganeti.Config
 import Ganeti.JQueue.LockDecls
-import Ganeti.JSON
 import Ganeti.OpCodes
 import Ganeti.Objects
-import Ganeti.Types
-
 
 prop_staticWeight :: ConfigData -> Maybe OpCode -> [OpCode] -> Property
 prop_staticWeight cfg op ops =
@@ -72,11 +66,8 @@ genExclusiveInstanceOp cfg = do
              , "OP_INSTANCE_REBOOT"
              , "OP_INSTANCE_RENAME"
              ]
-      insts = map instName . Map.elems . fromContainer . configInstances $ cfg
   op_id <- elements list
-  op <- genOpCodeFromId op_id
-  name <- elements insts
-  return $ op { opInstanceName = fromMaybe "" name }
+  genOpCodeFromId op_id (Just cfg)
 
 prop_instNameConflictCheck :: Property
 prop_instNameConflictCheck = do
@@ -102,11 +93,8 @@ genExclusiveNodeOp cfg = do
              , "OP_NODE_MODIFY_STORAGE"
              , "OP_REPAIR_NODE_STORAGE"
              ]
-      nodes = map nodeName . F.toList . configNodes $ cfg
   op_id <- elements list
-  op <- genOpCodeFromId op_id
-  name <- elements nodes
-  return $ op { opNodeName = fromJust $ mkNonEmpty name }
+  genOpCodeFromId op_id (Just cfg)
 
 prop_nodeNameConflictCheck :: Property
 prop_nodeNameConflictCheck = do
@@ -129,11 +117,11 @@ prop_nodeNameConflictCheck = do
 case_queueLockOpOrder :: Assertion
 case_queueLockOpOrder = do
   cfg <- generate $ genConfigDataWithValues 10 50
-  diagnoseOp <- generate . genOpCodeFromId $ "OP_OS_DIAGNOSE"
-  networkAddOp <- generate . genOpCodeFromId $ "OP_NETWORK_ADD"
-  groupVerifyOp <- generate . genOpCodeFromId $ "OP_GROUP_VERIFY_DISKS"
-  nodeAddOp <- generate . genOpCodeFromId $ "OP_NODE_ADD"
-  currentOp <- generate . genExclusiveInstanceOp $ cfg
+  diagnoseOp <- generate $ genOpCodeFromId "OP_OS_DIAGNOSE" (Just cfg)
+  networkAddOp <- generate $ genOpCodeFromId "OP_NETWORK_ADD" (Just cfg)
+  groupVerifyOp <- generate $ genOpCodeFromId "OP_GROUP_VERIFY_DISKS" (Just 
cfg)
+  nodeAddOp <- generate $ genOpCodeFromId "OP_NODE_ADD" (Just cfg)
+  currentOp <- generate $ genExclusiveInstanceOp cfg
   let w1 = staticWeight cfg (Just diagnoseOp) [currentOp]
       w2 = staticWeight cfg (Just networkAddOp) [currentOp]
       w3 = staticWeight cfg (Just groupVerifyOp) [currentOp]
diff --git a/test/hs/Test/Ganeti/Objects.hs b/test/hs/Test/Ganeti/Objects.hs
index 4fe2ae5..acdfcce 100644
--- a/test/hs/Test/Ganeti/Objects.hs
+++ b/test/hs/Test/Ganeti/Objects.hs
@@ -47,6 +47,9 @@ module Test.Ganeti.Objects
   , genInst
   , genInstWithNets
   , genValidNetwork
+  , genValidGroupName
+  , genValidNodeName
+  , genValidInstanceName
   , genBitStringMaxLen
   ) where
 
@@ -60,6 +63,7 @@ import Control.Monad (liftM, when)
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.UTF8 as UTF8
 import Data.Char
+import qualified Data.Foldable as F
 import qualified Data.List as List
 import qualified Data.Map as Map
 import Data.Maybe (fromMaybe)
@@ -531,8 +535,8 @@ genConfigDataWithNetworks old_cfg = do
 
 genConfigDataWithValues :: Int -> Int -> Gen ConfigData
 genConfigDataWithValues nNodes nInsts = do
-  emptyData <- genEmptyCluster nNodes
-  insts <- vectorOf nInsts (genInstanceFromConfigData emptyData)
+  cfg <- genConfigDataWithNetworks =<< genEmptyCluster nNodes
+  insts <- vectorOf nInsts (genInstanceFromConfigData cfg)
   let getInstName i
         | RealInstance rinst <- i = UTF8.fromString $ realInstName rinst
         | ForthcomingInstance finst <- i =
@@ -540,21 +544,33 @@ genConfigDataWithValues nNodes nInsts = do
         | otherwise = error ("Inconsistent instance type: " ++ show i)
   let instmap = Map.fromList . map (\x -> (getInstName x, x)) $ insts
       continsts = GenericContainer instmap
-  return $ emptyData { configInstances = continsts }
+  return $ cfg { configInstances = continsts }
 
 genInstanceFromConfigData :: ConfigData -> Gen Instance
 genInstanceFromConfigData cfg = do
-  inst <- RealInstance <$> arbitrary :: Gen Instance
-  let nodes = getKeysFromContainer . configNodes $ cfg
+  inst <- RealInstance <$> arbitrary
+  let nets = map (fromNonEmpty . networkName) . F.toList . configNetworks $ cfg
+      nodes = map nodeName . F.toList . configNodes $ cfg
       new_inst = case inst of
-                      RealInstance rinst ->
-                        RealInstance rinst { realInstPrimaryNode = head nodes }
-                      ForthcomingInstance finst ->
-                        ForthcomingInstance finst
-                          { forthcomingInstPrimaryNode = Just $ head nodes }
+                    RealInstance rinst ->
+                      RealInstance rinst { realInstPrimaryNode = head nodes }
+                    ForthcomingInstance finst ->
+                      ForthcomingInstance finst
+                        { forthcomingInstPrimaryNode = Just $ head nodes }
   -- FIXME: generate instance's secondary nodes using drbd/disk info
-  return new_inst
+  enhanceInstWithNets new_inst nets
+
+genValidGroupName :: ConfigData -> Gen String
+genValidGroupName cfg =
+  elements . map groupName . F.toList . configNodegroups $ cfg
+
+genValidNodeName :: ConfigData -> Gen String
+genValidNodeName cfg =
+  elements . map nodeName . F.toList . configNodes $ cfg
 
+genValidInstanceName :: ConfigData -> Gen (Maybe String)
+genValidInstanceName cfg =
+  elements . map instName . F.toList . configInstances $ cfg
 
 -- * Test properties
 
diff --git a/test/hs/Test/Ganeti/OpCodes.hs b/test/hs/Test/Ganeti/OpCodes.hs
index 405d7fe..e72f12f 100644
--- a/test/hs/Test/Ganeti/OpCodes.hs
+++ b/test/hs/Test/Ganeti/OpCodes.hs
@@ -50,11 +50,12 @@ import Test.QuickCheck as QuickCheck
 import Control.Monad (when)
 import Data.Char
 import Data.List
+import Data.Maybe
 import qualified Data.Map as Map
 import qualified Text.JSON as J
 import Text.Printf (printf)
 
-import Test.Ganeti.Objects ()
+import Test.Ganeti.Objects
 import Test.Ganeti.Query.Language ()
 import Test.Ganeti.TestHelper
 import Test.Ganeti.TestCommon
@@ -66,6 +67,7 @@ import qualified Ganeti.ConstantUtils as CU
 import qualified Ganeti.OpCodes as OpCodes
 import Ganeti.Types
 import Ganeti.OpParams
+import Ganeti.Objects
 import Ganeti.JSON
 
 {-# ANN module "HLint: ignore Use camelCase" #-}
@@ -141,26 +143,26 @@ arbitraryDataCollectorInterval = do
   intervals <- vector $ length els
   genMaybe . return . containerFromList $ zip els intervals
 
-genOpCodeFromId :: String -> Gen OpCodes.OpCode
-genOpCodeFromId op_id =
+genOpCodeFromId :: String -> Maybe ConfigData -> Gen OpCodes.OpCode
+genOpCodeFromId op_id cfg =
   case op_id of
     "OP_TEST_DELAY" ->
       OpCodes.OpTestDelay <$> arbitrary <*> arbitrary <*>
         genNodeNamesNE <*> return Nothing <*> arbitrary <*> arbitrary <*>
         arbitrary
     "OP_INSTANCE_REPLACE_DISKS" ->
-      OpCodes.OpInstanceReplaceDisks <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceReplaceDisks <$> getInstanceName <*> return Nothing <*>
         arbitrary <*> arbitrary <*> arbitrary <*> genDiskIndices <*>
         genMaybe genNodeNameNE <*> return Nothing <*> genMaybe genNameNE
     "OP_INSTANCE_FAILOVER" ->
-      OpCodes.OpInstanceFailover <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceFailover <$> getInstanceName <*> return Nothing <*>
       arbitrary <*> arbitrary <*> genMaybe genNodeNameNE <*>
       return Nothing <*> arbitrary <*> arbitrary <*> genMaybe genNameNE
     "OP_INSTANCE_MIGRATE" ->
-      OpCodes.OpInstanceMigrate <$> genFQDN <*> return Nothing <*>
-        arbitrary <*> arbitrary <*> genMaybe genNodeNameNE <*>
-        return Nothing <*> arbitrary <*> arbitrary <*> arbitrary <*>
-        genMaybe genNameNE <*> arbitrary <*> arbitrary
+      OpCodes.OpInstanceMigrate <$> getInstanceName <*> return Nothing <*>
+        arbitrary <*> arbitrary <*> genMaybe getNodeName <*> return Nothing <*>
+        arbitrary <*> arbitrary <*> arbitrary <*> genMaybe genNameNE <*>
+        arbitrary <*> arbitrary
     "OP_TAGS_GET" ->
       arbitraryOpTagsGet
     "OP_TAGS_SEARCH" ->
@@ -182,20 +184,20 @@ genOpCodeFromId op_id =
     "OP_CLUSTER_VERIFY" ->
       OpCodes.OpClusterVerify <$> arbitrary <*> arbitrary <*>
         genListSet Nothing <*> genListSet Nothing <*> arbitrary <*>
-        genMaybe genNameNE <*> arbitrary
+        genMaybe getGroupName <*> arbitrary
     "OP_CLUSTER_VERIFY_CONFIG" ->
       OpCodes.OpClusterVerifyConfig <$> arbitrary <*> arbitrary <*>
         genListSet Nothing <*> arbitrary
     "OP_CLUSTER_VERIFY_GROUP" ->
-      OpCodes.OpClusterVerifyGroup <$> genNameNE <*> arbitrary <*>
+      OpCodes.OpClusterVerifyGroup <$> getGroupName <*> arbitrary <*>
         arbitrary <*> genListSet Nothing <*> genListSet Nothing <*>
         arbitrary <*> arbitrary
     "OP_CLUSTER_VERIFY_DISKS" ->
-      OpCodes.OpClusterVerifyDisks <$> genMaybe genNameNE <*> arbitrary
+      OpCodes.OpClusterVerifyDisks <$> genMaybe getGroupName <*> arbitrary
     "OP_GROUP_VERIFY_DISKS" ->
-      OpCodes.OpGroupVerifyDisks <$> genNameNE <*> arbitrary
+      OpCodes.OpGroupVerifyDisks <$> getGroupName <*> arbitrary
     "OP_CLUSTER_REPAIR_DISK_SIZES" ->
-      OpCodes.OpClusterRepairDiskSizes <$> genNodeNamesNE
+      OpCodes.OpClusterRepairDiskSizes <$> getInstanceNames
     "OP_CLUSTER_CONFIG_QUERY" ->
       OpCodes.OpClusterConfigQuery <$> genFieldsNE
     "OP_CLUSTER_RENAME" ->
@@ -273,14 +275,13 @@ genOpCodeFromId op_id =
     "OP_QUERY_FIELDS" ->
       OpCodes.OpQueryFields <$> arbitrary <*> genMaybe genNamesNE
     "OP_OOB_COMMAND" ->
-      OpCodes.OpOobCommand <$> genNodeNamesNE <*> return Nothing <*>
-        arbitrary <*> arbitrary <*> arbitrary <*>
-        (arbitrary `suchThat` (>0))
+      OpCodes.OpOobCommand <$> getNodeNames <*> return Nothing <*>
+        arbitrary <*> arbitrary <*> arbitrary <*> (arbitrary `suchThat` (>0))
     "OP_NODE_REMOVE" ->
-      OpCodes.OpNodeRemove <$> genNodeNameNE <*> return Nothing <*>
+      OpCodes.OpNodeRemove <$> getNodeName <*> return Nothing <*>
         arbitrary <*> arbitrary
     "OP_NODE_ADD" ->
-      OpCodes.OpNodeAdd <$> genNodeNameNE <*> emptyMUD <*> emptyMUD <*>
+      OpCodes.OpNodeAdd <$> getNodeName <*> emptyMUD <*> emptyMUD <*>
         genMaybe genNameNE <*> genMaybe genNameNE <*> arbitrary <*>
         genMaybe genNameNE <*> arbitrary <*> arbitrary <*> emptyMUD <*>
         arbitrary <*> arbitrary <*> arbitrary
@@ -288,29 +289,28 @@ genOpCodeFromId op_id =
       OpCodes.OpNodeQueryvols <$> genNamesNE <*> genNodeNamesNE
     "OP_NODE_QUERY_STORAGE" ->
       OpCodes.OpNodeQueryStorage <$> genNamesNE <*> arbitrary <*>
-        genNodeNamesNE <*> genMaybe genNameNE
+        getNodeNames <*> genMaybe genNameNE
     "OP_NODE_MODIFY_STORAGE" ->
-      OpCodes.OpNodeModifyStorage <$> genNodeNameNE <*> return Nothing <*>
+      OpCodes.OpNodeModifyStorage <$> getNodeName <*> return Nothing <*>
         arbitrary <*> genMaybe genNameNE <*> pure emptyJSObject
     "OP_REPAIR_NODE_STORAGE" ->
-      OpCodes.OpRepairNodeStorage <$> genNodeNameNE <*> return Nothing <*>
+      OpCodes.OpRepairNodeStorage <$> getNodeName <*> return Nothing <*>
         arbitrary <*> genMaybe genNameNE <*> arbitrary
     "OP_NODE_SET_PARAMS" ->
-      OpCodes.OpNodeSetParams <$> genNodeNameNE <*> return Nothing <*>
+      OpCodes.OpNodeSetParams <$> getNodeName <*> return Nothing <*>
         arbitrary <*> emptyMUD <*> emptyMUD <*> arbitrary <*> arbitrary <*>
         arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*>
         genMaybe genNameNE <*> emptyMUD <*> arbitrary <*> arbitrary <*>
         arbitrary
     "OP_NODE_POWERCYCLE" ->
-      OpCodes.OpNodePowercycle <$> genNodeNameNE <*> return Nothing <*>
-        arbitrary
+      OpCodes.OpNodePowercycle <$> getNodeName <*> return Nothing <*> arbitrary
     "OP_NODE_MIGRATE" ->
-      OpCodes.OpNodeMigrate <$> genNodeNameNE <*> return Nothing <*>
-        arbitrary <*> arbitrary <*> genMaybe genNodeNameNE <*>
-        return Nothing <*> arbitrary <*> arbitrary <*> genMaybe genNameNE
+      OpCodes.OpNodeMigrate <$> getNodeName <*> return Nothing <*>
+        arbitrary <*> arbitrary <*> genMaybe getNodeName <*> return Nothing <*>
+        arbitrary <*> arbitrary <*> genMaybe genNameNE
     "OP_NODE_EVACUATE" ->
-      OpCodes.OpNodeEvacuate <$> arbitrary <*> genNodeNameNE <*>
-        return Nothing <*> genMaybe genNodeNameNE <*> return Nothing <*>
+      OpCodes.OpNodeEvacuate <$> arbitrary <*> getNodeName <*>
+        return Nothing <*> genMaybe getNodeName <*> return Nothing <*>
         genMaybe genNameNE <*> arbitrary <*> arbitrary
     "OP_INSTANCE_CREATE" ->
       OpCodes.OpInstanceCreate
@@ -323,7 +323,7 @@ genOpCodeFromId op_id =
         <*> pure emptyJSObject              -- beparams
         <*> arbitrary                       -- disks
         <*> arbitrary                       -- disk_template
-        <*> genMaybe genNameNE              -- group_name
+        <*> genMaybe getGroupName           -- group_name
         <*> arbitrary                       -- file_driver
         <*> genMaybe genNameNE              -- file_storage_dir
         <*> pure emptyJSObject              -- hvparams
@@ -337,11 +337,11 @@ genOpCodeFromId op_id =
         <*> arbitrary                       -- no_install
         <*> pure emptyJSObject              -- osparams
         <*> genMaybe arbitraryPrivateJSObj  -- osparams_private
-        <*> genMaybe arbitrarySecretJSObj  -- osparams_secret
+        <*> genMaybe arbitrarySecretJSObj   -- osparams_secret
         <*> genMaybe genNameNE              -- os_type
-        <*> genMaybe genNodeNameNE          -- pnode
+        <*> genMaybe getNodeName            -- pnode
         <*> return Nothing                  -- pnode_uuid
-        <*> genMaybe genNodeNameNE          -- snode
+        <*> genMaybe getNodeName            -- snode
         <*> return Nothing                  -- snode_uuid
         <*> genMaybe (pure [])              -- source_handshake
         <*> genMaybe genNodeNameNE          -- source_instance_name
@@ -362,18 +362,18 @@ genOpCodeFromId op_id =
       OpCodes.OpInstanceMultiAlloc <$> arbitrary <*> genMaybe genNameNE <*>
       pure []
     "OP_INSTANCE_REINSTALL" ->
-      OpCodes.OpInstanceReinstall <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceReinstall <$> getInstanceName <*> return Nothing <*>
         arbitrary <*> genMaybe genNameNE <*> genMaybe (pure emptyJSObject)
         <*> genMaybe arbitraryPrivateJSObj <*> genMaybe arbitrarySecretJSObj
     "OP_INSTANCE_REMOVE" ->
-      OpCodes.OpInstanceRemove <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceRemove <$> getInstanceName <*> return Nothing <*>
         arbitrary <*> arbitrary
     "OP_INSTANCE_RENAME" ->
-      OpCodes.OpInstanceRename <$> genFQDN <*> return Nothing <*>
-        genNodeNameNE <*> arbitrary <*> arbitrary
+      OpCodes.OpInstanceRename <$> getInstanceName <*> return Nothing <*>
+        (genFQDN >>= mkNonEmpty) <*> arbitrary <*> arbitrary
     "OP_INSTANCE_STARTUP" ->
       OpCodes.OpInstanceStartup <$>
-        genFQDN <*>             -- instance_name
+        getInstanceName <*>     -- instance_name
         return Nothing <*>      -- instance_uuid
         arbitrary <*>           -- force
         arbitrary <*>           -- ignore_offline_nodes
@@ -383,33 +383,32 @@ genOpCodeFromId op_id =
         arbitrary <*>           -- startup_paused
         arbitrary               -- shutdown_timeout
     "OP_INSTANCE_SHUTDOWN" ->
-      OpCodes.OpInstanceShutdown <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceShutdown <$> getInstanceName <*> return Nothing <*>
         arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
     "OP_INSTANCE_REBOOT" ->
-      OpCodes.OpInstanceReboot <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceReboot <$> getInstanceName <*> return Nothing <*>
         arbitrary <*> arbitrary <*> arbitrary
     "OP_INSTANCE_MOVE" ->
-      OpCodes.OpInstanceMove <$> genFQDN <*> return Nothing <*>
-        arbitrary <*> arbitrary <*> genNodeNameNE <*> return Nothing <*>
-        genPrintableAsciiString <*> arbitrary
-    "OP_INSTANCE_CONSOLE" -> OpCodes.OpInstanceConsole <$> genFQDN <*>
+      OpCodes.OpInstanceMove <$> getInstanceName <*> return Nothing <*>
+        arbitrary <*> arbitrary <*> getNodeName <*>
+        return Nothing <*> genPrintableAsciiString <*> arbitrary
+    "OP_INSTANCE_CONSOLE" -> OpCodes.OpInstanceConsole <$> getInstanceName <*>
         return Nothing
     "OP_INSTANCE_ACTIVATE_DISKS" ->
-      OpCodes.OpInstanceActivateDisks <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceActivateDisks <$> getInstanceName <*> return Nothing 
<*>
         arbitrary <*> arbitrary
     "OP_INSTANCE_DEACTIVATE_DISKS" ->
       OpCodes.OpInstanceDeactivateDisks <$> genFQDN <*> return Nothing <*>
         arbitrary
     "OP_INSTANCE_RECREATE_DISKS" ->
-      OpCodes.OpInstanceRecreateDisks <$> genFQDN <*> return Nothing <*>
-        arbitrary <*> genNodeNamesNE <*> return Nothing <*>
-        genMaybe genNameNE
+      OpCodes.OpInstanceRecreateDisks <$> getInstanceName <*> return Nothing 
<*>
+        arbitrary <*> genNodeNamesNE <*> return Nothing <*> genMaybe 
getNodeName
     "OP_INSTANCE_QUERY_DATA" ->
       OpCodes.OpInstanceQueryData <$> arbitrary <*>
-        genNodeNamesNE <*> arbitrary
+        getInstanceNames <*> arbitrary
     "OP_INSTANCE_SET_PARAMS" ->
       OpCodes.OpInstanceSetParams
-        <$> genFQDN                         -- instance_name
+        <$> getInstanceName                 -- instance_name
         <*> return Nothing                  -- instance_uuid
         <*> arbitrary                       -- force
         <*> arbitrary                       -- force_variant
@@ -423,9 +422,9 @@ genOpCodeFromId op_id =
         <*> pure emptyJSObject              -- ext_params
         <*> arbitrary                       -- file_driver
         <*> genMaybe genNameNE              -- file_storage_dir
-        <*> genMaybe genNodeNameNE          -- pnode
+        <*> genMaybe getNodeName            -- pnode
         <*> return Nothing                  -- pnode_uuid
-        <*> genMaybe genNodeNameNE          -- remote_node
+        <*> genMaybe getNodeName            -- remote_node
         <*> return Nothing                  -- remote_node_uuid
         <*> genMaybe genNameNE              -- iallocator
         <*> genMaybe genNameNE              -- os_name
@@ -438,10 +437,10 @@ genOpCodeFromId op_id =
         <*> arbitrary                       -- hotplug_if_possible
         <*> arbitrary                       -- instance_communication
     "OP_INSTANCE_GROW_DISK" ->
-      OpCodes.OpInstanceGrowDisk <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceGrowDisk <$> getInstanceName <*> return Nothing <*>
         arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
     "OP_INSTANCE_CHANGE_GROUP" ->
-      OpCodes.OpInstanceChangeGroup <$> genFQDN <*> return Nothing <*>
+      OpCodes.OpInstanceChangeGroup <$> getInstanceName <*> return Nothing <*>
         arbitrary <*> genMaybe genNameNE <*>
         genMaybe (resize maxNodes (listOf genNameNE))
     "OP_GROUP_ADD" ->
@@ -449,28 +448,30 @@ genOpCodeFromId op_id =
         emptyMUD <*> genMaybe genEmptyContainer <*>
         emptyMUD <*> emptyMUD <*> emptyMUD
     "OP_GROUP_ASSIGN_NODES" ->
-      OpCodes.OpGroupAssignNodes <$> genNameNE <*> arbitrary <*>
-        genNodeNamesNE <*> return Nothing
+      OpCodes.OpGroupAssignNodes <$> getGroupName <*>
+        arbitrary <*> getNodeNames <*> return Nothing
     "OP_GROUP_SET_PARAMS" ->
-      OpCodes.OpGroupSetParams <$> genNameNE <*> arbitrary <*>
-        emptyMUD <*> genMaybe genEmptyContainer <*>
+      OpCodes.OpGroupSetParams <$> getGroupName <*>
+        arbitrary <*> emptyMUD <*> genMaybe genEmptyContainer <*>
         emptyMUD <*> emptyMUD <*> emptyMUD
     "OP_GROUP_REMOVE" ->
-      OpCodes.OpGroupRemove <$> genNameNE
+      OpCodes.OpGroupRemove <$> getGroupName
     "OP_GROUP_RENAME" ->
-      OpCodes.OpGroupRename <$> genNameNE <*> genNameNE
+      OpCodes.OpGroupRename <$> getGroupName <*> genNameNE
     "OP_GROUP_EVACUATE" ->
-      OpCodes.OpGroupEvacuate <$> genNameNE <*> arbitrary <*>
-        genMaybe genNameNE <*> genMaybe genNamesNE <*> arbitrary <*> arbitrary
+      OpCodes.OpGroupEvacuate <$> getGroupName <*>
+        arbitrary <*> genMaybe genNameNE <*> genMaybe genNamesNE <*>
+        arbitrary <*> arbitrary
     "OP_OS_DIAGNOSE" ->
       OpCodes.OpOsDiagnose <$> genFieldsNE <*> genNamesNE
     "OP_EXT_STORAGE_DIAGNOSE" ->
       OpCodes.OpOsDiagnose <$> genFieldsNE <*> genNamesNE
     "OP_BACKUP_PREPARE" ->
-      OpCodes.OpBackupPrepare <$> genFQDN <*> return Nothing <*> arbitrary
+      OpCodes.OpBackupPrepare <$> getInstanceName <*>
+        return Nothing <*> arbitrary
     "OP_BACKUP_EXPORT" ->
       OpCodes.OpBackupExport
-        <$> genFQDN                  -- instance_name
+        <$> getInstanceName          -- instance_name
         <*> return Nothing           -- instance_uuid
         <*> genPrintableAsciiString  -- compress
         <*> arbitrary                -- shutdown_timeout
@@ -487,7 +488,7 @@ genOpCodeFromId op_id =
         <*> arbitrary                -- zeroing_timeout_per_mib
         <*> arbitrary                -- long_sleep
     "OP_BACKUP_REMOVE" ->
-      OpCodes.OpBackupRemove <$> genFQDN <*> return Nothing
+      OpCodes.OpBackupRemove <$> getInstanceName <*> return Nothing
     "OP_TEST_ALLOCATOR" ->
       OpCodes.OpTestAllocator <$> arbitrary <*> arbitrary <*>
         genNameNE <*> genMaybe (pure []) <*> genMaybe (pure []) <*>
@@ -496,7 +497,7 @@ genOpCodeFromId op_id =
         arbitrary <*> arbitrary <*> genMaybe genNameNE <*>
         arbitrary <*> genMaybe genNodeNamesNE <*> arbitrary <*>
         genMaybe genNamesNE <*> arbitrary <*> arbitrary <*>
-        genMaybe genNameNE
+        genMaybe getGroupName
     "OP_TEST_JQUEUE" ->
       OpCodes.OpTestJqueue <$> arbitrary <*> arbitrary <*>
         resize 20 (listOf genFQDN) <*> arbitrary
@@ -518,22 +519,33 @@ genOpCodeFromId op_id =
         genMaybe genMacPrefix <*> genMaybe (listOf genIPv4Address) <*>
         genMaybe (listOf genIPv4Address)
     "OP_NETWORK_CONNECT" ->
-      OpCodes.OpNetworkConnect <$> genNameNE <*> genNameNE <*>
-        arbitrary <*> genNameNE <*> genPrintableAsciiString <*> arbitrary
+      OpCodes.OpNetworkConnect <$> getGroupName <*>
+        genNameNE <*> arbitrary <*> genNameNE <*> genPrintableAsciiString <*>
+        arbitrary
     "OP_NETWORK_DISCONNECT" ->
-      OpCodes.OpNetworkDisconnect <$> genNameNE <*> genNameNE
+      OpCodes.OpNetworkDisconnect <$> getGroupName <*>
+        genNameNE
     "OP_RESTRICTED_COMMAND" ->
-      OpCodes.OpRestrictedCommand <$> arbitrary <*> genNodeNamesNE <*>
+      OpCodes.OpRestrictedCommand <$> arbitrary <*> getNodeNames <*>
         return Nothing <*> genNameNE
     "OP_REPAIR_COMMAND" ->
-      OpCodes.OpRepairCommand <$> genNodeNameNE <*> genNameNE <*>
+      OpCodes.OpRepairCommand <$> getNodeName <*> genNameNE <*>
         genMaybe genPrintableAsciiStringNE
     _ -> fail $ "Undefined arbitrary for opcode " ++ op_id
+  where getInstanceName =
+          case cfg of
+               Just c -> fmap (fromMaybe "") . genValidInstanceName $ c
+               Nothing -> genFQDN
+        getNodeName = maybe genFQDN genValidNodeName cfg >>= mkNonEmpty
+        getGroupName = maybe genName genValidGroupName cfg >>= mkNonEmpty
+        getInstanceNames = resize maxNodes (listOf getInstanceName) >>=
+                           mapM mkNonEmpty
+        getNodeNames = resize maxNodes (listOf getNodeName)
 
 instance Arbitrary OpCodes.OpCode where
   arbitrary = do
     op_id <- elements OpCodes.allOpIDs
-    genOpCodeFromId op_id
+    genOpCodeFromId op_id Nothing
 
 instance Arbitrary OpCodes.CommonOpParams where
   arbitrary = OpCodes.CommonOpParams <$> arbitrary <*> arbitrary <*>
-- 
2.8.0.rc3.226.g39d4020

Reply via email to