)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9808cd6706bca8011599ca5b127a2ea2a7b76a84","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Remove the 1st level dict of service in the body param"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements v2-on-v3-api"},{"line_number":15,"context_line":"Co-Authored-by: Chris Yeoh \u003ccyeoh@au1.ibm.com\u003e"},{"line_number":16,"context_line":"Change-Id: Ida59f00e3cf4640b63add1d6350aa7c30529807e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"baa201ad_1a24810b","line":14,"updated":"2014-10-08 13:04:35.000000000","message":"Now this patch is not on v2.1 api branch: https://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:bp/v2-on-v3-api,n,z\n\nthen we will miss this easily.\nSo here should be\n\n Partially implements blueprint v2-on-v3-api","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"89cbf1abb7c710aba345b6cf1cc0a7b71178f229","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Remove the 1st level dict of service in the body param"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements v2-on-v3-api"},{"line_number":15,"context_line":"Co-Authored-by: Chris Yeoh \u003ccyeoh@au1.ibm.com\u003e"},{"line_number":16,"context_line":"Change-Id: Ida59f00e3cf4640b63add1d6350aa7c30529807e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"baa201ad_3b3a1599","line":14,"in_reply_to":"baa201ad_1a24810b","updated":"2014-10-09 02:21:48.000000000","message":"ok, got it ,thanks","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"}],"nova/tests/api/openstack/compute/contrib/test_services.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"0220530bedaa14b847d9914476f2965f31974221","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                          self.controller.delete, request, \u0027300\u0027)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"class ServicesCellsTest(test.TestCase):"},{"line_number":553,"context_line":"    def setUp(self):"},{"line_number":554,"context_line":"        super(ServicesCellsTest, self).setUp()"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_b86868bb","line":552,"updated":"2014-09-02 07:32:49.000000000","message":"will ServicesCellsTestV2 be better ?","commit_id":"64895fd1325d1b0a9e2008298df23b0ca8bd2632"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"50e298f063dbff139a58ebb104b1efd465091a99","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"class ServicesTestV21(test.TestCase):"},{"line_number":156,"context_line":"    api_version \u003d \"2.1\""},{"line_number":157,"context_line":"    url_prefix \u003d \"/v3\""},{"line_number":158,"context_line":"    http_request \u003d fakes.HTTPRequestV3"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_bb97e546","line":157,"updated":"2014-10-09 02:28:08.000000000","message":"we should use \"/v2/fake\", Ken\u0027ichi already fix some: https://review.openstack.org/#/c/124301/2/nova/tests/api/openstack/compute/contrib/test_admin_actions.py","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"472c7fcc5964285e18929645f8c91b089feb7112","unresolved":false,"context_lines":[{"line_number":158,"context_line":"class ServicesTestV21(test.TestCase):"},{"line_number":159,"context_line":"    api_version \u003d \"2.1\""},{"line_number":160,"context_line":"    url_prefix \u003d \"/v2/fake\""},{"line_number":161,"context_line":"    http_request \u003d fakes.HTTPRequestV3"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def setUp(self):"},{"line_number":164,"context_line":"        super(ServicesTestV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_3e0a9521","line":161,"updated":"2014-10-14 05:24:07.000000000","message":"We should need this anymore as we\u0027re using v2 urls","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3f2b56995564544b686c3f2516234de45c413f5e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"class ServicesTestV21(test.TestCase):"},{"line_number":159,"context_line":"    api_version \u003d \"2.1\""},{"line_number":160,"context_line":"    url_prefix \u003d \"/v2/fake\""},{"line_number":161,"context_line":"    http_request \u003d fakes.HTTPRequestV3"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def setUp(self):"},{"line_number":164,"context_line":"        super(ServicesTestV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_9c71bf46","line":161,"in_reply_to":"baa201ad_3e0a9521","updated":"2014-10-15 01:42:25.000000000","message":"Done","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"472c7fcc5964285e18929645f8c91b089feb7112","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                       fake_db_service_update(fake_services_list))"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _process_output(self, services, detail\u003dFalse, remove_id\u003dTrue):"},{"line_number":182,"context_line":"        if self.api_version \u003d\u003d \u00272.1\u0027:"},{"line_number":183,"context_line":"            for service in services[\u0027services\u0027]:"},{"line_number":184,"context_line":"                if remove_id:"},{"line_number":185,"context_line":"                    service.pop(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_7e133d5c","line":182,"updated":"2014-10-14 05:24:07.000000000","message":"Can you explain why we need to do this only for v2.1? Isn\u0027t the API identical for v2 and v2.1 now?","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3f2b56995564544b686c3f2516234de45c413f5e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                       fake_db_service_update(fake_services_list))"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _process_output(self, services, detail\u003dFalse, remove_id\u003dTrue):"},{"line_number":182,"context_line":"        if self.api_version \u003d\u003d \u00272.1\u0027:"},{"line_number":183,"context_line":"            for service in services[\u0027services\u0027]:"},{"line_number":184,"context_line":"                if remove_id:"},{"line_number":185,"context_line":"                    service.pop(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_075565f9","line":182,"in_reply_to":"baa201ad_7e133d5c","updated":"2014-10-15 01:42:25.000000000","message":"os-extended-services-delete\nos-extended-services\n\nthose 2 extensions need to be loaded in order to make them identical\nby default, it\u0027s not loaded","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"472c7fcc5964285e18929645f8c91b089feb7112","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        pass"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def test_services_disable(self):"},{"line_number":449,"context_line":"        req \u003d self.http_request.blank(self.url_prefix + \u0027/os-services/disable\u0027)"},{"line_number":450,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027, \u0027binary\u0027: \u0027nova-compute\u0027}"},{"line_number":451,"context_line":"        res_dict \u003d self.controller.update(req, \"disable\", body)"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_be1da568","line":449,"updated":"2014-10-14 05:24:07.000000000","message":"I think all of these self.http_request can just be fakes.HTTPRequest (in fact don\u0027t need to change these lines at all)","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3f2b56995564544b686c3f2516234de45c413f5e","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        pass"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def test_services_disable(self):"},{"line_number":449,"context_line":"        req \u003d self.http_request.blank(self.url_prefix + \u0027/os-services/disable\u0027)"},{"line_number":450,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027, \u0027binary\u0027: \u0027nova-compute\u0027}"},{"line_number":451,"context_line":"        res_dict \u003d self.controller.update(req, \"disable\", body)"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_1c9dcf59","line":449,"in_reply_to":"baa201ad_be1da568","updated":"2014-10-15 01:42:25.000000000","message":"yes, done, thanks","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"472c7fcc5964285e18929645f8c91b089feb7112","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        self.controller.host_api \u003d host_api"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        self.stubs.Set(timeutils, \"utcnow\", fake_utcnow)"},{"line_number":646,"context_line":"        self.stubs.Set(timeutils, \"utcnow_ts\", fake_utcnow_ts)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        services_list \u003d []"},{"line_number":649,"context_line":"        for service in fake_services_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_1e2a317e","line":646,"updated":"2014-10-14 05:24:07.000000000","message":"I think these stubs and things below shouldn\u0027t be needed? setUp for ServicesCellsTestV20 should look after it?","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"8bacfa389198b9ffed7c96bf2121c1996ba6b0e0","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        self.controller.host_api \u003d host_api"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        self.stubs.Set(timeutils, \"utcnow\", fake_utcnow)"},{"line_number":646,"context_line":"        self.stubs.Set(timeutils, \"utcnow_ts\", fake_utcnow_ts)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        services_list \u003d []"},{"line_number":649,"context_line":"        for service in fake_services_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_070d65e8","line":646,"in_reply_to":"baa201ad_1e2a317e","updated":"2014-10-15 01:44:35.000000000","message":"correct ,removed it just now ,thx","commit_id":"dbb66eed39e88c9d6345bb2e438ddf515552b64e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d1aaac96f834d19f2d4424f2bcc8f5b8d97e7816","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import webob.exc"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from nova.api.openstack.compute.contrib import services as services_v2"},{"line_number":25,"context_line":"from nova.api.openstack.compute.plugins.v3 import services as services_v3"},{"line_number":26,"context_line":"from nova.api.openstack import extensions"},{"line_number":27,"context_line":"from nova import availability_zones"},{"line_number":28,"context_line":"from nova.compute import cells_api"}],"source_content_type":"text/x-python","patch_set":10,"id":"baa201ad_e095a733","line":25,"updated":"2014-10-15 05:14:36.000000000","message":"to identical with other api test cases, I am much prefer services_v21","commit_id":"be26beb8e7f3be893a6d552df1b8863a1243df6c"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"676e09c8da875ed025047162ca6cdf6841a3e594","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import webob.exc"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from nova.api.openstack.compute.contrib import services as services_v2"},{"line_number":25,"context_line":"from nova.api.openstack.compute.plugins.v3 import services as services_v3"},{"line_number":26,"context_line":"from nova.api.openstack import extensions"},{"line_number":27,"context_line":"from nova import availability_zones"},{"line_number":28,"context_line":"from nova.compute import cells_api"}],"source_content_type":"text/x-python","patch_set":10,"id":"baa201ad_b58d987e","line":25,"in_reply_to":"baa201ad_e095a733","updated":"2014-10-16 16:41:50.000000000","message":"ok, I can do it","commit_id":"be26beb8e7f3be893a6d552df1b8863a1243df6c"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d1aaac96f834d19f2d4424f2bcc8f5b8d97e7816","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                          body)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def test_services_with_exception(self):"},{"line_number":444,"context_line":"        # can\u0027t be used because v3 has expected errors"},{"line_number":445,"context_line":"        pass"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_services_disable(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baa201ad_2085ef06","line":444,"updated":"2014-10-15 05:14:36.000000000","message":"hi \nI don\u0027t understand why you just let this test case pass.\nI see from v3 test case:\nit uses\nself.assertRaises(webob.exc.HTTPInternalServerError,self.controller.index, req)\n\nwhy not porting this case ?","commit_id":"be26beb8e7f3be893a6d552df1b8863a1243df6c"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"676e09c8da875ed025047162ca6cdf6841a3e594","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                          body)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def test_services_with_exception(self):"},{"line_number":444,"context_line":"        # can\u0027t be used because v3 has expected errors"},{"line_number":445,"context_line":"        pass"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_services_disable(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baa201ad_75ded06e","line":444,"in_reply_to":"baa201ad_2085ef06","updated":"2014-10-16 16:41:50.000000000","message":"yes ,correct, really thanks because it\u0027s my fault \n\ntest_services_delete_not_enabled is not in v3 list \nI think I missed that part","commit_id":"be26beb8e7f3be893a6d552df1b8863a1243df6c"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b28ba9b80a019473368660607df265aa10cd472f","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class ServicesTestV21(test.TestCase):"},{"line_number":159,"context_line":"    api_version \u003d \"2.1\""},{"line_number":160,"context_line":"    url_prefix \u003d \"/v2/fake\""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def setUp(self):"},{"line_number":163,"context_line":"        super(ServicesTestV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_ad648649","line":160,"updated":"2014-10-23 07:13:58.000000000","message":"we don\u0027t need this change anymore do we?","commit_id":"d32484b47de73b2d2c7bcc42b85d69fda0979178"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"61c850ed5968d6754a4caf07d5f0197d8f9213fb","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class ServicesTestV21(test.TestCase):"},{"line_number":159,"context_line":"    api_version \u003d \"2.1\""},{"line_number":160,"context_line":"    url_prefix \u003d \"/v2/fake\""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def setUp(self):"},{"line_number":163,"context_line":"        super(ServicesTestV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_54dabae8","line":160,"in_reply_to":"9aa7fdbe_ad648649","updated":"2014-10-23 13:59:03.000000000","message":"Done","commit_id":"d32484b47de73b2d2c7bcc42b85d69fda0979178"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"b28ba9b80a019473368660607df265aa10cd472f","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def _process_output(self, services, detail\u003dFalse, remove_id\u003dTrue):"},{"line_number":181,"context_line":"        if self.api_version \u003d\u003d \u00272.1\u0027:"},{"line_number":182,"context_line":"            for service in services[\u0027services\u0027]:"},{"line_number":183,"context_line":"                if remove_id:"},{"line_number":184,"context_line":"                    service.pop(\u0027id\u0027)"},{"line_number":185,"context_line":"                if not detail:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_ad3566f8","line":182,"updated":"2014-10-23 07:13:58.000000000","message":"isn\u0027t this sort of backwards? Shouldn\u0027t we instead be adding things to the expected output for v2.1?","commit_id":"d32484b47de73b2d2c7bcc42b85d69fda0979178"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"61c850ed5968d6754a4caf07d5f0197d8f9213fb","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def _process_output(self, services, detail\u003dFalse, remove_id\u003dTrue):"},{"line_number":181,"context_line":"        if self.api_version \u003d\u003d \u00272.1\u0027:"},{"line_number":182,"context_line":"            for service in services[\u0027services\u0027]:"},{"line_number":183,"context_line":"                if remove_id:"},{"line_number":184,"context_line":"                    service.pop(\u0027id\u0027)"},{"line_number":185,"context_line":"                if not detail:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_c897eeea","line":182,"in_reply_to":"9aa7fdbe_ad3566f8","updated":"2014-10-23 13:59:03.000000000","message":"no ,actually,  those test will be used to remove id or disabled_reason since os-extended-services-delete and os-extended-services are used in v2 but not in v2.1 \nwe need to keep those tests to fit for v2","commit_id":"d32484b47de73b2d2c7bcc42b85d69fda0979178"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f856ca2f692ce487ab9492975cdcafde88dc3080","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def _process_output(self, services, detail\u003dFalse, remove_id\u003dTrue):"},{"line_number":181,"context_line":"        if self.api_version \u003d\u003d \u00272.1\u0027:"},{"line_number":182,"context_line":"            for service in services[\u0027services\u0027]:"},{"line_number":183,"context_line":"                if remove_id:"},{"line_number":184,"context_line":"                    service.pop(\u0027id\u0027)"},{"line_number":185,"context_line":"                if not detail:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa7fdbe_50c9d3aa","line":182,"in_reply_to":"9aa7fdbe_c897eeea","updated":"2014-10-24 03:13:56.000000000","message":"so the behaviour for v2.1 the behaviour of os-extended-services-delete and os-extended-services is baked into the extension. So we need for v2.1 check that the values returned are correct rather than remove them.\n\nCan\u0027t we instead remove these extra fields from the expected output for the v2 version of the tests when the two extensions are not loaded for v2?","commit_id":"d32484b47de73b2d2c7bcc42b85d69fda0979178"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"2f6cc0927ef1026b997ead1cc80173e7e09fdd97","unresolved":false,"context_lines":[{"line_number":505,"context_line":"    def test_services_disable_log_reason(self):"},{"line_number":506,"context_line":"        self.ext_mgr.extensions[\u0027os-extended-services\u0027] \u003d True"},{"line_number":507,"context_line":"        url \u003d \u0027/v2/fake/os-services/disable-log-reason\u0027"},{"line_number":508,"context_line":"        req \u003d fakes.HTTPRequest.blank(url)"},{"line_number":509,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027,"},{"line_number":510,"context_line":"                \u0027binary\u0027: \u0027nova-compute\u0027,"},{"line_number":511,"context_line":"                \u0027disabled_reason\u0027: \u0027test-reason\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8c0949_33df2e3d","line":508,"updated":"2014-11-06 07:14:28.000000000","message":"as per discussion in meeting, we can get rid of url string. just passing blank string would work here.","commit_id":"ef6b0e86423a44aef0bc1396cbfa819bf7bc61b7"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"71f613fb9274deb118cafdb82533dd5091047fdd","unresolved":false,"context_lines":[{"line_number":505,"context_line":"    def test_services_disable_log_reason(self):"},{"line_number":506,"context_line":"        self.ext_mgr.extensions[\u0027os-extended-services\u0027] \u003d True"},{"line_number":507,"context_line":"        url \u003d \u0027/v2/fake/os-services/disable-log-reason\u0027"},{"line_number":508,"context_line":"        req \u003d fakes.HTTPRequest.blank(url)"},{"line_number":509,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027,"},{"line_number":510,"context_line":"                \u0027binary\u0027: \u0027nova-compute\u0027,"},{"line_number":511,"context_line":"                \u0027disabled_reason\u0027: \u0027test-reason\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8c0949_bbee8cb2","line":508,"in_reply_to":"7a8c0949_33df2e3d","updated":"2014-11-06 15:10:25.000000000","message":"done and include all following occurance\n\nI didn\u0027t join the meeting and don\u0027t know this , thanks","commit_id":"ef6b0e86423a44aef0bc1396cbfa819bf7bc61b7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"2f6cc0927ef1026b997ead1cc80173e7e09fdd97","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    def test_mandatory_reason_field(self):"},{"line_number":519,"context_line":"        self.ext_mgr.extensions[\u0027os-extended-services\u0027] \u003d True"},{"line_number":520,"context_line":"        url \u003d \u0027/v2/fake/os-services/disable-log-reason\u0027"},{"line_number":521,"context_line":"        req \u003d fakes.HTTPRequest.blank(url)"},{"line_number":522,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027,"},{"line_number":523,"context_line":"                \u0027binary\u0027: \u0027nova-compute\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8c0949_d3ed0af1","line":520,"updated":"2014-11-06 07:14:28.000000000","message":"ditto. same for other places.","commit_id":"ef6b0e86423a44aef0bc1396cbfa819bf7bc61b7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"2f6cc0927ef1026b997ead1cc80173e7e09fdd97","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":557,"context_line":"                          self.controller.delete, req, \u0027abc\u0027)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    def test_services_delete_not_enabled(self):"},{"line_number":560,"context_line":"        # V3 don\u0027t have this test"},{"line_number":561,"context_line":"        pass"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8c0949_b3c95e7a","line":559,"updated":"2014-11-06 07:14:28.000000000","message":"we can remove this tests itself from here.","commit_id":"ef6b0e86423a44aef0bc1396cbfa819bf7bc61b7"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"71f613fb9274deb118cafdb82533dd5091047fdd","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":557,"context_line":"                          self.controller.delete, req, \u0027abc\u0027)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    def test_services_delete_not_enabled(self):"},{"line_number":560,"context_line":"        # V3 don\u0027t have this test"},{"line_number":561,"context_line":"        pass"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8c0949_9b4ab0c3","line":559,"in_reply_to":"7a8c0949_b3c95e7a","updated":"2014-11-06 15:10:25.000000000","message":"Done","commit_id":"ef6b0e86423a44aef0bc1396cbfa819bf7bc61b7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"2f6cc0927ef1026b997ead1cc80173e7e09fdd97","unresolved":false,"context_lines":[{"line_number":578,"context_line":"class ServicesTestV20(ServicesTestV21):"},{"line_number":579,"context_line":"    api_version \u003d \"2.0\""},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"    def setUp(self):"},{"line_number":582,"context_line":"        super(ServicesTestV20, self).setUp()"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        self.ext_mgr \u003d extensions.ExtensionManager()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8c0949_9391c254","line":581,"updated":"2014-11-06 07:14:28.000000000","message":"same as below comment","commit_id":"ef6b0e86423a44aef0bc1396cbfa819bf7bc61b7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"2f6cc0927ef1026b997ead1cc80173e7e09fdd97","unresolved":false,"context_lines":[{"line_number":667,"context_line":"class ServicesCellsTestV20(ServicesCellsTestV21):"},{"line_number":668,"context_line":"    api_version \u003d \u00272.0\u0027"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    def setUp(self):"},{"line_number":671,"context_line":"        super(ServicesCellsTestV20, self).setUp()"},{"line_number":672,"context_line":"        host_api \u003d cells_api.HostAPI()"},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a8c0949_53b03af4","line":670,"updated":"2014-11-06 07:14:28.000000000","message":"some duplicate code. Instead of complete setUp(), we can have different _set_up_controller() method in both class which will just set the corresponding controller before host_api stub","commit_id":"ef6b0e86423a44aef0bc1396cbfa819bf7bc61b7"}],"nova/tests/integrated/v3/api_samples/os-services/service-disable-log-put-req.json.tpl":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9808cd6706bca8011599ca5b127a2ea2a7b76a84","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"host\": \"%(host)s\","},{"line_number":3,"context_line":"    \"binary\": \"%(binary)s\","},{"line_number":4,"context_line":"    \"disabled_reason\": \"%(disabled_reason)s\""},{"line_number":5,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":8,"id":"baa201ad_1a000133","line":4,"updated":"2014-10-08 13:04:35.000000000","message":"The corresponding file ./doc/v3/api_samples/os-services/service-disable-log-put-req.json also needs to be changed.","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"89cbf1abb7c710aba345b6cf1cc0a7b71178f229","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"host\": \"%(host)s\","},{"line_number":3,"context_line":"    \"binary\": \"%(binary)s\","},{"line_number":4,"context_line":"    \"disabled_reason\": \"%(disabled_reason)s\""},{"line_number":5,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":8,"id":"baa201ad_7b0e5de6","line":4,"in_reply_to":"baa201ad_1a000133","updated":"2014-10-09 02:21:48.000000000","message":"hi the files are already has following content, I think it\u0027s right? \nso no need to change it? \n\n{\n    \"host\": \"host1\",\n    \"binary\": \"nova-compute\",\n    \"disabled_reason\": \"test2\"\n}","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"}],"nova/tests/integrated/v3/api_samples/os-services/service-disable-put-req.json.tpl":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9808cd6706bca8011599ca5b127a2ea2a7b76a84","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"host\": \"%(host)s\","},{"line_number":3,"context_line":"    \"binary\": \"%(binary)s\""},{"line_number":4,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":8,"id":"baa201ad_9a9b1117","line":3,"updated":"2014-10-08 13:04:35.000000000","message":"ditto","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"}],"nova/tests/integrated/v3/api_samples/os-services/service-enable-put-req.json.tpl":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9808cd6706bca8011599ca5b127a2ea2a7b76a84","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"host\": \"%(host)s\","},{"line_number":3,"context_line":"    \"binary\": \"%(binary)s\""},{"line_number":4,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":8,"id":"baa201ad_ba9e1505","line":3,"updated":"2014-10-08 13:04:35.000000000","message":"ditto","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"}],"nova/tests/integrated/v3/test_services.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c8676806f0ea0fc7972c30550efc63620bd1e7bf","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    ]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class FakeRequest(object):"},{"line_number":68,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":69,"context_line":"        GET \u003d {}"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_5f1dd065","line":67,"updated":"2014-09-01 15:07:26.000000000","message":"this is useless","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"321668d5a93ed8324f835311386d2c79782b7f2c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    ]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"class FakeRequest(object):"},{"line_number":68,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":69,"context_line":"        GET \u003d {}"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_672d8d46","line":67,"in_reply_to":"fa98f980_5f1dd065","updated":"2014-09-02 00:54:27.000000000","message":"Done","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c8676806f0ea0fc7972c30550efc63620bd1e7bf","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        GET \u003d {}"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class FakeRequestWithService(object):"},{"line_number":73,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":74,"context_line":"        GET \u003d {\"binary\": \"nova-compute\"}"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_9f2658b9","line":72,"updated":"2014-09-01 15:07:26.000000000","message":"ditto","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"321668d5a93ed8324f835311386d2c79782b7f2c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        GET \u003d {}"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class FakeRequestWithService(object):"},{"line_number":73,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":74,"context_line":"        GET \u003d {\"binary\": \"nova-compute\"}"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_8730b19f","line":72,"in_reply_to":"fa98f980_9f2658b9","updated":"2014-09-02 00:54:27.000000000","message":"Done","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c8676806f0ea0fc7972c30550efc63620bd1e7bf","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        GET \u003d {\"binary\": \"nova-compute\"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class FakeRequestWithHost(object):"},{"line_number":78,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":79,"context_line":"        GET \u003d {\"host\": \"host1\"}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_bf2b1c81","line":77,"updated":"2014-09-01 15:07:26.000000000","message":"ditto","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"321668d5a93ed8324f835311386d2c79782b7f2c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        GET \u003d {\"binary\": \"nova-compute\"}"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class FakeRequestWithHost(object):"},{"line_number":78,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":79,"context_line":"        GET \u003d {\"host\": \"host1\"}"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_c72ab92b","line":77,"in_reply_to":"fa98f980_bf2b1c81","updated":"2014-09-02 00:54:27.000000000","message":"Done","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c8676806f0ea0fc7972c30550efc63620bd1e7bf","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        GET \u003d {\"host\": \"host1\"}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class FakeRequestWithHostService(object):"},{"line_number":83,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":84,"context_line":"        GET \u003d {\"host\": \"host1\", \"binary\": \"nova-compute\"}"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_1f3a68cd","line":82,"updated":"2014-09-01 15:07:26.000000000","message":"ditto","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"321668d5a93ed8324f835311386d2c79782b7f2c","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        GET \u003d {\"host\": \"host1\"}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class FakeRequestWithHostService(object):"},{"line_number":83,"context_line":"        environ \u003d {\"nova.context\": context.get_admin_context()}"},{"line_number":84,"context_line":"        GET \u003d {\"host\": \"host1\", \"binary\": \"nova-compute\"}"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_071cc112","line":82,"in_reply_to":"fa98f980_1f3a68cd","updated":"2014-09-02 00:54:27.000000000","message":"Done","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c8676806f0ea0fc7972c30550efc63620bd1e7bf","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        GET \u003d {\"host\": \"host1\", \"binary\": \"nova-compute\"}"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def fake_service_get_all(services):"},{"line_number":88,"context_line":"    def service_get_all(context, filters\u003dNone, set_zones\u003dFalse):"},{"line_number":89,"context_line":"        if set_zones or \u0027availability_zone\u0027 in filters:"},{"line_number":90,"context_line":"            return availability_zones.set_availability_zones(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_64068722","line":87,"updated":"2014-09-01 15:07:26.000000000","message":"dtto","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"321668d5a93ed8324f835311386d2c79782b7f2c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        GET \u003d {\"host\": \"host1\", \"binary\": \"nova-compute\"}"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def fake_service_get_all(services):"},{"line_number":88,"context_line":"    def service_get_all(context, filters\u003dNone, set_zones\u003dFalse):"},{"line_number":89,"context_line":"        if set_zones or \u0027availability_zone\u0027 in filters:"},{"line_number":90,"context_line":"            return availability_zones.set_availability_zones(context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_67d4ad20","line":87,"in_reply_to":"fa98f980_64068722","updated":"2014-09-02 00:54:27.000000000","message":"Done","commit_id":"dc12bf5a1baafc5619f3768ff4a6d2bbf5d8082e"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"d91240a4840818a773356af9431b9551528c04df","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from nova import db"},{"line_number":17,"context_line":"from nova.openstack.common import timeutils"},{"line_number":18,"context_line":"from nova.tests.api.openstack.compute.plugins.v3 import test_services"},{"line_number":19,"context_line":"from nova.tests.integrated.v3 import api_sample_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da9df570_e65cedef","side":"PARENT","line":18,"updated":"2014-09-25 06:49:05.000000000","message":"how about import test_services from compute.contrib instead?\nThat would save having to cut and paste a bunch of code","commit_id":"10a6c6cb0bd88a05d492e29fa14af45ebeb23d9a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"44b84acc03465da4ef1d4555f93b904c41b45735","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from nova import db"},{"line_number":17,"context_line":"from nova.openstack.common import timeutils"},{"line_number":18,"context_line":"from nova.tests.api.openstack.compute.plugins.v3 import test_services"},{"line_number":19,"context_line":"from nova.tests.integrated.v3 import api_sample_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_022ccf46","side":"PARENT","line":18,"in_reply_to":"da9df570_e65cedef","updated":"2014-09-30 14:08:13.000000000","message":"yes, correct,","commit_id":"10a6c6cb0bd88a05d492e29fa14af45ebeb23d9a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9808cd6706bca8011599ca5b127a2ea2a7b76a84","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from nova import db"},{"line_number":17,"context_line":"from nova.openstack.common import timeutils"},{"line_number":18,"context_line":"from nova.tests.api.openstack.compute.contrib import test_services"},{"line_number":19,"context_line":"from nova.tests.integrated.v3 import api_sample_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_1a6ba11e","line":18,"updated":"2014-10-08 13:04:35.000000000","message":"here should not be changed because we are using v3\u0027s integrated tests for v2.1 API now.","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"290c8e75ffa00f4bfec2b19c581e093f9635870d","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from nova import db"},{"line_number":17,"context_line":"from nova.openstack.common import timeutils"},{"line_number":18,"context_line":"from nova.tests.api.openstack.compute.contrib import test_services"},{"line_number":19,"context_line":"from nova.tests.integrated.v3 import api_sample_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baa201ad_7da4a7b9","line":18,"in_reply_to":"baa201ad_1a6ba11e","updated":"2014-10-08 13:23:53.000000000","message":"don\u0027t fully understand here ...\n\nthe v3/test_services should be removed later, right? \nso how can I do the test? thanks a lot","commit_id":"7fa376af55552bdbd92137f396adce48858ecda9"}],"nova/tests/unit/api/openstack/compute/contrib/test_services.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d457fbcb5cf1c722aaabdef4da0fb1bc19996c4","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class ServicesTestV21(test.TestCase):"},{"line_number":159,"context_line":"    api_version \u003d \"2.1\""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _set_up_controller(self):"},{"line_number":162,"context_line":"        self.controller \u003d services_v21.ServiceController()"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_42f61f5e","line":159,"updated":"2014-11-18 05:28:59.000000000","message":"To be honest, I don\u0027t prefer this api_version because it would be unreadable when we remove v2.0 API tests in the future.\n\nSo I\u0027d like to suggest the way for avoiding api_version on the following.","commit_id":"862b16bc5255cb03a5293e25c0c03e9b1f130953"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d457fbcb5cf1c722aaabdef4da0fb1bc19996c4","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    service.pop(\u0027disabled_reason\u0027)"},{"line_number":187,"context_line":"                if not has_id:"},{"line_number":188,"context_line":"                    service.pop(\u0027id\u0027)"},{"line_number":189,"context_line":"        return services"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_services_list(self):"},{"line_number":192,"context_line":"        req \u003d FakeRequest()"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_62bf9b61","line":189,"updated":"2014-11-18 05:28:59.000000000","message":"How about defining _process_output() on each test class.\nFor example, on ServicesTestV21 class\n\n def _process_output(self, services, has_disabled\u003dFalse, has_id\u003dFalse):\n     return services\n\nand on ServicesTestV2 class\n\n def _process_output(self, services, has_disabled\u003dFalse, has_id\u003dFalse):\n     for service in services[\u0027services\u0027]:\n         if not has_disabled:\n             service.pop(\u0027disabled_reason\u0027)\n         if not has_id:\n             service.pop(\u0027id\u0027)\n     return services","commit_id":"862b16bc5255cb03a5293e25c0c03e9b1f130953"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"66c256231a54951a7e67d47c6d487ac495d94a07","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    service.pop(\u0027disabled_reason\u0027)"},{"line_number":187,"context_line":"                if not has_id:"},{"line_number":188,"context_line":"                    service.pop(\u0027id\u0027)"},{"line_number":189,"context_line":"        return services"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_services_list(self):"},{"line_number":192,"context_line":"        req \u003d FakeRequest()"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_a1087829","line":189,"in_reply_to":"5a890539_62bf9b61","updated":"2014-11-19 01:55:11.000000000","message":"Done","commit_id":"862b16bc5255cb03a5293e25c0c03e9b1f130953"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d457fbcb5cf1c722aaabdef4da0fb1bc19996c4","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                                                     tzinfo\u003dutc)}]}"},{"line_number":652,"context_line":"        if self.api_version \u003d\u003d \u00272.1\u0027:"},{"line_number":653,"context_line":"            for res in res_dict[\u0027services\u0027]:"},{"line_number":654,"context_line":"                res.pop(\u0027disabled_reason\u0027)"},{"line_number":655,"context_line":"        self.assertEqual(res_dict, response)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_c26f6ffa","line":654,"updated":"2014-11-18 05:28:59.000000000","message":"I think we can apply the same way here also.","commit_id":"862b16bc5255cb03a5293e25c0c03e9b1f130953"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"66c256231a54951a7e67d47c6d487ac495d94a07","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                                                     tzinfo\u003dutc)}]}"},{"line_number":652,"context_line":"        if self.api_version \u003d\u003d \u00272.1\u0027:"},{"line_number":653,"context_line":"            for res in res_dict[\u0027services\u0027]:"},{"line_number":654,"context_line":"                res.pop(\u0027disabled_reason\u0027)"},{"line_number":655,"context_line":"        self.assertEqual(res_dict, response)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_81629cab","line":654,"in_reply_to":"5a890539_c26f6ffa","updated":"2014-11-19 01:55:11.000000000","message":"Done","commit_id":"862b16bc5255cb03a5293e25c0c03e9b1f130953"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        self.stubs.Set(db, \"service_update\", _service_update)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027, \u0027binary\u0027: \u0027nova-compute\u0027}"},{"line_number":452,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        res_dict \u003d self.controller.update(req, \"enable\", body)"},{"line_number":455,"context_line":"        self.assertEqual(res_dict[\u0027service\u0027][\u0027status\u0027], \u0027enabled\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_a4788190","line":452,"updated":"2014-11-19 07:18:39.000000000","message":"Sorry for missing here in my previous review.\nI can understand we can remove this URL actually but that seems out of scope from this patch because that is a kind of cleanup or something.\nso to review this patch easily, it would be better to avoid this change.","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"91a51f1e818ad8036521bab8cbb288b7ccb66031","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        self.stubs.Set(db, \"service_update\", _service_update)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027, \u0027binary\u0027: \u0027nova-compute\u0027}"},{"line_number":452,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        res_dict \u003d self.controller.update(req, \"enable\", body)"},{"line_number":455,"context_line":"        self.assertEqual(res_dict[\u0027service\u0027][\u0027status\u0027], \u0027enabled\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_4457dd26","line":452,"in_reply_to":"5a890539_a4788190","updated":"2014-11-21 09:19:05.000000000","message":"ok, I can make another patch based on it , thanks","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def test_services_enable_with_invalid_host(self):"},{"line_number":459,"context_line":"        body \u003d {\u0027host\u0027: \u0027invalid\u0027, \u0027binary\u0027: \u0027nova-compute\u0027}"},{"line_number":460,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":461,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":462,"context_line":"                          self.controller.update,"},{"line_number":463,"context_line":"                          req,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_e47289ac","line":460,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_services_enable_with_invalid_binary(self):"},{"line_number":468,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027, \u0027binary\u0027: \u0027invalid\u0027}"},{"line_number":469,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":470,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":471,"context_line":"                          self.controller.update,"},{"line_number":472,"context_line":"                          req,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_046795eb","line":469,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                          body)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def test_services_disable(self):"},{"line_number":477,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":478,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027, \u0027binary\u0027: \u0027nova-compute\u0027}"},{"line_number":479,"context_line":"        res_dict \u003d self.controller.update(req, \"disable\", body)"},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_44619dd2","line":477,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    def test_services_disable_with_invalid_host(self):"},{"line_number":485,"context_line":"        body \u003d {\u0027host\u0027: \u0027invalid\u0027, \u0027binary\u0027: \u0027nova-compute\u0027}"},{"line_number":486,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":487,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":488,"context_line":"                          self.controller.update,"},{"line_number":489,"context_line":"                          req,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_645e9914","line":486,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def test_services_disable_with_invalid_binary(self):"},{"line_number":494,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027, \u0027binary\u0027: \u0027invalid\u0027}"},{"line_number":495,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":496,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":497,"context_line":"                          self.controller.update,"},{"line_number":498,"context_line":"                          req,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_849aa5c3","line":495,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def test_services_disable_log_reason(self):"},{"line_number":503,"context_line":"        self.ext_mgr.extensions[\u0027os-extended-services\u0027] \u003d True"},{"line_number":504,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":505,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027,"},{"line_number":506,"context_line":"                \u0027binary\u0027: \u0027nova-compute\u0027,"},{"line_number":507,"context_line":"                \u0027disabled_reason\u0027: \u0027test-reason\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_a49fa1b3","line":504,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def test_mandatory_reason_field(self):"},{"line_number":515,"context_line":"        self.ext_mgr.extensions[\u0027os-extended-services\u0027] \u003d True"},{"line_number":516,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027)"},{"line_number":517,"context_line":"        body \u003d {\u0027host\u0027: \u0027host1\u0027,"},{"line_number":518,"context_line":"                \u0027binary\u0027: \u0027nova-compute\u0027,"},{"line_number":519,"context_line":"               }"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_c4a4ad0a","line":516,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":531,"context_line":"    def test_services_delete(self):"},{"line_number":532,"context_line":"        self.ext_mgr.extensions[\u0027os-extended-services-delete\u0027] \u003d True"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"        request \u003d fakes.HTTPRequest.blank(\u0027\u0027, use_admin_context\u003dTrue)"},{"line_number":535,"context_line":"        request.method \u003d \u0027DELETE\u0027"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        with mock.patch.object(self.controller.host_api,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_e4a9a9e0","line":534,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":544,"context_line":"    def test_services_delete_not_found(self):"},{"line_number":545,"context_line":"        self.ext_mgr.extensions[\u0027os-extended-services-delete\u0027] \u003d True"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, use_admin_context\u003dTrue)"},{"line_number":548,"context_line":"        req.method \u003d \u0027DELETE\u0027"},{"line_number":549,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":550,"context_line":"                          self.controller.delete, req, \u0027abc\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_04aeb5e7","line":547,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fe051228ef71ce0c3f0e5dc0a20c0fa07e71eb4a","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        self.controller \u003d services_v2.ServiceController(self.ext_mgr)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def test_services_delete_not_enabled(self):"},{"line_number":570,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027\u0027, use_admin_context\u003dTrue)"},{"line_number":571,"context_line":"        req.method \u003d \u0027DELETE\u0027"},{"line_number":572,"context_line":"        self.assertRaises(webob.exc.HTTPMethodNotAllowed,"},{"line_number":573,"context_line":"                          self.controller.delete, req, \u0027300\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_24abb1d7","line":570,"updated":"2014-11-19 07:18:39.000000000","message":"ditto","commit_id":"5ff862273d95645c0e870bca156d9a66f1ad0681"}]}
