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