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
|