QA: Test for basic features of exclusive storage
authorBernardo Dal Seno <bdalseno@google.com>
Wed, 16 Jan 2013 10:49:20 +0000 (11:49 +0100)
committerBernardo Dal Seno <bdalseno@google.com>
Thu, 31 Jan 2013 23:34:54 +0000 (00:34 +0100)
Check that creation of instances doesn't trigger any error.

Signed-off-by: Bernardo Dal Seno <bdalseno@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>

qa/ganeti-qa.py
qa/qa-sample.json
qa/qa_cluster.py

index 26c2407..34a47ef 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/python -u
 #
 
-# Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Google Inc.
+# Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -457,6 +457,28 @@ def RunHardwareFailureTests(instance, pnode, snode):
             pnode, snode)
 
 
+def RunExclusiveStorageTests():
+  """Test exclusive storage."""
+  if not qa_config.TestEnabled("cluster-exclusive-storage"):
+    return
+
+  node = qa_config.AcquireNode()
+  try:
+    old_es = qa_cluster.TestSetExclStorCluster(True)
+    if qa_config.TestEnabled("instance-add-plain-disk"):
+      # Make sure that the cluster doesn't have any pre-existing problem
+      qa_cluster.AssertClusterVerify()
+      instance1 = qa_instance.TestInstanceAddWithPlainDisk(node)
+      instance2 = qa_instance.TestInstanceAddWithPlainDisk(node)
+      # cluster-verify checks that disks are allocated correctly
+      qa_cluster.AssertClusterVerify()
+      qa_instance.TestInstanceRemove(instance1)
+      qa_instance.TestInstanceRemove(instance2)
+    qa_cluster.TestSetExclStorCluster(old_es)
+  finally:
+    qa_config.ReleaseNode(node)
+
+
 def RunQa():
   """Main QA body.
 
@@ -587,6 +609,8 @@ def RunQa():
   finally:
     qa_config.ReleaseNode(pnode)
 
+  RunExclusiveStorageTests()
+
   RunTestIf("create-cluster", qa_node.TestNodeRemoveAll)
 
   RunTestIf("cluster-destroy", qa_cluster.TestClusterDestroy)
index 9b96484..4c47a62 100644 (file)
     "cluster-epo": true,
     "cluster-redist-conf": true,
     "cluster-repair-disk-sizes": true,
+    "cluster-exclusive-storage": true,
 
     "haskell-confd": true,
     "htools": true,
index 9839932..9fbcc3f 100644 (file)
@@ -626,3 +626,22 @@ def TestClusterDestroy():
 def TestClusterRepairDiskSizes():
   """gnt-cluster repair-disk-sizes"""
   AssertCommand(["gnt-cluster", "repair-disk-sizes"])
+
+
+def TestSetExclStorCluster(newvalue):
+  """Set the exclusive_storage node parameter at the cluster level.
+
+  @type newvalue: bool
+  @param newvalue: New value of exclusive_storage
+  @rtype: bool
+  @return: The old value of exclusive_storage
+
+  """
+  oldvalue = _GetBoolClusterField("exclusive_storage")
+  AssertCommand(["gnt-cluster", "modify", "--node-parameters",
+                 "exclusive_storage=%s" % newvalue])
+  effvalue = _GetBoolClusterField("exclusive_storage")
+  if effvalue != newvalue:
+    raise qa_error.Error("exclusive_storage has the wrong value: %s instead"
+                         " of %s" % (effvalue, newvalue))
+  return oldvalue