Revision 00c75986
b/htools/Ganeti/HTools/QC.hs | ||
---|---|---|
189 | 189 |
vcpus <- choose (0, maxCpu) |
190 | 190 |
return $ Instance.create name mem dsk vcpus run_st [] True pn sn |
191 | 191 |
|
192 |
genNode :: Maybe Int -> Maybe Int -> Gen Node.Node |
|
193 |
genNode min_multiplier max_multiplier = do |
|
194 |
let (base_mem, base_dsk, base_cpu) = |
|
195 |
case min_multiplier of |
|
196 |
Just mm -> (mm * Types.unitMem, |
|
197 |
mm * Types.unitDsk, |
|
198 |
mm * Types.unitCpu) |
|
199 |
Nothing -> (0, 0, 0) |
|
200 |
(top_mem, top_dsk, top_cpu) = |
|
201 |
case max_multiplier of |
|
202 |
Just mm -> (mm * Types.unitMem, |
|
203 |
mm * Types.unitDsk, |
|
204 |
mm * Types.unitCpu) |
|
205 |
Nothing -> (maxMem, maxDsk, maxCpu) |
|
206 |
name <- getFQDN |
|
207 |
mem_t <- choose (base_mem, top_mem) |
|
208 |
mem_f <- choose (base_mem, mem_t) |
|
209 |
mem_n <- choose (0, mem_t - mem_f) |
|
210 |
dsk_t <- choose (base_dsk, top_dsk) |
|
211 |
dsk_f <- choose (base_dsk, dsk_t) |
|
212 |
cpu_t <- choose (base_cpu, top_cpu) |
|
213 |
offl <- arbitrary |
|
214 |
let n = Node.create name (fromIntegral mem_t) mem_n mem_f |
|
215 |
(fromIntegral dsk_t) dsk_f (fromIntegral cpu_t) offl 0 |
|
216 |
return $ Node.buildPeers n Container.empty |
|
217 |
|
|
192 | 218 |
-- and a random node |
193 | 219 |
instance Arbitrary Node.Node where |
194 |
arbitrary = do |
|
195 |
name <- getFQDN |
|
196 |
mem_t <- choose (0, maxMem) |
|
197 |
mem_f <- choose (0, mem_t) |
|
198 |
mem_n <- choose (0, mem_t - mem_f) |
|
199 |
dsk_t <- choose (0, maxDsk) |
|
200 |
dsk_f <- choose (0, dsk_t) |
|
201 |
cpu_t <- choose (0, maxCpu) |
|
202 |
offl <- arbitrary |
|
203 |
let n = Node.create name (fromIntegral mem_t) mem_n mem_f |
|
204 |
(fromIntegral dsk_t) dsk_f (fromIntegral cpu_t) offl |
|
205 |
0 |
|
206 |
n' = Node.buildPeers n Container.empty |
|
207 |
return n' |
|
220 |
arbitrary = genNode Nothing Nothing |
|
208 | 221 |
|
209 | 222 |
-- replace disks |
210 | 223 |
instance Arbitrary OpCodes.ReplaceDisksMode where |
... | ... | |
798 | 811 |
|
799 | 812 |
-- | Check that allocating multiple instances on a cluster, then |
800 | 813 |
-- adding an empty node, results in a valid rebalance |
801 |
prop_ClusterAllocBalance node = |
|
814 |
prop_ClusterAllocBalance = |
|
815 |
forAll (genNode (Just 5) (Just 128)) $ \node -> |
|
802 | 816 |
forAll (choose (3, 5)) $ \count -> |
803 |
not (Node.offline node) |
|
804 |
&& not (Node.failN1 node) |
|
805 |
&& isNodeBig node 4 |
|
806 |
&& not (isNodeBig node 8) |
|
807 |
==> |
|
817 |
not (Node.offline node) && not (Node.failN1 node) ==> |
|
808 | 818 |
let nl = makeSmallCluster node count |
809 | 819 |
(hnode, nl') = IntMap.deleteFindMax nl |
810 | 820 |
il = Container.empty |
Also available in: Unified diff