X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/09470dd825e59110293a6b2a93631e23431efaec..8e66b9bfff134a6190aebdbe786a102778b3ecec:/qa/ganeti-qa.py diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index 2926202..de9c194 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -44,10 +44,11 @@ import qa_tags import qa_utils from ganeti import utils -from ganeti import rapi +from ganeti import rapi # pylint: disable=W0611 from ganeti import constants import ganeti.rapi.client # pylint: disable=W0611 +from ganeti.rapi.client import UsesRapiClient def _FormatHeader(line, end=72): @@ -72,7 +73,7 @@ def _DescriptionOf(fn): return desc.rstrip(".") -def RunTest(fn, *args): +def RunTest(fn, *args, **kwargs): """Runs a test after printing a header. """ @@ -85,7 +86,7 @@ def RunTest(fn, *args): print _FormatHeader("%s start %s" % (tstart, desc)) try: - retval = fn(*args) + retval = fn(*args, **kwargs) return retval finally: tstop = datetime.datetime.now() @@ -93,7 +94,7 @@ def RunTest(fn, *args): print _FormatHeader("%s time=%s %s" % (tstop, tdelta, desc)) -def RunTestIf(testnames, fn, *args): +def RunTestIf(testnames, fn, *args, **kwargs): """Runs a test conditionally. @param testnames: either a single test name in the configuration @@ -101,7 +102,7 @@ def RunTestIf(testnames, fn, *args): """ if qa_config.TestEnabled(testnames): - RunTest(fn, *args) + RunTest(fn, *args, **kwargs) else: tstart = datetime.datetime.now() desc = _DescriptionOf(fn) @@ -149,6 +150,7 @@ def SetupCluster(rapi_user, rapi_secret): RunTestIf("node-list", qa_node.TestNodeListFields) RunTestIf("instance-list", qa_instance.TestInstanceListFields) RunTestIf("job-list", qa_job.TestJobListFields) + RunTestIf("instance-export", qa_instance.TestBackupListFields) RunTestIf("node-info", qa_node.TestNodeInfo) @@ -251,7 +253,12 @@ def RunCommonInstanceTests(instance): RunTestIf(["instance-console", "rapi"], qa_rapi.TestRapiInstanceConsole, instance) - DOWN_TESTS = ["instance-reinstall", "instance-rename"] + DOWN_TESTS = qa_config.Either([ + "instance-reinstall", + "instance-rename", + "instance-grow-disk", + ]) + # shutdown instance for any 'down' tests RunTestIf(DOWN_TESTS, qa_instance.TestInstanceShutdown, instance) @@ -259,10 +266,6 @@ def RunCommonInstanceTests(instance): RunTestIf("instance-reinstall", qa_instance.TestInstanceReinstall, instance) RunTestIf(["instance-reinstall", "rapi"], qa_rapi.TestRapiInstanceReinstall, instance) - # RAPI reinstall will leave the instance up by default, so we have - # to stop it again - RunTestIf(["instance-reinstall", "rapi"], - qa_rapi.TestRapiInstanceShutdown, instance) if qa_config.TestEnabled("instance-rename"): rename_source = instance["name"] @@ -279,6 +282,8 @@ def RunCommonInstanceTests(instance): RunTestIf("rapi", qa_rapi.TestRapiInstanceRenameAndBack, rename_source, rename_target) + RunTestIf(["instance-grow-disk"], qa_instance.TestInstanceGrowDisk, instance) + # and now start the instance again RunTestIf(DOWN_TESTS, qa_instance.TestInstanceStartup, instance) @@ -346,8 +351,10 @@ def RunExportImportTests(instance, pnode, snode): if qa_config.TestEnabled("instance-import"): newinst = qa_config.AcquireInstance() try: - RunTest(qa_instance.TestInstanceImport, pnode, newinst, + RunTest(qa_instance.TestInstanceImport, newinst, pnode, expnode, name) + # Check if starting the instance works + RunTest(qa_instance.TestInstanceStartup, newinst) RunTest(qa_instance.TestInstanceRemove, newinst) finally: qa_config.ReleaseInstance(newinst) @@ -458,7 +465,8 @@ def RunQa(): for use_client in [True, False]: rapi_instance = RunTest(qa_rapi.TestRapiInstanceAdd, pnode, use_client) - RunCommonInstanceTests(rapi_instance) + if qa_config.TestEnabled("instance-plain-rapi-common-tests"): + RunCommonInstanceTests(rapi_instance) RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance, use_client) del rapi_instance @@ -483,6 +491,8 @@ def RunQa(): 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() RunTest(qa_group.TestAssignNodesIncludingSplit, @@ -500,6 +510,18 @@ def RunQa(): finally: qa_config.ReleaseNode(snode) + # Test removing instance with offline drbd secondary + if qa_config.TestEnabled("instance-remove-drbd-offline"): + snode = qa_config.AcquireNode(exclude=pnode) + instance = \ + qa_instance.TestInstanceAddWithDrbdDisk(pnode, snode) + try: + qa_node.MakeNodeOffline(snode, "yes") + RunTest(qa_instance.TestInstanceRemove, instance) + finally: + qa_node.MakeNodeOffline(snode, "no") + qa_config.ReleaseNode(snode) + if qa_config.TestEnabled(["instance-add-plain-disk", "instance-export"]): for shutdown in [False, True]: instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode) @@ -523,7 +545,7 @@ def RunQa(): RunTestIf("cluster-destroy", qa_cluster.TestClusterDestroy) -@rapi.client.UsesRapiClient +@UsesRapiClient def main(): """Main program. @@ -547,7 +569,12 @@ def main(): qa_config.Load(config_file) - qa_utils.StartMultiplexer(qa_config.GetMasterNode()["primary"]) + primary = qa_config.GetMasterNode()["primary"] + qa_utils.StartMultiplexer(primary) + print ("SSH command for primary node: %s" % + utils.ShellQuoteArgs(qa_utils.GetSSHCommand(primary, ""))) + print ("SSH command for other nodes: %s" % + utils.ShellQuoteArgs(qa_utils.GetSSHCommand("NODE", ""))) try: RunQa() finally: