Revision 59ed268d
b/htools/Ganeti/HTools/QC.hs  

154  154 
, Instance.vcpus = Node.availCpu node `div` 2 
155  155 
} 
156  156  
157 
  Check if an instance is smaller than a node. 

158 
isInstanceSmallerThanNode node inst = 

159 
Instance.mem inst <= Node.availMem node `div` 2 && 

160 
Instance.dsk inst <= Node.availDisk node `div` 2 && 

161 
Instance.vcpus inst <= Node.availCpu node `div` 2 

162  
163  157 
  Create an instance given its spec. 
164  158 
createInstance mem dsk vcpus = 
165  159 
Instance.create "instunnamed" mem dsk vcpus Types.Running [] True (1) (1) 
...  ...  
279  273 
instance Arbitrary Types.InstanceStatus where 
280  274 
arbitrary = elements [minBound..maxBound] 
281  275  
276 
  Generates a random instance with maximum disk/mem/cpu values. 

277 
genInstanceSmallerThan :: Int > Int > Int > Gen Instance.Instance 

278 
genInstanceSmallerThan lim_mem lim_dsk lim_cpu = do 

279 
name < getFQDN 

280 
mem < choose (0, lim_mem) 

281 
dsk < choose (0, lim_dsk) 

282 
run_st < arbitrary 

283 
pn < arbitrary 

284 
sn < arbitrary 

285 
vcpus < choose (0, lim_cpu) 

286 
return $ Instance.create name mem dsk vcpus run_st [] True pn sn 

287 
Types.DTDrbd8 

288  
289 
  Generates an instance smaller than a node. 

290 
genInstanceSmallerThanNode :: Node.Node > Gen Instance.Instance 

291 
genInstanceSmallerThanNode node = 

292 
genInstanceSmallerThan (Node.availMem node `div` 2) 

293 
(Node.availDisk node `div` 2) 

294 
(Node.availCpu node `div` 2) 

295  
282  296 
 let's generate a random instance 
283  297 
instance Arbitrary Instance.Instance where 
284 
arbitrary = do 

285 
name < getFQDN 

286 
mem < choose (0, maxMem) 

287 
dsk < choose (0, maxDsk) 

288 
run_st < arbitrary 

289 
pn < arbitrary 

290 
sn < arbitrary 

291 
vcpus < choose (0, maxCpu) 

292 
return $ Instance.create name mem dsk vcpus run_st [] True pn sn 

293 
Types.DTDrbd8 

298 
arbitrary = genInstanceSmallerThan maxMem maxDsk maxCpu 

294  299  
295  300 
  Generas an arbitrary node based on sizing information. 
296  301 
genNode :: Maybe Int  ^ Minimum node size in terms of units 
...  ...  
818  823 
forAll (choose (1, 20)) $ \maxiter > 
819  824 
forAll (choose (2, 10)) $ \count > 
820  825 
forAll genOnlineNode $ \node > 
821 
forAll (arbitrary `suchThat` isInstanceSmallerThanNode node) $ \inst >


822 
let inst' = Instance.setMovable inst $ Utils.if' (reqnodes == 2) True False


826 
forAll (genInstanceSmallerThanNode node) $ \inst >


827 
let inst' = Instance.setMovable inst (reqnodes == 2)


823  828 
nl = makeSmallCluster node count 
824  829 
in case Cluster.genAllocNodes defGroupList nl reqnodes True >>= \allocn > 
825  830 
Cluster.iterateAlloc nl Container.empty (Just maxiter) inst' allocn [] [] 
...  ...  
1095  1100 
prop_ClusterAllocRelocate = 
1096  1101 
forAll (choose (4, 8)) $ \count > 
1097  1102 
forAll (genOnlineNode `suchThat` (isNodeBig 4)) $ \node > 
1098 
forAll (arbitrary `suchThat` (isInstanceSmallerThanNode node)) $ \inst >


1103 
forAll (genInstanceSmallerThanNode node) $ \inst >


1099  1104 
case genClusterAlloc count node inst of 
1100  1105 
Types.Bad msg > failTest msg 
1101  1106 
Types.Ok (nl, il, inst') > 
...  ...  
1130  1135 
prop_ClusterAllocEvacuate = 
1131  1136 
forAll (choose (4, 8)) $ \count > 
1132  1137 
forAll (genOnlineNode `suchThat` (isNodeBig 4)) $ \node > 
1133 
forAll (arbitrary `suchThat` (isInstanceSmallerThanNode node)) $ \inst >


1138 
forAll (genInstanceSmallerThanNode node) $ \inst >


1134  1139 
case genClusterAlloc count node inst of 
1135  1140 
Types.Bad msg > failTest msg 
1136  1141 
Types.Ok (nl, il, inst') > 
...  ...  
1144  1149 
prop_ClusterAllocChangeGroup = 
1145  1150 
forAll (choose (4, 8)) $ \count > 
1146  1151 
forAll (genOnlineNode `suchThat` (isNodeBig 4)) $ \node > 
1147 
forAll (arbitrary `suchThat` (isInstanceSmallerThanNode node)) $ \inst >


1152 
forAll (genInstanceSmallerThanNode node) $ \inst >


1148  1153 
case genClusterAlloc count node inst of 
1149  1154 
Types.Bad msg > failTest msg 
1150  1155 
Types.Ok (nl, il, inst') > 
Also available in: Unified diff