The code launching instance tests for "plain" and "drbd" templates has been
unified. In this way it's easier to add more templates, and to re-use the same
tests with different configurations.

Signed-off-by: Bernardo Dal Seno <[email protected]>
---
 qa/ganeti-qa.py | 91 +++++++++++++++++++++++----------------------------------
 qa/qa_config.py | 10 +++++++
 2 files changed, 46 insertions(+), 55 deletions(-)

diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index cc29d85..44a4235 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -397,19 +397,6 @@ def RunDaemonTests(instance):
   RunTest(qa_daemon.TestResumeWatcher)
 
 
-def RunSingleHomedHardwareFailureTests(instance, pnode):
-  """Test hardware failure recovery for single-homed instances.
-
-  """
-  if qa_config.TestEnabled("instance-recreate-disks"):
-    othernode = qa_config.AcquireNode(exclude=[pnode])
-    try:
-      RunTest(qa_instance.TestRecreateDisks,
-              instance, pnode, None, [othernode])
-    finally:
-      qa_config.ReleaseNode(othernode)
-
-
 def RunHardwareFailureTests(instance, inodes):
   """Test cluster internal hardware failure recovery.
 
@@ -541,51 +528,45 @@ def RunQa():
           RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance, use_client)
           del rapi_instance
 
-    if qa_config.TestEnabled("instance-add-plain-disk"):
-      instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, [pnode])
-      RunCommonInstanceTests(instance)
-      RunGroupListTests()
-      RunTestIf("cluster-epo", qa_cluster.TestClusterEpo)
-      RunExportImportTests(instance, [pnode])
-      RunDaemonTests(instance)
-      RunRepairDiskSizes()
-      RunSingleHomedHardwareFailureTests(instance, pnode)
-      RunTest(qa_instance.TestInstanceRemove, instance)
-      del instance
-
-    multinode_tests = [
-      ("instance-add-drbd-disk",
-       qa_instance.TestInstanceAddWithDrbdDisk),
-    ]
-
-    for name, func in multinode_tests:
-      if qa_config.TestEnabled(name):
-        snode = qa_config.AcquireNode(exclude=pnode)
-        try:
-          instance = RunTest(func, [pnode, snode])
-          RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, pnode)
-          RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, snode)
-          RunCommonInstanceTests(instance)
-          RunGroupListTests()
-          RunTestIf("group-rwops", qa_group.TestAssignNodesIncludingSplit,
-                    constants.INITIAL_NODE_GROUP_NAME,
-                    pnode["primary"], snode["primary"])
-          if qa_config.TestEnabled("instance-convert-disk"):
-            RunTest(qa_instance.TestInstanceShutdown, instance)
-            RunTest(qa_instance.TestInstanceConvertDiskToPlain, instance,
-                    [pnode, snode])
-            RunTest(qa_instance.TestInstanceStartup, instance)
-          RunExportImportTests(instance, [pnode, snode])
-          RunHardwareFailureTests(instance, [pnode, snode])
-          RunRepairDiskSizes()
-          RunTest(qa_instance.TestInstanceRemove, instance)
-          del instance
-        finally:
-          qa_config.ReleaseNode(snode)
-
   finally:
     qa_config.ReleaseNode(pnode)
 
+  instance_tests = [
+    ("instance-add-plain-disk", constants.DT_PLAIN,
+     qa_instance.TestInstanceAddWithPlainDisk, 1),
+    ("instance-add-drbd-disk", constants.DT_DRBD8,
+     qa_instance.TestInstanceAddWithDrbdDisk, 2),
+  ]
+
+  for (test_name, templ, create_fun, num_nodes) in instance_tests:
+    if (qa_config.TestEnabled(test_name) and
+        qa_config.IsTemplateSupported(templ)):
+      inodes = qa_config.AcquireManyNodes(num_nodes)
+      try:
+        instance = RunTest(create_fun, inodes)
+
+        RunTestIf("cluster-epo", qa_cluster.TestClusterEpo)
+        RunDaemonTests(instance)
+        for node in inodes:
+          RunTestIf("haskell-confd", qa_node.TestNodeListDrbd, node)
+        if len(inodes) > 1:
+          RunTestIf("group-rwops", qa_group.TestAssignNodesIncludingSplit,
+                    constants.INITIAL_NODE_GROUP_NAME,
+                    inodes[0]["primary"], inodes[1]["primary"])
+        if qa_config.TestEnabled("instance-convert-disk"):
+          RunTest(qa_instance.TestInstanceShutdown, instance)
+          RunTest(qa_instance.TestInstanceConvertDiskToPlain, instance, inodes)
+          RunTest(qa_instance.TestInstanceStartup, instance)
+        RunCommonInstanceTests(instance)
+        RunGroupListTests()
+        RunExportImportTests(instance, inodes)
+        RunHardwareFailureTests(instance, inodes)
+        RunRepairDiskSizes()
+        RunTest(qa_instance.TestInstanceRemove, instance)
+        del instance
+      finally:
+        qa_config.ReleaseManyNodes(inodes)
+
   # Test removing instance with offline drbd secondary
   if qa_config.TestEnabled("instance-remove-drbd-offline"):
     # Make sure the master is not put offline
diff --git a/qa/qa_config.py b/qa/qa_config.py
index 0bc00fc..ba7e314 100644
--- a/qa/qa_config.py
+++ b/qa/qa_config.py
@@ -259,6 +259,16 @@ def GetExclusiveStorage():
   return val
 
 
+def IsTemplateSupported(templ):
+  """Is the given templated supported by the current configuration?
+
+  """
+  if GetExclusiveStorage():
+    return templ in constants.DTS_EXCL_STORAGE
+  else:
+    return True
+
+
 def AcquireNode(exclude=None):
   """Returns the least used node.
 
-- 
1.8.1

-- 
You received this message because you are subscribed to the Google Groups 
"ganeti-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to