)]}'
{"tempest/api/identity/admin/test_roles.py":[{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"743815afd41846029d3e14974024eeb8abe77e59","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":77,"context_line":"    def test_get_role_by_id(self):"},{"line_number":78,"context_line":"        # Get a role by its id"},{"line_number":79,"context_line":"        self.data.setup_test_role"},{"line_number":80,"context_line":"        role_id \u003d self.data.role[\u0027id\u0027]"},{"line_number":81,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":82,"context_line":"        resp, body \u003d self.client.get_role(role_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVX%2F%2FvHA%3D","line":79,"updated":"2014-02-28 17:18:30.000000000","message":"This is missing (). I think the only reason the next line does not get an error is that a previous test called setup_test_role which has the side effect of setting self.role.","commit_id":"8a7a2f2222aa62aaee50a54b0dd1cab5ddbb6264"},{"author":{"_account_id":7827,"name":"Zhang Gong","email":"gong.zhang.bj@gmail.com","username":"zhanggbj"},"change_message_id":"f1910d20e0cfa970ae0996ca8835fa74c24214a8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":77,"context_line":"    def test_get_role_by_id(self):"},{"line_number":78,"context_line":"        # Get a role by its id"},{"line_number":79,"context_line":"        self.data.setup_test_role"},{"line_number":80,"context_line":"        role_id \u003d self.data.role[\u0027id\u0027]"},{"line_number":81,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":82,"context_line":"        resp, body \u003d self.client.get_role(role_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2F9ao%3D","line":79,"in_reply_to":"AAAAVX%2F%2FvHA%3D","updated":"2014-03-03 06:45:00.000000000","message":"Thank you very much for your review. This is really a stupid error due to my carelessness. I\u0027ll fix it in next patch.","commit_id":"8a7a2f2222aa62aaee50a54b0dd1cab5ddbb6264"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ef9f995463761ebb920be3ba95c146d59cccd54a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":82,"context_line":"        resp, body \u003d self.client.get_role(role_id)"},{"line_number":83,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":84,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":85,"context_line":"        self.assertEqual(role_id, body[\u0027id\u0027])"},{"line_number":86,"context_line":"        self.assertEqual(role_name, body[\u0027name\u0027])"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FNkc%3D","line":84,"updated":"2014-03-07 15:58:11.000000000","message":"You could be more precise than this. I know other Keystone tests are vague regarding return code, but I don\u0027t understand why...","commit_id":"8abaf43759001d8b9a2bb3c56a52fc51751c3da7"},{"author":{"_account_id":7827,"name":"Zhang Gong","email":"gong.zhang.bj@gmail.com","username":"zhanggbj"},"change_message_id":"91ade12a7ddd54d70d1ca85348d9f3a788b0a343","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":82,"context_line":"        resp, body \u003d self.client.get_role(role_id)"},{"line_number":83,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":84,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":85,"context_line":"        self.assertEqual(role_id, body[\u0027id\u0027])"},{"line_number":86,"context_line":"        self.assertEqual(role_name, body[\u0027name\u0027])"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2B7bQ%3D","line":84,"in_reply_to":"AAAAVn%2F%2FNkc%3D","updated":"2014-03-11 08:33:36.000000000","message":"Thank you for your review. I checked the response codes from this link http://api.openstack.org/api-ref-identity.html.It shows the normal response codes for getting a role by its id is 202,203, so I think it is better to use startswith.","commit_id":"8abaf43759001d8b9a2bb3c56a52fc51751c3da7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1d7f3dca4a7dc75f8dd94c3f4cd6a8498d0af659","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":84,"context_line":"        resp, body \u003d self.client.get_role(role_id)"},{"line_number":85,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":86,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":87,"context_line":"        self.assertEqual(role_id, body[\u0027id\u0027])"},{"line_number":88,"context_line":"        self.assertEqual(role_name, body[\u0027name\u0027])"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FYwQ%3D","line":86,"updated":"2014-03-18 07:58:47.000000000","message":"Can\u0027t we specify right resp.status code like test_remove_user_role()?","commit_id":"39b493ef7a71b2b7c6ac456c1de601859ac9e5e3"},{"author":{"_account_id":7827,"name":"Zhang Gong","email":"gong.zhang.bj@gmail.com","username":"zhanggbj"},"change_message_id":"f92ba6c0f512050a89c58f3d0c4d8ca53861e606","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":84,"context_line":"        resp, body \u003d self.client.get_role(role_id)"},{"line_number":85,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":86,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":87,"context_line":"        self.assertEqual(role_id, body[\u0027id\u0027])"},{"line_number":88,"context_line":"        self.assertEqual(role_name, body[\u0027name\u0027])"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FYTU%3D","line":86,"in_reply_to":"AAAAWH%2F%2FYfM%3D","updated":"2014-03-18 09:01:20.000000000","message":"If Tempest does not consider 203 situation as you mentioned, I think we should be more strict with the resp code. I\u0027ll fix it in next patch. Thank you!","commit_id":"39b493ef7a71b2b7c6ac456c1de601859ac9e5e3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9307b5344b595ef3cf87ae42467a97f55e40705d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":84,"context_line":"        resp, body \u003d self.client.get_role(role_id)"},{"line_number":85,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":86,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":87,"context_line":"        self.assertEqual(role_id, body[\u0027id\u0027])"},{"line_number":88,"context_line":"        self.assertEqual(role_name, body[\u0027name\u0027])"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FYfM%3D","line":86,"in_reply_to":"AAAAWH%2F%2FYmU%3D","updated":"2014-03-18 08:41:04.000000000","message":"HTTP203 is \"Non-Authoritative Information\", I think why this status in described in API docs is that the writer considered the environments including an internal https proxy.\n\nIn most environments including a https proxy, ssl keys would be generated in private. The status code would be 203. In Nova API tests of Tempest, there is same kind of tests(203 also is describled in API docs) and they check status code(200, etc) strictly without 203.\n\nSo current Tempest does not consider 203 situation. I\u0027m not sure we should consider the situation in Tempest now.\n\nIf you need to consider the situation, it is nice to check status code for 200 and 203 like\n\n self.assertIn(resp.status, (200, 203))","commit_id":"39b493ef7a71b2b7c6ac456c1de601859ac9e5e3"},{"author":{"_account_id":7827,"name":"Zhang Gong","email":"gong.zhang.bj@gmail.com","username":"zhanggbj"},"change_message_id":"003eab17f3e6b4bcb856c7244f5f9ff2c5ca46b0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        role_name \u003d self.data.role[\u0027name\u0027]"},{"line_number":84,"context_line":"        resp, body \u003d self.client.get_role(role_id)"},{"line_number":85,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":86,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":87,"context_line":"        self.assertEqual(role_id, body[\u0027id\u0027])"},{"line_number":88,"context_line":"        self.assertEqual(role_name, body[\u0027name\u0027])"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FYmU%3D","line":86,"in_reply_to":"AAAAWH%2F%2FYwQ%3D","updated":"2014-03-18 08:26:02.000000000","message":"Thank you very much for your review?About it\u0027s response code, I checked the openstack API. It shows when to get a role detailed information by v2.0/OS-KSADM/roles/?{roleId}?, the normal response codes are 200,203. (http://api.openstack.org/api-ref-identity.html) So I think it is better to keep using startswith(\u00272\u0027). What do you think about it?","commit_id":"39b493ef7a71b2b7c6ac456c1de601859ac9e5e3"}],"tempest/api/identity/admin/test_services.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ef9f995463761ebb920be3ba95c146d59cccd54a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        name \u003d data_utils.rand_name(\u0027service-\u0027)"},{"line_number":72,"context_line":"        type \u003d data_utils.rand_name(\u0027type--\u0027)"},{"line_number":73,"context_line":"        resp, service \u003d self.client.create_service(name, type)"},{"line_number":74,"context_line":"        self.assertFalse(service[\u0027id\u0027] is None)"},{"line_number":75,"context_line":"        self.addCleanup(self._del_service, service[\u0027id\u0027])"},{"line_number":76,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":77,"context_line":"        self.assertIn(\u0027id\u0027, service)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FNmw%3D","line":74,"updated":"2014-03-07 15:58:11.000000000","message":"You could be more precise than that.","commit_id":"8abaf43759001d8b9a2bb3c56a52fc51751c3da7"},{"author":{"_account_id":7827,"name":"Zhang Gong","email":"gong.zhang.bj@gmail.com","username":"zhanggbj"},"change_message_id":"91ade12a7ddd54d70d1ca85348d9f3a788b0a343","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        name \u003d data_utils.rand_name(\u0027service-\u0027)"},{"line_number":72,"context_line":"        type \u003d data_utils.rand_name(\u0027type--\u0027)"},{"line_number":73,"context_line":"        resp, service \u003d self.client.create_service(name, type)"},{"line_number":74,"context_line":"        self.assertFalse(service[\u0027id\u0027] is None)"},{"line_number":75,"context_line":"        self.addCleanup(self._del_service, service[\u0027id\u0027])"},{"line_number":76,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":77,"context_line":"        self.assertIn(\u0027id\u0027, service)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2B7cI%3D","line":74,"in_reply_to":"AAAAVn%2F%2FNmw%3D","updated":"2014-03-11 08:33:36.000000000","message":"Thank you for your review. I understand you mean it need more detailed comparison for id, but id is created randomly during creation, there\u0027s no way to do it like name and type. And I also find this is duplicate with line #77, so I may remove it.","commit_id":"8abaf43759001d8b9a2bb3c56a52fc51751c3da7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ef9f995463761ebb920be3ba95c146d59cccd54a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        resp, service \u003d self.client.create_service(name, type)"},{"line_number":74,"context_line":"        self.assertFalse(service[\u0027id\u0027] is None)"},{"line_number":75,"context_line":"        self.addCleanup(self._del_service, service[\u0027id\u0027])"},{"line_number":76,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":77,"context_line":"        self.assertIn(\u0027id\u0027, service)"},{"line_number":78,"context_line":"        self.assertIn(\u0027name\u0027, service)"},{"line_number":79,"context_line":"        self.assertEqual(name, service[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FNms%3D","line":76,"updated":"2014-03-07 15:58:11.000000000","message":"You could be more precise than that.","commit_id":"8abaf43759001d8b9a2bb3c56a52fc51751c3da7"},{"author":{"_account_id":7827,"name":"Zhang Gong","email":"gong.zhang.bj@gmail.com","username":"zhanggbj"},"change_message_id":"91ade12a7ddd54d70d1ca85348d9f3a788b0a343","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        resp, service \u003d self.client.create_service(name, type)"},{"line_number":74,"context_line":"        self.assertFalse(service[\u0027id\u0027] is None)"},{"line_number":75,"context_line":"        self.addCleanup(self._del_service, service[\u0027id\u0027])"},{"line_number":76,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":77,"context_line":"        self.assertIn(\u0027id\u0027, service)"},{"line_number":78,"context_line":"        self.assertIn(\u0027name\u0027, service)"},{"line_number":79,"context_line":"        self.assertEqual(name, service[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2B7b0%3D","line":76,"in_reply_to":"AAAAVn%2F%2FNms%3D","updated":"2014-03-11 08:33:36.000000000","message":"yes, I\u0027ll fix it in next patch.","commit_id":"8abaf43759001d8b9a2bb3c56a52fc51751c3da7"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"90ce3b288c80a812245f40133bf17c5c1e514303","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        resp, service \u003d self.client.create_service(name, type)"},{"line_number":75,"context_line":"        self.assertIn(\u0027id\u0027, service)"},{"line_number":76,"context_line":"        self.addCleanup(self._del_service, service[\u0027id\u0027])"},{"line_number":77,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":78,"context_line":"        self.assertIn(\u0027name\u0027, service)"},{"line_number":79,"context_line":"        self.assertEqual(name, service[\u0027name\u0027])"},{"line_number":80,"context_line":"        self.assertIn(\u0027type\u0027, service)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2F3uM%3D","line":77,"updated":"2014-03-13 08:58:49.000000000","message":"please exchange line 76 and 77 to make sure service create is successful when addCleanup","commit_id":"1a53947ca656965ba4ec542d5f35e284d86604f3"},{"author":{"_account_id":7827,"name":"Zhang Gong","email":"gong.zhang.bj@gmail.com","username":"zhanggbj"},"change_message_id":"41eaa4d1ad5b9f4db922dd1aebab36e51b308cb3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        resp, service \u003d self.client.create_service(name, type)"},{"line_number":75,"context_line":"        self.assertIn(\u0027id\u0027, service)"},{"line_number":76,"context_line":"        self.addCleanup(self._del_service, service[\u0027id\u0027])"},{"line_number":77,"context_line":"        self.assertTrue(resp[\u0027status\u0027].startswith(\u00272\u0027))"},{"line_number":78,"context_line":"        self.assertIn(\u0027name\u0027, service)"},{"line_number":79,"context_line":"        self.assertEqual(name, service[\u0027name\u0027])"},{"line_number":80,"context_line":"        self.assertIn(\u0027type\u0027, service)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2F3jM%3D","line":77,"in_reply_to":"AAAAWH%2F%2F3uM%3D","updated":"2014-03-13 09:19:47.000000000","message":"Thank you very much for your review! I\u0027ll fix it in next patch.","commit_id":"1a53947ca656965ba4ec542d5f35e284d86604f3"}]}
