Revision c66f09f5 htest/Test/Ganeti/OpCodes.hs

b/htest/Test/Ganeti/OpCodes.hs
36 36

  
37 37
import Control.Applicative
38 38
import Data.List
39
import qualified Data.Map as Map
39 40
import qualified Text.JSON as J
40 41

  
41 42
import Test.Ganeti.TestHelper
42 43
import Test.Ganeti.TestCommon
43 44
import Test.Ganeti.Types ()
45
import Test.Ganeti.Query.Language
44 46

  
45 47
import qualified Ganeti.Constants as C
46 48
import qualified Ganeti.OpCodes as OpCodes
47 49
import Ganeti.Types
48 50
import Ganeti.OpParams
51
import Ganeti.JSON
49 52

  
50 53
{-# ANN module "HLint: ignore Use camelCase" #-}
51 54

  
......
63 66
instance Arbitrary OpCodes.DiskIndex where
64 67
  arbitrary = choose (0, C.maxDisks - 1) >>= OpCodes.mkDiskIndex
65 68

  
69
$(genArbitrary ''INicParams)
70

  
66 71
instance Arbitrary OpCodes.OpCode where
67 72
  arbitrary = do
68 73
    op_id <- elements OpCodes.allOpIDs
......
83 88
        OpCodes.OpTagsSet <$> arbitrary <*> genTags
84 89
      "OP_TAGS_DEL" ->
85 90
        OpCodes.OpTagsSet <$> arbitrary <*> genTags
86
      _ -> fail "Wrong opcode"
91
      "OP_CLUSTER_POST_INIT" -> pure OpCodes.OpClusterPostInit
92
      "OP_CLUSTER_DESTROY" -> pure OpCodes.OpClusterDestroy
93
      "OP_CLUSTER_QUERY" -> pure OpCodes.OpClusterQuery
94
      "OP_CLUSTER_VERIFY" ->
95
        OpCodes.OpClusterVerify <$> arbitrary <*> arbitrary <*>
96
          genSet Nothing <*> genSet Nothing <*> arbitrary <*> arbitrary
97
      "OP_CLUSTER_VERIFY_CONFIG" ->
98
        OpCodes.OpClusterVerifyConfig <$> arbitrary <*> arbitrary <*>
99
          genSet Nothing <*> arbitrary
100
      "OP_CLUSTER_VERIFY_GROUP" ->
101
        OpCodes.OpClusterVerifyGroup <$> arbitrary <*> arbitrary <*>
102
          arbitrary <*> genSet Nothing <*> genSet Nothing <*> arbitrary
103
      "OP_CLUSTER_VERIFY_DISKS" -> pure OpCodes.OpClusterVerifyDisks
104
      "OP_GROUP_VERIFY_DISKS" ->
105
        OpCodes.OpGroupVerifyDisks <$> arbitrary
106
      "OP_CLUSTER_REPAIR_DISK_SIZES" ->
107
        OpCodes.OpClusterRepairDiskSizes <$>
108
          resize maxNodes (listOf (getFQDN >>= mkNonEmpty))
109
      "OP_CLUSTER_CONFIG_QUERY" ->
110
        OpCodes.OpClusterConfigQuery <$> resize maxNodes arbitrary
111
      "OP_CLUSTER_RENAME" ->
112
        OpCodes.OpClusterRename <$> (getName >>= mkNonEmpty)
113
      "OP_CLUSTER_SET_PARAMS" ->
114
        OpCodes.OpClusterSetParams <$> emptyMUD <*> emptyMUD <*>
115
          arbitrary <*> getMaybe (listOf1 arbitrary >>= mkNonEmpty) <*>
116
          getMaybe genEmptyContainer <*> emptyMUD <*>
117
          getMaybe genEmptyContainer <*> getMaybe genEmptyContainer <*>
118
          getMaybe genEmptyContainer <*> getMaybe arbitrary <*>
119
          arbitrary <*> arbitrary <*> arbitrary <*>
120
          arbitrary <*> arbitrary <*> arbitrary <*>
121
          emptyMUD <*> emptyMUD <*> arbitrary <*>
122
          arbitrary <*> arbitrary <*> arbitrary <*>
123
          arbitrary <*> arbitrary <*> arbitrary
124
      "OP_CLUSTER_REDIST_CONF" -> pure OpCodes.OpClusterRedistConf
125
      "OP_CLUSTER_ACTIVATE_MASTER_IP" ->
126
        pure OpCodes.OpClusterActivateMasterIp
127
      "OP_CLUSTER_DEACTIVATE_MASTER_IP" ->
128
        pure OpCodes.OpClusterDeactivateMasterIp
129
      "OP_QUERY" ->
130
        OpCodes.OpQuery <$> arbitrary <*> arbitrary <*> arbitrary <*> genFilter
131
      "OP_QUERY_FIELDS" ->
132
        OpCodes.OpQueryFields <$> arbitrary <*> arbitrary
133
      "OP_OOB_COMMAND" ->
134
        OpCodes.OpOobCommand <$> genNodeNamesNE <*> arbitrary <*>
135
          arbitrary <*> arbitrary <*> (arbitrary `suchThat` (>0))
136
      "OP_NODE_REMOVE" -> OpCodes.OpNodeRemove <$> (getFQDN >>= mkNonEmpty)
137
      "OP_NODE_ADD" ->
138
        OpCodes.OpNodeAdd <$> (getFQDN >>= mkNonEmpty) <*>
139
          emptyMUD <*> emptyMUD <*>
140
          arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*>
141
          arbitrary <*> arbitrary <*> emptyMUD
142
      "OP_NODE_QUERY" ->
143
        OpCodes.OpNodeQuery <$> arbitrary <*> arbitrary <*> arbitrary
144
      "OP_NODE_QUERYVOLS" ->
145
        OpCodes.OpNodeQueryvols <$> arbitrary <*> genNodeNamesNE
146
      "OP_NODE_QUERY_STORAGE" ->
147
        OpCodes.OpNodeQueryStorage <$> arbitrary <*> arbitrary <*>
148
          genNodeNamesNE <*> arbitrary
149
      "OP_NODE_MODIFY_STORAGE" ->
150
        OpCodes.OpNodeModifyStorage <$> genNodeNameNE <*> arbitrary <*>
151
          arbitrary <*> pure emptyJSObject
152
      "OP_REPAIR_NODE_STORAGE" ->
153
        OpCodes.OpRepairNodeStorage <$> genNodeNameNE <*> arbitrary <*>
154
          arbitrary <*> arbitrary
155
      "OP_NODE_SET_PARAMS" ->
156
        OpCodes.OpNodeSetParams <$> genNodeNameNE <*> arbitrary <*>
157
          emptyMUD <*> emptyMUD <*> arbitrary <*> arbitrary <*> arbitrary <*>
158
          arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*>
159
          emptyMUD
160
      "OP_NODE_POWERCYCLE" ->
161
        OpCodes.OpNodePowercycle <$> genNodeNameNE <*> arbitrary
162
      "OP_NODE_MIGRATE" ->
163
        OpCodes.OpNodeMigrate <$> genNodeNameNE <*> arbitrary <*>
164
          arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*>
165
          arbitrary
166
      "OP_NODE_EVACUATE" ->
167
        OpCodes.OpNodeEvacuate <$> arbitrary <*> genNodeNameNE <*>
168
          getMaybe genNodeNameNE <*> arbitrary <*> arbitrary
169
      _ -> fail $ "Undefined arbitrary for opcode " ++ op_id
87 170

  
88 171
-- * Helper functions
89 172

  
173
-- | Empty JSObject.
174
emptyJSObject :: J.JSObject J.JSValue
175
emptyJSObject = J.toJSObject []
176

  
177
-- | Empty maybe unchecked dictionary.
178
emptyMUD :: Gen (Maybe (J.JSObject J.JSValue))
179
emptyMUD = getMaybe $ pure emptyJSObject
180

  
181
-- | Generates an empty container.
182
genEmptyContainer :: (Ord a) => Gen (GenericContainer a b)
183
genEmptyContainer = pure . GenericContainer $ Map.fromList []
184

  
90 185
-- | Generates list of disk indices.
91 186
genDiskIndices :: Gen [DiskIndex]
92 187
genDiskIndices = do
......
97 192
genNodeNames :: Gen [String]
98 193
genNodeNames = resize maxNodes (listOf getFQDN)
99 194

  
195
-- | Generates a list of node names in non-empty string type.
196
genNodeNamesNE :: Gen [NonEmptyString]
197
genNodeNamesNE = genNodeNames >>= mapM (mkNonEmpty)
198

  
100 199
-- | Gets a node name in non-empty type.
101 200
genNodeNameNE :: Gen NonEmptyString
102 201
genNodeNameNE = getFQDN >>= mkNonEmpty

Also available in: Unified diff