)]}'
{"releasenotes/notes/tempest-identity-catalog-client-f5c8589a9d7c1eb5.yaml":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1dc0888fff9c9fd453828259047d99f3136fa63a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - | Add a new identity catalog client. At this point, the new client"},{"line_number":4,"context_line":"      contains a single functionality, \"show_catalog\", which returns a"},{"line_number":5,"context_line":"      catalog object."}],"source_content_type":"text/x-yaml","patch_set":52,"id":"1f1a1f67_15224c01","line":3,"updated":"2017-07-13 20:04:51.000000000","message":"You don\u0027t need the \u0027|\u0027 here it\u0027s confusing the yaml parser.","commit_id":"8afaaa17c264e30d4bf8637c604e24d18494b374"}],"tempest/api/identity/v3/test_catalog.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca267a3a46d56f708490800d227fbbbeb385dc8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    @decorators.idempotent_id(\u002756b57ced-22b8-4127-9b8a-565dfb0207e2\u0027)"},{"line_number":20,"context_line":"    def test_catalog_standardization(self):"},{"line_number":21,"context_line":"        # define acceptable catalog values as a list of tuples"},{"line_number":22,"context_line":"        # tuple format -\u003e (service_type, project)"},{"line_number":23,"context_line":"        standardized_service_values \u003d [(\u0027identity\u0027, \u0027openstack/keystone\u0027),"},{"line_number":24,"context_line":"                                       (\u0027compute\u0027, \u0027openstack/nova\u0027),"},{"line_number":25,"context_line":"                                       (\u0027image\u0027, \u0027openstack/glance\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_695431cb","line":22,"updated":"2017-05-30 04:03:37.000000000","message":"I think we should have a reference to the source for the standardized catalog types here. Just linking to the git repo should be enough.","commit_id":"94a03815da4a4597aedc0630a221c8109b0e4acc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca267a3a46d56f708490800d227fbbbeb385dc8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        standardized_service_values \u003d [(\u0027identity\u0027, \u0027openstack/keystone\u0027),"},{"line_number":24,"context_line":"                                       (\u0027compute\u0027, \u0027openstack/nova\u0027),"},{"line_number":25,"context_line":"                                       (\u0027image\u0027, \u0027openstack/glance\u0027),"},{"line_number":26,"context_line":"                                       (\u0027load-balancer\u0027, \u0027openstack/octavia\u0027),"},{"line_number":27,"context_line":"                                       (\u0027object-store\u0027, \u0027openstack/swift\u0027)]"},{"line_number":28,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":29,"context_line":"        resp, body \u003d self.non_admin_client.list_services()"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_e90e01e4","line":26,"updated":"2017-05-30 04:03:37.000000000","message":"So this puts us in a weird place, we don\u0027t actually support running anything against octavia in tempest itself, they test there API with a tempest plugin. I think we should limit this to services we test directly in tempest. If another project wants to verify their catalog response you\u0027ve exposed all the pieces they need to write that test.","commit_id":"94a03815da4a4597aedc0630a221c8109b0e4acc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca267a3a46d56f708490800d227fbbbeb385dc8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"                                       (\u0027compute\u0027, \u0027openstack/nova\u0027),"},{"line_number":25,"context_line":"                                       (\u0027image\u0027, \u0027openstack/glance\u0027),"},{"line_number":26,"context_line":"                                       (\u0027load-balancer\u0027, \u0027openstack/octavia\u0027),"},{"line_number":27,"context_line":"                                       (\u0027object-store\u0027, \u0027openstack/swift\u0027)]"},{"line_number":28,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":29,"context_line":"        resp, body \u003d self.non_admin_client.list_services()"},{"line_number":30,"context_line":"        self.assertEqual(resp.status, 200)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_49516dd8","line":27,"updated":"2017-05-30 04:03:37.000000000","message":"Also, why do we need to repo name? That isn\u0027t actually any information that\u0027s end user facing on the api. The name field isn\u0027t standardized and there is no guarantee that the project name will be used there.","commit_id":"94a03815da4a4597aedc0630a221c8109b0e4acc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca267a3a46d56f708490800d227fbbbeb385dc8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":31,"context_line":"        catalog_services \u003d body[\u0027services\u0027]"},{"line_number":32,"context_line":"        # for service in catalog:"},{"line_number":33,"context_line":"        for service in catalog_services:"},{"line_number":34,"context_line":"            # check to see if the item type is standardized"},{"line_number":35,"context_line":"            service_match \u003d [item for item in standardized_service_values"},{"line_number":36,"context_line":"                             if item[0] \u003d\u003d service[\u0027type\u0027]]"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_696d5197","line":33,"updated":"2017-05-30 04:03:37.000000000","message":"What happens if a service is enabled but missing in the catalog? (either because an incorrect name is used or just not there) I Think we should have a check for whether the service is enabled or not from CONF before we verify the catalog response. That way if a service is missing we fail.","commit_id":"94a03815da4a4597aedc0630a221c8109b0e4acc"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"67d9f4cd72c35a6a508be7d497ce346ceaf3b582","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        if CONF.service_available.swift:"},{"line_number":36,"context_line":"            enabled_services.append(\u0027object-store\u0027)"},{"line_number":37,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":38,"context_line":"        resp, body \u003d self.non_admin_projects_client.list_services()"},{"line_number":39,"context_line":"        self.assertEqual(resp.status, 200)"},{"line_number":40,"context_line":"        catalog_services \u003d body[\u0027services\u0027]"},{"line_number":41,"context_line":"        # make sure that the enabled services are present in the catalog"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_c61b91c7","line":38,"updated":"2017-06-04 12:12:43.000000000","message":"I only see show_catalog() in CatalogClient. Please recheck this.","commit_id":"bb3934eb8f4a82451587a5b927edb6c721bdaee6"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"bc45e9aa5187496f302b4b944ac4e42630a866e1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        if CONF.service_available.glance:"},{"line_number":36,"context_line":"            enabled_services.append(\u0027image\u0027)"},{"line_number":37,"context_line":"        if CONF.service_available.swift:"},{"line_number":38,"context_line":"            enabled_services.append(\u0027object-store\u0027)"},{"line_number":39,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":40,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":41,"context_line":"        response \u003d resp.response"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f231b9d_4b82a502","line":38,"updated":"2017-06-19 22:07:49.000000000","message":"calling append with strings on enabled_services, so it\u0027s some sort of list.","commit_id":"6778c05ce538215d4e06e7d053f199611ab38ad9"},{"author":{"_account_id":24728,"name":"megan guiney","email":"meganmguiney@gmail.com","username":"mguiney"},"change_message_id":"0fff8d6df6db7ac755f2aa3053d3e274b4d575be","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        if CONF.service_available.glance:"},{"line_number":36,"context_line":"            enabled_services.append(\u0027image\u0027)"},{"line_number":37,"context_line":"        if CONF.service_available.swift:"},{"line_number":38,"context_line":"            enabled_services.append(\u0027object-store\u0027)"},{"line_number":39,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":40,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":41,"context_line":"        response \u003d resp.response"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f231b9d_7d7c08eb","line":38,"in_reply_to":"7f231b9d_4b82a502","updated":"2017-06-19 22:53:07.000000000","message":"Done","commit_id":"6778c05ce538215d4e06e7d053f199611ab38ad9"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"bc45e9aa5187496f302b4b944ac4e42630a866e1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":40,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":41,"context_line":"        response \u003d resp.response"},{"line_number":42,"context_line":"        catalog_services \u003d resp[\u0027catalog\u0027]"},{"line_number":43,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":44,"context_line":"        # make sure that the enabled services are present in the catalog"},{"line_number":45,"context_line":"        for service in enabled_services:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f231b9d_0b7cad1e","line":42,"updated":"2017-06-19 22:07:49.000000000","message":"later on, you\u0027re pulling the objects off the list from the catalog_services, and assigning them to item","commit_id":"6778c05ce538215d4e06e7d053f199611ab38ad9"},{"author":{"_account_id":24728,"name":"megan guiney","email":"meganmguiney@gmail.com","username":"mguiney"},"change_message_id":"0fff8d6df6db7ac755f2aa3053d3e274b4d575be","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":40,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":41,"context_line":"        response \u003d resp.response"},{"line_number":42,"context_line":"        catalog_services \u003d resp[\u0027catalog\u0027]"},{"line_number":43,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":44,"context_line":"        # make sure that the enabled services are present in the catalog"},{"line_number":45,"context_line":"        for service in enabled_services:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f231b9d_9d77e409","line":42,"in_reply_to":"7f231b9d_0b7cad1e","updated":"2017-06-19 22:53:07.000000000","message":"Done","commit_id":"6778c05ce538215d4e06e7d053f199611ab38ad9"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"921a54dc3e8ca6598aba0c8bc81b531643d6251e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        # make sure that the enabled services are present in the catalog"},{"line_number":45,"context_line":"        for service in enabled_services:"},{"line_number":46,"context_line":"            enabled_match \u003d [item for item in catalog_services"},{"line_number":47,"context_line":"                             if item \u003d\u003d service[\u0027type\u0027]]"},{"line_number":48,"context_line":"            self.assertNotEqual(enabled_match, [])"},{"line_number":49,"context_line":"        for service in catalog_services:"},{"line_number":50,"context_line":"            service \u003d json.loads(service)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f231b9d_16385c3b","line":47,"range":{"start_line":47,"start_character":32,"end_line":47,"end_character":55},"updated":"2017-06-19 18:09:51.000000000","message":"service is already the string name of the service you\u0027re testing. I think you want to use \u0027if item \u003d\u003d service\u0027 instead.","commit_id":"6778c05ce538215d4e06e7d053f199611ab38ad9"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"bc45e9aa5187496f302b4b944ac4e42630a866e1","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        # make sure that the enabled services are present in the catalog"},{"line_number":45,"context_line":"        for service in enabled_services:"},{"line_number":46,"context_line":"            enabled_match \u003d [item for item in catalog_services"},{"line_number":47,"context_line":"                             if item \u003d\u003d service[\u0027type\u0027]]"},{"line_number":48,"context_line":"            self.assertNotEqual(enabled_match, [])"},{"line_number":49,"context_line":"        for service in catalog_services:"},{"line_number":50,"context_line":"            service \u003d json.loads(service)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f231b9d_6b8d6130","line":47,"range":{"start_line":47,"start_character":32,"end_line":47,"end_character":55},"in_reply_to":"7f231b9d_16385c3b","updated":"2017-06-19 22:07:49.000000000","message":"If you take a look at the enables_services object, it\u0027s just a list that you\u0027re appending strings to. The item is the object that is being returned by the catalog call, and I think you may actually want item[\u0027type\u0027]\u003d\u003dservice (or something like that).","commit_id":"6778c05ce538215d4e06e7d053f199611ab38ad9"},{"author":{"_account_id":24728,"name":"megan guiney","email":"meganmguiney@gmail.com","username":"mguiney"},"change_message_id":"0fff8d6df6db7ac755f2aa3053d3e274b4d575be","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        # make sure that the enabled services are present in the catalog"},{"line_number":45,"context_line":"        for service in enabled_services:"},{"line_number":46,"context_line":"            enabled_match \u003d [item for item in catalog_services"},{"line_number":47,"context_line":"                             if item \u003d\u003d service[\u0027type\u0027]]"},{"line_number":48,"context_line":"            self.assertNotEqual(enabled_match, [])"},{"line_number":49,"context_line":"        for service in catalog_services:"},{"line_number":50,"context_line":"            service \u003d json.loads(service)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f231b9d_5dfeec6b","line":47,"range":{"start_line":47,"start_character":32,"end_line":47,"end_character":55},"in_reply_to":"7f231b9d_16385c3b","updated":"2017-06-19 22:53:07.000000000","message":"ahhhhhh youre right! i see now. apologies for my lack of understanding of what you were saying, at first. Was initially looking at the checks for catalog_services, which is why i was confused.","commit_id":"6778c05ce538215d4e06e7d053f199611ab38ad9"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"18720f70715d1e981a05582f12ed39e7ae609171","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def test_catalog_standardization(self):"},{"line_number":25,"context_line":"        # standard name scheme source: https://github.com/openstack/"},{"line_number":26,"context_line":"        # service-types-authority/blob/master/service-types.yaml"},{"line_number":27,"context_line":"        standardized_service_values \u003d [\u0027identity\u0027, \u0027compute\u0027,"},{"line_number":28,"context_line":"                                       \u0027image\u0027, \u0027object-store\u0027,"},{"line_number":29,"context_line":"                                       \u0027load-balancer\u0027, \u0027resource-cluster\u0027,"},{"line_number":30,"context_line":"                                       \u0027clustering\u0027, \u0027data-processing\u0027,"},{"line_number":31,"context_line":"                                       \u0027baremetal\u0027, \u0027baremetal-introspection\u0027,"},{"line_number":32,"context_line":"                                       \u0027key-manager\u0027, \u0027ec2-api\u0027, \u0027messaging\u0027,"},{"line_number":33,"context_line":"                                       \u0027resource-optimization\u0027, \u0027message\u0027,"},{"line_number":34,"context_line":"                                       \u0027infra-optim\u0027, \u0027application-catalog\u0027,"},{"line_number":35,"context_line":"                                       \u0027container-infrastructure-management\u0027,"},{"line_number":36,"context_line":"                                       \u0027container-infrastructure\u0027, \u0027search\u0027,"},{"line_number":37,"context_line":"                                       \u0027dns\u0027, \u0027workflow\u0027, \u0027workflowv2\u0027,"},{"line_number":38,"context_line":"                                       \u0027rating\u0027, \u0027operator-policy\u0027, \u0027policy\u0027,"},{"line_number":39,"context_line":"                                       \u0027shared-file-system\u0027, \u0027sharev2\u0027,"},{"line_number":40,"context_line":"                                       \u0027share\u0027,"},{"line_number":41,"context_line":"                                       \u0027data-protection-orchestration\u0027,"},{"line_number":42,"context_line":"                                       \u0027orchestration\u0027, \u0027block-storage\u0027,"},{"line_number":43,"context_line":"                                       \u0027volume\u0027, \u0027volumev2\u0027, \u0027volumev3\u0027,"},{"line_number":44,"context_line":"                                       \u0027alarm\u0027, \u0027alarming\u0027, \u0027meter\u0027,"},{"line_number":45,"context_line":"                                       \u0027metering\u0027, \u0027event\u0027, \u0027events\u0027,"},{"line_number":46,"context_line":"                                       \u0027application-deployment\u0027,"},{"line_number":47,"context_line":"                                       \u0027application_deployment\u0027,"},{"line_number":48,"context_line":"                                       \u0027multi-region-network-automation\u0027,"},{"line_number":49,"context_line":"                                       \u0027tricircle\u0027, \u0027database\u0027,"},{"line_number":50,"context_line":"                                       \u0027application-container\u0027,"},{"line_number":51,"context_line":"                                       \u0027container\u0027, \u0027root-cause-analysis\u0027,"},{"line_number":52,"context_line":"                                       \u0027rca\u0027, \u0027nfv-orchestration\u0027]"},{"line_number":53,"context_line":"        project_names \u003d [\u0027keystone\u0027, \u0027nova\u0027, \u0027glance\u0027, \u0027swift\u0027, \u0027octavia\u0027,"},{"line_number":54,"context_line":"                         \u0027senlin\u0027, \u0027senlin\u0027, \u0027sahara\u0027, \u0027ironic\u0027,"},{"line_number":55,"context_line":"                         \u0027ironic-inspector\u0027, \u0027barbican\u0027, \u0027ec2-api\u0027,"},{"line_number":56,"context_line":"                         \u0027zaqar\u0027, \u0027watcher\u0027, \u0027zaqar\u0027, \u0027watcher\u0027, \u0027murano\u0027,"},{"line_number":57,"context_line":"                         \u0027magnum\u0027, \u0027magnum\u0027, \u0027searchlight\u0027, \u0027designate\u0027,"},{"line_number":58,"context_line":"                         \u0027mistral\u0027, \u0027mistral\u0027, \u0027cloudkitty\u0027, \u0027congress\u0027,"},{"line_number":59,"context_line":"                         \u0027congress\u0027, \u0027manila\u0027, \u0027manila\u0027, \u0027manila\u0027,"},{"line_number":60,"context_line":"                         \u0027karbor\u0027, \u0027heat\u0027, \u0027cinder\u0027, \u0027cinder\u0027, \u0027cinder\u0027,"},{"line_number":61,"context_line":"                         \u0027cinder\u0027, \u0027aodh\u0027, \u0027aodh\u0027, \u0027ceilometer\u0027, \u0027ceilometer\u0027,"},{"line_number":62,"context_line":"                         \u0027panko\u0027, \u0027panko\u0027, \u0027solum\u0027, \u0027solum\u0027, \u0027tricircle\u0027,"},{"line_number":63,"context_line":"                         \u0027tricircle\u0027, \u0027trove\u0027, \u0027zun\u0027, \u0027zun\u0027, \u0027vitrage\u0027,"},{"line_number":64,"context_line":"                         \u0027vitrage\u0027, \u0027tacker\u0027]"},{"line_number":65,"context_line":"        # get list of enabled services using CONF"},{"line_number":66,"context_line":"        enabled_services \u003d []"},{"line_number":67,"context_line":"        for name, serv in zip(project_names, standardized_service_values):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5f201791_87e71b13","line":64,"range":{"start_line":27,"start_character":1,"end_line":64,"end_character":45},"updated":"2017-06-23 23:39:20.000000000","message":"Instead of two decoupled lists, should it be a dict? I\u0027m worried that the names service and project names are going to get out of sync.","commit_id":"24ddb3fa741dcff958cc9b48683f9619e9dbe088"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"ff1df08c9f47ac01054949022c3189ab1dab81fa","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    @decorators.idempotent_id(\u002756b57ced-22b8-4127-9b8a-565dfb0207e2\u0027)"},{"line_number":24,"context_line":"    def test_catalog_standardization(self):"},{"line_number":25,"context_line":"        # standard name scheme source: https://github.com/openstack/"},{"line_number":26,"context_line":"        # service-types-authority/blob/master/service-types.yaml"},{"line_number":27,"context_line":"        standard_service_values \u003d [{\u0027name\u0027: \u0027keystone\u0027, \u0027type\u0027: \u0027identity\u0027},"},{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"},{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f201791_0fd074c8","line":26,"updated":"2017-06-27 17:52:36.000000000","message":"Once it\u0027s published, this test should grab https://service-types.openstack.org/service-types.json rather than having values hard-coded here.","commit_id":"3d06a910bd7a25191c7f2fce2594c1f76458b143"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8a7bd10ed2b80d28edd36884eded9fbd68ffab3f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    @decorators.idempotent_id(\u002756b57ced-22b8-4127-9b8a-565dfb0207e2\u0027)"},{"line_number":24,"context_line":"    def test_catalog_standardization(self):"},{"line_number":25,"context_line":"        # standard name scheme source: https://github.com/openstack/"},{"line_number":26,"context_line":"        # service-types-authority/blob/master/service-types.yaml"},{"line_number":27,"context_line":"        standard_service_values \u003d [{\u0027name\u0027: \u0027keystone\u0027, \u0027type\u0027: \u0027identity\u0027},"},{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"},{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f201791_9baa8616","line":26,"in_reply_to":"5f201791_0fd074c8","updated":"2017-06-27 18:00:13.000000000","message":"I\u0027m actually a bit worried about doing this. I\u0027m not sure we want to have tempest required to pull a json blob from the internet as part of the test run. Besides the random point of failure issue, there isn\u0027t actually a requirement that tempest runs on a machine that has external network connectivity. I can imagine this causing issues for people.","commit_id":"3d06a910bd7a25191c7f2fce2594c1f76458b143"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"ff1df08c9f47ac01054949022c3189ab1dab81fa","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"},{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"},{"line_number":30,"context_line":"                                   {\u0027name\u0027: \u0027swift\u0027, \u0027type\u0027: \u0027object-store\u0027},"},{"line_number":31,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027block-storage\u0027},"},{"line_number":32,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027volume\u0027},"},{"line_number":33,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027volumev2\u0027},"},{"line_number":34,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027volumev3\u0027}]"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f201791_db4d9e3e","line":31,"updated":"2017-06-27 17:52:36.000000000","message":"We should not have the next three lines. They are not official values and we do not want to ensure a cloud has them. They are _allowed_ to have them, but the thing we want, moving forward, is for clouds to start, potentially additionally, to add block-storage as a service in the catalog.\n\nWe could add an additional test that checks for known aliases and verifies that, if they are there, they point to the same URL as the official service-type.","commit_id":"3d06a910bd7a25191c7f2fce2594c1f76458b143"},{"author":{"_account_id":24728,"name":"megan guiney","email":"meganmguiney@gmail.com","username":"mguiney"},"change_message_id":"5e227207e768491c476dae8514cf2f21f9916867","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"},{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"},{"line_number":30,"context_line":"                                   {\u0027name\u0027: \u0027swift\u0027, \u0027type\u0027: \u0027object-store\u0027},"},{"line_number":31,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027block-storage\u0027},"},{"line_number":32,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027volume\u0027},"},{"line_number":33,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027volumev2\u0027},"},{"line_number":34,"context_line":"                                   {\u0027name\u0027: \u0027cinder\u0027, \u0027type\u0027: \u0027volumev3\u0027}]"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f201791_155d1e14","line":31,"in_reply_to":"5f201791_db4d9e3e","updated":"2017-06-27 21:49:01.000000000","message":"Done","commit_id":"3d06a910bd7a25191c7f2fce2594c1f76458b143"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"6a4d2073efb89450a93eaa72cfbc4d539650f03c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            if any(service[\u0027type\u0027] in enabled_service"},{"line_number":48,"context_line":"                   for service in standard_service_values):"},{"line_number":49,"context_line":"                # check to make sure the enabled service is in the catalog"},{"line_number":50,"context_line":"                self.assertIn(enabled_service.encode(\u0027utf-8\u0027),"},{"line_number":51,"context_line":"                              catalog_services)"}],"source_content_type":"text/x-python","patch_set":39,"id":"3f1d235d_4094b444","line":50,"updated":"2017-06-29 16:26:39.000000000","message":"Why are you doing an encode here? This will cause it to be a bytes object and unless I\u0027m missing something this is the reason why the py3 job is failing.","commit_id":"f8da05071cbfffa2ece3c2a6717ca41996a9069f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"deffc0a3072f6ef91c96c8b9ca67055242b1b040","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        # get list of enabled services using CONF"},{"line_number":32,"context_line":"        enabled_services \u003d []"},{"line_number":33,"context_line":"        for service in standard_service_values:"},{"line_number":34,"context_line":"            if\u0027CONF.service_available.\u0027 + service[\u0027name\u0027]:"},{"line_number":35,"context_line":"                enabled_services.append(service[\u0027type\u0027])"},{"line_number":36,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":37,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_523ebf29","line":34,"updated":"2017-06-29 21:47:25.000000000","message":"This doesn\u0027t actually check the values from config, it\u0027s just creating a string. This will always return true. Which means you\u0027ll fail whenever anyone disables a service. This is what\u0027s happening in the python3 job because swift isn\u0027t run there.","commit_id":"9a1da6b2fb2afbccb4467a3cc8e4d3644dd2f9b9"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f9b37b8f89dd4ef7199299a9e795bd533e4efa88","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        # get list of enabled services using CONF"},{"line_number":32,"context_line":"        enabled_services \u003d []"},{"line_number":33,"context_line":"        for service in standard_service_values:"},{"line_number":34,"context_line":"            if\u0027CONF.service_available.\u0027 + service[\u0027name\u0027]:"},{"line_number":35,"context_line":"                enabled_services.append(service[\u0027type\u0027])"},{"line_number":36,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":37,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"}],"source_content_type":"text/x-python","patch_set":40,"id":"3f1d235d_d2788ff9","line":34,"in_reply_to":"3f1d235d_523ebf29","updated":"2017-06-29 21:48:46.000000000","message":"I would just do:\n  getattr(CONF.service_available, service[\u0027name\u0027])","commit_id":"9a1da6b2fb2afbccb4467a3cc8e4d3644dd2f9b9"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"ffab2385e9d863654f049a47b17dc859094f8a41","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                   {\u0027name\u0027: \u0027swift\u0027, \u0027type\u0027: \u0027object-store\u0027}]"},{"line_number":31,"context_line":"        # get list of enabled services using CONF"},{"line_number":32,"context_line":"        enabled_services \u003d []"},{"line_number":33,"context_line":"        for service in standard_service_values:"},{"line_number":34,"context_line":"            if getattr(CONF.service_available, service[\u0027name\u0027]):"},{"line_number":35,"context_line":"                enabled_services.append(service[\u0027type\u0027])"},{"line_number":36,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":37,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":38,"context_line":"        response \u003d resp.response"}],"source_content_type":"text/x-python","patch_set":42,"id":"3f1d235d_8cd79bc0","line":35,"range":{"start_line":33,"start_character":0,"end_line":35,"end_character":56},"updated":"2017-06-30 02:06:21.000000000","message":"Only adding enabled_services that are in the standard_service_values","commit_id":"ae4c7e86e543e4174364e4a45d15d88809189a30"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"ffab2385e9d863654f049a47b17dc859094f8a41","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        for service in catalog:"},{"line_number":44,"context_line":"            catalog_services.append(service[\u0027type\u0027])"},{"line_number":45,"context_line":"        for enabled_service in enabled_services:"},{"line_number":46,"context_line":"            # check to see if the service type is a standardized value"},{"line_number":47,"context_line":"            if any(service[\u0027type\u0027] in enabled_service"},{"line_number":48,"context_line":"                   for service in standard_service_values):"},{"line_number":49,"context_line":"                # check to make sure the enabled service is in the catalog"},{"line_number":50,"context_line":"                self.assertIn(enabled_service, catalog_services)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3f1d235d_ccd593bb","line":48,"range":{"start_line":46,"start_character":0,"end_line":48,"end_character":59},"updated":"2017-06-30 02:06:21.000000000","message":"This check is unnecessary. The enabled_services list is built by iterating through the standard services and seeing if they are expected to be available in lines 33-35. We can drop these and just do a direct check that the enabled_service is in the catalog_services list.","commit_id":"ae4c7e86e543e4174364e4a45d15d88809189a30"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"534ea8227a815e966621ae6b7eb10ba06957faf7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def test_catalog_standardization(self):"},{"line_number":25,"context_line":"        # standard name scheme source: https://github.com/openstack/"},{"line_number":26,"context_line":"        # service-types-authority/blob/master/service-types.yaml"},{"line_number":27,"context_line":"        standard_service_values \u003d [{\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"},{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"},{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027swift\u0027, \u0027type\u0027: \u0027object-store\u0027}]"},{"line_number":30,"context_line":"        # next, we need to GET the catalog using the catalog client"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f1d235d_80abc573","line":27,"updated":"2017-07-10 18:36:39.000000000","message":"Hmm, no keystone. :-(","commit_id":"69a386f3d0249f7791e4fc010a36c84f1d4e9f5a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d4192f71d653ad5a464c21df7bff096661d6a49","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @decorators.idempotent_id(\u002756b57ced-22b8-4127-9b8a-565dfb0207e2\u0027)"},{"line_number":24,"context_line":"    def test_catalog_standardization(self):"},{"line_number":25,"context_line":"        # standard name scheme source: https://github.com/openstack/"},{"line_number":26,"context_line":"        # service-types-authority/blob/master/service-types.yaml"},{"line_number":27,"context_line":"        standard_service_values \u003d [{\u0027name\u0027: \u0027keystone\u0027, \u0027type\u0027: \u0027identity\u0027},"},{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"},{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_51ed98ed","line":26,"range":{"start_line":25,"start_character":39,"end_line":26,"end_character":64},"updated":"2017-07-13 04:55:05.000000000","message":"nit: This url can be included on just 1 line (won\u0027t cause pep8 to fail). Makes it easier to copy/paste.","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d4192f71d653ad5a464c21df7bff096661d6a49","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"},{"line_number":30,"context_line":"                                   {\u0027name\u0027: \u0027swift\u0027, \u0027type\u0027: \u0027object-store\u0027}]"},{"line_number":31,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":32,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":33,"context_line":"        response \u003d resp.response"},{"line_number":34,"context_line":"        catalog \u003d resp[\u0027catalog\u0027]"},{"line_number":35,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":36,"context_line":"        # get list of the service types present in the catalog"},{"line_number":37,"context_line":"        catalog_services \u003d []"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_b1cf4c7e","line":34,"range":{"start_line":32,"start_character":8,"end_line":34,"end_character":33},"updated":"2017-07-13 04:55:05.000000000","message":"Why not do:\n\n    catalog \u003d self.non_admin_catalog_client.show_catalog()[\u0027catalog\u0027]","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":24728,"name":"megan guiney","email":"meganmguiney@gmail.com","username":"mguiney"},"change_message_id":"4a273c96bc1cd463bff80915ebe40b2127618a52","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"},{"line_number":30,"context_line":"                                   {\u0027name\u0027: \u0027swift\u0027, \u0027type\u0027: \u0027object-store\u0027}]"},{"line_number":31,"context_line":"        # next, we need to GET the catalog using the catalog client"},{"line_number":32,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":33,"context_line":"        response \u003d resp.response"},{"line_number":34,"context_line":"        catalog \u003d resp[\u0027catalog\u0027]"},{"line_number":35,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":36,"context_line":"        # get list of the service types present in the catalog"},{"line_number":37,"context_line":"        catalog_services \u003d []"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_409263f8","line":34,"range":{"start_line":32,"start_character":8,"end_line":34,"end_character":33},"in_reply_to":"1f1a1f67_b1cf4c7e","updated":"2017-07-13 06:32:26.000000000","message":"Done","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":24728,"name":"megan guiney","email":"meganmguiney@gmail.com","username":"mguiney"},"change_message_id":"4a273c96bc1cd463bff80915ebe40b2127618a52","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        resp \u003d self.non_admin_catalog_client.show_catalog()"},{"line_number":33,"context_line":"        response \u003d resp.response"},{"line_number":34,"context_line":"        catalog \u003d resp[\u0027catalog\u0027]"},{"line_number":35,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":36,"context_line":"        # get list of the service types present in the catalog"},{"line_number":37,"context_line":"        catalog_services \u003d []"},{"line_number":38,"context_line":"        for service in catalog:"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_c082f3c8","line":35,"range":{"start_line":35,"start_character":7,"end_line":35,"end_character":46},"updated":"2017-07-13 06:32:26.000000000","message":"Removing this line. Upon a second check I realized that the catalog client already does this check for us, so this is unnecessary. The other perk in removing this is that this check was the only reason not to use the briefer version of the catalog retrieval call, which allows for the above condensation to be made.","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d4192f71d653ad5a464c21df7bff096661d6a49","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        catalog \u003d resp[\u0027catalog\u0027]"},{"line_number":35,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":36,"context_line":"        # get list of the service types present in the catalog"},{"line_number":37,"context_line":"        catalog_services \u003d []"},{"line_number":38,"context_line":"        for service in catalog:"},{"line_number":39,"context_line":"            catalog_services.append(service[\u0027type\u0027])"},{"line_number":40,"context_line":"        for service in standard_service_values:"},{"line_number":41,"context_line":"            # if service enabled, check if it has a standard typevalue"},{"line_number":42,"context_line":"            if service[\u0027name\u0027] \u003d\u003d \u0027keystone\u0027 or\\"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_31a1fcaa","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":52},"updated":"2017-07-13 04:55:05.000000000","message":"Can be re-expressed in shorter lines:\n\n    catalog_services \u003d [s[\u0027type\u0027] for s in catalog]","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":24728,"name":"megan guiney","email":"meganmguiney@gmail.com","username":"mguiney"},"change_message_id":"4a273c96bc1cd463bff80915ebe40b2127618a52","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        catalog \u003d resp[\u0027catalog\u0027]"},{"line_number":35,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":36,"context_line":"        # get list of the service types present in the catalog"},{"line_number":37,"context_line":"        catalog_services \u003d []"},{"line_number":38,"context_line":"        for service in catalog:"},{"line_number":39,"context_line":"            catalog_services.append(service[\u0027type\u0027])"},{"line_number":40,"context_line":"        for service in standard_service_values:"},{"line_number":41,"context_line":"            # if service enabled, check if it has a standard typevalue"},{"line_number":42,"context_line":"            if service[\u0027name\u0027] \u003d\u003d \u0027keystone\u0027 or\\"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_80763bd8","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":52},"in_reply_to":"1f1a1f67_0c7ee7e3","updated":"2017-07-13 06:32:26.000000000","message":"Clarity was indeed the thought, in expanding the format of this loop. Past patches used the format you cited, but I expanded it for the sake of readability","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"c98892e7cf8bc629b1465fcdc9dba1f44c340704","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        catalog \u003d resp[\u0027catalog\u0027]"},{"line_number":35,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":36,"context_line":"        # get list of the service types present in the catalog"},{"line_number":37,"context_line":"        catalog_services \u003d []"},{"line_number":38,"context_line":"        for service in catalog:"},{"line_number":39,"context_line":"            catalog_services.append(service[\u0027type\u0027])"},{"line_number":40,"context_line":"        for service in standard_service_values:"},{"line_number":41,"context_line":"            # if service enabled, check if it has a standard typevalue"},{"line_number":42,"context_line":"            if service[\u0027name\u0027] \u003d\u003d \u0027keystone\u0027 or\\"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_0c7ee7e3","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":52},"in_reply_to":"1f1a1f67_31a1fcaa","updated":"2017-07-13 05:44:42.000000000","message":"I personally prefer clarity over brevity.","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fa1448ff949d4955fa7b40d20d554ea67ec0a73b","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @decorators.idempotent_id(\u002756b57ced-22b8-4127-9b8a-565dfb0207e2\u0027)"},{"line_number":24,"context_line":"    def test_catalog_standardization(self):"},{"line_number":25,"context_line":"        # standard name scheme source: https://github.com/openstack/service-types-authority/blob/master/service-types.yaml"},{"line_number":26,"context_line":"        standard_service_values \u003d [{\u0027name\u0027: \u0027keystone\u0027, \u0027type\u0027: \u0027identity\u0027},"},{"line_number":27,"context_line":"                                   {\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"},{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027glance\u0027, \u0027type\u0027: \u0027image\u0027},"}],"source_content_type":"text/x-python","patch_set":51,"id":"1f1a1f67_7bb85775","line":25,"updated":"2017-07-13 17:13:37.000000000","message":"This is causing the pep8 failure. It\u0027ll flag any lines greater thatn 80 characters, that review comment was wrong on the previous rev","commit_id":"bc72609895bc00ab3f428a1b7cce0030e4650db0"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1dc0888fff9c9fd453828259047d99f3136fa63a","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @decorators.idempotent_id(\u002756b57ced-22b8-4127-9b8a-565dfb0207e2\u0027)"},{"line_number":24,"context_line":"    def test_catalog_standardization(self):"},{"line_number":25,"context_line":"        # standard name scheme source: https://github.com/openstack/"},{"line_number":26,"context_line":"        # service-types-authority/blob/master/service-types.yaml"},{"line_number":27,"context_line":"        standard_service_values \u003d [{\u0027name\u0027: \u0027keystone\u0027, \u0027type\u0027: \u0027identity\u0027},"},{"line_number":28,"context_line":"                                   {\u0027name\u0027: \u0027nova\u0027, \u0027type\u0027: \u0027compute\u0027},"}],"source_content_type":"text/x-python","patch_set":52,"id":"1f1a1f67_35d668c5","line":25,"updated":"2017-07-13 20:04:51.000000000","message":"Oh sorry I didn\u0027t  catch this before, but we should probably use the infra mirror link here instead of the github one:\n\nhttp://git.openstack.org/cgit/openstack/service-types-authority/tree/service-types.yaml\n\nThe official mirror is at git.openstack.org","commit_id":"8afaaa17c264e30d4bf8637c604e24d18494b374"}],"tempest/lib/common/cred_client.py":[{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"a578b8c8a79494213d76414af6f09d4ba9084eed","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, identity_client, projects_client,"},{"line_number":35,"context_line":"                 users_client, roles_client, catalog_client):"},{"line_number":36,"context_line":"        # The client implies version and credentials"},{"line_number":37,"context_line":"        self.catalog_client \u003d catalog_client"},{"line_number":38,"context_line":"        self.identity_client \u003d identity_client"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_91a58bb8","line":35,"updated":"2017-06-10 03:24:00.000000000","message":"Please check other places if they are calling this constructor without put catalog_client.\n\nP/s: we can use catalog_client\u003dNone as a default or something like that to use catalog_client variable as a not required variable.","commit_id":"747477fac94e57cdce118f353d44386f32ee809f"}],"tempest/lib/services/identity/v3/catalog_client.py":[{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"91112bc86710339e45bdf1b221a8b26edeb25d99","unresolved":false,"context_lines":[{"line_number":14,"context_line":"http://developer.openstack.org/api-ref/identity/v3/index.html#credentials"},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_serialization import jsonutils as json"},{"line_number":18,"context_line":"from tempest.lib.common import rest_client"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9f0e0f27_fa96e594","line":17,"updated":"2017-06-09 07:37:34.000000000","message":"Please separate third-party library and local import","commit_id":"abee49f34633adb2552655a9fa5d6aa9e1d83e41"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"\"\"\""},{"line_number":14,"context_line":"http://developer.openstack.org/api-ref/identity/v3/index.html#credentials"},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_serialization import jsonutils as json"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_542c7846","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":73},"updated":"2017-07-12 17:22:47.000000000","message":"https://developer.openstack.org/api-ref/identity/v3/index.html#get-service-catalog","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"}],"tempest/tests/common/test_dynamic_creds.py":[{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"29618f74930f9307f453fa791593f684b65e497b","unresolved":false,"context_lines":[{"line_number":626,"context_line":"    roles_client \u003d v3_roles_client"},{"line_number":627,"context_line":"    tenants_client \u003d v3_projects_client"},{"line_number":628,"context_line":"    users_client \u003d v3_users_client"},{"line_number":629,"context_line":"    catalog_client \u003d v3_catalog_client"},{"line_number":630,"context_line":"    token_client_class \u003d token_client.V3TokenClient"},{"line_number":631,"context_line":"    fake_response \u003d fake_identity._fake_v3_response"},{"line_number":632,"context_line":"    tenants_client_class \u003d tenants_client.ProjectsClient"}],"source_content_type":"text/x-python","patch_set":18,"id":"7f231b9d_b6551d20","line":629,"updated":"2017-06-10 02:27:11.000000000","message":"Did you forget import this?","commit_id":"92497181c16f9a0eeda9c42f4cb4c9a8289ac7ae"}],"tempest/tests/lib/services/identity/v3/test_catalog_client.py":[{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"b8e1ae87a91f73e08d9b01017fbdf68ff25eba92","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":11,"context_line":"# limitations under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from tempest.lib.services.identity.v3.import catalog_client"},{"line_number":14,"context_line":"from tempest.tests.lib import fake_auth_provider"},{"line_number":15,"context_line":"from tempest.tests.lib.services import base"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df140735_f27d37b2","line":13,"updated":"2017-06-04 03:18:05.000000000","message":".import ?","commit_id":"27a297ac0a2914be1d8a45f1622f8e4a6f47376a"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"67d9f4cd72c35a6a508be7d497ce346ceaf3b582","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        ],"},{"line_number":35,"context_line":"        \"links\": {"},{"line_number":36,"context_line":"            \"self\": \"http://localhost/identity/v3/catalog\","},{"line_number":37,"context_line":"            \"previous\": null,"},{"line_number":38,"context_line":"            \"next\": null"},{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_26400da5","line":37,"updated":"2017-06-04 12:12:43.000000000","message":"null or None?","commit_id":"bb3934eb8f4a82451587a5b927edb6c721bdaee6"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"67d9f4cd72c35a6a508be7d497ce346ceaf3b582","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(TestProjectsClient, self).setUp()"},{"line_number":44,"context_line":"        fake_auth \u003d fake_auth_provider.FakeAuthProvider()"},{"line_number":45,"context_line":"        self.client \u003d catalog_client.CatalogClient(fake_auth)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_c6d4b1eb","line":43,"updated":"2017-06-04 12:12:43.000000000","message":"super(TestCatalogClient, self).setUp() instead ?","commit_id":"bb3934eb8f4a82451587a5b927edb6c721bdaee6"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"ac5dea06c955ec887a1d1af95afad7b741e71fa1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        ],"},{"line_number":35,"context_line":"        \"links\": {"},{"line_number":36,"context_line":"            \"self\": \"http://localhost/identity/v3/catalog\","},{"line_number":37,"context_line":"            \"previous\": null,"},{"line_number":38,"context_line":"            \"next\": null"},{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f0e0f27_bad98d23","line":37,"updated":"2017-06-09 07:54:21.000000000","message":"Did you still forget this? null or None? What thing did you want in this?","commit_id":"abee49f34633adb2552655a9fa5d6aa9e1d83e41"},{"author":{"_account_id":19930,"name":"Dai Dang Van","email":"daidv@omzcloud.vn","username":"daidv"},"change_message_id":"ac5dea06c955ec887a1d1af95afad7b741e71fa1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"links\": {"},{"line_number":36,"context_line":"            \"self\": \"http://localhost/identity/v3/catalog\","},{"line_number":37,"context_line":"            \"previous\": null,"},{"line_number":38,"context_line":"            \"next\": null"},{"line_number":39,"context_line":"        }"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9f0e0f27_9ad6c9f1","line":38,"updated":"2017-06-09 07:54:21.000000000","message":"Ditto","commit_id":"abee49f34633adb2552655a9fa5d6aa9e1d83e41"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"534ea8227a815e966621ae6b7eb10ba06957faf7","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                        \"url\": \"http://localhost:5000\""},{"line_number":28,"context_line":"                    },"},{"line_number":29,"context_line":"                ],"},{"line_number":30,"context_line":"                \"id\": \"4363ae44bdf34a3981fde3b823cb9aa2\","},{"line_number":31,"context_line":"                \"type\": \"identity\","},{"line_number":32,"context_line":"                \"name\": \"keystone\""},{"line_number":33,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f1d235d_a09ec151","line":30,"updated":"2017-07-10 18:36:39.000000000","message":"We\u0027re not checking keystone any more in the test, so I\u0027m not sure this test will do anything.","commit_id":"69a386f3d0249f7791e4fc010a36c84f1d4e9f5a"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"04e232c71394a1aabef07d99484c2985600334ae","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        fake_auth \u003d fake_auth_provider.FakeAuthProvider()"},{"line_number":72,"context_line":"        self.client \u003d catalog_client.CatalogClient(fake_auth)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _test_show_catalog(self, bytes_body\u003dFalse):"},{"line_number":75,"context_line":"        self.check_service_client_function("},{"line_number":76,"context_line":"            self.client.show_catalog,"},{"line_number":77,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.get\u0027,"}],"source_content_type":"text/x-python","patch_set":47,"id":"3f1d235d_921c0614","line":74,"updated":"2017-07-12 01:32:27.000000000","message":"This test isn\u0027t actually run anywhere. Test discovery will run match \u0027test_.*\u0027. The normal pattern here is to create 2 methods that call this private function. One with bytes\u003dTrue the other with bytes\u003dFalse","commit_id":"5413dbf1c694f949f70fef88729abf7baa585e1b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        fake_auth \u003d fake_auth_provider.FakeAuthProvider()"},{"line_number":72,"context_line":"        self.client \u003d catalog_client.CatalogClient(fake_auth)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_show_catalog(self, bytes_body):"},{"line_number":75,"context_line":"        self.__test_show_catalog(bytes_body)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_show_catalog_no_bytes_body(self):"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_74a41409","line":74,"range":{"start_line":74,"start_character":32,"end_line":74,"end_character":42},"updated":"2017-07-12 17:22:47.000000000","message":"Remove this arg, it\u0027s unused.","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        fake_auth \u003d fake_auth_provider.FakeAuthProvider()"},{"line_number":72,"context_line":"        self.client \u003d catalog_client.CatalogClient(fake_auth)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_show_catalog(self, bytes_body):"},{"line_number":75,"context_line":"        self.__test_show_catalog(bytes_body)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_show_catalog_no_bytes_body(self):"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_949fb0b3","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":25},"updated":"2017-07-12 17:22:47.000000000","message":"test_show_catalog_with_bytes_body","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.client \u003d catalog_client.CatalogClient(fake_auth)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_show_catalog(self, bytes_body):"},{"line_number":75,"context_line":"        self.__test_show_catalog(bytes_body)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_show_catalog_no_bytes_body(self):"},{"line_number":78,"context_line":"        self.__test_show_catalog(False)"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_9488d071","line":75,"range":{"start_line":75,"start_character":33,"end_line":75,"end_character":43},"updated":"2017-07-12 17:22:47.000000000","message":"bytes_body\u003dTrue","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def test_show_catalog(self, bytes_body):"},{"line_number":75,"context_line":"        self.__test_show_catalog(bytes_body)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_show_catalog_no_bytes_body(self):"},{"line_number":78,"context_line":"        self.__test_show_catalog(False)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_3497bc93","line":77,"range":{"start_line":77,"start_character":26,"end_line":77,"end_character":39},"updated":"2017-07-12 17:22:47.000000000","message":"with_str_body","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.__test_show_catalog(bytes_body)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_show_catalog_no_bytes_body(self):"},{"line_number":78,"context_line":"        self.__test_show_catalog(False)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @classmethod"},{"line_number":81,"context_line":"    def __test_show_catalog(cls, bytes_body):"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_747d346d","line":78,"range":{"start_line":78,"start_character":33,"end_line":78,"end_character":38},"updated":"2017-07-12 17:22:47.000000000","message":"Remove.","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def test_show_catalog_no_bytes_body(self):"},{"line_number":78,"context_line":"        self.__test_show_catalog(False)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @classmethod"},{"line_number":81,"context_line":"    def __test_show_catalog(cls, bytes_body):"},{"line_number":82,"context_line":"        cls.check_service_client_function("},{"line_number":83,"context_line":"            cls.client.show_catalog,"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_54747899","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":16},"updated":"2017-07-12 17:22:47.000000000","message":"This shouldn\u0027t be a classmethod.","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.__test_show_catalog(False)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @classmethod"},{"line_number":81,"context_line":"    def __test_show_catalog(cls, bytes_body):"},{"line_number":82,"context_line":"        cls.check_service_client_function("},{"line_number":83,"context_line":"            cls.client.show_catalog,"},{"line_number":84,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.get\u0027,"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_146600ef","line":81,"range":{"start_line":81,"start_character":8,"end_line":81,"end_character":27},"updated":"2017-07-12 17:22:47.000000000","message":"\"_test_show_catalog\" is sufficient.","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.__test_show_catalog(False)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @classmethod"},{"line_number":81,"context_line":"    def __test_show_catalog(cls, bytes_body):"},{"line_number":82,"context_line":"        cls.check_service_client_function("},{"line_number":83,"context_line":"            cls.client.show_catalog,"},{"line_number":84,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.get\u0027,"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_f4b7043a","line":81,"range":{"start_line":81,"start_character":33,"end_line":81,"end_character":43},"updated":"2017-07-12 17:22:47.000000000","message":"bytes_body\u003dFalse","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    @classmethod"},{"line_number":81,"context_line":"    def __test_show_catalog(cls, bytes_body):"},{"line_number":82,"context_line":"        cls.check_service_client_function("},{"line_number":83,"context_line":"            cls.client.show_catalog,"},{"line_number":84,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.get\u0027,"},{"line_number":85,"context_line":"            cls.FAKE_PROJECT_INFO,"},{"line_number":86,"context_line":"            bytes_body)"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_94ed7027","line":83,"range":{"start_line":83,"start_character":12,"end_line":83,"end_character":15},"updated":"2017-07-12 17:22:47.000000000","message":"Change instances of cls to self.","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"531fcb53278c9da408d179e29edb4d097c02b385","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        cls.check_service_client_function("},{"line_number":83,"context_line":"            cls.client.show_catalog,"},{"line_number":84,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.get\u0027,"},{"line_number":85,"context_line":"            cls.FAKE_PROJECT_INFO,"},{"line_number":86,"context_line":"            bytes_body)"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f1a1f67_34f8dcc2","line":85,"range":{"start_line":85,"start_character":16,"end_line":85,"end_character":33},"updated":"2017-07-12 17:22:47.000000000","message":"FAKE_CATALOG_INFO","commit_id":"174296976c2aa87458fac35ef012925b1a94ab96"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d4192f71d653ad5a464c21df7bff096661d6a49","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    }"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def setUp(self):"},{"line_number":70,"context_line":"        super(TestCatalogClient, self, None, None).setUp()"},{"line_number":71,"context_line":"        fake_auth \u003d fake_auth_provider.FakeAuthProvider()"},{"line_number":72,"context_line":"        self.client \u003d catalog_client.CatalogClient(fake_auth)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_b17d0c1e","line":70,"range":{"start_line":70,"start_character":39,"end_line":70,"end_character":49},"updated":"2017-07-13 04:55:05.000000000","message":"These should be removed.","commit_id":"27ff63864ec13c1bd3d2c0d41b70698e20b5d528"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fa1448ff949d4955fa7b40d20d554ea67ec0a73b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def setUp(self):"},{"line_number":70,"context_line":"        super(TestCatalogClient, self).setUp()"},{"line_number":71,"context_line":"        fake_auth \u003d fake_auth_provider.FakeAuthProvider()"},{"line_number":72,"context_line":"        self.client \u003d catalog_client.CatalogClient(fake_auth)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_show_catalog_with_bytes_body(self):"},{"line_number":75,"context_line":"        self._test_show_catalog(bytes_body\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":51,"id":"1f1a1f67_befffdff","line":72,"updated":"2017-07-13 17:13:37.000000000","message":"This is just missing the string args for service and region. Add those to the init like:\n\n  self.client \u003d catalog_client.CatalogClient(fake_auth, \u0027identity\u0027, \u0027RegionOne\u0027)\n\n(with the line wrapping needed to fit it in 80 chars)","commit_id":"bc72609895bc00ab3f428a1b7cce0030e4650db0"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fa1448ff949d4955fa7b40d20d554ea67ec0a73b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def test_show_catalog_with_str_body(self):"},{"line_number":78,"context_line":"        self._test_show_catalog()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _test_show_catalog(self, bytes_body):"},{"line_number":81,"context_line":"        self.check_service_client_function("},{"line_number":82,"context_line":"            self.client.show_catalog,"},{"line_number":83,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.get\u0027,"}],"source_content_type":"text/x-python","patch_set":51,"id":"1f1a1f67_7e2285a6","line":80,"updated":"2017-07-13 17:13:37.000000000","message":"You should probably set a default on bytes_body because in L78 you\u0027re calling this without an arg. Just doing:\n\n  bytes_body\u003dFalse\n\nhere will fix it, or you can just add do:\n\n  self._test_show_catalog(False)\n\non L78","commit_id":"bc72609895bc00ab3f428a1b7cce0030e4650db0"}]}
