... which test changes to the cluster parameter user shutdown and vm capable attributes.
Signed-off-by: Jose A. Lopes <[email protected]> --- qa/ganeti-qa.py | 1 + qa/qa_cluster.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ qa/qa_instance.py | 2 ++ 3 files changed, 103 insertions(+) diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index 9238ee0..22b7980 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -244,6 +244,7 @@ def RunClusterTests(): ("cluster-modify", qa_cluster.TestClusterModifyDiskTemplates), ("cluster-modify", qa_cluster.TestClusterModifyFileStorageDir), ("cluster-modify", qa_cluster.TestClusterModifySharedFileStorageDir), + ("cluster-modify", qa_cluster.TestClusterModifyUserShutdown), ("cluster-rename", qa_cluster.TestClusterRename), ("cluster-info", qa_cluster.TestClusterVersion), ("cluster-info", qa_cluster.TestClusterInfo), diff --git a/qa/qa_cluster.py b/qa/qa_cluster.py index 7afde6c..e319155 100644 --- a/qa/qa_cluster.py +++ b/qa/qa_cluster.py @@ -25,6 +25,7 @@ import re import tempfile +import time import os.path from ganeti import _constants @@ -1005,6 +1006,105 @@ def TestClusterModifyISpecs(): AssertEqual(initcmd, new_initcmd) +def _TestClusterModifyUserShutdownXen(nodes): + """Tests user shutdown cluster wide for the KVM hypervisor. + + Note that for the Xen hypervisor, the KVM daemon should never run. + + """ + AssertCommand(["gnt-cluster", "modify", "--user-shutdown=true"]) + + # Give time for kvmd to start and stop on all nodes + time.sleep(5) + + for node in nodes: + AssertCommand("pgrep ganeti-kvmd", node=node, fail=True) + + AssertCommand(["gnt-cluster", "modify", "--user-shutdown=false"]) + + for node in nodes: + AssertCommand("pgrep ganeti-kvmd", node=node, fail=True) + + +def _TestClusterModifyUserShutdownKvm(nodes): + """Tests user shutdown cluster wide for the KVM hypervisor. + + Note that for the KVM hypervisor, the KVM daemon should run + according to '--user-shutdown' and whether the node is VM capable. + + """ + # How much time to wait for kvmd to start/stop + kvmd_cycle_time = 4 + + # Start kvmd on all nodes + AssertCommand(["gnt-cluster", "modify", "--user-shutdown=true"]) + time.sleep(kvmd_cycle_time) + for node in nodes: + AssertCommand("pgrep ganeti-kvmd", node=node) + + # Test VM capable node attribute + test_node = None + + for node in nodes: + node_info = qa_utils.GetObjectInfo(["gnt-node", "info", node.primary])[0] + if "vm_capable" in node_info and node_info["vm_capable"]: + test_node = node + break + + if test_node is None: + raise qa_error.Error("Failed to find viable node for this test") + + # Stop kvmd by disabling vm capable + AssertCommand(["gnt-node", "modify", "--vm-capable=no", test_node.primary]) + time.sleep(kvmd_cycle_time) + AssertCommand("pgrep ganeti-kvmd", node=test_node, fail=True) + + # Start kvmd by enabling vm capable + AssertCommand(["gnt-node", "modify", "--vm-capable=yes", test_node.primary]) + time.sleep(kvmd_cycle_time) + AssertCommand("pgrep ganeti-kvmd", node=test_node) + + # Stop kvmd on all nodes by removing KVM from the enabled hypervisors + enabled_hypervisors = qa_config.GetEnabledHypervisors() + + AssertCommand(["gnt-cluster", "modify", "--enabled-hypervisors=xen-pvm"]) + time.sleep(kvmd_cycle_time) + for node in nodes: + AssertCommand("pgrep ganeti-kvmd", node=node, fail=True) + + # Start kvmd on all nodes by restoring KVM to the enabled hypervisors + AssertCommand(["gnt-cluster", "modify", + "--enabled-hypervisors=%s" % ",".join(enabled_hypervisors)]) + time.sleep(kvmd_cycle_time) + for node in nodes: + AssertCommand("pgrep ganeti-kvmd", node=node) + + # Stop kvmd on all nodes + AssertCommand(["gnt-cluster", "modify", "--user-shutdown=false"]) + time.sleep(kvmd_cycle_time) + for node in nodes: + AssertCommand("pgrep ganeti-kvmd", node=node, fail=True) + + +def TestClusterModifyUserShutdown(): + """Tests user shutdown cluster wide. + + """ + enabled_hypervisors = qa_config.GetEnabledHypervisors() + nodes = qa_config.get("nodes") + + for (hv, fn) in [(constants.HT_XEN_PVM, _TestClusterModifyUserShutdownXen), + (constants.HT_XEN_HVM, _TestClusterModifyUserShutdownXen), + (constants.HT_KVM, _TestClusterModifyUserShutdownKvm)]: + if hv in enabled_hypervisors: + qa_daemon.TestPauseWatcher() + fn(nodes) + qa_daemon.TestResumeWatcher() + else: + print "%s hypervisor is not enabled, skipping test for this hypervisor" \ + % hv + + def TestClusterInfo(): """gnt-cluster info""" AssertCommand(["gnt-cluster", "info"]) diff --git a/qa/qa_instance.py b/qa/qa_instance.py index e2456db..7859825 100644 --- a/qa/qa_instance.py +++ b/qa/qa_instance.py @@ -1241,6 +1241,7 @@ def _TestInstanceUserDownKvm(instance): AssertCommand("pkill -f \"\\-name %s\"" % instance.name, node=primary) time.sleep(5) + AssertCommand(["gnt-cluster", "modify", "--user-shutdown=true"]) AssertCommand(["gnt-instance", "modify", "-H", "user_shutdown=true", instance.name]) @@ -1252,6 +1253,7 @@ def _TestInstanceUserDownKvm(instance): primary = _GetInstanceField(instance.name, "pnode") _TestInstanceUserDown(instance, _StopKVMInstance) + AssertCommand(["gnt-cluster", "modify", "--user-shutdown=false"]) def TestInstanceUserDown(instance): -- 2.0.0.526.g5318336
