diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 2123a9983f1d5dc745667670b85c4f89b2cbe24a..e09a923bb8290237766880ed6ecf5316483bcacb 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -1020,33 +1020,19 @@ class R_2_instances_name_export(baserlib.OpcodeResource): }) -def _ParseMigrateInstanceRequest(name, data): - """Parses a request for an instance migration. - - @rtype: L{opcodes.OpInstanceMigrate} - @return: Instance migration opcode - - """ - return baserlib.FillOpcode(opcodes.OpInstanceMigrate, data, { - "instance_name": name, - }) - - -class R_2_instances_name_migrate(baserlib.ResourceBase): +class R_2_instances_name_migrate(baserlib.OpcodeResource): """/2/instances/[instance_name]/migrate resource. """ - def PUT(self): - """Migrates an instance. + PUT_OPCODE = opcodes.OpInstanceMigrate - @return: a job id + def GetPutOpInput(self): + """Migrates an instance. """ - baserlib.CheckType(self.request_body, dict, "Body contents") - - op = _ParseMigrateInstanceRequest(self.items[0], self.request_body) - - return self.SubmitJob([op]) + return (self.request_body, { + "instance_name": self.items[0], + }) class R_2_instances_name_failover(baserlib.ResourceBase): diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/ganeti.rapi.rlib2_unittest.py index 034efe200d624f74c783f6ea4e0fcaf2a2c32337..12ce4cdcfe39b20b068c858368958705d3b3b11c 100755 --- a/test/ganeti.rapi.rlib2_unittest.py +++ b/test/ganeti.rapi.rlib2_unittest.py @@ -728,13 +728,10 @@ class TestBackupExport(unittest.TestCase): self.assertRaises(http.HttpBadRequest, handler.PUT) -class TestParseMigrateInstanceRequest(testutils.GanetiTestCase): - def setUp(self): - testutils.GanetiTestCase.setUp(self) - - self.Parse = rlib2._ParseMigrateInstanceRequest - +class TestInstanceMigrate(testutils.GanetiTestCase): def test(self): + clfactory = _FakeClientFactory(_FakeClient) + name = "instYooho6ek" for cleanup in [False, True]: @@ -743,20 +740,47 @@ class TestParseMigrateInstanceRequest(testutils.GanetiTestCase): "cleanup": cleanup, "mode": mode, } - op = self.Parse(name, data) - self.assert_(isinstance(op, opcodes.OpInstanceMigrate)) + + handler = _CreateHandler(rlib2.R_2_instances_name_migrate, [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.OpInstanceMigrate)) self.assertEqual(op.instance_name, name) self.assertEqual(op.mode, mode) self.assertEqual(op.cleanup, cleanup) + self.assertFalse(hasattr(op, "dry_run")) + self.assertFalse(hasattr(op, "force")) + + self.assertRaises(IndexError, cl.GetNextSubmittedJob) def testDefaults(self): + clfactory = _FakeClientFactory(_FakeClient) + name = "instnohZeex0" - op = self.Parse(name, {}) - self.assert_(isinstance(op, opcodes.OpInstanceMigrate)) + handler = _CreateHandler(rlib2.R_2_instances_name_migrate, [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.OpInstanceMigrate)) self.assertEqual(op.instance_name, name) self.assertFalse(hasattr(op, "mode")) self.assertFalse(hasattr(op, "cleanup")) + self.assertFalse(hasattr(op, "dry_run")) + self.assertFalse(hasattr(op, "force")) + + self.assertRaises(IndexError, cl.GetNextSubmittedJob) class TestParseRenameInstanceRequest(testutils.GanetiTestCase):