Revision 39d11971

b/Ganeti/HTools/QC.hs
200 200

  
201 201
-- Simple instance tests, we only have setter/getters
202 202

  
203
prop_Instance_creat inst =
204
    Instance.name inst == Instance.alias inst
205

  
203 206
prop_Instance_setIdx inst idx =
204 207
    Instance.idx (Instance.setIdx inst idx) == idx
205 208
    where _types = (inst::Instance.Instance, idx::Types.Idx)
206 209

  
207 210
prop_Instance_setName inst name =
208
    Instance.name (Instance.setName inst name) == name
211
    Instance.name newinst == name &&
212
    Instance.alias newinst == name
213
    where _types = (inst::Instance.Instance, name::String)
214
          newinst = Instance.setName inst name
215

  
216
prop_Instance_setAlias inst name =
217
    Instance.name newinst == Instance.name inst &&
218
    Instance.alias newinst == name
209 219
    where _types = (inst::Instance.Instance, name::String)
220
          newinst = Instance.setAlias inst name
210 221

  
211 222
prop_Instance_setPri inst pdx =
212 223
    Instance.pNode (Instance.setPri inst pdx) == pdx
......
278 289
          inst' = Instance.setMovable inst m
279 290

  
280 291
testInstance =
281
    [ run prop_Instance_setIdx
292
    [ run prop_Instance_creat
293
    , run prop_Instance_setIdx
282 294
    , run prop_Instance_setName
295
    , run prop_Instance_setAlias
283 296
    , run prop_Instance_setPri
284 297
    , run prop_Instance_setSec
285 298
    , run prop_Instance_setBoth
......
297 310
-- Instance text loader tests
298 311

  
299 312
prop_Text_Load_Instance name mem dsk vcpus status pnode snode pdx sdx =
313
    not (null pnode) && pdx >= 0 && sdx >= 0 ==>
300 314
    let vcpus_s = show vcpus
301 315
        dsk_s = show dsk
302 316
        mem_s = show mem
303
        rsnode = snode ++ "a" -- non-empty secondary node
304 317
        rsdx = if pdx == sdx
305 318
               then sdx + 1
306 319
               else sdx
307
        ndx = [(pnode, pdx), (rsnode, rsdx)]
320
        ndx = if null snode
321
              then [(pnode, pdx)]
322
              else [(pnode, pdx), (snode, rsdx)]
308 323
        tags = ""
309 324
        inst = Text.loadInst ndx
310
               [name, mem_s, dsk_s, vcpus_s, status, pnode, rsnode, tags]::
325
               [name, mem_s, dsk_s, vcpus_s, status, pnode, snode, tags]::
326
               Maybe (String, Instance.Instance)
327
        fail1 = Text.loadInst ndx
328
               [name, mem_s, dsk_s, vcpus_s, status, pnode, pnode, tags]::
311 329
               Maybe (String, Instance.Instance)
312 330
        _types = ( name::String, mem::Int, dsk::Int
313 331
                 , vcpus::Int, status::String
......
321 339
             Instance.vcpus i == vcpus &&
322 340
             Instance.mem i == mem &&
323 341
             Instance.pNode i == pdx &&
324
             Instance.sNode i == rsdx)
342
             Instance.sNode i == (if null snode
343
                                  then Node.noSecondary
344
                                  else rsdx) &&
345
             isNothing fail1)
346

  
347
prop_Text_Load_InstanceFail ktn fields =
348
    length fields /= 8 ==> isNothing $ Text.loadInst ktn fields
349

  
350
prop_Text_Load_Node name tm nm fm td fd tc fo =
351
    let conv v = if v < 0
352
                    then "?"
353
                    else show v
354
        tm_s = conv tm
355
        nm_s = conv nm
356
        fm_s = conv fm
357
        td_s = conv td
358
        fd_s = conv fd
359
        tc_s = conv tc
360
        fo_s = if fo
361
               then "Y"
362
               else "N"
363
        any_broken = any (< 0) [tm, nm, fm, td, fd, tc]
364
    in case Text.loadNode [name, tm_s, nm_s, fm_s, td_s, fd_s, tc_s, fo_s] of
365
         Nothing -> False
366
         Just (name', node) ->
367
             if fo || any_broken
368
             then Node.offline node
369
             else (Node.name node == name' && name' == name &&
370
                   Node.alias node == name &&
371
                   Node.tMem node == fromIntegral tm &&
372
                   Node.nMem node == nm &&
373
                   Node.fMem node == fm &&
374
                   Node.tDsk node == fromIntegral td &&
375
                   Node.fDsk node == fd &&
376
                   Node.tCpu node == fromIntegral tc)
377

  
378
prop_Text_Load_NodeFail fields =
379
    length fields /= 8 ==> isNothing $ Text.loadNode fields
325 380

  
326 381
testText =
327 382
    [ run prop_Text_Load_Instance
383
    , run prop_Text_Load_InstanceFail
384
    , run prop_Text_Load_Node
385
    , run prop_Text_Load_NodeFail
328 386
    ]
329 387

  
330 388
-- Node tests
b/Ganeti/HTools/Text.hs
30 30
    (
31 31
      loadData
32 32
    , loadInst
33
    , loadNode
33 34
    ) where
34 35

  
35 36
import Control.Monad

Also available in: Unified diff