diff --git a/lib/rapi/client.py b/lib/rapi/client.py index aedf0b8c93b8f30c4c6a2662a8037ebe1a2a078b..c672d8aaef5a3b452f6295c09b7f00359a8ef3a1 100644 --- a/lib/rapi/client.py +++ b/lib/rapi/client.py @@ -760,6 +760,21 @@ class GanetiRapiClient(object): """ return self._SendRequest(HTTP_GET, "/2/jobs/%d" % job_id, None, None) + def WaitForJobChange(self, job_id, fields, prev_job_info, prev_log_serial): + """Waits for job changes. + + @type job_id: int + @param job_id: Job ID for which to wait + + """ + body = { + "fields": fields, + "previous_job_info": prev_job_info, + "previous_log_serial": prev_log_serial, + } + + return self._SendRequest(HTTP_GET, "/2/jobs/%s/wait" % job_id, None, body) + def CancelJob(self, job_id, dry_run=False): """Cancels a job. diff --git a/test/ganeti.rapi.client_unittest.py b/test/ganeti.rapi.client_unittest.py index f7ceea6aebc55afcb7c9f7fb9eb70f38b33564d6..14a1d55b274c3cbc4d2ce21f31f8a14a80b54403 100755 --- a/test/ganeti.rapi.client_unittest.py +++ b/test/ganeti.rapi.client_unittest.py @@ -27,6 +27,7 @@ import unittest import warnings from ganeti import http +from ganeti import serializer from ganeti.rapi import connector from ganeti.rapi import rlib2 @@ -133,12 +134,10 @@ class RapiMockTest(unittest.TestCase): self.failUnless(isinstance(rapi.GetLastHandler(), rlib2.R_version)) -class GanetiRapiClientTests(unittest.TestCase): - """Tests for remote API client. - - """ - +class GanetiRapiClientTests(testutils.GanetiTestCase): def setUp(self): + testutils.GanetiTestCase.setUp(self) + self.rapi = RapiMock() self.http = OpenerDirectorMock(self.rapi) self.client = client.GanetiRapiClient('master.foo.com') @@ -324,6 +323,19 @@ class GanetiRapiClientTests(unittest.TestCase): self.assertHandler(rlib2.R_2_jobs_id) self.assertItems(["1234"]) + def testWaitForJobChange(self): + fields = ["id", "summary"] + expected = { + "job_info": [123, "something"], + "log_entries": [], + } + + self.rapi.AddResponse(serializer.DumpJson(expected)) + result = self.client.WaitForJobChange(123, fields, [], -1) + self.assertEqualValues(expected, result) + self.assertHandler(rlib2.R_2_jobs_id_wait) + self.assertItems(["123"]) + def testCancelJob(self): self.rapi.AddResponse("[true, \"Job 123 will be canceled\"]") self.assertEqual([True, "Job 123 will be canceled"],