Revision c66f09f5
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 |
b/htools/Ganeti/OpCodes.hs | ||
---|---|---|
82 | 82 |
[ pTagsObject |
83 | 83 |
, pTagsList |
84 | 84 |
]) |
85 |
, ("OpClusterPostInit", []) |
|
86 |
, ("OpClusterDestroy", []) |
|
87 |
, ("OpClusterQuery", []) |
|
88 |
, ("OpClusterVerify", |
|
89 |
[ pDebugSimulateErrors |
|
90 |
, pErrorCodes |
|
91 |
, pSkipChecks |
|
92 |
, pIgnoreErrors |
|
93 |
, pVerbose |
|
94 |
, pOptGroupName |
|
95 |
]) |
|
96 |
, ("OpClusterVerifyConfig", |
|
97 |
[ pDebugSimulateErrors |
|
98 |
, pErrorCodes |
|
99 |
, pIgnoreErrors |
|
100 |
, pVerbose |
|
101 |
]) |
|
102 |
, ("OpClusterVerifyGroup", |
|
103 |
[ pGroupName |
|
104 |
, pDebugSimulateErrors |
|
105 |
, pErrorCodes |
|
106 |
, pSkipChecks |
|
107 |
, pIgnoreErrors |
|
108 |
, pVerbose |
|
109 |
]) |
|
110 |
, ("OpClusterVerifyDisks", []) |
|
111 |
, ("OpGroupVerifyDisks", |
|
112 |
[ pGroupName |
|
113 |
]) |
|
114 |
, ("OpClusterRepairDiskSizes", |
|
115 |
[ pInstances |
|
116 |
]) |
|
117 |
, ("OpClusterConfigQuery", |
|
118 |
[ pOutputFields |
|
119 |
]) |
|
120 |
, ("OpClusterRename", |
|
121 |
[ pName |
|
122 |
]) |
|
123 |
, ("OpClusterSetParams", |
|
124 |
[ pHvState |
|
125 |
, pDiskState |
|
126 |
, pVgName |
|
127 |
, pEnabledHypervisors |
|
128 |
, pClusterHvParams |
|
129 |
, pClusterBeParams |
|
130 |
, pOsHvp |
|
131 |
, pOsParams |
|
132 |
, pDiskParams |
|
133 |
, pCandidatePoolSize |
|
134 |
, pUidPool |
|
135 |
, pAddUids |
|
136 |
, pRemoveUids |
|
137 |
, pMaintainNodeHealth |
|
138 |
, pPreallocWipeDisks |
|
139 |
, pNicParams |
|
140 |
, pNdParams |
|
141 |
, pIpolicy |
|
142 |
, pDrbdHelper |
|
143 |
, pDefaultIAllocator |
|
144 |
, pMasterNetdev |
|
145 |
, pReservedLvs |
|
146 |
, pHiddenOs |
|
147 |
, pBlacklistedOs |
|
148 |
, pUseExternalMipScript |
|
149 |
]) |
|
150 |
, ("OpClusterRedistConf", []) |
|
151 |
, ("OpClusterActivateMasterIp", []) |
|
152 |
, ("OpClusterDeactivateMasterIp", []) |
|
153 |
, ("OpQuery", |
|
154 |
[ pQueryWhat |
|
155 |
, pUseLocking |
|
156 |
, pQueryFields |
|
157 |
, pQueryFilter |
|
158 |
]) |
|
159 |
, ("OpQueryFields", |
|
160 |
[ pQueryWhat |
|
161 |
, pQueryFields |
|
162 |
]) |
|
163 |
, ("OpOobCommand", |
|
164 |
[ pNodeNames |
|
165 |
, pOobCommand |
|
166 |
, pOobTimeout |
|
167 |
, pIgnoreStatus |
|
168 |
, pPowerDelay |
|
169 |
]) |
|
170 |
, ("OpNodeRemove", [ pNodeName ]) |
|
171 |
, ("OpNodeAdd", |
|
172 |
[ pNodeName |
|
173 |
, pHvState |
|
174 |
, pDiskState |
|
175 |
, pPrimaryIp |
|
176 |
, pSecondaryIp |
|
177 |
, pReadd |
|
178 |
, pNodeGroup |
|
179 |
, pMasterCapable |
|
180 |
, pVmCapable |
|
181 |
, pNdParams |
|
182 |
]) |
|
183 |
, ("OpNodeQuery", |
|
184 |
[ pOutputFields |
|
185 |
, pUseLocking |
|
186 |
, pNames |
|
187 |
]) |
|
188 |
, ("OpNodeQueryvols", |
|
189 |
[ pOutputFields |
|
190 |
, pNodes |
|
191 |
]) |
|
192 |
, ("OpNodeQueryStorage", |
|
193 |
[ pOutputFields |
|
194 |
, pStorageType |
|
195 |
, pNodes |
|
196 |
, pStorageName |
|
197 |
]) |
|
198 |
, ("OpNodeModifyStorage", |
|
199 |
[ pNodeName |
|
200 |
, pStorageType |
|
201 |
, pStorageName |
|
202 |
, pStorageChanges |
|
203 |
]) |
|
204 |
, ("OpRepairNodeStorage", |
|
205 |
[ pNodeName |
|
206 |
, pStorageType |
|
207 |
, pStorageName |
|
208 |
, pIgnoreConsistency |
|
209 |
]) |
|
210 |
, ("OpNodeSetParams", |
|
211 |
[ pNodeName |
|
212 |
, pForce |
|
213 |
, pHvState |
|
214 |
, pDiskState |
|
215 |
, pMasterCandidate |
|
216 |
, pOffline |
|
217 |
, pDrained |
|
218 |
, pAutoPromote |
|
219 |
, pMasterCapable |
|
220 |
, pVmCapable |
|
221 |
, pSecondaryIp |
|
222 |
, pNdParams |
|
223 |
]) |
|
224 |
, ("OpNodePowercycle", |
|
225 |
[ pNodeName |
|
226 |
, pForce |
|
227 |
]) |
|
228 |
, ("OpNodeMigrate", |
|
229 |
[ pNodeName |
|
230 |
, pMigrationMode |
|
231 |
, pMigrationLive |
|
232 |
, pMigrationTargetNode |
|
233 |
, pAllowRuntimeChgs |
|
234 |
, pIgnoreIpolicy |
|
235 |
, pIallocator |
|
236 |
]) |
|
237 |
, ("OpNodeEvacuate", |
|
238 |
[ pEarlyRelease |
|
239 |
, pNodeName |
|
240 |
, pRemoteNode |
|
241 |
, pIallocator |
|
242 |
, pEvacMode |
|
243 |
]) |
|
85 | 244 |
]) |
86 | 245 |
|
87 | 246 |
-- | Returns the OP_ID for a given opcode value. |
Also available in: Unified diff