)]}'
{"tempest/api/identity/admin/v3/test_services.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3bd537ba35585c5f029e8ddbd1c597d78036d270","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # get the updated catalog"},{"line_number":106,"context_line":"        catalog \u003d self.client.show_service_catalog()[\u0027catalog\u0027]"},{"line_number":107,"context_line":"        expected_list \u003d []"},{"line_number":108,"context_line":"        for service in catalog:"},{"line_number":109,"context_line":"            if service[\u0027id\u0027] \u003d\u003d create_service[\u0027id\u0027]:"},{"line_number":110,"context_line":"                expected_list.append(service)"},{"line_number":111,"context_line":"        # check the added service"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_7a4ca176","line":108,"updated":"2016-01-17 17:22:51.000000000","message":"Use a list comprehension.\n\nservices \u003d [service for service in catalog if \n              service[\u0027id\u0027] \u003d\u003d create_service[\u0027id\u0027]]","commit_id":"650d8c789b5817bea653288351a8eaee81e19416"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"cdc1a0dbefdb17839c797c274cd15a9eb97524db","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # get the updated catalog"},{"line_number":106,"context_line":"        catalog \u003d self.client.show_service_catalog()[\u0027catalog\u0027]"},{"line_number":107,"context_line":"        expected_list \u003d []"},{"line_number":108,"context_line":"        for service in catalog:"},{"line_number":109,"context_line":"            if service[\u0027id\u0027] \u003d\u003d create_service[\u0027id\u0027]:"},{"line_number":110,"context_line":"                expected_list.append(service)"},{"line_number":111,"context_line":"        # check the added service"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_8b67a9b6","line":108,"in_reply_to":"da6ed579_7a4ca176","updated":"2016-01-29 07:52:53.000000000","message":"Done","commit_id":"650d8c789b5817bea653288351a8eaee81e19416"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3bd537ba35585c5f029e8ddbd1c597d78036d270","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        # check the added service"},{"line_number":112,"context_line":"        self.assertEqual(len(expected_list), 1)"},{"line_number":113,"context_line":"        new_service \u003d expected_list[0]"},{"line_number":114,"context_line":"        expected_data \u003d {\u0027name\u0027: name, \u0027type\u0027: serv_type}"},{"line_number":115,"context_line":"        self.assertDictContainsSubset(expected_data, new_service)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_1a3ec5b8","line":114,"updated":"2016-01-17 17:22:51.000000000","message":"Please use 2 assertEqual instead. 2 entries is not enough to warrant the usage of assertDictContainsSubset","commit_id":"650d8c789b5817bea653288351a8eaee81e19416"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"cdc1a0dbefdb17839c797c274cd15a9eb97524db","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        # check the added service"},{"line_number":112,"context_line":"        self.assertEqual(len(expected_list), 1)"},{"line_number":113,"context_line":"        new_service \u003d expected_list[0]"},{"line_number":114,"context_line":"        expected_data \u003d {\u0027name\u0027: name, \u0027type\u0027: serv_type}"},{"line_number":115,"context_line":"        self.assertDictContainsSubset(expected_data, new_service)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_0b12d909","line":114,"in_reply_to":"da6ed579_1a3ec5b8","updated":"2016-01-29 07:52:53.000000000","message":"Done","commit_id":"650d8c789b5817bea653288351a8eaee81e19416"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"5d8ba38d3cc662e0abf2c26a2c143fa731d376e5","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        name \u003d data_utils.rand_name(\u0027service\u0027)"},{"line_number":100,"context_line":"        serv_type \u003d data_utils.rand_name(\u0027type\u0027)"},{"line_number":101,"context_line":"        desc \u003d data_utils.rand_name(\u0027description\u0027)"},{"line_number":102,"context_line":"        create_service \u003d self.services_client.create_service("},{"line_number":103,"context_line":"            type\u003dserv_type, name\u003dname, description\u003ddesc)[\u0027service\u0027]"},{"line_number":104,"context_line":"        self.addCleanup(self._del_service, create_service[\u0027id\u0027])"},{"line_number":105,"context_line":"        # get the updated catalog"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_bb03f60e","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":14},"updated":"2016-01-21 02:40:24.000000000","message":"create -\u003e created","commit_id":"bea032b7dac7825097042a00a2e564f8738718de"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"49c3364807f41eff5be5710c9f66e21af3b31d56","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        desc \u003d data_utils.rand_name(\u0027description\u0027)"},{"line_number":102,"context_line":"        created_service \u003d self.services_client.create_service("},{"line_number":103,"context_line":"            type\u003dserv_type, name\u003dname, description\u003ddesc)[\u0027service\u0027]"},{"line_number":104,"context_line":"        self.addCleanup(self._del_service, created_service[\u0027id\u0027])"},{"line_number":105,"context_line":"        # get the updated catalog"},{"line_number":106,"context_line":"        catalog \u003d self.client.show_service_catalog()[\u0027catalog\u0027]"},{"line_number":107,"context_line":"        services \u003d [service for service in catalog"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_83b76ad7","line":104,"updated":"2016-01-29 04:11:00.000000000","message":"Could you pease add a blank line here to separate different logical code blocks?","commit_id":"a9fbe34b6c0ac1c2955bd82ee18fc99daee2dfed"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"f01e1c3a3982034a8738e43749a82fc15bba8b62","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        desc \u003d data_utils.rand_name(\u0027description\u0027)"},{"line_number":102,"context_line":"        created_service \u003d self.services_client.create_service("},{"line_number":103,"context_line":"            type\u003dserv_type, name\u003dname, description\u003ddesc)[\u0027service\u0027]"},{"line_number":104,"context_line":"        self.addCleanup(self._del_service, created_service[\u0027id\u0027])"},{"line_number":105,"context_line":"        # get the updated catalog"},{"line_number":106,"context_line":"        catalog \u003d self.client.show_service_catalog()[\u0027catalog\u0027]"},{"line_number":107,"context_line":"        services \u003d [service for service in catalog"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_95931c4f","line":104,"in_reply_to":"7a5de9d1_83b76ad7","updated":"2016-01-29 07:51:31.000000000","message":"Done","commit_id":"a9fbe34b6c0ac1c2955bd82ee18fc99daee2dfed"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"49c3364807f41eff5be5710c9f66e21af3b31d56","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        catalog \u003d self.client.show_service_catalog()[\u0027catalog\u0027]"},{"line_number":107,"context_line":"        services \u003d [service for service in catalog"},{"line_number":108,"context_line":"                    if service[\u0027id\u0027] \u003d\u003d created_service[\u0027id\u0027]]"},{"line_number":109,"context_line":"        # check the added service"},{"line_number":110,"context_line":"        self.assertEqual(len(services), 1)"},{"line_number":111,"context_line":"        service \u003d services[0]"},{"line_number":112,"context_line":"        self.assertEqual(service[\u0027name\u0027], name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_43b172e0","line":109,"updated":"2016-01-29 04:11:00.000000000","message":"Ditto.","commit_id":"a9fbe34b6c0ac1c2955bd82ee18fc99daee2dfed"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"f01e1c3a3982034a8738e43749a82fc15bba8b62","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        catalog \u003d self.client.show_service_catalog()[\u0027catalog\u0027]"},{"line_number":107,"context_line":"        services \u003d [service for service in catalog"},{"line_number":108,"context_line":"                    if service[\u0027id\u0027] \u003d\u003d created_service[\u0027id\u0027]]"},{"line_number":109,"context_line":"        # check the added service"},{"line_number":110,"context_line":"        self.assertEqual(len(services), 1)"},{"line_number":111,"context_line":"        service \u003d services[0]"},{"line_number":112,"context_line":"        self.assertEqual(service[\u0027name\u0027], name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_359a6864","line":109,"in_reply_to":"7a5de9d1_43b172e0","updated":"2016-01-29 07:51:31.000000000","message":"Done","commit_id":"a9fbe34b6c0ac1c2955bd82ee18fc99daee2dfed"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"7f27bbee949861d8f1fea0581316755fe27d75d0","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Get service"},{"line_number":59,"context_line":"        fetched_service \u003d self.services_client.show_service(s_id)[\u0027service\u0027]"},{"line_number":60,"context_line":"        resp3_desc \u003d fetched_service[\u0027description\u0027]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.assertEqual(resp2_desc, resp3_desc)"},{"line_number":63,"context_line":"        self.assertDictContainsSubset(update_service, fetched_service)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_160c0140","line":60,"updated":"2016-01-29 14:59:33.000000000","message":"Here","commit_id":"8d405cca077be601806eadcb729c8a57416a0fe8"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"7f27bbee949861d8f1fea0581316755fe27d75d0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        service \u003d services[0]"},{"line_number":114,"context_line":"        self.assertEqual(service[\u0027name\u0027], name)"},{"line_number":115,"context_line":"        self.assertEqual(service[\u0027type\u0027], serv_type)"},{"line_number":116,"context_line":"        details \u003d self.services_client.show_service(created_service[\u0027id\u0027])"},{"line_number":117,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027description\u0027], desc)"},{"line_number":118,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027enabled\u0027], True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_9101db07","line":116,"updated":"2016-01-29 14:59:33.000000000","message":"l116 to 118 is a duplicate of what\u0027s in test_create_update_get_service (l59). \n\nThis test is \"show_service_catalog\" and musn\"t overlap with other tests.","commit_id":"8d405cca077be601806eadcb729c8a57416a0fe8"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"ebf236520e607ff8c8ce918146c83f3fd72cd45b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        service \u003d services[0]"},{"line_number":114,"context_line":"        self.assertEqual(service[\u0027name\u0027], name)"},{"line_number":115,"context_line":"        self.assertEqual(service[\u0027type\u0027], serv_type)"},{"line_number":116,"context_line":"        details \u003d self.services_client.show_service(created_service[\u0027id\u0027])"},{"line_number":117,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027description\u0027], desc)"},{"line_number":118,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027enabled\u0027], True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_d4e33304","line":116,"in_reply_to":"7a5de9d1_9101db07","updated":"2016-02-02 16:14:30.000000000","message":"Hi, Jordan, if I get you right there is no need for determining \u0027desc\u0027,\u0027enabled\u0027 parameters and checking them? So should i exclude L116-L118? Or you mean something else? \n\nYes, I agree that this test is similar to test_create_update_get_service and it overlaps in large part, but what way we could test method show_service_catalog?","commit_id":"8d405cca077be601806eadcb729c8a57416a0fe8"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"e7f5a097e62b0bb5f1a3cab6dd4f10dc39c3fc01","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        service \u003d services[0]"},{"line_number":114,"context_line":"        self.assertEqual(service[\u0027name\u0027], name)"},{"line_number":115,"context_line":"        self.assertEqual(service[\u0027type\u0027], serv_type)"},{"line_number":116,"context_line":"        details \u003d self.services_client.show_service(created_service[\u0027id\u0027])"},{"line_number":117,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027description\u0027], desc)"},{"line_number":118,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027enabled\u0027], True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_491f0a6c","line":116,"in_reply_to":"7a5de9d1_d4e33304","updated":"2016-02-06 11:36:33.000000000","message":"Done","commit_id":"8d405cca077be601806eadcb729c8a57416a0fe8"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"f84a85d7b22d848ed89eeaada3d02c949e5c4e16","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        service \u003d services[0]"},{"line_number":114,"context_line":"        self.assertEqual(service[\u0027name\u0027], name)"},{"line_number":115,"context_line":"        self.assertEqual(service[\u0027type\u0027], serv_type)"},{"line_number":116,"context_line":"        details \u003d self.services_client.show_service(created_service[\u0027id\u0027])"},{"line_number":117,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027description\u0027], desc)"},{"line_number":118,"context_line":"        self.assertEqual(details[\u0027service\u0027][\u0027enabled\u0027], True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_f184615e","line":116,"in_reply_to":"7a5de9d1_d4e33304","updated":"2016-02-08 21:07:51.000000000","message":"Done","commit_id":"8d405cca077be601806eadcb729c8a57416a0fe8"}],"tempest/lib/services/identity/v3/identity_client.py":[{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"b0da4f5308e125b54e3a4ecf6d217d050837df43","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def show_service_catalog(self):"},{"line_number":48,"context_line":"        \"\"\"Get service catalog.\"\"\""},{"line_number":49,"context_line":"        url \u003d \u0027auth/catalog\u0027"},{"line_number":50,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":51,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a1ff146_e4cae14e","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":34},"updated":"2017-03-15 15:53:55.000000000","message":"nit: Complement docstring:\n\n\"\"\"\nGet service catalog.\n\nFor a full list of available parameters, please refer to the official\nAPI reference:\nhttps://developer.openstack.org/api-ref/identity/v3/?expanded\u003dget-service-catalog-detail#get-service-catalog\n\"\"\"","commit_id":"b7ee3ebda1cc70c8aa9e7281cb999cdc94197290"},{"author":{"_account_id":24903,"name":"Hongtao Zhang","email":"changhungtao@126.com","username":"ZhangHongtao"},"change_message_id":"5e95f3d44aa6ec26a912160573a1d9c6d245683b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def show_service_catalog(self):"},{"line_number":48,"context_line":"        \"\"\"Get service catalog.\"\"\""},{"line_number":49,"context_line":"        url \u003d \u0027auth/catalog\u0027"},{"line_number":50,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":51,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a1ff146_82d2ebfe","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":34},"in_reply_to":"3a1ff146_e4cae14e","updated":"2017-03-16 01:01:16.000000000","message":"There is an error in official API reference, \"X-Subject-Token\" is an unused parameter. This API has not parameter except X-Auth-Token.","commit_id":"b7ee3ebda1cc70c8aa9e7281cb999cdc94197290"}],"tempest/services/identity/v3/json/identity_client.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"5d8ba38d3cc662e0abf2c26a2c143fa731d376e5","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def show_service_catalog(self):"},{"line_number":461,"context_line":"        \"\"\"Get service catalog \"\"\""},{"line_number":462,"context_line":"        url \u003d \u0027auth/catalog\u0027"},{"line_number":463,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":464,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_d613215b","line":461,"range":{"start_line":461,"start_character":30,"end_line":461,"end_character":31},"updated":"2016-01-21 02:40:24.000000000","message":"Please, remove this space and put a dot instead of it.","commit_id":"bea032b7dac7825097042a00a2e564f8738718de"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"f8d5514bf76c0aa032cda95b0821f12d4c9a7a0c","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":458,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def show_service_catalog(self):"},{"line_number":461,"context_line":"        \"\"\"Get service catalog.\"\"\""},{"line_number":462,"context_line":"        url \u003d \u0027auth/catalog\u0027"},{"line_number":463,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_813a69cc","line":460,"updated":"2016-01-27 13:20:08.000000000","message":"Could you please move this method to line ~303 so that when we move all the \"auth/*\" methods we won\u0027t forget this one.","commit_id":"268acdefd8f3c6d6cbc4ccf04948a078b565feaa"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"7a747710bba93b42cd23ff92a6b508e468f6e635","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":458,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def show_service_catalog(self):"},{"line_number":461,"context_line":"        \"\"\"Get service catalog.\"\"\""},{"line_number":462,"context_line":"        url \u003d \u0027auth/catalog\u0027"},{"line_number":463,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_73a4b556","line":460,"in_reply_to":"7a5de9d1_813a69cc","updated":"2016-01-28 10:38:22.000000000","message":"Done","commit_id":"268acdefd8f3c6d6cbc4ccf04948a078b565feaa"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"49c3364807f41eff5be5710c9f66e21af3b31d56","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    def show_service_catalog(self):"},{"line_number":305,"context_line":"        \"\"\"Get service catalog.\"\"\""},{"line_number":306,"context_line":"        url \u003d \u0027auth/catalog\u0027"},{"line_number":307,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":308,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":309,"context_line":"        body \u003d json.loads(body)"},{"line_number":310,"context_line":"        return service_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_439ad264","line":307,"updated":"2016-01-29 04:11:00.000000000","message":"Let\u0027s keep consistency here with other methods.\n\n\nresp, body \u003d self.get(\u0027auth/catalog\u0027)","commit_id":"a9fbe34b6c0ac1c2955bd82ee18fc99daee2dfed"}]}
