Revision 27eba428

b/qa/ganeti-qa.py
397 397
  RunTest(qa_daemon.TestResumeWatcher)
398 398

  
399 399

  
400
def RunSingleHomedHardwareFailureTests(instance, pnode):
401
  """Test hardware failure recovery for single-homed instances.
402

  
403
  """
404
  if qa_config.TestEnabled("instance-recreate-disks"):
405
    othernode = qa_config.AcquireNode(exclude=[pnode])
406
    try:
407
      RunTest(qa_instance.TestRecreateDisks,
408
              instance, pnode, None, [othernode])
409
    finally:
410
      qa_config.ReleaseNode(othernode)
411

  
412

  
413 400
def RunHardwareFailureTests(instance, inodes):
414 401
  """Test cluster internal hardware failure recovery.
415 402

  
......
543 530
          RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance, use_client)
544 531
          del rapi_instance
545 532

  
546
    if qa_config.TestEnabled("instance-add-plain-disk"):
547
      instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, [pnode])
548
      RunCommonInstanceTests(instance)
549
      RunGroupListTests()
550
      RunTestIf("cluster-epo", qa_cluster.TestClusterEpo)
551
      RunExportImportTests(instance, [pnode])
552
      RunDaemonTests(instance)
553
      RunRepairDiskSizes()
554
      RunSingleHomedHardwareFailureTests(instance, pnode)
555
      RunTest(qa_instance.TestInstanceRemove, instance)
556
      del instance
557

  
558
    multinode_tests = [
559
      ("instance-add-drbd-disk",
560
       qa_instance.TestInstanceAddWithDrbdDisk),
561
    ]
562

  
563
    for name, func in multinode_tests:
564
      if qa_config.TestEnabled(name):
565
        snode = qa_config.AcquireNode(exclude=pnode)
566
        try:
567
          instance = RunTest(func, [pnode, snode])
568
          RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, pnode)
569
          RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, snode)
570
          RunCommonInstanceTests(instance)
571
          RunGroupListTests()
572
          RunTestIf("group-rwops", qa_group.TestAssignNodesIncludingSplit,
573
                    constants.INITIAL_NODE_GROUP_NAME,
574
                    pnode["primary"], snode["primary"])
575
          if qa_config.TestEnabled("instance-convert-disk"):
576
            RunTest(qa_instance.TestInstanceShutdown, instance)
577
            RunTest(qa_instance.TestInstanceConvertDiskToPlain, instance,
578
                    [pnode, snode])
579
            RunTest(qa_instance.TestInstanceStartup, instance)
580
          RunExportImportTests(instance, [pnode, snode])
581
          RunHardwareFailureTests(instance, [pnode, snode])
582
          RunRepairDiskSizes()
583
          RunTest(qa_instance.TestInstanceRemove, instance)
584
          del instance
585
        finally:
586
          qa_config.ReleaseNode(snode)
587

  
588 533
  finally:
589 534
    qa_config.ReleaseNode(pnode)
590 535

  
536
  instance_tests = [
537
    ("instance-add-plain-disk", constants.DT_PLAIN,
538
     qa_instance.TestInstanceAddWithPlainDisk, 1),
539
    ("instance-add-drbd-disk", constants.DT_DRBD8,
540
     qa_instance.TestInstanceAddWithDrbdDisk, 2),
541
  ]
542

  
543
  for (test_name, templ, create_fun, num_nodes) in instance_tests:
544
    if (qa_config.TestEnabled(test_name) and
545
        qa_config.IsTemplateSupported(templ)):
546
      inodes = qa_config.AcquireManyNodes(num_nodes)
547
      try:
548
        instance = RunTest(create_fun, inodes)
549

  
550
        RunTestIf("cluster-epo", qa_cluster.TestClusterEpo)
551
        RunDaemonTests(instance)
552
        for node in inodes:
553
          RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, node)
554
        if len(inodes) > 1:
555
          RunTestIf("group-rwops", qa_group.TestAssignNodesIncludingSplit,
556
                    constants.INITIAL_NODE_GROUP_NAME,
557
                    inodes[0]["primary"], inodes[1]["primary"])
558
        if qa_config.TestEnabled("instance-convert-disk"):
559
          RunTest(qa_instance.TestInstanceShutdown, instance)
560
          RunTest(qa_instance.TestInstanceConvertDiskToPlain, instance, inodes)
561
          RunTest(qa_instance.TestInstanceStartup, instance)
562
        RunCommonInstanceTests(instance)
563
        RunGroupListTests()
564
        RunExportImportTests(instance, inodes)
565
        RunHardwareFailureTests(instance, inodes)
566
        RunRepairDiskSizes()
567
        RunTest(qa_instance.TestInstanceRemove, instance)
568
        del instance
569
      finally:
570
        qa_config.ReleaseManyNodes(inodes)
571

  
591 572
  # Test removing instance with offline drbd secondary
592 573
  if qa_config.TestEnabled("instance-remove-drbd-offline"):
593 574
    # Make sure the master is not put offline
b/qa/qa_config.py
260 260
  return val
261 261

  
262 262

  
263
def IsTemplateSupported(templ):
264
  """Is the given templated supported by the current configuration?
265

  
266
  """
267
  if GetExclusiveStorage():
268
    return templ in constants.DTS_EXCL_STORAGE
269
  else:
270
    return True
271

  
272

  
263 273
def AcquireNode(exclude=None):
264 274
  """Returns the least used node.
265 275

  

Also available in: Unified diff