From f3db88bac8ec5c1b5716c2ec6e193045c8da82a8 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Thu, 8 Sep 2011 18:34:25 +0200
Subject: [PATCH] rlib2: Convert /2/instances/[inst]/modify to OpcodeResource
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: RenΓ© Nussbaumer <rn@google.com>
---
 lib/rapi/rlib2.py                  | 28 ++++++---------------
 test/ganeti.rapi.rlib2_unittest.py | 39 ++++++++++++++++++++++--------
 2 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py
index ed9133259..167abe39e 100644
--- a/lib/rapi/rlib2.py
+++ b/lib/rapi/rlib2.py
@@ -1065,33 +1065,19 @@ class R_2_instances_name_rename(baserlib.OpcodeResource):
       })
 
 
-def _ParseModifyInstanceRequest(name, data):
-  """Parses a request for modifying an instance.
-
-  @rtype: L{opcodes.OpInstanceSetParams}
-  @return: Instance modify opcode
-
-  """
-  return baserlib.FillOpcode(opcodes.OpInstanceSetParams, data, {
-    "instance_name": name,
-    })
-
-
-class R_2_instances_name_modify(baserlib.ResourceBase):
+class R_2_instances_name_modify(baserlib.OpcodeResource):
   """/2/instances/[instance_name]/modify resource.
 
   """
-  def PUT(self):
-    """Changes some parameters of an instance.
+  PUT_OPCODE = opcodes.OpInstanceSetParams
 
-    @return: a job id
+  def GetPutOpInput(self):
+    """Changes parameters of an instance.
 
     """
-    baserlib.CheckType(self.request_body, dict, "Body contents")
-
-    op = _ParseModifyInstanceRequest(self.items[0], self.request_body)
-
-    return self.SubmitJob([op])
+    return (self.request_body, {
+      "instance_name": self.items[0],
+      })
 
 
 class R_2_instances_name_disk_grow(baserlib.ResourceBase):
diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/ganeti.rapi.rlib2_unittest.py
index de2900328..2fe0511db 100755
--- a/test/ganeti.rapi.rlib2_unittest.py
+++ b/test/ganeti.rapi.rlib2_unittest.py
@@ -867,13 +867,10 @@ class TestParseRenameInstanceRequest(testutils.GanetiTestCase):
       self.assertRaises(IndexError, cl.GetNextSubmittedJob)
 
 
-class TestParseModifyInstanceRequest(testutils.GanetiTestCase):
-  def setUp(self):
-    testutils.GanetiTestCase.setUp(self)
-
-    self.Parse = rlib2._ParseModifyInstanceRequest
-
+class TestParseModifyInstanceRequest(unittest.TestCase):
   def test(self):
+    clfactory = _FakeClientFactory(_FakeClient)
+
     name = "instush8gah"
 
     test_disks = [
@@ -898,8 +895,16 @@ class TestParseModifyInstanceRequest(testutils.GanetiTestCase):
                     "disk_template": disk_template,
                     }
 
-                  op = self.Parse(name, data)
-                  self.assert_(isinstance(op, opcodes.OpInstanceSetParams))
+                  handler = _CreateHandler(rlib2.R_2_instances_name_modify,
+                                           [name], {}, data, clfactory)
+                  job_id = handler.PUT()
+
+                  cl = clfactory.GetNextClient()
+                  self.assertRaises(IndexError, clfactory.GetNextClient)
+
+                  (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
+                  self.assertEqual(job_id, exp_job_id)
+                  self.assertTrue(isinstance(op, opcodes.OpInstanceSetParams))
                   self.assertEqual(op.instance_name, name)
                   self.assertEqual(op.hvparams, hvparams)
                   self.assertEqual(op.beparams, beparams)
@@ -911,13 +916,27 @@ class TestParseModifyInstanceRequest(testutils.GanetiTestCase):
                   self.assertFalse(hasattr(op, "remote_node"))
                   self.assertFalse(hasattr(op, "os_name"))
                   self.assertFalse(hasattr(op, "force_variant"))
+                  self.assertFalse(hasattr(op, "dry_run"))
+
+                  self.assertRaises(IndexError, cl.GetNextSubmittedJob)
 
   def testDefaults(self):
+    clfactory = _FakeClientFactory(_FakeClient)
+
     name = "instir8aish31"
 
-    op = self.Parse(name, {})
-    self.assert_(isinstance(op, opcodes.OpInstanceSetParams))
+    handler = _CreateHandler(rlib2.R_2_instances_name_modify,
+                             [name], {}, {}, clfactory)
+    job_id = handler.PUT()
+
+    cl = clfactory.GetNextClient()
+    self.assertRaises(IndexError, clfactory.GetNextClient)
+
+    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
+    self.assertEqual(job_id, exp_job_id)
+    self.assertTrue(isinstance(op, opcodes.OpInstanceSetParams))
     self.assertEqual(op.instance_name, name)
+
     for i in ["hvparams", "beparams", "osparams", "force", "nics", "disks",
               "disk_template", "remote_node", "os_name", "force_variant"]:
       self.assertFalse(hasattr(op, i))
-- 
GitLab