Revision 00c75986 htools/Ganeti/HTools/QC.hs

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