From 924e95f980603e00b1172472357c55e2d86e9ab2 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Wed, 12 May 2010 20:06:35 +0200
Subject: [PATCH] QA: Test instance creation/deletion via RAPI client

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 qa/ganeti-qa.py | 10 +++++----
 qa/qa_rapi.py   | 56 ++++++++++++++++++++++++++++++++++---------------
 2 files changed, 45 insertions(+), 21 deletions(-)

diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index b3c7d91e5..2916e854e 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -311,10 +311,12 @@ def main():
       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
+        for use_client in [True, False]:
+          rapi_instance = RunTest(qa_rapi.TestRapiInstanceAdd, pnode,
+                                  use_client)
+          RunCommonInstanceTests(rapi_instance)
+          RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance, use_client)
+          del rapi_instance
 
     if qa_config.TestEnabled('instance-add-plain-disk'):
       instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
diff --git a/qa/qa_rapi.py b/qa/qa_rapi.py
index 639f62a92..c8214865a 100644
--- a/qa/qa_rapi.py
+++ b/qa/qa_rapi.py
@@ -262,22 +262,41 @@ def _WaitForRapiJob(job_id):
   rapi.client_utils.PollJob(_rapi_client, job_id, cli.StdioJobPollReportCb())
 
 
-def TestRapiInstanceAdd(node):
+def TestRapiInstanceAdd(node, use_client):
   """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),
-      ])
+    memory = utils.ParseUnit(qa_config.get("mem"))
+    disk_sizes = [utils.ParseUnit(size) for size in qa_config.get("disk")]
+
+    if use_client:
+      disks = [{"size": size} for size in disk_sizes]
+      nics = [{}]
+
+      beparams = {
+        constants.BE_MEMORY: memory,
+        }
+
+      job_id = _rapi_client.CreateInstance(constants.INSTANCE_CREATE,
+                                           instance["name"],
+                                           constants.DT_PLAIN,
+                                           disks, nics,
+                                           os=qa_config.get("os"),
+                                           pnode=node["primary"],
+                                           beparams=beparams)
+    else:
+      body = {
+        "name": instance["name"],
+        "os": qa_config.get("os"),
+        "disk_template": constants.DT_PLAIN,
+        "pnode": node["primary"],
+        "memory": memory,
+        "disks": disk_sizes,
+        }
+
+      (job_id, ) = _DoTests([
+        ("/2/instances", _VerifyReturnsJob, "POST", body),
+        ])
 
     _WaitForRapiJob(job_id)
 
@@ -287,11 +306,14 @@ def TestRapiInstanceAdd(node):
     raise
 
 
-def TestRapiInstanceRemove(instance):
+def TestRapiInstanceRemove(instance, use_client):
   """Test removing instance via RAPI"""
-  (job_id, ) = _DoTests([
-    ("/2/instances/%s" % instance["name"], _VerifyReturnsJob, "DELETE", None),
-    ])
+  if use_client:
+    job_id = _rapi_client.DeleteInstance(instance["name"])
+  else:
+    (job_id, ) = _DoTests([
+      ("/2/instances/%s" % instance["name"], _VerifyReturnsJob, "DELETE", None),
+      ])
 
   _WaitForRapiJob(job_id)
 
-- 
GitLab