Revision c99200a3 qa/ganeti-qa.py
b/qa/ganeti-qa.py | ||
---|---|---|
340 | 340 |
qa_group.GetDefaultGroup()) |
341 | 341 |
|
342 | 342 |
|
343 |
def RunExportImportTests(instance, pnode, snode):
|
|
343 |
def RunExportImportTests(instance, inodes):
|
|
344 | 344 |
"""Tries to export and import the instance. |
345 | 345 |
|
346 |
@param pnode: current primary node of the instance |
|
347 |
@param snode: current secondary node of the instance, if any, |
|
348 |
otherwise None |
|
346 |
@type inodes: list of nodes |
|
347 |
@param inodes: current nodes of the instance |
|
349 | 348 |
|
350 | 349 |
""" |
351 | 350 |
if qa_config.TestEnabled("instance-export"): |
352 | 351 |
RunTest(qa_instance.TestInstanceExportNoTarget, instance) |
353 | 352 |
|
353 |
pnode = inodes[0] |
|
354 | 354 |
expnode = qa_config.AcquireNode(exclude=pnode) |
355 | 355 |
try: |
356 | 356 |
name = RunTest(qa_instance.TestInstanceExport, instance, expnode) |
... | ... | |
373 | 373 |
if qa_config.TestEnabled(["rapi", "inter-cluster-instance-move"]): |
374 | 374 |
newinst = qa_config.AcquireInstance() |
375 | 375 |
try: |
376 |
if snode is None: |
|
377 |
excl = [pnode] |
|
378 |
else: |
|
379 |
excl = [pnode, snode] |
|
380 |
tnode = qa_config.AcquireNode(exclude=excl) |
|
376 |
tnode = qa_config.AcquireNode(exclude=inodes) |
|
381 | 377 |
try: |
382 | 378 |
RunTest(qa_rapi.TestInterClusterInstanceMove, instance, newinst, |
383 |
pnode, snode, tnode)
|
|
379 |
inodes, tnode)
|
|
384 | 380 |
finally: |
385 | 381 |
qa_config.ReleaseNode(tnode) |
386 | 382 |
finally: |
... | ... | |
414 | 410 |
qa_config.ReleaseNode(othernode) |
415 | 411 |
|
416 | 412 |
|
417 |
def RunHardwareFailureTests(instance, pnode, snode):
|
|
413 |
def RunHardwareFailureTests(instance, inodes):
|
|
418 | 414 |
"""Test cluster internal hardware failure recovery. |
419 | 415 |
|
420 | 416 |
""" |
... | ... | |
427 | 423 |
qa_rapi.TestRapiInstanceMigrate, instance) |
428 | 424 |
|
429 | 425 |
if qa_config.TestEnabled("instance-replace-disks"): |
430 |
othernode = qa_config.AcquireNode(exclude=[pnode, snode]) |
|
426 |
# We just need alternative secondary nodes, hence "- 1" |
|
427 |
othernodes = qa_config.AcquireManyNodes(len(inodes) - 1, exclude=inodes) |
|
431 | 428 |
try: |
432 | 429 |
RunTestIf("rapi", qa_rapi.TestRapiInstanceReplaceDisks, instance) |
433 | 430 |
RunTest(qa_instance.TestReplaceDisks, |
434 |
instance, pnode, snode, othernode)
|
|
431 |
instance, inodes, othernodes)
|
|
435 | 432 |
finally: |
436 |
qa_config.ReleaseNode(othernode) |
|
433 |
qa_config.ReleaseManyNodes(othernodes) |
|
434 |
del othernodes |
|
437 | 435 |
|
438 | 436 |
if qa_config.TestEnabled("instance-recreate-disks"): |
439 |
othernode1 = qa_config.AcquireNode(exclude=[pnode, snode]) |
|
440 | 437 |
try: |
441 |
othernode2 = qa_config.AcquireNode(exclude=[pnode, snode, othernode1]) |
|
438 |
acquirednodes = qa_config.AcquireManyNodes(len(inodes), exclude=inodes) |
|
439 |
othernodes = acquirednodes |
|
442 | 440 |
except qa_error.OutOfNodesError: |
443 |
# Let's reuse one of the nodes if the cluster is not big enough |
|
444 |
othernode2 = pnode |
|
441 |
if len(inodes) > 1: |
|
442 |
# If the cluster is not big enough, let's reuse some of the nodes, but |
|
443 |
# with different roles. In this way, we can test a DRBD instance even on |
|
444 |
# a 3-node cluster. |
|
445 |
acquirednodes = [qa_config.AcquireNode(exclude=inodes)] |
|
446 |
othernodes = acquirednodes + inodes[:-1] |
|
447 |
else: |
|
448 |
raise |
|
445 | 449 |
try: |
446 | 450 |
RunTest(qa_instance.TestRecreateDisks, |
447 |
instance, pnode, snode, [othernode1, othernode2])
|
|
451 |
instance, inodes, othernodes)
|
|
448 | 452 |
finally: |
449 |
qa_config.ReleaseNode(othernode1) |
|
450 |
if othernode2 != pnode: |
|
451 |
qa_config.ReleaseNode(othernode2) |
|
452 |
|
|
453 |
RunTestIf("node-evacuate", qa_node.TestNodeEvacuate, pnode, snode) |
|
453 |
qa_config.ReleaseManyNodes(acquirednodes) |
|
454 | 454 |
|
455 |
RunTestIf("node-failover", qa_node.TestNodeFailover, pnode, snode) |
|
455 |
if len(inodes) >= 2: |
|
456 |
RunTestIf("node-evacuate", qa_node.TestNodeEvacuate, inodes[0], inodes[1]) |
|
457 |
RunTestIf("node-failover", qa_node.TestNodeFailover, inodes[0], inodes[1]) |
|
456 | 458 |
|
457 | 459 |
|
458 | 460 |
def RunExclusiveStorageTests(): |
... | ... | |
471 | 473 |
if qa_config.TestEnabled("instance-add-plain-disk"): |
472 | 474 |
# Make sure that the cluster doesn't have any pre-existing problem |
473 | 475 |
qa_cluster.AssertClusterVerify() |
474 |
instance1 = qa_instance.TestInstanceAddWithPlainDisk(node)
|
|
475 |
instance2 = qa_instance.TestInstanceAddWithPlainDisk(node)
|
|
476 |
instance1 = qa_instance.TestInstanceAddWithPlainDisk([node])
|
|
477 |
instance2 = qa_instance.TestInstanceAddWithPlainDisk([node])
|
|
476 | 478 |
# cluster-verify checks that disks are allocated correctly |
477 | 479 |
qa_cluster.AssertClusterVerify() |
478 | 480 |
qa_instance.TestInstanceRemove(instance1) |
... | ... | |
481 | 483 |
snode = qa_config.AcquireNode() |
482 | 484 |
try: |
483 | 485 |
qa_cluster.TestSetExclStorCluster(False) |
484 |
instance = qa_instance.TestInstanceAddWithDrbdDisk(node, snode)
|
|
486 |
instance = qa_instance.TestInstanceAddWithDrbdDisk([node, snode])
|
|
485 | 487 |
qa_cluster.TestSetExclStorCluster(True) |
486 | 488 |
exp_err = [constants.CV_EINSTANCEUNSUITABLENODE] |
487 | 489 |
qa_cluster.AssertClusterVerify(fail=True, errors=exp_err) |
... | ... | |
542 | 544 |
del rapi_instance |
543 | 545 |
|
544 | 546 |
if qa_config.TestEnabled("instance-add-plain-disk"): |
545 |
instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
|
|
547 |
instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, [pnode])
|
|
546 | 548 |
RunCommonInstanceTests(instance) |
547 | 549 |
RunGroupListTests() |
548 | 550 |
RunTestIf("cluster-epo", qa_cluster.TestClusterEpo) |
549 |
RunExportImportTests(instance, pnode, None)
|
|
551 |
RunExportImportTests(instance, [pnode])
|
|
550 | 552 |
RunDaemonTests(instance) |
551 | 553 |
RunRepairDiskSizes() |
552 | 554 |
RunSingleHomedHardwareFailureTests(instance, pnode) |
... | ... | |
562 | 564 |
if qa_config.TestEnabled(name): |
563 | 565 |
snode = qa_config.AcquireNode(exclude=pnode) |
564 | 566 |
try: |
565 |
instance = RunTest(func, pnode, snode)
|
|
567 |
instance = RunTest(func, [pnode, snode])
|
|
566 | 568 |
RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, pnode) |
567 | 569 |
RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, snode) |
568 | 570 |
RunCommonInstanceTests(instance) |
... | ... | |
572 | 574 |
pnode["primary"], snode["primary"]) |
573 | 575 |
if qa_config.TestEnabled("instance-convert-disk"): |
574 | 576 |
RunTest(qa_instance.TestInstanceShutdown, instance) |
575 |
RunTest(qa_instance.TestInstanceConvertDisk, instance, snode) |
|
577 |
RunTest(qa_instance.TestInstanceConvertDiskToPlain, instance, |
|
578 |
[pnode, snode]) |
|
576 | 579 |
RunTest(qa_instance.TestInstanceStartup, instance) |
577 |
RunExportImportTests(instance, pnode, snode)
|
|
578 |
RunHardwareFailureTests(instance, pnode, snode)
|
|
580 |
RunExportImportTests(instance, [pnode, snode])
|
|
581 |
RunHardwareFailureTests(instance, [pnode, snode])
|
|
579 | 582 |
RunRepairDiskSizes() |
580 | 583 |
RunTest(qa_instance.TestInstanceRemove, instance) |
581 | 584 |
del instance |
... | ... | |
592 | 595 |
try: |
593 | 596 |
pnode = qa_config.AcquireNode(exclude=snode) |
594 | 597 |
try: |
595 |
instance = qa_instance.TestInstanceAddWithDrbdDisk(pnode, snode)
|
|
598 |
instance = qa_instance.TestInstanceAddWithDrbdDisk([pnode, snode])
|
|
596 | 599 |
qa_node.MakeNodeOffline(snode, "yes") |
597 | 600 |
try: |
598 | 601 |
RunTest(qa_instance.TestInstanceRemove, instance) |
... | ... | |
607 | 610 |
try: |
608 | 611 |
if qa_config.TestEnabled(["instance-add-plain-disk", "instance-export"]): |
609 | 612 |
for shutdown in [False, True]: |
610 |
instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
|
|
613 |
instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, [pnode])
|
|
611 | 614 |
expnode = qa_config.AcquireNode(exclude=pnode) |
612 | 615 |
try: |
613 | 616 |
if shutdown: |
Also available in: Unified diff