)]}'
{"tempest/api/identity/base.py":[{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"c8a33710cca42d1717d507ba476274793d7c6ccd","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def skip_checks(cls):"},{"line_number":32,"context_line":"        if (CONF.identity.endpoint_type.startswith(\u0027admin\u0027) and"},{"line_number":33,"context_line":"                \u0027admin\u0027 not in cls.credentials):"},{"line_number":34,"context_line":"            skip_msg \u003d (\"%s skipped as Keystone admin endpoint was set.\\n\""},{"line_number":35,"context_line":"                        \"To test non-admin actions group/name [identity]/\""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_1f91f846","line":32,"updated":"2015-07-09 16:19:35.000000000","message":"This check is necessary because some tests  for non-admin endpoint fail with non-admin creds and admin endpoint.","commit_id":"70c282968575719a2c0d00111bf67c3b105d6d3d"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"c8a33710cca42d1717d507ba476274793d7c6ccd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                        \"endpoint_type should be set as \u0027publicURL\u0027.\""},{"line_number":37,"context_line":"                        % cls.__name__)"},{"line_number":38,"context_line":"        elif (not CONF.identity.endpoint_type.startswith(\u0027admin\u0027) and"},{"line_number":39,"context_line":"                \u0027admin\u0027 in cls.credentials):"},{"line_number":40,"context_line":"            skip_msg \u003d (\"%s skipped as Keystone non-admin endpoint was set.\\n\""},{"line_number":41,"context_line":"                        \"To test admin actions group/name [identity]/\""},{"line_number":42,"context_line":"                        \"endpoint_type should be set as \u0027adminURL\u0027.\""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_3f095c95","line":39,"updated":"2015-07-09 16:19:35.000000000","message":"This check allows to skip admin tests when only publicUrl is available. Such behavior looks preferable then failures.","commit_id":"70c282968575719a2c0d00111bf67c3b105d6d3d"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"3d912df3fe0474117c4c84031d6aad85ceea6cd2","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def setup_clients(cls):"},{"line_number":94,"context_line":"        super(BaseIdentityV2AdminTest, cls).setup_clients()"},{"line_number":95,"context_line":"        cls.client \u003d cls.os_adm.identity_client"},{"line_number":96,"context_line":"        cls.non_admin_client \u003d cls.os.identity_client"},{"line_number":97,"context_line":"        cls.token_client \u003d cls.os_adm.token_client"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_874c20c9","line":96,"updated":"2015-08-06 10:57:29.000000000","message":"The patch looks good to me. The only thing I didn\u0027t get is why we need this line here?","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"9d645f9ea210b034ba06fc1fdf5f6e5b12e665f6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def setup_clients(cls):"},{"line_number":94,"context_line":"        super(BaseIdentityV2AdminTest, cls).setup_clients()"},{"line_number":95,"context_line":"        cls.client \u003d cls.os_adm.identity_client"},{"line_number":96,"context_line":"        cls.non_admin_client \u003d cls.os.identity_client"},{"line_number":97,"context_line":"        cls.token_client \u003d cls.os_adm.token_client"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_fb79f982","line":96,"in_reply_to":"1a4dcd0f_357692a4","updated":"2015-08-06 12:00:42.000000000","message":"Thanks, got it :)","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"62bba91f9f10ad4e05154f20b5ea056f2b45c9cb","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def setup_clients(cls):"},{"line_number":94,"context_line":"        super(BaseIdentityV2AdminTest, cls).setup_clients()"},{"line_number":95,"context_line":"        cls.client \u003d cls.os_adm.identity_client"},{"line_number":96,"context_line":"        cls.non_admin_client \u003d cls.os.identity_client"},{"line_number":97,"context_line":"        cls.token_client \u003d cls.os_adm.token_client"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_357692a4","line":96,"in_reply_to":"1a4dcd0f_874c20c9","updated":"2015-08-06 11:21:56.000000000","message":"The idea of cls.non_admin_client in api/identity/admin tests is not the same as cls.os.identity_public_client.\ncls.non_admin_client here is a client with primary credentials and admin endpoint. By means of this negative admin tests work, for example, /api/identity/admin/v2/test_roles_negative.py, where tempest checks that usual user (cls.non_admin_client) that goes to admin endpoint cannot act like admin and gets the Forbidden error.\n\nSince BaseIdentityV2AdminTest class is inherited from BaseIdentityV2Test where there is cls.non_admin_client with another idea (it is usual user with public endpoint and we check expected user actions) we redefine cls.non_admin_client here, because negative admin tests won\u0027t work since they also use cls.non_admin_client but it should try to go to admin endpoint.","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"}],"tempest/api/identity/v2/test_tenants.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fc919ff0cbe325c01c382106252516234b8e51f0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def resource_setup(cls):"},{"line_number":24,"context_line":"        super(IdentityTenantsTest, cls).resource_setup()"},{"line_number":25,"context_line":"        cls.creds \u003d cls.os.credentials"},{"line_number":26,"context_line":"        cls.username \u003d cls.creds.username"},{"line_number":27,"context_line":"        cls.password \u003d cls.creds.password"},{"line_number":28,"context_line":"        cls.tenant_name \u003d cls.creds.tenant_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_9b43fe12","line":25,"updated":"2015-08-06 19:27:58.000000000","message":"Why are you setting this to a class variable it\u0027s never being used anywhere","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"0721a9e9864b8c6cdbbf62a0438ad063287f822a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    @classmethod"},{"line_number":23,"context_line":"    def resource_setup(cls):"},{"line_number":24,"context_line":"        super(IdentityTenantsTest, cls).resource_setup()"},{"line_number":25,"context_line":"        cls.creds \u003d cls.os.credentials"},{"line_number":26,"context_line":"        cls.username \u003d cls.creds.username"},{"line_number":27,"context_line":"        cls.password \u003d cls.creds.password"},{"line_number":28,"context_line":"        cls.tenant_name \u003d cls.creds.tenant_name"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_0d14814a","line":25,"in_reply_to":"1a4dcd0f_9b43fe12","updated":"2015-08-07 13:00:39.000000000","message":"Done","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fc919ff0cbe325c01c382106252516234b8e51f0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        resp \u003d self.non_admin_client.list_tenants()"},{"line_number":33,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":34,"context_line":"        for tenant in resp:"},{"line_number":35,"context_line":"            self.non_admin_token_client.auth(self.username,"},{"line_number":36,"context_line":"                                             self.password,"},{"line_number":37,"context_line":"                                             tenant[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_bba4bab9","line":35,"updated":"2015-08-06 19:27:58.000000000","message":"So the test is basically that auth doesn\u0027t explode on any of the tenants that are returned in a list? This is kinda a weak test you\u0027re not really verifying much. Especially given the tenant isolation case this will likely be a list of 1 and you\u0027re not doing anything different from what every single api call is doing under the covers.\n\nYou should add additional asserts here to differentiate this from everything that tempest does automatically. Or create additional tenants, or verify the negative case. But as it stands now this doesn\u0027t really add much","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"23851c24cff88ca61a095efc97b576ab8ac02d3f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        resp \u003d self.non_admin_client.list_tenants()"},{"line_number":33,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":34,"context_line":"        for tenant in resp:"},{"line_number":35,"context_line":"            self.non_admin_token_client.auth(self.username,"},{"line_number":36,"context_line":"                                             self.password,"},{"line_number":37,"context_line":"                                             tenant[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_01aa0a85","line":35,"in_reply_to":"1a4dcd0f_bba4bab9","updated":"2015-08-07 09:18:33.000000000","message":"@Matthew Treinish, You absolutely right, this test doesn\u0027t verifying to much. But, it is because non-admin Identity API is very limited. It doesn\u0027t allow to create anything, except tokens. We can improve this test in following patches.\n\nThis test is quite important in terms of interoperability, because it is non-admin test for Keystone API. Right now there are only 2 Identity tests in Defcore required list. So? our main goal - is to increase this amount. \n\nSure thing, this case can be implicitly covered in non-admin tests for other components. But, as far as you know explicit better than implicit)","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"5bd619f101b5a6b3bf9f42ea08beb92a8fd45201","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        cls.tenant_name \u003d cls.os.credentials.tenant_name"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @test.idempotent_id(\u0027ecae2459-243d-4ba1-ad02-65f15dc82b78\u0027)"},{"line_number":30,"context_line":"    def test_list_tenants_returns_authorized_tenants(self):"},{"line_number":31,"context_line":"        resp \u003d self.non_admin_client.list_tenants()"},{"line_number":32,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":33,"context_line":"        for tenant in resp:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_41ff96aa","line":30,"updated":"2015-08-07 18:08:40.000000000","message":"This test still tests absolutely nothing. Seriously you would not even get to the point of execution if this did not work. If you want to add a test that just does auth you need at least verify more then just not exploding and a body exists. (I gave some suggestions in my previous review.)","commit_id":"788ef71a0d79f039a0fd87620745b93ee77d9dfd"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"fca00d93c023b18ede826c46175359d0af8de4dd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        cls.tenant_name \u003d cls.os.credentials.tenant_name"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @test.idempotent_id(\u0027ecae2459-243d-4ba1-ad02-65f15dc82b78\u0027)"},{"line_number":30,"context_line":"    def test_list_tenants_returns_authorized_tenants(self):"},{"line_number":31,"context_line":"        resp \u003d self.non_admin_client.list_tenants()"},{"line_number":32,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":33,"context_line":"        for tenant in resp:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_1ed97383","line":30,"in_reply_to":"1a4dcd0f_41ff96aa","updated":"2015-08-11 11:52:22.000000000","message":"Done","commit_id":"788ef71a0d79f039a0fd87620745b93ee77d9dfd"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"dfe63aebcdeafee876991e878e8165ef0a20cc5b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        cls.tenant_name \u003d cls.os.credentials.tenant_name"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @test.idempotent_id(\u0027ecae2459-243d-4ba1-ad02-65f15dc82b78\u0027)"},{"line_number":30,"context_line":"    def test_list_tenants_returns_authorized_tenants(self):"},{"line_number":31,"context_line":"        resp \u003d self.non_admin_client.list_tenants()"},{"line_number":32,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":33,"context_line":"        for tenant in resp:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_52a3b94f","line":30,"in_reply_to":"1a4dcd0f_41ff96aa","updated":"2015-08-10 07:22:11.000000000","message":"This is a test of the non-admin identity API, but that does not mean it cannot use the admin API for the preparation part of it (like many other tests do).\nI know that requiring admin credentials would make the test less useful from a defcore point of view, but I agree with Matt that this does not test much.\n\nAs I understand it, what you try to verify here is that the list_tenant only returns tenants that the user whose token is being used is allowed to see.\nTo test something you need to setup some non-obvious case, such as having more than one tenant associated to a user or so.\n\nIf you really want to avoid using an admin token to setup your test scenario, you could require your users to be pre-provisioned.  E.g. obtain two tenants from the credentials provider which belong to the same user. Note, there may be changes required to credentials provider to do this, as you can requests creds by role or type, but not by user.","commit_id":"788ef71a0d79f039a0fd87620745b93ee77d9dfd"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"fca00d93c023b18ede826c46175359d0af8de4dd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        cls.tenant_name \u003d cls.os.credentials.tenant_name"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @test.idempotent_id(\u0027ecae2459-243d-4ba1-ad02-65f15dc82b78\u0027)"},{"line_number":30,"context_line":"    def test_list_tenants_returns_authorized_tenants(self):"},{"line_number":31,"context_line":"        resp \u003d self.non_admin_client.list_tenants()"},{"line_number":32,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":33,"context_line":"        for tenant in resp:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_fedda770","line":30,"in_reply_to":"1a4dcd0f_52a3b94f","updated":"2015-08-11 11:52:22.000000000","message":"Done","commit_id":"788ef71a0d79f039a0fd87620745b93ee77d9dfd"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8beddc8327524fdaa137d07be58efb4ef256da9a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def skip_checks(cls):"},{"line_number":29,"context_line":"        super(IdentityTenantsTest, cls).skip_checks()"},{"line_number":30,"context_line":"        if not CONF.identity.alt_tenant_name:"},{"line_number":31,"context_line":"            msg \u003d \"Alt user credentials are not configured.\""},{"line_number":32,"context_line":"            raise cls.skipException(msg)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_fe42703d","line":30,"updated":"2015-08-11 16:55:17.000000000","message":"This ignores the credential provider mechanisms in place. You should use the generic interfaces provided to check for the existence of users. For an example look at:\n\nhttp://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/test_authorization.py","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"2c34280568abec1f07c9bb3374ff42cfec4d6b97","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    @classmethod"},{"line_number":28,"context_line":"    def skip_checks(cls):"},{"line_number":29,"context_line":"        super(IdentityTenantsTest, cls).skip_checks()"},{"line_number":30,"context_line":"        if not CONF.identity.alt_tenant_name:"},{"line_number":31,"context_line":"            msg \u003d \"Alt user credentials are not configured.\""},{"line_number":32,"context_line":"            raise cls.skipException(msg)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_4f4b82b1","line":30,"in_reply_to":"1a4dcd0f_fe42703d","updated":"2015-08-12 15:43:34.000000000","message":"Done","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8beddc8327524fdaa137d07be58efb4ef256da9a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            raise cls.skipException(msg)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @test.idempotent_id(\u0027ecae2459-243d-4ba1-ad02-65f15dc82b78\u0027)"},{"line_number":35,"context_line":"    def test_list_tenants_returns_authorized_tenants(self):"},{"line_number":36,"context_line":"        alt_tenant \u003d CONF.identity.alt_tenant_name"},{"line_number":37,"context_line":"        resp \u003d self.non_admin_client.list_tenants()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_dee1b42b","line":35,"updated":"2015-08-11 16:55:17.000000000","message":"I don\u0027t think this is the most descriptive name. The punchline of the test is the negative check at the bottom of the method, maybe that should be part of the test name.","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8beddc8327524fdaa137d07be58efb4ef256da9a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # and there is enough isolation between tenant and alt_tenant, thus"},{"line_number":41,"context_line":"        # user cannot see alt_tenant in a response list and auth using"},{"line_number":42,"context_line":"        # alt_tenant instead of tenant"},{"line_number":43,"context_line":"        if any((tenant[\u0027name\u0027] \u003d\u003d alt_tenant for tenant in resp)):"},{"line_number":44,"context_line":"            raise self.skipException(\"Not enough isolation. Both user and \""},{"line_number":45,"context_line":"                                     \"alt_user are presented in tenant %s. \""},{"line_number":46,"context_line":"                                     \"User and alt_user shouldn\u0027t have common \""}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_5ea7e40a","line":43,"updated":"2015-08-11 16:55:17.000000000","message":"You don\u0027t need to check for this it\u0027s a configuration error and we shouldn\u0027t skip here, it\u0027s a failure.","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"2c34280568abec1f07c9bb3374ff42cfec4d6b97","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # and there is enough isolation between tenant and alt_tenant, thus"},{"line_number":41,"context_line":"        # user cannot see alt_tenant in a response list and auth using"},{"line_number":42,"context_line":"        # alt_tenant instead of tenant"},{"line_number":43,"context_line":"        if any((tenant[\u0027name\u0027] \u003d\u003d alt_tenant for tenant in resp)):"},{"line_number":44,"context_line":"            raise self.skipException(\"Not enough isolation. Both user and \""},{"line_number":45,"context_line":"                                     \"alt_user are presented in tenant %s. \""},{"line_number":46,"context_line":"                                     \"User and alt_user shouldn\u0027t have common \""}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_4f55c21b","line":43,"in_reply_to":"1a4dcd0f_5ea7e40a","updated":"2015-08-12 15:43:34.000000000","message":"Done","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8beddc8327524fdaa137d07be58efb4ef256da9a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                     \"User and alt_user shouldn\u0027t have common \""},{"line_number":47,"context_line":"                                     \"tenants.\" % alt_tenant)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":50,"context_line":"        # check that user can see only that tenants that he presents in so user"},{"line_number":51,"context_line":"        # can successfully authenticate using his credentials and tenant name"},{"line_number":52,"context_line":"        # from received tenants list"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_3e79b882","line":49,"updated":"2015-08-11 16:55:17.000000000","message":"I don\u0027t see the value of asserting this, but whatever.","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"2c34280568abec1f07c9bb3374ff42cfec4d6b97","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                     \"User and alt_user shouldn\u0027t have common \""},{"line_number":47,"context_line":"                                     \"tenants.\" % alt_tenant)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":50,"context_line":"        # check that user can see only that tenants that he presents in so user"},{"line_number":51,"context_line":"        # can successfully authenticate using his credentials and tenant name"},{"line_number":52,"context_line":"        # from received tenants list"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_23a17294","line":49,"in_reply_to":"1a4dcd0f_3e79b882","updated":"2015-08-12 15:43:34.000000000","message":"Done","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8beddc8327524fdaa137d07be58efb4ef256da9a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # can successfully authenticate using his credentials and tenant name"},{"line_number":52,"context_line":"        # from received tenants list"},{"line_number":53,"context_line":"        for tenant in resp:"},{"line_number":54,"context_line":"            self.non_admin_token_client.auth(self.os.credentials.username,"},{"line_number":55,"context_line":"                                             self.os.credentials.password,"},{"line_number":56,"context_line":"                                             tenant[\u0027name\u0027])"},{"line_number":57,"context_line":"        # check that user cannot log in to alt user\u0027s tenant"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_de8a1464","line":54,"updated":"2015-08-11 16:55:17.000000000","message":"You really should be asserting that the auth actually returned something useful? It\u0027s not much of a test to just assume everything is hunky-dory  because it didn\u0027t stack trace","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"2c34280568abec1f07c9bb3374ff42cfec4d6b97","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # can successfully authenticate using his credentials and tenant name"},{"line_number":52,"context_line":"        # from received tenants list"},{"line_number":53,"context_line":"        for tenant in resp:"},{"line_number":54,"context_line":"            self.non_admin_token_client.auth(self.os.credentials.username,"},{"line_number":55,"context_line":"                                             self.os.credentials.password,"},{"line_number":56,"context_line":"                                             tenant[\u0027name\u0027])"},{"line_number":57,"context_line":"        # check that user cannot log in to alt user\u0027s tenant"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_46584c8a","line":54,"in_reply_to":"1a4dcd0f_de8a1464","updated":"2015-08-12 15:43:34.000000000","message":"Done","commit_id":"ddad5880c8e7cb869740da80447618a88e8e0117"}],"tempest/api/identity/v2/test_tokens.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"5465a0e53bae85f2f6e85eddada24890c82b80b8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.assertEqual(body[\u0027user\u0027][\u0027username\u0027], self.username)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u0027ecae2459-243d-4ba1-ad02-65f15dc82b78\u0027)"},{"line_number":70,"context_line":"    def test_list_tenant(self):"},{"line_number":71,"context_line":"        body \u003d self.non_admin_token_client.auth(self.username,"},{"line_number":72,"context_line":"                                                self.password,"},{"line_number":73,"context_line":"                                                self.tenant_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_0eeeecec","line":70,"updated":"2015-06-24 08:30:56.000000000","message":"This is not descriptive enough. What about \"test_list_tenants_returns_authorized_tenants\" ?","commit_id":"f554597bfdf2cb5b2535e88756514e263b145b04"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"438e6674bbc8ab63ee3be92df97f326f332967ef","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.assertEqual(body[\u0027user\u0027][\u0027username\u0027], self.username)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u0027ecae2459-243d-4ba1-ad02-65f15dc82b78\u0027)"},{"line_number":70,"context_line":"    def test_list_tenant(self):"},{"line_number":71,"context_line":"        body \u003d self.non_admin_token_client.auth(self.username,"},{"line_number":72,"context_line":"                                                self.password,"},{"line_number":73,"context_line":"                                                self.tenant_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_65ef8e1e","line":70,"in_reply_to":"fa32b979_0eeeecec","updated":"2015-06-24 11:42:52.000000000","message":"Done","commit_id":"f554597bfdf2cb5b2535e88756514e263b145b04"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"5465a0e53bae85f2f6e85eddada24890c82b80b8","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # check that the user presents in all received tenants from a list"},{"line_number":86,"context_line":"        # and user can see only tenant where he presents (not at all)"},{"line_number":87,"context_line":"        for i in range(len(resp[\u0027tenants\u0027])):"},{"line_number":88,"context_line":"            try:"},{"line_number":89,"context_line":"                self.non_admin_token_client.auth("},{"line_number":90,"context_line":"                    self.username,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_ced00456","line":87,"range":{"start_line":87,"start_character":40,"end_line":87,"end_character":45},"updated":"2015-06-24 08:30:56.000000000","message":"You should use `enumerate`.\nOr even \n  for tenant in resp[\u0027tenants\u0027]\nI mean, you don\u0027t really need the `i` variable here.","commit_id":"f554597bfdf2cb5b2535e88756514e263b145b04"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"438e6674bbc8ab63ee3be92df97f326f332967ef","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # check that the user presents in all received tenants from a list"},{"line_number":86,"context_line":"        # and user can see only tenant where he presents (not at all)"},{"line_number":87,"context_line":"        for i in range(len(resp[\u0027tenants\u0027])):"},{"line_number":88,"context_line":"            try:"},{"line_number":89,"context_line":"                self.non_admin_token_client.auth("},{"line_number":90,"context_line":"                    self.username,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_6566ae52","line":87,"in_reply_to":"fa32b979_ced00456","updated":"2015-06-24 11:42:52.000000000","message":"Done","commit_id":"f554597bfdf2cb5b2535e88756514e263b145b04"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"c26553058f3eb9d090e64fcc2f00056d56050ffa","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        cls.username \u003d cls.creds.username"},{"line_number":38,"context_line":"        cls.password \u003d cls.creds.password"},{"line_number":39,"context_line":"        cls.tenant_name \u003d cls.creds.tenant_name"},{"line_number":40,"context_line":"        cls.uri \u003d CONF.identity.uri"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @test.idempotent_id(\u002765ae3b78-91ff-467b-a705-f6678863b8ec\u0027)"},{"line_number":43,"context_line":"    def test_create_token(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_0c11adac","line":40,"updated":"2015-06-29 13:57:59.000000000","message":"It looks like there is no need to define the variable cls.uri because you don\u0027t use it anywhere.","commit_id":"63079d4cbefda43dec1cd9654af919b15f977116"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"dc715fa84225f958e428f2f281f44e9a75ed241d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        cls.username \u003d cls.creds.username"},{"line_number":38,"context_line":"        cls.password \u003d cls.creds.password"},{"line_number":39,"context_line":"        cls.tenant_name \u003d cls.creds.tenant_name"},{"line_number":40,"context_line":"        cls.uri \u003d CONF.identity.uri"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @test.idempotent_id(\u002765ae3b78-91ff-467b-a705-f6678863b8ec\u0027)"},{"line_number":43,"context_line":"    def test_create_token(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_c7f5b0cb","line":40,"in_reply_to":"ba3cc151_0c11adac","updated":"2015-06-30 11:58:50.000000000","message":"Done","commit_id":"63079d4cbefda43dec1cd9654af919b15f977116"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"c26553058f3eb9d090e64fcc2f00056d56050ffa","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        resp \u003d self.public_identity_client.list_tenants()"},{"line_number":71,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":72,"context_line":"        for tenant in resp:"},{"line_number":73,"context_line":"            try:"},{"line_number":74,"context_line":"                self.non_admin_token_client.auth("},{"line_number":75,"context_line":"                    self.username,"},{"line_number":76,"context_line":"                    self.password,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_59d0d253","line":73,"updated":"2015-06-29 13:57:59.000000000","message":"I think we don\u0027t need try/except block here. In current implementation you mask the original exception.","commit_id":"63079d4cbefda43dec1cd9654af919b15f977116"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"dc715fa84225f958e428f2f281f44e9a75ed241d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        resp \u003d self.public_identity_client.list_tenants()"},{"line_number":71,"context_line":"        self.assertNotEmpty(resp)"},{"line_number":72,"context_line":"        for tenant in resp:"},{"line_number":73,"context_line":"            try:"},{"line_number":74,"context_line":"                self.non_admin_token_client.auth("},{"line_number":75,"context_line":"                    self.username,"},{"line_number":76,"context_line":"                    self.password,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_87d7a8ec","line":73,"in_reply_to":"ba3cc151_59d0d253","updated":"2015-06-30 11:58:50.000000000","message":"Done","commit_id":"63079d4cbefda43dec1cd9654af919b15f977116"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fc919ff0cbe325c01c382106252516234b8e51f0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        cls.creds \u003d cls.os.credentials"},{"line_number":29,"context_line":"        cls.username \u003d cls.creds.username"},{"line_number":30,"context_line":"        cls.password \u003d cls.creds.password"},{"line_number":31,"context_line":"        cls.tenant_name \u003d cls.creds.tenant_name"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @test.idempotent_id(\u002765ae3b78-91ff-467b-a705-f6678863b8ec\u0027)"},{"line_number":34,"context_line":"    def test_create_token(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_fbac828d","line":31,"updated":"2015-08-06 19:27:58.000000000","message":"what does this refactor have to do with this commit. Also why is this needed? Please limit your changes to one functional change per commit, please read:\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Structural_split_of_changes","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"},{"author":{"_account_id":16433,"name":"izadorozhna","email":"izadorozhna@mirantis.com","username":"izadorozhna"},"change_message_id":"0721a9e9864b8c6cdbbf62a0438ad063287f822a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        cls.creds \u003d cls.os.credentials"},{"line_number":29,"context_line":"        cls.username \u003d cls.creds.username"},{"line_number":30,"context_line":"        cls.password \u003d cls.creds.password"},{"line_number":31,"context_line":"        cls.tenant_name \u003d cls.creds.tenant_name"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @test.idempotent_id(\u002765ae3b78-91ff-467b-a705-f6678863b8ec\u0027)"},{"line_number":34,"context_line":"    def test_create_token(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a4dcd0f_9ccf5355","line":31,"in_reply_to":"1a4dcd0f_fbac828d","updated":"2015-08-07 13:00:39.000000000","message":"Done","commit_id":"636cd808514a7350d5e7be5bf05ae7f701f11149"}]}
