From deadfa13ce45f076e6224490c12af3fa53b28f43 Mon Sep 17 00:00:00 2001
From: Bernardo Dal Seno <bdalseno@google.com>
Date: Mon, 28 Jan 2013 17:26:40 +0100
Subject: [PATCH] QA: Run instance tests with different cluster configurations

Instance tests are run with or without the exclusive-storage flag set. More
configurations can be added easily.

Signed-off-by: Bernardo Dal Seno <bdalseno@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
---
 qa/ganeti-qa.py   | 85 ++++++++++++++++++++++++++++-------------------
 qa/qa-sample.json |  6 +++-
 2 files changed, 55 insertions(+), 36 deletions(-)

diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index f654ea6a3..62f955076 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -482,6 +482,46 @@ def RunExclusiveStorageTests():
     qa_config.ReleaseNode(node)
 
 
+def RunInstanceTests():
+  """Create and exercise instances."""
+  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)
+      qa_cluster.AssertClusterVerify()
+
+
 def RunQa():
   """Main QA body.
 
@@ -536,42 +576,17 @@ def RunQa():
   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),
+  config_list = [
+    ("default-instance-tests", lambda: None, lambda _: None),
+    ("exclusive-storage-instance-tests",
+     lambda: qa_cluster.TestSetExclStorCluster(True),
+     qa_cluster.TestSetExclStorCluster),
   ]
-
-  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)
-      qa_cluster.AssertClusterVerify()
+  for (conf_name, setup_conf_f, restore_conf_f) in config_list:
+    if qa_config.TestEnabled(conf_name):
+      oldconf = setup_conf_f()
+      RunInstanceTests()
+      restore_conf_f(oldconf)
 
   pnode = qa_config.AcquireNode()
   try:
diff --git a/qa/qa-sample.json b/qa/qa-sample.json
index d50360ca0..a79d05ccc 100644
--- a/qa/qa-sample.json
+++ b/qa/qa-sample.json
@@ -171,7 +171,11 @@
     "instance-recreate-disks": false,
 
     "# Whether to test the tools/move-instance utility": null,
-    "inter-cluster-instance-move": false
+    "inter-cluster-instance-move": false,
+
+    "# Run instance tests with different cluster configurations": null,
+    "default-instance-tests": true,
+    "exclusive-storage-instance-tests": false
   },
 
   "options": {
-- 
GitLab