)]}'
{"patrole_tempest_plugin/tests/api/identity/v3/rbac_base.py":[{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"fcffe732d9087bdc1fc2974af4826b6e16dfe880","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":41,"context_line":"        cls.rbac_utils \u003d rbac_utils()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def rbac_random_name(self, identifier):"},{"line_number":44,"context_line":"        random_name \u003d data_utils.rand_name(identifier)"},{"line_number":45,"context_line":"        return random_name"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setup_test_credential(self, user\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Creates a user, project, and credential for test.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_307fcfab","line":45,"range":{"start_line":43,"start_character":4,"end_line":45,"end_character":26},"updated":"2017-03-15 17:19:38.000000000","message":"Why do we need this?  It does nothing extra that rand_name doesn\u0027t do.","commit_id":"2258fc09c6d7241784113abfa2bbbb97e9371293"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"82aeef6aea4387cd9a5fad17d0754df5727f6a31","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":41,"context_line":"        cls.rbac_utils \u003d rbac_utils()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def rbac_random_name(self, identifier):"},{"line_number":44,"context_line":"        random_name \u003d data_utils.rand_name(identifier)"},{"line_number":45,"context_line":"        return random_name"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setup_test_credential(self, user\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Creates a user, project, and credential for test.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_555fd640","line":45,"range":{"start_line":43,"start_character":4,"end_line":45,"end_character":26},"in_reply_to":"3a1ff146_307fcfab","updated":"2017-03-15 20:09:09.000000000","message":"all the tests use data_utils.rand_name so I pulled it out here and was able to avoid importing data_utils in each test.","commit_id":"2258fc09c6d7241784113abfa2bbbb97e9371293"},{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"71aed6b6c1d788dc9335482edfd023bc4f6be34b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":41,"context_line":"        cls.rbac_utils \u003d rbac_utils()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def rbac_random_name(self, identifier):"},{"line_number":44,"context_line":"        random_name \u003d data_utils.rand_name(identifier)"},{"line_number":45,"context_line":"        return random_name"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setup_test_credential(self, user\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Creates a user, project, and credential for test.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_b3ad9f33","line":45,"range":{"start_line":43,"start_character":4,"end_line":45,"end_character":26},"updated":"2017-03-17 15:41:01.000000000","message":"I still dislike this.  I understand that it saves an import, but I don\u0027t feel like that minor saving is worth the added complexity of using a different random name function in Identity tests from that used in every other Tempest / Patrole test.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":41,"context_line":"        cls.rbac_utils \u003d rbac_utils()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def rbac_random_name(self, identifier):"},{"line_number":44,"context_line":"        random_name \u003d data_utils.rand_name(identifier)"},{"line_number":45,"context_line":"        return random_name"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setup_test_credential(self, user\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Creates a user, project, and credential for test.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_a63e3fb6","line":45,"range":{"start_line":43,"start_character":4,"end_line":45,"end_character":26},"in_reply_to":"1a1ced50_b3ad9f33","updated":"2017-03-17 15:58:27.000000000","message":"Agreed.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            user \u003d self.setup_test_user(project_id\u003dproject[\u0027id\u0027])"},{"line_number":52,"context_line":"        keys \u003d [self.rbac_random_name(\u0027Access\u0027),"},{"line_number":53,"context_line":"                self.rbac_random_name(\u0027Secret\u0027)]"},{"line_number":54,"context_line":"        blob \u003d \"{\\\"access\\\": \\\"%s\\\", \\\"secret\\\": \\\"%s\\\"}\" % ("},{"line_number":55,"context_line":"            keys[0], keys[1])"},{"line_number":56,"context_line":"        credential \u003d self.creds_client.create_credential("},{"line_number":57,"context_line":"            user_id\u003duser[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_139593e3","line":54,"range":{"start_line":54,"start_character":15,"end_line":54,"end_character":57},"updated":"2017-03-17 15:58:27.000000000","message":"I\u0027m OK with this but the more readable way to do it is to do:\n\n\u0027{\"accesss\": \"%s\" ... }\u0027\n\nor json.dumps({\u0027access\u0027: keys[0], \u0027secret\u0027: keys[1]})","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def setup_test_group(self):"},{"line_number":101,"context_line":"        \"\"\"Creates a group for test.\"\"\""},{"line_number":102,"context_line":"        name \u003d self.rbac_random_name(\u0027Group\u0027)"},{"line_number":103,"context_line":"        group \u003d self.groups_client.create_group(name\u003dname)[\u0027group\u0027]"},{"line_number":104,"context_line":"        # Delete the group at the end of the test"},{"line_number":105,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_b3091f34","line":102,"range":{"start_line":102,"start_character":38,"end_line":102,"end_character":43},"updated":"2017-03-17 15:58:27.000000000","message":"nit: test_group (for consistency)","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def setup_test_policy(self):"},{"line_number":111,"context_line":"        \"\"\"Creates a policy for test.\"\"\""},{"line_number":112,"context_line":"        blob \u003d self.rbac_random_name(\u0027BlobName\u0027)"},{"line_number":113,"context_line":"        policy_type \u003d self.rbac_random_name(\u0027PolicyType\u0027)"},{"line_number":114,"context_line":"        policy \u003d self.policies_client.create_policy("},{"line_number":115,"context_line":"            blob\u003dblob,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_930c2344","line":112,"range":{"start_line":112,"start_character":38,"end_line":112,"end_character":46},"updated":"2017-03-17 15:58:27.000000000","message":"nit: test_blob_name (for consistency)","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"}],"patrole_tempest_plugin/tests/api/identity/v3/test_credentials_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                                 rule\u003d\"identity:create_credential\")"},{"line_number":27,"context_line":"    @decorators.idempotent_id(\u0027c1ab6d34-c59f-4ae1-bae9-bb3c1089b48e\u0027)"},{"line_number":28,"context_line":"    def test_create_credential(self):"},{"line_number":29,"context_line":"        project \u003d self.setup_test_project()"},{"line_number":30,"context_line":"        user \u003d self.setup_test_user(project_id\u003dproject[\u0027id\u0027])"},{"line_number":31,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":32,"context_line":"        self.setup_test_credential(user\u003duser)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_069b93ca","line":30,"range":{"start_line":29,"start_character":8,"end_line":30,"end_character":61},"updated":"2017-03-17 15:58:27.000000000","message":"These resources should be class-wide for efficiency.\n\nThat is, put them in setup_resources.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                 rule\u003d\"identity:update_credential\")"},{"line_number":36,"context_line":"    @decorators.idempotent_id(\u0027cfb05ce3-bffb-496e-a3c2-9515d730da63\u0027)"},{"line_number":37,"context_line":"    def test_update_credential(self):"},{"line_number":38,"context_line":"        credential \u003d self.setup_test_credential()"},{"line_number":39,"context_line":"        # Update blob keys"},{"line_number":40,"context_line":"        new_keys \u003d [self.rbac_random_name(\u0027NewAccess\u0027),"},{"line_number":41,"context_line":"                    self.rbac_random_name(\u0027NewSecret\u0027)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_8696a392","line":38,"range":{"start_line":38,"start_character":7,"end_line":38,"end_character":49},"updated":"2017-03-17 15:58:27.000000000","message":"Pass self.user after you\u0027ve defined cls.user in setup_credentials since your setup_test_credential creates a project and user if a user isn\u0027t passed in, leading to unnecessary overhead.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                                 rule\u003d\"identity:delete_credential\")"},{"line_number":53,"context_line":"    @decorators.idempotent_id(\u002787ab42af-8d41-401b-90df-21e72919fcde\u0027)"},{"line_number":54,"context_line":"    def test_delete_credential(self):"},{"line_number":55,"context_line":"        credential \u003d self.setup_test_credential()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":58,"context_line":"        self.creds_client.delete_credential(credential[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_e6b6773c","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":49},"updated":"2017-03-17 15:58:27.000000000","message":"Ditto.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                                 rule\u003d\"identity:get_credential\")"},{"line_number":62,"context_line":"    @decorators.idempotent_id(\u00271b6eeae6-f1e8-4cdf-8903-1c002b1fc271\u0027)"},{"line_number":63,"context_line":"    def test_show_credential(self):"},{"line_number":64,"context_line":"        credential \u003d self.setup_test_credential()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":67,"context_line":"        self.creds_client.show_credential(credential[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_66f8c7e6","line":64,"range":{"start_line":64,"start_character":8,"end_line":64,"end_character":49},"updated":"2017-03-17 15:58:27.000000000","message":"Ditto.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"}],"patrole_tempest_plugin/tests/api/identity/v3/test_endpoints_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                                 rule\u003d\"identity:create_endpoint\")"},{"line_number":28,"context_line":"    @decorators.idempotent_id(\u00276bdaecd4-0843-4ed6-ab64-3a57ab0cd127\u0027)"},{"line_number":29,"context_line":"    def test_create_endpoint(self):"},{"line_number":30,"context_line":"        service \u003d self.setup_test_service()"},{"line_number":31,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":32,"context_line":"        self.setup_test_endpoint(service\u003dservice)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":35,"context_line":"                                 rule\u003d\"identity:update_endpoint\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_e669178d","line":32,"range":{"start_line":30,"start_character":8,"end_line":32,"end_character":49},"updated":"2017-03-17 15:58:27.000000000","message":"See comment below. All this is fine as is.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3ec9ec4f0a14e90401606afd396e73063a5f08b4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                 rule\u003d\"identity:delete_endpoint\")"},{"line_number":48,"context_line":"    @decorators.idempotent_id(\u00276bdaecd4-0843-4ed6-ab64-3a57ab0cd129\u0027)"},{"line_number":49,"context_line":"    def test_delete_endpoint(self):"},{"line_number":50,"context_line":"        endpoint \u003d self.setup_test_endpoint()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":53,"context_line":"        self.endpoints_client.delete_endpoint(endpoint[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_a648ff2e","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":45},"updated":"2017-03-17 15:58:27.000000000","message":"This is fine. For all the other tests, create a class wide endpoint in setup_resources. Then pass self.endpoint[\u0027id\u0027] as necessary. Only this function needs a test-level endpoint.","commit_id":"2fb072d9a187440ca24a37ea6d01a36774e897b1"}]}
