From 8cb70e56f3658e45f51cfcda402207ae689d2ade Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 5 May 2010 12:17:52 +0200 Subject: [PATCH] RAPI QA: Test instance creation/removal via RAPI Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- qa/ganeti-qa.py | 6 ++++++ qa/qa_rapi.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index a51473668..64026c606 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -307,6 +307,12 @@ def main(): if qa_rapi.Enabled(): RunTest(qa_rapi.TestNode, pnode) + if qa_config.TestEnabled("instance-add-plain-disk"): + rapi_instance = RunTest(qa_rapi.TestRapiInstanceAdd, pnode) + RunCommonInstanceTests(rapi_instance) + RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance) + del rapi_instance + if qa_config.TestEnabled('instance-add-plain-disk'): instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode) RunCommonInstanceTests(instance) diff --git a/qa/qa_rapi.py b/qa/qa_rapi.py index c11de803b..cefed6614 100644 --- a/qa/qa_rapi.py +++ b/qa/qa_rapi.py @@ -288,3 +288,60 @@ def TestTags(kind, name, tags): _DoTests([ (uri, _VerifyTags, 'GET', None), ]) + + +def _WaitForRapiJob(job_id): + """Waits for a job to finish. + + """ + master = qa_config.GetMasterNode() + + def _VerifyJob(data): + AssertEqual(data["id"], job_id) + for field in JOB_FIELDS: + AssertIn(field, data) + + _DoTests([ + ("/2/jobs/%s" % job_id, _VerifyJob, "GET", None), + ]) + + # FIXME: Use "gnt-job watch" until RAPI supports waiting for job + cmd = ["gnt-job", "watch", str(job_id)] + AssertEqual(StartSSH(master["primary"], + utils.ShellQuoteArgs(cmd)).wait(), 0) + + +def TestRapiInstanceAdd(node): + """Test adding a new instance via RAPI""" + instance = qa_config.AcquireInstance() + try: + body = { + "name": instance["name"], + "os": qa_config.get("os"), + "disk_template": constants.DT_PLAIN, + "pnode": node["primary"], + "memory": utils.ParseUnit(qa_config.get("mem")), + "disks": [utils.ParseUnit(size) for size in qa_config.get("disk")], + } + + (job_id, ) = _DoTests([ + ("/2/instances", _VerifyReturnsJob, "POST", body), + ]) + + _WaitForRapiJob(job_id) + + return instance + except: + qa_config.ReleaseInstance(instance) + raise + + +def TestRapiInstanceRemove(instance): + """Test removing instance via RAPI""" + (job_id, ) = _DoTests([ + ("/2/instances/%s" % instance["name"], _VerifyReturnsJob, "DELETE", None), + ]) + + _WaitForRapiJob(job_id) + + qa_config.ReleaseInstance(instance) -- GitLab