)]}'
{"tempest/api/identity/admin/test_discover.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"770984e2ccec7546ff2ca65d4c6d88ba379853f5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class DiscoverTestJSON(base.BaseIdentityV2AdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_d1fc1675","line":20,"updated":"2014-05-15 04:05:09.000000000","message":"Why is that an admin test ?\n\n\"keystone discover\" seems to work fine with non admin credentials.","commit_id":"f160ab9d6cf1dc3e8bd8a86a27104e022cc2ae6b"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"ac6b0f3f3c15c6d0f3ecfcbee10b132c4c514364","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class DiscoverTestJSON(base.BaseIdentityV2AdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_9e9b0b65","line":20,"in_reply_to":"7adec928_d1fc1675","updated":"2014-05-20 06:15:15.000000000","message":"Okie..I will move that out of Admin.\nThanks.","commit_id":"f160ab9d6cf1dc3e8bd8a86a27104e022cc2ae6b"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"770984e2ccec7546ff2ca65d4c6d88ba379853f5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        resp, body \u003d self.client.discover()"},{"line_number":31,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":32,"context_line":"        self.assertNotEmpty(body)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DiscoverTestXML(DiscoverTestJSON):"},{"line_number":36,"context_line":"    _interface \u003d \u0027xml\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_b10b0a8d","line":33,"updated":"2014-05-15 04:05:09.000000000","message":"Imo, Notempty is not enough. You may want to check that the string \"supports version\" is in the body.","commit_id":"f160ab9d6cf1dc3e8bd8a86a27104e022cc2ae6b"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"ac6b0f3f3c15c6d0f3ecfcbee10b132c4c514364","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        resp, body \u003d self.client.discover()"},{"line_number":31,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":32,"context_line":"        self.assertNotEmpty(body)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DiscoverTestXML(DiscoverTestJSON):"},{"line_number":36,"context_line":"    _interface \u003d \u0027xml\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_dea03392","line":33,"in_reply_to":"7adec928_b10b0a8d","updated":"2014-05-20 06:15:15.000000000","message":"Hi Jordan,\nI have checked the API response.\nThere is no such \"supports version\" or similar parameter in the response body.","commit_id":"f160ab9d6cf1dc3e8bd8a86a27104e022cc2ae6b"}],"tempest/api/identity/test_discover.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"a29b8325e32344508c8819633a9990223040c135","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        resp, body \u003d self.non_admin_client.discover()"},{"line_number":31,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":32,"context_line":"        self.assertNotEmpty(body)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DiscoverTestXML(DiscoverTestJSON):"},{"line_number":36,"context_line":"    _interface \u003d \u0027xml\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_fd3e8028","line":33,"updated":"2014-05-22 15:56:23.000000000","message":"I think checking that body is not empty is not enough. I would ensure that each item of body[\u0027values\u0027] has keys \u0027alias\u0027, \u0027description\u0027, \u0027name\u0027, \u0027namespace\u0027, \u0027links\u0027 and \u0027updated\u0027.\n\nThis way, you would prevent any api change and ensure that new extension has all the required fields.","commit_id":"46408939e03f115e3d8ebd2ff887ccb3b8582f0f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f989192a0f56e4349f5c27e22c317c030e1ed041","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class DiscoverTestJSON(base.BaseIdentityV2AdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_b5cdd988","line":20,"updated":"2014-05-23 08:09:46.000000000","message":"Please change the name of the test - ExtensionTestJson","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"9639a57275332f1e343600c62e0f617f01737383","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class DiscoverTestJSON(base.BaseIdentityV2AdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_d5d505b8","line":20,"in_reply_to":"7adec928_b5cdd988","updated":"2014-05-23 08:14:42.000000000","message":"Done","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f989192a0f56e4349f5c27e22c317c030e1ed041","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @classmethod"},{"line_number":24,"context_line":"    def setUpClass(cls):"},{"line_number":25,"context_line":"        super(DiscoverTestJSON, cls).setUpClass()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_d5398540","line":24,"updated":"2014-05-23 08:09:46.000000000","message":"do not need this function as it does not do anything than calling base.","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"9639a57275332f1e343600c62e0f617f01737383","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @classmethod"},{"line_number":24,"context_line":"    def setUpClass(cls):"},{"line_number":25,"context_line":"        super(DiscoverTestJSON, cls).setUpClass()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_b5da39e7","line":24,"in_reply_to":"7adec928_d5398540","updated":"2014-05-23 08:14:42.000000000","message":"Done","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f989192a0f56e4349f5c27e22c317c030e1ed041","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        super(DiscoverTestJSON, cls).setUpClass()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":28,"context_line":"    def test_discover(self):"},{"line_number":29,"context_line":"        # Discover the extensions"},{"line_number":30,"context_line":"        resp, body \u003d self.non_admin_client.discover()"},{"line_number":31,"context_line":"        self.assertEqual(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_f5c76162","line":28,"updated":"2014-05-23 08:09:46.000000000","message":"Change name of the test -\u003e list_extensions","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"9639a57275332f1e343600c62e0f617f01737383","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        super(DiscoverTestJSON, cls).setUpClass()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":28,"context_line":"    def test_discover(self):"},{"line_number":29,"context_line":"        # Discover the extensions"},{"line_number":30,"context_line":"        resp, body \u003d self.non_admin_client.discover()"},{"line_number":31,"context_line":"        self.assertEqual(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_95d45dbe","line":28,"in_reply_to":"7adec928_f5c76162","updated":"2014-05-23 08:14:42.000000000","message":"Done","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f989192a0f56e4349f5c27e22c317c030e1ed041","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        keys \u003d [\u0027name\u0027, \u0027updated\u0027, \u0027alias\u0027, \u0027links\u0027,"},{"line_number":34,"context_line":"                \u0027namespace\u0027, \u0027description\u0027]"},{"line_number":35,"context_line":"        for value in body:"},{"line_number":36,"context_line":"            self.assertTrue(all(key in value for key in keys))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class DiscoverTestXML(DiscoverTestJSON):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_95ea9daa","line":36,"updated":"2014-05-23 08:09:46.000000000","message":"Use assertIn instead of making assertTrue more complex.","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"b30a9b7d49f1c741e3baead15f42242c0ea207f9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        keys \u003d [\u0027name\u0027, \u0027updated\u0027, \u0027alias\u0027, \u0027links\u0027,"},{"line_number":34,"context_line":"                \u0027namespace\u0027, \u0027description\u0027]"},{"line_number":35,"context_line":"        for value in body:"},{"line_number":36,"context_line":"            self.assertTrue(all(key in value for key in keys))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class DiscoverTestXML(DiscoverTestJSON):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_b0124756","line":36,"in_reply_to":"7adec928_55cad51a","updated":"2014-05-23 08:24:59.000000000","message":"I agree with Ghanshyam. You are already using 2 loops (\u0027key in value for key in keys\u0027 is a loop).\nThe number of LOC is not very important, being able to debug easily what went wrong in more important, in my opinion.\n\nOn the other hand, the test (stricly speaking) checks that all keys are in there, we are not that interested in which key in particular is missing.","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"9639a57275332f1e343600c62e0f617f01737383","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        keys \u003d [\u0027name\u0027, \u0027updated\u0027, \u0027alias\u0027, \u0027links\u0027,"},{"line_number":34,"context_line":"                \u0027namespace\u0027, \u0027description\u0027]"},{"line_number":35,"context_line":"        for value in body:"},{"line_number":36,"context_line":"            self.assertTrue(all(key in value for key in keys))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class DiscoverTestXML(DiscoverTestJSON):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_55cad51a","line":36,"in_reply_to":"7adec928_95ea9daa","updated":"2014-05-23 08:14:42.000000000","message":"If I use assertIn. then, I will have to use 1 more loop inside loop in line -35.\nlike :\n\nfor key in keys:\n    assertIn(key in value)\n\nand it will just increase the LOC.","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"}],"tempest/api/identity/test_extension.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"c315012e06a97cc90f61e6c766ad89a45ab16002","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.assertNotEmpty(body)"},{"line_number":29,"context_line":"        keys \u003d [\u0027name\u0027, \u0027updated\u0027, \u0027alias\u0027, \u0027links\u0027,"},{"line_number":30,"context_line":"                \u0027namespace\u0027, \u0027description\u0027]"},{"line_number":31,"context_line":"        for value in body:"},{"line_number":32,"context_line":"            for key in keys:"},{"line_number":33,"context_line":"                self.assertIn(key, value)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_88180486","line":31,"updated":"2014-05-26 14:26:37.000000000","message":"I would suggest to write something like this:\n\n    resp, extensions \u003d self.non_admin_client.list_extensions()\n    ....\n    for extension in extensions:\n        ...\n\n\"for value in body:\" looks more readable.","commit_id":"3f49b84cdac69f83218cc28f216c8a417f7332af"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"34b4c0064e19938acb419ef4f12f7e1cd889422a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.assertNotEmpty(body)"},{"line_number":29,"context_line":"        keys \u003d [\u0027name\u0027, \u0027updated\u0027, \u0027alias\u0027, \u0027links\u0027,"},{"line_number":30,"context_line":"                \u0027namespace\u0027, \u0027description\u0027]"},{"line_number":31,"context_line":"        for value in body:"},{"line_number":32,"context_line":"            for key in keys:"},{"line_number":33,"context_line":"                self.assertIn(key, value)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_43341fde","line":31,"in_reply_to":"5adbc538_88180486","updated":"2014-05-26 14:29:35.000000000","message":"Oops :) \n    \n    resp, extensions \u003d self.non_admin_client.list_extensions()\n    ....\n    for extension in extensions:\n        ...\n\nlooks more readable than \n\n    resp, body \u003d self.non_admin_client.list_extensions()\n    ...\n    for value in body:","commit_id":"3f49b84cdac69f83218cc28f216c8a417f7332af"}],"tempest/services/identity/json/identity_client.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f989192a0f56e4349f5c27e22c317c030e1ed041","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        resp, body \u003d self.put(\u0027users/%s/OS-KSADM/password\u0027 % user_id, put_body)"},{"line_number":239,"context_line":"        return resp, self._parse_resp(body)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def discover(self):"},{"line_number":242,"context_line":"        \"\"\"Discover the extensions.\"\"\""},{"line_number":243,"context_line":"        resp, body \u003d self.get(\u0027/extensions\u0027)"},{"line_number":244,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_558bb51d","line":241,"updated":"2014-05-23 08:09:46.000000000","message":"name -\u003e list_extensions(self)","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"9639a57275332f1e343600c62e0f617f01737383","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        resp, body \u003d self.put(\u0027users/%s/OS-KSADM/password\u0027 % user_id, put_body)"},{"line_number":239,"context_line":"        return resp, self._parse_resp(body)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def discover(self):"},{"line_number":242,"context_line":"        \"\"\"Discover the extensions.\"\"\""},{"line_number":243,"context_line":"        resp, body \u003d self.get(\u0027/extensions\u0027)"},{"line_number":244,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_f5e4c1ad","line":241,"in_reply_to":"7adec928_558bb51d","updated":"2014-05-23 08:14:42.000000000","message":"Done","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"}],"tempest/services/identity/xml/identity_client.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f989192a0f56e4349f5c27e22c317c030e1ed041","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                              str(xml.Document(put_body)))"},{"line_number":128,"context_line":"        return resp, self._parse_resp(body)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def discover(self):"},{"line_number":131,"context_line":"        \"\"\"Discover the extensions.\"\"\""},{"line_number":132,"context_line":"        resp, body \u003d self.get(\u0027/extensions\u0027)"},{"line_number":133,"context_line":"        return resp, self._parse_resp(body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_95853d09","line":130,"updated":"2014-05-23 08:09:46.000000000","message":"ditto","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"9639a57275332f1e343600c62e0f617f01737383","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                              str(xml.Document(put_body)))"},{"line_number":128,"context_line":"        return resp, self._parse_resp(body)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def discover(self):"},{"line_number":131,"context_line":"        \"\"\"Discover the extensions.\"\"\""},{"line_number":132,"context_line":"        resp, body \u003d self.get(\u0027/extensions\u0027)"},{"line_number":133,"context_line":"        return resp, self._parse_resp(body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_15e04d95","line":130,"in_reply_to":"7adec928_95853d09","updated":"2014-05-23 08:14:42.000000000","message":"Done","commit_id":"396af4d092ab297e5c73782f1039fb94a9ada1bf"}]}
