)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"65431633d6c73731ce4d1c32a9d499e1b9ff3abe","unresolved":false,"context_lines":[{"line_number":25,"context_line":"also fixed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes-Bug: 1336826"},{"line_number":28,"context_line":"Partially implements: blueprint client-checks-success"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I75633b5b94b1750a623f6a2b8adaae1efc5c7c9c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_56f0b366","line":28,"updated":"2014-07-04 22:21:25.000000000","message":"Could you put the bp line first, or else set the topic explicitly to the bp, so it\u0027s easier to filter all reviews related to this bp in gerrit?","commit_id":"798894c106307de0599287e535885aadd46e912a"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"15d93f6df8dfe7579d8d60a92f94ee063d981173","unresolved":false,"context_lines":[{"line_number":25,"context_line":"also fixed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes-Bug: 1336826"},{"line_number":28,"context_line":"Partially implements: blueprint client-checks-success"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I75633b5b94b1750a623f6a2b8adaae1efc5c7c9c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_acb51f7f","line":28,"in_reply_to":"baada198_56f0b366","updated":"2014-07-07 15:55:51.000000000","message":"That\u0027s what I did first. It seems to \"prefer\" the bug top to bp regardless. However, this review does show up on the list in the blueprint.","commit_id":"798894c106307de0599287e535885aadd46e912a"}],"tempest/api/compute/admin/test_simple_tenant_usage_negative.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"10d1f4b21bcce12c3224e517d500e45e2074554a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # Get usage for tenant with invalid date"},{"line_number":52,"context_line":"        params \u003d {\u0027start\u0027: self.end,"},{"line_number":53,"context_line":"                  \u0027end\u0027: self.start}"},{"line_number":54,"context_line":"        self.identity_client.list_tenants()"},{"line_number":55,"context_line":"        self.assertRaises(exceptions.BadRequest,"},{"line_number":56,"context_line":"                          self.adm_client.get_tenant_usage,"},{"line_number":57,"context_line":"                          self.client.tenant_id, params)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_23e7aaad","line":54,"updated":"2014-07-04 00:23:13.000000000","message":"I guess this line is not needed, it just list tenants, but doesn\u0027t assert anything from response body","commit_id":"798894c106307de0599287e535885aadd46e912a"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"15d93f6df8dfe7579d8d60a92f94ee063d981173","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # Get usage for tenant with invalid date"},{"line_number":52,"context_line":"        params \u003d {\u0027start\u0027: self.end,"},{"line_number":53,"context_line":"                  \u0027end\u0027: self.start}"},{"line_number":54,"context_line":"        self.identity_client.list_tenants()"},{"line_number":55,"context_line":"        self.assertRaises(exceptions.BadRequest,"},{"line_number":56,"context_line":"                          self.adm_client.get_tenant_usage,"},{"line_number":57,"context_line":"                          self.client.tenant_id, params)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8c693bfb","line":54,"in_reply_to":"baada198_23e7aaad","updated":"2014-07-07 15:55:51.000000000","message":"This looked weird to me but I was not sure is there was some reliance on the unnecessary code. But I should have removed it anyway and will do so.","commit_id":"798894c106307de0599287e535885aadd46e912a"}],"tempest/api/identity/admin/test_tenant_negative.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"65431633d6c73731ce4d1c32a9d499e1b9ff3abe","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # Tenant names should be unique"},{"line_number":71,"context_line":"        tenant_name \u003d data_utils.rand_name(name\u003d\u0027tenant-\u0027)"},{"line_number":72,"context_line":"        _, body \u003d self.client.create_tenant(tenant_name)"},{"line_number":73,"context_line":"        tenant \u003d body"},{"line_number":74,"context_line":"        self.data.tenants.append(tenant)"},{"line_number":75,"context_line":"        tenant1_id \u003d body.get(\u0027id\u0027)"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_90950f89","line":73,"updated":"2014-07-04 22:21:25.000000000","message":"This is redundant really, but I guess it would classify as unrelated change","commit_id":"798894c106307de0599287e535885aadd46e912a"}],"tempest/api/identity/admin/test_tokens.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"65431633d6c73731ce4d1c32a9d499e1b9ff3abe","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        # Use the unscoped token to get a token scoped to tenant1"},{"line_number":98,"context_line":"        rsp, body \u003d self.token_client.auth_token(token_id, tenant\u003dtenant1_name)"},{"line_number":99,"context_line":"        self.assertEqual(200, rsp.status)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        scoped_token_id \u003d body[\u0027token\u0027][\u0027id\u0027]"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1d7f3eac","line":99,"updated":"2014-07-04 22:21:25.000000000","message":"I would change L98 to resp","commit_id":"798894c106307de0599287e535885aadd46e912a"}],"tempest/api/identity/admin/test_users.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"10d1f4b21bcce12c3224e517d500e45e2074554a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        resp, user1 \u003d self.client.create_user(alt_tenant_user1, \u0027password1\u0027,"},{"line_number":139,"context_line":"                                              self.data.tenant[\u0027id\u0027],"},{"line_number":140,"context_line":"                                              \u0027user1@123\u0027)"},{"line_number":141,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":142,"context_line":"        user_ids.append(user1[\u0027id\u0027])"},{"line_number":143,"context_line":"        self.data.users.append(user1)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_17a3b901","line":141,"updated":"2014-07-04 00:23:13.000000000","message":"forgot this one ^","commit_id":"798894c106307de0599287e535885aadd46e912a"}],"tempest/api/identity/admin/v3/test_projects.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"10d1f4b21bcce12c3224e517d500e45e2074554a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        project_name \u003d data_utils.rand_name(\u0027project-\u0027)"},{"line_number":49,"context_line":"        project_desc \u003d data_utils.rand_name(\u0027desc-\u0027)"},{"line_number":50,"context_line":"        resp, project \u003d self.client.create_project("},{"line_number":51,"context_line":"            project_name, description\u003dproject_desc)"},{"line_number":52,"context_line":"        self.data.projects.append(project)"},{"line_number":53,"context_line":"        st1 \u003d resp[\u0027status\u0027]"},{"line_number":54,"context_line":"        project_id \u003d project[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_86cdd987","line":51,"updated":"2014-07-04 00:23:13.000000000","message":"forgot this one ^ (which became st1 at l53 and asserted at 56)","commit_id":"798894c106307de0599287e535885aadd46e912a"}],"tempest/common/isolated_creds.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4ac9696fa3e4794d15385c31f2c9540194b29771","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _get_tenant_by_name(self, name):"},{"line_number":69,"context_line":"        if self.tempest_client:"},{"line_number":70,"context_line":"            resp, tenant \u003d self.identity_admin_client.get_tenant_by_name(name)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            tenants \u003d self.identity_admin_client.tenants.list()"},{"line_number":73,"context_line":"            for ten in tenants:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_df42560f","line":70,"updated":"2014-07-03 09:43:09.000000000","message":"resp -\u003e _","commit_id":"95b55c05099061a2fedb16271389dff2350944c0"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4ac9696fa3e4794d15385c31f2c9540194b29771","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _get_user(self, tenant, username):"},{"line_number":94,"context_line":"        if self.tempest_client:"},{"line_number":95,"context_line":"            resp, user \u003d self.identity_admin_client.get_user_by_username("},{"line_number":96,"context_line":"                tenant[\u0027id\u0027],"},{"line_number":97,"context_line":"                username)"},{"line_number":98,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_bf30429f","line":95,"updated":"2014-07-03 09:43:09.000000000","message":"resp -\u003e _","commit_id":"95b55c05099061a2fedb16271389dff2350944c0"}],"tempest/services/identity/json/identity_client.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4ac9696fa3e4794d15385c31f2c9540194b29771","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def list_users_for_tenant(self, tenant_id):"},{"line_number":218,"context_line":"        \"\"\"List users for a Tenant.\"\"\""},{"line_number":219,"context_line":"        resp, body \u003d self.get(\u0027/tenants/%s/users\u0027 % tenant_id)"},{"line_number":220,"context_line":"        return resp, self._parse_resp(body)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def get_user_by_username(self, tenant_id, username):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_44211db3","line":219,"updated":"2014-07-03 09:43:09.000000000","message":"does it need resp check here?","commit_id":"95b55c05099061a2fedb16271389dff2350944c0"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"65431633d6c73731ce4d1c32a9d499e1b9ff3abe","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        if hasattr(self, \u0027_has_admin_extensions\u0027):"},{"line_number":39,"context_line":"            return self._has_admin_extensions"},{"line_number":40,"context_line":"        resp, body \u003d self.list_roles()"},{"line_number":41,"context_line":"        self._has_admin_extensions \u003d (\u0027status\u0027 in resp and resp.status !\u003d 503)"},{"line_number":42,"context_line":"        return self._has_admin_extensions"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_33f7d15a","line":40,"updated":"2014-07-04 22:21:25.000000000","message":"List roles includes now the assertion so the check in L41 is broken, if the code is not 200 the embedded assertion will fail.","commit_id":"798894c106307de0599287e535885aadd46e912a"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"15d93f6df8dfe7579d8d60a92f94ee063d981173","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        if hasattr(self, \u0027_has_admin_extensions\u0027):"},{"line_number":39,"context_line":"            return self._has_admin_extensions"},{"line_number":40,"context_line":"        resp, body \u003d self.list_roles()"},{"line_number":41,"context_line":"        self._has_admin_extensions \u003d (\u0027status\u0027 in resp and resp.status !\u003d 503)"},{"line_number":42,"context_line":"        return self._has_admin_extensions"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2f4821cb","line":40,"in_reply_to":"baada198_33f7d15a","updated":"2014-07-07 15:55:51.000000000","message":"This code is actually broken. If 503 were returned the list_roles call would have raised an exception. And list_roles is expected to return 200 else all the other tests that use it would be wrong too.","commit_id":"798894c106307de0599287e535885aadd46e912a"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"65431633d6c73731ce4d1c32a9d499e1b9ff3abe","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        return resp, body[\u0027extensions\u0027][\u0027values\u0027]"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"class TokenClientJSON(IdentityClientJSON):"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def __init__(self):"},{"line_number":284,"context_line":"        super(TokenClientJSON, self).__init__(None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_96e6cbae","line":281,"updated":"2014-07-04 22:21:25.000000000","message":"Did you skip this one on purpose and if so could you document why?","commit_id":"798894c106307de0599287e535885aadd46e912a"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"15d93f6df8dfe7579d8d60a92f94ee063d981173","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        return resp, body[\u0027extensions\u0027][\u0027values\u0027]"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"class TokenClientJSON(IdentityClientJSON):"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def __init__(self):"},{"line_number":284,"context_line":"        super(TokenClientJSON, self).__init__(None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6f7cd9ec","line":281,"in_reply_to":"baada198_96e6cbae","updated":"2014-07-07 15:55:51.000000000","message":"As noted in the commit message, this change is only for methods that were in the v2 IdentityClient. This change is already bigger than I would have liked. This class will be done as part of part 2.","commit_id":"798894c106307de0599287e535885aadd46e912a"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7c68050ed3f31cfd89cc8bef11f7673d7f934592","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        try:"},{"line_number":42,"context_line":"            self.list_roles()"},{"line_number":43,"context_line":"            self._has_admin_extensions \u003d True"},{"line_number":44,"context_line":"        except Exception:"},{"line_number":45,"context_line":"            self._has_admin_extensions \u003d False"},{"line_number":46,"context_line":"        return self._has_admin_extensions"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_ee4dbd9a","line":44,"updated":"2014-07-10 21:24:27.000000000","message":"Exception seems too generic here. So if 503 was the code returned, rest client would send an UnexpectedResponseCode exception. 503 does not seem like the right code to be sent, 501 not implemented would seem more appropriate.\nI could not find any reference to 503 in the latest keystone code base, but perhaps it was returned in the past.","commit_id":"e9d2f42fca4309f145ff1eb871650894f1905421"}],"tempest/services/identity/v3/json/identity_client.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4ac9696fa3e4794d15385c31f2c9540194b29771","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    def list_domains(self):"},{"line_number":232,"context_line":"        \"\"\"List Domains.\"\"\""},{"line_number":233,"context_line":"        resp, body \u003d self.get(\u0027domains\u0027)"},{"line_number":234,"context_line":"        body \u003d json.loads(body)"},{"line_number":235,"context_line":"        return resp, body[\u0027domains\u0027]"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def update_domain(self, domain_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_240d093f","line":234,"updated":"2014-07-03 09:43:09.000000000","message":"does it need resp check here?","commit_id":"95b55c05099061a2fedb16271389dff2350944c0"}],"tempest/services/identity/v3/xml/identity_client.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4ac9696fa3e4794d15385c31f2c9540194b29771","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def get_user(self, user_id):"},{"line_number":148,"context_line":"        \"\"\"GET a user.\"\"\""},{"line_number":149,"context_line":"        resp, body \u003d self.get(\"users/%s\" % user_id)"},{"line_number":150,"context_line":"        body \u003d self._parse_body(etree.fromstring(body))"},{"line_number":151,"context_line":"        return resp, body"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def delete_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_df2176a0","line":150,"updated":"2014-07-03 09:43:09.000000000","message":"does it need resp check here?","commit_id":"95b55c05099061a2fedb16271389dff2350944c0"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4ac9696fa3e4794d15385c31f2c9540194b29771","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def list_domains(self):"},{"line_number":278,"context_line":"        \"\"\"Get the list of domains.\"\"\""},{"line_number":279,"context_line":"        resp, body \u003d self.get(\"domains\")"},{"line_number":280,"context_line":"        body \u003d self._parse_domains(etree.fromstring(body))"},{"line_number":281,"context_line":"        return resp, body"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_bf512210","line":279,"updated":"2014-07-03 09:43:09.000000000","message":"ditto","commit_id":"95b55c05099061a2fedb16271389dff2350944c0"}]}
