)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2170,"name":"Dave Lapsley","email":"david.lapsley@metacloud.com","username":"dlapsley"},"change_message_id":"30099151df5071e51b483421f0e7fd5d43827495","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Eli Qiao \u003ctaget@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-19 10:21:32 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add api microvesion unit test case for wsgi.action"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add unit test case of combination of @wsgi.Controller.api_version"},{"line_number":10,"context_line":"and @wsgi.action which can be a good sample for add new action extensions for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a961159_0a789ebf","line":7,"updated":"2015-01-19 05:17:11.000000000","message":"typo: s/microvesion/microversion/","commit_id":"6adfdec87d5faf9a2493784a257f6316ce9600e2"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"f3bd1cc4646291027a90ec966997bb7b10adf62e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Eli Qiao \u003ctaget@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-19 10:21:32 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add api microvesion unit test case for wsgi.action"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add unit test case of combination of @wsgi.Controller.api_version"},{"line_number":10,"context_line":"and @wsgi.action which can be a good sample for add new action extensions for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"da86d52c_350d8938","line":7,"in_reply_to":"3a961159_0a789ebf","updated":"2015-02-16 05:56:53.000000000","message":"Done","commit_id":"6adfdec87d5faf9a2493784a257f6316ce9600e2"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"30482f17697a439b91419cb059923aec05365b99","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add api microvesion unit test case for wsgi.action"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add unit test case of combination of @wsgi.Controller.api_version"},{"line_number":10,"context_line":"and @wsgi.action which can be a good sample for add new action extensions for"},{"line_number":11,"context_line":"microversion"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a930d6b_bca46d4b","line":9,"updated":"2015-01-26 23:20:38.000000000","message":"s/add/adds/","commit_id":"6adfdec87d5faf9a2493784a257f6316ce9600e2"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"f3bd1cc4646291027a90ec966997bb7b10adf62e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add api microvesion unit test case for wsgi.action"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add unit test case of combination of @wsgi.Controller.api_version"},{"line_number":10,"context_line":"and @wsgi.action which can be a good sample for add new action extensions for"},{"line_number":11,"context_line":"microversion"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"da86d52c_55111d52","line":9,"in_reply_to":"1a930d6b_bca46d4b","updated":"2015-02-16 05:56:53.000000000","message":"Done","commit_id":"6adfdec87d5faf9a2493784a257f6316ce9600e2"}],"nova/tests/unit/api/openstack/compute/test_microversions.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"d54f2c86edbd24c9f20a2413c28670fe25280897","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    @mock.patch(\"nova.api.openstack.APIRouterV21.api_extension_namespace\","},{"line_number":243,"context_line":"                return_value\u003d\u0027nova.api.v3.test_extensions\u0027)"},{"line_number":244,"context_line":"    def test_microversions_schema_second_version(self, mock_namespace,"},{"line_number":245,"context_line":"                                                       mock_maxver):"},{"line_number":246,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"3.3\")"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_05a036a4","side":"PARENT","line":245,"updated":"2014-12-31 21:07:41.000000000","message":"not related","commit_id":"d21e5dc94d3d82e2232d7d074d744db51b7b8561"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4156a7883337da2b083c9d154a240941294e9a9e","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    @mock.patch(\"nova.api.openstack.APIRouterV21.api_extension_namespace\","},{"line_number":243,"context_line":"                return_value\u003d\u0027nova.api.v3.test_extensions\u0027)"},{"line_number":244,"context_line":"    def test_microversions_schema_second_version(self, mock_namespace,"},{"line_number":245,"context_line":"                                                       mock_maxver):"},{"line_number":246,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"3.3\")"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_7d76dfd9","side":"PARENT","line":245,"in_reply_to":"3a961159_05a036a4","updated":"2015-01-04 02:19:42.000000000","message":"hmm...","commit_id":"d21e5dc94d3d82e2232d7d074d744db51b7b8561"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"d54f2c86edbd24c9f20a2413c28670fe25280897","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                                   mock_maxver):"},{"line_number":267,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"2.3\")"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"},{"line_number":270,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/microversions3/1/action\u0027)"},{"line_number":271,"context_line":"        req.headers \u003d {\u0027X-OpenStack-Compute-API-Version\u0027: \u00272.1\u0027}"},{"line_number":272,"context_line":"        req.environ[\u0027CONTENT_TYPE\u0027] \u003d \"application/json\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_e5988a77","line":269,"updated":"2014-12-31 21:07:41.000000000","message":"maybe create app at setUp function will be better?","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4156a7883337da2b083c9d154a240941294e9a9e","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                                   mock_maxver):"},{"line_number":267,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"2.3\")"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"},{"line_number":270,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/microversions3/1/action\u0027)"},{"line_number":271,"context_line":"        req.headers \u003d {\u0027X-OpenStack-Compute-API-Version\u0027: \u00272.1\u0027}"},{"line_number":272,"context_line":"        req.environ[\u0027CONTENT_TYPE\u0027] \u003d \"application/json\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_fd62cf14","line":269,"in_reply_to":"3a961159_e5988a77","updated":"2015-01-04 02:19:42.000000000","message":"yeah? that is good point.\n\nhi jichenjc , I\u0027v considered that share the code, but see lots of previous code of chris, I need to do lots of refactor of \u0027his\u0027 test cases,  do it in this patch( mix new cases added and code refactor together ??)","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"695982e4ee31976324072175f0e9ec4c3fb1dd9e","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                                   mock_maxver):"},{"line_number":267,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"2.3\")"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"},{"line_number":270,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/microversions3/1/action\u0027)"},{"line_number":271,"context_line":"        req.headers \u003d {\u0027X-OpenStack-Compute-API-Version\u0027: \u00272.1\u0027}"},{"line_number":272,"context_line":"        req.environ[\u0027CONTENT_TYPE\u0027] \u003d \"application/json\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_2f47be78","line":269,"in_reply_to":"3a961159_fd62cf14","updated":"2015-01-04 04:52:45.000000000","message":"I tried in my test environment, it doesn\u0027t work,\nI guess app should be in a mock environment(line 263).\nbesides, that is another patch to share all these apps ,  out of this patch\u0027s scope.","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"d54f2c86edbd24c9f20a2413c28670fe25280897","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"},{"line_number":289,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/microversions3/1/action\u0027)"},{"line_number":290,"context_line":"        req.headers \u003d {\u0027X-OpenStack-Compute-API-Version\u0027: \u00272.3\u0027}"},{"line_number":291,"context_line":"        req.environ[\u0027CONTENT_TYPE\u0027] \u003d \"application/json\""},{"line_number":292,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":293,"context_line":"        req.body \u003d jsonutils.dumps({\u0027foo\u0027: None})"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_a5c3e237","line":290,"updated":"2014-12-31 21:07:41.000000000","message":"only a question: thanks\n\nwe mocked max version as 2.3 and we still set it as 2.3 at above line\nso it will pass the check ?\n\nor it because max is 2.2 here? \n @wsgi.Controller.api_version(\"2.1\", \"2.2\")\n@wsgi.response(202)\n@wsgi.action(\u0027foo\u0027)\ndef _foo(self, req, id, body):\npass","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4156a7883337da2b083c9d154a240941294e9a9e","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"},{"line_number":289,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/microversions3/1/action\u0027)"},{"line_number":290,"context_line":"        req.headers \u003d {\u0027X-OpenStack-Compute-API-Version\u0027: \u00272.3\u0027}"},{"line_number":291,"context_line":"        req.environ[\u0027CONTENT_TYPE\u0027] \u003d \"application/json\""},{"line_number":292,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":293,"context_line":"        req.body \u003d jsonutils.dumps({\u0027foo\u0027: None})"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_dd7b53bc","line":290,"in_reply_to":"3a961159_70ad369b","updated":"2015-01-04 02:19:42.000000000","message":"thanks alex.\n2.3 is out of (\"2.1\", \"2.2\"), so it should be 404","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"095dc4245fb3a7f3088cdf5764fd47f3c5805d81","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        app \u003d fakes.wsgi_app_v21(init_only\u003d\u0027test-microversions\u0027)"},{"line_number":289,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/microversions3/1/action\u0027)"},{"line_number":290,"context_line":"        req.headers \u003d {\u0027X-OpenStack-Compute-API-Version\u0027: \u00272.3\u0027}"},{"line_number":291,"context_line":"        req.environ[\u0027CONTENT_TYPE\u0027] \u003d \"application/json\""},{"line_number":292,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":293,"context_line":"        req.body \u003d jsonutils.dumps({\u0027foo\u0027: None})"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_70ad369b","line":290,"in_reply_to":"3a961159_a5c3e237","updated":"2015-01-01 02:58:44.000000000","message":"yes, this test max version at \"wsgi.Controller.api_version(\"2.1\", \"2.2\")\"","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"d54f2c86edbd24c9f20a2413c28670fe25280897","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        req.body \u003d jsonutils.dumps({\u0027foo\u0027: None})"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        res \u003d req.get_response(app)"},{"line_number":314,"context_line":"        self.assertEqual(202, res.status_int)"},{"line_number":315,"context_line":"        self.assertEqual(\"2.1\","},{"line_number":316,"context_line":"                         res.headers[\u0027X-OpenStack-Compute-API-Version\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_857a6623","line":314,"updated":"2014-12-31 21:07:41.000000000","message":"the above cases are almost identical except some key value \ncan we consolidate them to make code cleaner and \neasy for expand the test cases?","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"095dc4245fb3a7f3088cdf5764fd47f3c5805d81","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        req.body \u003d jsonutils.dumps({\u0027foo\u0027: None})"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        res \u003d req.get_response(app)"},{"line_number":314,"context_line":"        self.assertEqual(202, res.status_int)"},{"line_number":315,"context_line":"        self.assertEqual(\"2.1\","},{"line_number":316,"context_line":"                         res.headers[\u0027X-OpenStack-Compute-API-Version\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_d0c6ea67","line":314,"in_reply_to":"3a961159_857a6623","updated":"2015-01-01 02:58:44.000000000","message":"+1, better to share some code.","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4156a7883337da2b083c9d154a240941294e9a9e","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        req.body \u003d jsonutils.dumps({\u0027foo\u0027: None})"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        res \u003d req.get_response(app)"},{"line_number":314,"context_line":"        self.assertEqual(202, res.status_int)"},{"line_number":315,"context_line":"        self.assertEqual(\"2.1\","},{"line_number":316,"context_line":"                         res.headers[\u0027X-OpenStack-Compute-API-Version\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_dda4334d","line":314,"in_reply_to":"3a961159_d0c6ea67","updated":"2015-01-04 02:19:42.000000000","message":"hi jichenjc and Alex, I\u0027v considered that share the code, but see lots of previous code of chris, I need to do lots of refactor of \u0027his\u0027 test cases,  do it in this patch( mix new cases added and code refactor together ??)","commit_id":"5490c028a942fe6525d0b5c4ef478a8d96564a6e"},{"author":{"_account_id":2170,"name":"Dave Lapsley","email":"david.lapsley@metacloud.com","username":"dlapsley"},"change_message_id":"30099151df5071e51b483421f0e7fd5d43827495","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def test_microversions_actions(self, mock_namespace,"},{"line_number":288,"context_line":"                                   mock_maxver):"},{"line_number":289,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"2.3\")"},{"line_number":290,"context_line":"        self._test_microversions_actions(202, \"2.1\", req_header\u003d\"2.1\")"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    @mock.patch(\"nova.api.openstack.api_version_request.max_api_version\")"},{"line_number":293,"context_line":"    @mock.patch(\"nova.api.openstack.APIRouterV21.api_extension_namespace\","}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_2a31da0a","line":290,"updated":"2015-01-19 05:17:11.000000000","message":"This is a really minor thing. In almost every unit test I see, the assertX() statement is contained within the actual unit test itself. Because of your _test_microversions_actions -\u003e _test_microversions() abstraction, your assert is buried two levels down in the code. At first glance at the unit test, someone might wonder whether there are any asserts. I wonder if it is worth having the two _test_XXX() functions return a code (boolean is fine) to indicate pass/fail and then assert on that code at the end of the top level functions.\n\nJust something to think about.","commit_id":"6adfdec87d5faf9a2493784a257f6316ce9600e2"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"f3bd1cc4646291027a90ec966997bb7b10adf62e","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def test_microversions_actions(self, mock_namespace,"},{"line_number":288,"context_line":"                                   mock_maxver):"},{"line_number":289,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"2.3\")"},{"line_number":290,"context_line":"        self._test_microversions_actions(202, \"2.1\", req_header\u003d\"2.1\")"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    @mock.patch(\"nova.api.openstack.api_version_request.max_api_version\")"},{"line_number":293,"context_line":"    @mock.patch(\"nova.api.openstack.APIRouterV21.api_extension_namespace\","}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_9549d562","line":290,"in_reply_to":"3a961159_2a31da0a","updated":"2015-02-16 05:56:53.000000000","message":"hi Dave , thanks for the reviewing.\nyes, you are right, _test_microversions contains assert in the function body, and because I\u0027d like to return the response of request for future testing, please my dependency patch.https://review.openstack.org/141983","commit_id":"6adfdec87d5faf9a2493784a257f6316ce9600e2"}],"nova/tests/unit/api/openstack/compute/test_plugins/microversions.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"d5650a6f42dfef9070c85d2ce4a2583a048744b2","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    @wsgi.Controller.api_version(\"2.1\", \"2.2\")"},{"line_number":77,"context_line":"    @wsgi.response(202)"},{"line_number":78,"context_line":"    @wsgi.action(\u0027foo\u0027)"},{"line_number":79,"context_line":"    def _foo(self, req, id, body):"},{"line_number":80,"context_line":"        pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_189e1a55","line":79,"updated":"2015-03-17 04:52:37.000000000","message":"maybe better to return something known here just to ensure it is all working correctly and the data is being passed back correctly","commit_id":"c76f64836f9b9c6586241196a560bac958df84fb"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d653b0f200be633a2441f3adc4400b137c32cfea","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    @wsgi.Controller.api_version(\"2.1\", \"2.2\")"},{"line_number":77,"context_line":"    @wsgi.response(202)"},{"line_number":78,"context_line":"    @wsgi.action(\u0027foo\u0027)"},{"line_number":79,"context_line":"    def _foo(self, req, id, body):"},{"line_number":80,"context_line":"        pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_1b3534db","line":79,"in_reply_to":"9a80dd14_189e1a55","updated":"2015-03-17 05:10:30.000000000","message":"yeah? good point?will update it soon?thanks  for reviewing chris","commit_id":"c76f64836f9b9c6586241196a560bac958df84fb"}]}
