)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c4ecb6ace87889a795a64a1fe3db95b5e9520feb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test cases for token related APIs."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add test_oauth_tokens_rbac.py with API test cases"},{"line_number":10,"context_line":"related to OAUTH token APIs"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I811ae810f95266f950a867d2993d56f632d20495"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1f013ff3_52c69d9c","line":9,"range":{"start_line":9,"start_character":35,"end_line":9,"end_character":38},"updated":"2017-05-16 17:06:26.000000000","message":"RBAC","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"e5adb688d07441855caab3ffc63f843f046b65b6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test cases for token related APIs."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add test_oauth_tokens_rbac.py with API test cases"},{"line_number":10,"context_line":"related to OAUTH token APIs"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I811ae810f95266f950a867d2993d56f632d20495"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1f013ff3_cbc78145","line":9,"range":{"start_line":9,"start_character":35,"end_line":9,"end_character":38},"in_reply_to":"1f013ff3_52c69d9c","updated":"2017-05-17 09:53:39.000000000","message":"Done","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"6736a352c78a021819d5aa363e663a9e03f70572","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     maniksidana \u003cms702g@att.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-05-17 04:54:56 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test cases for token related APIs."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add test_oauth_tokens_rbac.py with RBAC test cases"},{"line_number":10,"context_line":"related to OAUTH token APIs"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ff0f0b1f_4bdcd773","line":7,"range":{"start_line":7,"start_character":19,"end_line":7,"end_character":24},"updated":"2017-05-17 18:44:12.000000000","message":"May we change this to oauth1 token in next patch?","commit_id":"e6a15f927a90d5cd78fcf9ea13aa92b1d33f35af"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"42b60e31f469dee6bbfd41d84c6d255141ad75b2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     maniksidana \u003cms702g@att.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-05-17 04:54:56 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test cases for token related APIs."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add test_oauth_tokens_rbac.py with RBAC test cases"},{"line_number":10,"context_line":"related to OAUTH token APIs"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ff0f0b1f_dcb1c1e3","line":7,"range":{"start_line":7,"start_character":19,"end_line":7,"end_character":24},"in_reply_to":"ff0f0b1f_4bdcd773","updated":"2017-05-18 08:11:54.000000000","message":"Ok. I\u0027ll change this","commit_id":"e6a15f927a90d5cd78fcf9ea13aa92b1d33f35af"}],"patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py":[{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"5160be24a5555c2a588a5590f78163fd68cf69a0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oauthlib import oauth1"},{"line_number":17,"context_line":"from six.moves import urllib"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":20,"context_line":"from tempest.lib.common.utils import test_utils"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_afd57d45","line":17,"range":{"start_line":16,"start_character":0,"end_line":17,"end_character":28},"updated":"2017-04-25 13:55:09.000000000","message":"Unused libraries","commit_id":"e13b2c11687d471e01c7a9820540b0a4baed9e84"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"5160be24a5555c2a588a5590f78163fd68cf69a0","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                 consumer[\u0027key\u0027], consumer[\u0027secret\u0027], request_token[\u0027key\u0027],"},{"line_number":78,"context_line":"                 request_token[\u0027secret\u0027],  auth_verifier)"},{"line_number":79,"context_line":"        access_key \u003d body[\u0027oauth_token\u0027]"},{"line_number":80,"context_line":"        return access_key"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":83,"context_line":"                                 rule\u003d\"identity:create_consumer\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_cf37a9b0","line":80,"range":{"start_line":80,"start_character":8,"end_line":80,"end_character":25},"updated":"2017-04-25 13:55:09.000000000","message":"Cleanup to be added","commit_id":"e13b2c11687d471e01c7a9820540b0a4baed9e84"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2ef4f8128b8c89922f41fe0abe815ddcf5c0c095","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                                 rule\u003d\"identity:create_access_token\")"},{"line_number":141,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d977\u0027)"},{"line_number":142,"context_line":"    def test_create_access_token(self):"},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":"            Create access token"},{"line_number":145,"context_line":"        \"\"\""},{"line_number":146,"context_line":"        request_token, role_id, consumer \u003d \\"},{"line_number":147,"context_line":"            self._create_consumer_request_token()"},{"line_number":148,"context_line":"        roles \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_17812790","line":145,"range":{"start_line":143,"start_character":8,"end_line":145,"end_character":11},"updated":"2017-04-25 15:45:32.000000000","message":"Should be formatted like this:\n\ndef test_(self, ...):\n    \"\"\"Create access token\n    \"\"\"","commit_id":"e13b2c11687d471e01c7a9820540b0a4baed9e84"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"967e019c0c4cda445cbd454a2d0f2f766b01a896","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        consumer \u003d self._create_consumer()"},{"line_number":42,"context_line":"        consumer_id \u003d consumer[\u0027id\u0027]"},{"line_number":43,"context_line":"        consumer_secret \u003d consumer[\u0027secret\u0027]"},{"line_number":44,"context_line":"        consumer \u003d {\u0027key\u0027: consumer_id, \u0027secret\u0027: consumer_secret}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        project_id \u003d self.auth_provider.credentials.project_id"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_763a71cc","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":66},"updated":"2017-04-27 03:06:10.000000000","message":"Why this line is required, just renaming keys of consumer dict? This can be avoided.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        consumer \u003d self._create_consumer()"},{"line_number":42,"context_line":"        consumer_id \u003d consumer[\u0027id\u0027]"},{"line_number":43,"context_line":"        consumer_secret \u003d consumer[\u0027secret\u0027]"},{"line_number":44,"context_line":"        consumer \u003d {\u0027key\u0027: consumer_id, \u0027secret\u0027: consumer_secret}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        project_id \u003d self.auth_provider.credentials.project_id"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_cc541201","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":66},"in_reply_to":"5ff73747_39717a0d","updated":"2017-04-27 11:10:54.000000000","message":"Ok. I\u0027ll make the changes for both consumer and request_token.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        consumer \u003d self._create_consumer()"},{"line_number":42,"context_line":"        consumer_id \u003d consumer[\u0027id\u0027]"},{"line_number":43,"context_line":"        consumer_secret \u003d consumer[\u0027secret\u0027]"},{"line_number":44,"context_line":"        consumer \u003d {\u0027key\u0027: consumer_id, \u0027secret\u0027: consumer_secret}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        project_id \u003d self.auth_provider.credentials.project_id"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_39717a0d","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":66},"in_reply_to":"5ff73747_763a71cc","updated":"2017-04-27 05:17:54.000000000","message":"I agree. It\u0027s better to use request_token[\u0027oauth_token\u0027] and consumer[\u0027id\u0027] and consumer[\u0027secret\u0027] elsewhere than use consumer[\u0027key\u0027] and consumer[\u0027secret\u0027] as it makes the code harder to understand.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        consumer \u003d self._create_consumer()"},{"line_number":42,"context_line":"        consumer_id \u003d consumer[\u0027id\u0027]"},{"line_number":43,"context_line":"        consumer_secret \u003d consumer[\u0027secret\u0027]"},{"line_number":44,"context_line":"        consumer \u003d {\u0027key\u0027: consumer_id, \u0027secret\u0027: consumer_secret}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        project_id \u003d self.auth_provider.credentials.project_id"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_b68599d1","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":66},"in_reply_to":"5ff73747_763a71cc","updated":"2017-04-27 11:10:54.000000000","message":"Yes, I\u0027ll do it in next patch","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        project_id \u003d self.auth_provider.credentials.project_id"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        body \u003d self.oauth_token_client.create_request_token(consumer_id,"},{"line_number":49,"context_line":"                                                            consumer_secret,"},{"line_number":50,"context_line":"                                                            project_id)"},{"line_number":51,"context_line":"        request_key \u003d body[\u0027oauth_token\u0027]"},{"line_number":52,"context_line":"        request_secret \u003d body[\u0027oauth_token_secret\u0027]"},{"line_number":53,"context_line":"        request_token \u003d {\u0027key\u0027: request_key, \u0027secret\u0027: request_secret}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_d90bb67a","line":50,"range":{"start_line":48,"start_character":8,"end_line":50,"end_character":71},"updated":"2017-04-27 05:17:54.000000000","message":"This currently raises a 401; I\u0027m guessing this is an issue with the Tempest client?","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"967e019c0c4cda445cbd454a2d0f2f766b01a896","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                                                            project_id)"},{"line_number":51,"context_line":"        request_key \u003d body[\u0027oauth_token\u0027]"},{"line_number":52,"context_line":"        request_secret \u003d body[\u0027oauth_token_secret\u0027]"},{"line_number":53,"context_line":"        request_token \u003d {\u0027key\u0027: request_key, \u0027secret\u0027: request_secret}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        roles \u003d self.roles_client.list_roles()"},{"line_number":56,"context_line":"        for role in roles[\u0027roles\u0027]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_1678cd8d","line":53,"range":{"start_line":53,"start_character":8,"end_line":53,"end_character":70},"updated":"2017-04-27 03:06:10.000000000","message":"same comment as above. Do we need to define a new dict just to rename the keys instead of sending body as response in place of request_token?","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                                                            project_id)"},{"line_number":51,"context_line":"        request_key \u003d body[\u0027oauth_token\u0027]"},{"line_number":52,"context_line":"        request_secret \u003d body[\u0027oauth_token_secret\u0027]"},{"line_number":53,"context_line":"        request_token \u003d {\u0027key\u0027: request_key, \u0027secret\u0027: request_secret}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        roles \u003d self.roles_client.list_roles()"},{"line_number":56,"context_line":"        for role in roles[\u0027roles\u0027]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_567415fe","line":53,"range":{"start_line":53,"start_character":8,"end_line":53,"end_character":70},"in_reply_to":"5ff73747_1678cd8d","updated":"2017-04-27 11:10:54.000000000","message":"I think its better to define a new dict and sending only the relevant parameters instead of sending the entire body of the response.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"967e019c0c4cda445cbd454a2d0f2f766b01a896","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        request_secret \u003d body[\u0027oauth_token_secret\u0027]"},{"line_number":53,"context_line":"        request_token \u003d {\u0027key\u0027: request_key, \u0027secret\u0027: request_secret}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        roles \u003d self.roles_client.list_roles()"},{"line_number":56,"context_line":"        for role in roles[\u0027roles\u0027]:"},{"line_number":57,"context_line":"            if role[\u0027name\u0027] \u003d\u003d CONF.rbac.rbac_test_role:"},{"line_number":58,"context_line":"                role_id \u003d role[\u0027id\u0027]"},{"line_number":59,"context_line":"                break"},{"line_number":60,"context_line":"        return (request_token, role_id, consumer)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_access_token(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_8226d8cd","line":59,"range":{"start_line":55,"start_character":8,"end_line":59,"end_character":21},"updated":"2017-04-27 03:06:10.000000000","message":"This logic is used in multiple functions. Please make it as separate function _get_rbac_role_id","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        request_secret \u003d body[\u0027oauth_token_secret\u0027]"},{"line_number":53,"context_line":"        request_token \u003d {\u0027key\u0027: request_key, \u0027secret\u0027: request_secret}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        roles \u003d self.roles_client.list_roles()"},{"line_number":56,"context_line":"        for role in roles[\u0027roles\u0027]:"},{"line_number":57,"context_line":"            if role[\u0027name\u0027] \u003d\u003d CONF.rbac.rbac_test_role:"},{"line_number":58,"context_line":"                role_id \u003d role[\u0027id\u0027]"},{"line_number":59,"context_line":"                break"},{"line_number":60,"context_line":"        return (request_token, role_id, consumer)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_access_token(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_3671890d","line":59,"range":{"start_line":55,"start_character":8,"end_line":59,"end_character":21},"in_reply_to":"5ff73747_8226d8cd","updated":"2017-04-27 11:10:54.000000000","message":"Ok, I\u0027ll do it in next patch","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"967e019c0c4cda445cbd454a2d0f2f766b01a896","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        resp \u003d self.oauth_token_client.authorize_request_token("},{"line_number":70,"context_line":"            request_token[\u0027key\u0027], roles)[\u0027token\u0027]"},{"line_number":71,"context_line":"        auth_verifier \u003d resp[\u0027oauth_verifier\u0027]"},{"line_number":72,"context_line":"        request_token.update({\u0027verifier\u0027: auth_verifier})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # Create Access Token"},{"line_number":75,"context_line":"        body \u003d self.oauth_token_client.create_access_token("}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_96997dc5","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":57},"updated":"2017-04-27 03:06:10.000000000","message":"This is not required as rquest_token is not used to retrieve verifier","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        resp \u003d self.oauth_token_client.authorize_request_token("},{"line_number":70,"context_line":"            request_token[\u0027key\u0027], roles)[\u0027token\u0027]"},{"line_number":71,"context_line":"        auth_verifier \u003d resp[\u0027oauth_verifier\u0027]"},{"line_number":72,"context_line":"        request_token.update({\u0027verifier\u0027: auth_verifier})"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # Create Access Token"},{"line_number":75,"context_line":"        body \u003d self.oauth_token_client.create_access_token("}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_d9ce162c","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":57},"in_reply_to":"5ff73747_96997dc5","updated":"2017-04-27 11:10:54.000000000","message":"Ok, I\u0027ll remove this call.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            consumer_id, consumer_secret, project_id)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":150,"context_line":"                                 rule\u003d\"identity:create_access_token\")"},{"line_number":151,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d977\u0027)"},{"line_number":152,"context_line":"    def test_create_access_token(self):"},{"line_number":153,"context_line":"        \"\"\"Create access token"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_f9cd5231","line":150,"range":{"start_line":150,"start_character":39,"end_line":150,"end_character":67},"updated":"2017-04-27 05:17:54.000000000","message":"This isn\u0027t a valid policy action. The create_access_token endpoint in fact does no policy enforcement:\nhttps://github.com/openstack/keystone/blob/master/keystone/oauth1/controllers.py#L277\n\n(@controller.protected() isn\u0027t applied to the function in the keystone code)\n\nSee https://github.com/openstack/keystone/blob/master/keystone/common/policies/access_token.py for a list of available policies.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            consumer_id, consumer_secret, project_id)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":150,"context_line":"                                 rule\u003d\"identity:create_access_token\")"},{"line_number":151,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d977\u0027)"},{"line_number":152,"context_line":"    def test_create_access_token(self):"},{"line_number":153,"context_line":"        \"\"\"Create access token"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_6c685eb8","line":150,"range":{"start_line":150,"start_character":39,"end_line":150,"end_character":67},"in_reply_to":"5ff73747_f9cd5231","updated":"2017-04-27 11:10:54.000000000","message":"Ok, I\u0027ll remove this.\nAlso, I didn\u0027t find create_request_token in this github link. Should test_create_request_token also be removed ?","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        request_token, role_id, consumer \u003d \\"},{"line_number":157,"context_line":"            self._create_consumer_request_token()"},{"line_number":158,"context_line":"        roles \u003d []"},{"line_number":159,"context_line":"        roles.append(role_id)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Authorize request token"},{"line_number":162,"context_line":"        resp \u003d self.oauth_token_client.authorize_request_token("}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_d9fdf66e","line":159,"range":{"start_line":158,"start_character":8,"end_line":159,"end_character":29},"updated":"2017-04-27 05:17:54.000000000","message":"nit: You can do this on the same line with:\n\nroles \u003d [role_id]","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        request_token, role_id, consumer \u003d \\"},{"line_number":157,"context_line":"            self._create_consumer_request_token()"},{"line_number":158,"context_line":"        roles \u003d []"},{"line_number":159,"context_line":"        roles.append(role_id)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Authorize request token"},{"line_number":162,"context_line":"        resp \u003d self.oauth_token_client.authorize_request_token("}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_cc1f7259","line":159,"range":{"start_line":158,"start_character":8,"end_line":159,"end_character":29},"in_reply_to":"5ff73747_d9fdf66e","updated":"2017-04-27 11:10:54.000000000","message":"Ok. Thanks for the suggestion.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            request_token[\u0027key\u0027],"},{"line_number":164,"context_line":"            roles)[\u0027token\u0027]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        outh_verifier \u003d resp[\u0027oauth_verifier\u0027]"},{"line_number":167,"context_line":"        request_token.update({\u0027verifier\u0027: outh_verifier})"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_39d5fae5","line":166,"range":{"start_line":166,"start_character":8,"end_line":166,"end_character":21},"updated":"2017-04-27 05:17:54.000000000","message":"oauth_verifier","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            request_token[\u0027key\u0027],"},{"line_number":164,"context_line":"            roles)[\u0027token\u0027]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        outh_verifier \u003d resp[\u0027oauth_verifier\u0027]"},{"line_number":167,"context_line":"        request_token.update({\u0027verifier\u0027: outh_verifier})"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_2c17f647","line":166,"range":{"start_line":166,"start_character":8,"end_line":166,"end_character":21},"in_reply_to":"5ff73747_39d5fae5","updated":"2017-04-27 11:10:54.000000000","message":"I\u0027ll change this","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                        user_id, access_key)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":185,"context_line":"                                 rule\u003d\"identity:authorize_request_token\")"},{"line_number":186,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d978\u0027)"},{"line_number":187,"context_line":"    def test_authorize_request_token(self):"},{"line_number":188,"context_line":"        \"\"\"Authorize request token"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_d9e736ac","line":185,"range":{"start_line":185,"start_character":39,"end_line":185,"end_character":71},"updated":"2017-04-27 05:17:54.000000000","message":"This by contrast is correct: https://github.com/openstack/keystone/blob/master/keystone/oauth1/controllers.py#L369","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"967e019c0c4cda445cbd454a2d0f2f766b01a896","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        \"\"\"List access tokens"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        user_id \u003d self.auth_provider.credentials.user_id"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":237,"context_line":"        self.oauth_token_client.list_access_tokens(user_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_d63ee589","line":234,"range":{"start_line":234,"start_character":8,"end_line":234,"end_character":56},"updated":"2017-04-27 03:06:10.000000000","message":"Create token is missing here.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"b15e711cffe41ab987278414bcfba9b3fbb7ca7b","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        \"\"\"List access tokens"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        user_id \u003d self.auth_provider.credentials.user_id"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":237,"context_line":"        self.oauth_token_client.list_access_tokens(user_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_6c7cde1e","line":234,"range":{"start_line":234,"start_character":8,"end_line":234,"end_character":56},"in_reply_to":"5ff73747_79f8227a","updated":"2017-04-27 06:03:18.000000000","message":"My bad, Am in tempest functional test case mode.\nCreate token is not required for patrole list test case.\nIgnore this comment.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        \"\"\"List access tokens"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        user_id \u003d self.auth_provider.credentials.user_id"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":237,"context_line":"        self.oauth_token_client.list_access_tokens(user_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_19f23e71","line":234,"range":{"start_line":234,"start_character":8,"end_line":234,"end_character":56},"in_reply_to":"5ff73747_d63ee589","updated":"2017-04-27 11:10:54.000000000","message":"I\u0027ll update this","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        \"\"\"List access tokens"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        user_id \u003d self.auth_provider.credentials.user_id"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":237,"context_line":"        self.oauth_token_client.list_access_tokens(user_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_79f8227a","line":234,"range":{"start_line":234,"start_character":8,"end_line":234,"end_character":56},"in_reply_to":"5ff73747_d63ee589","updated":"2017-04-27 05:17:54.000000000","message":"Why is there a need to create a token here? All this test does is list access tokens, for which no token is required.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4401a5868f1cdb7d583d2ef2ae1fdf95c7d5e9ff","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        access_token \u003d self._create_access_token()"},{"line_number":247,"context_line":"        user_id \u003d self.auth_provider.credentials.user_id"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        roles \u003d self.roles_client.list_roles()"},{"line_number":250,"context_line":"        for role in roles[\u0027roles\u0027]:"},{"line_number":251,"context_line":"            if role[\u0027name\u0027] \u003d\u003d CONF.rbac.rbac_test_role:"},{"line_number":252,"context_line":"                role_id \u003d role[\u0027id\u0027]"},{"line_number":253,"context_line":"                break"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":256,"context_line":"        self.oauth_token_client.get_access_token_role("}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_59f1e694","line":253,"range":{"start_line":249,"start_character":8,"end_line":253,"end_character":21},"updated":"2017-04-27 05:17:54.000000000","message":"I agree with Hemanth: this should be a helper function.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"a9817480c7ace797d3120131887f0162a1be379f","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        access_token \u003d self._create_access_token()"},{"line_number":247,"context_line":"        user_id \u003d self.auth_provider.credentials.user_id"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        roles \u003d self.roles_client.list_roles()"},{"line_number":250,"context_line":"        for role in roles[\u0027roles\u0027]:"},{"line_number":251,"context_line":"            if role[\u0027name\u0027] \u003d\u003d CONF.rbac.rbac_test_role:"},{"line_number":252,"context_line":"                role_id \u003d role[\u0027id\u0027]"},{"line_number":253,"context_line":"                break"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":256,"context_line":"        self.oauth_token_client.get_access_token_role("}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_0c867a67","line":253,"range":{"start_line":249,"start_character":8,"end_line":253,"end_character":21},"in_reply_to":"5ff73747_59f1e694","updated":"2017-04-27 11:10:54.000000000","message":"Ok, Ill do this.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1507469cc70356e6ceadedf3232a5d76294860a4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                        consumer[\u0027id\u0027])"},{"line_number":37,"context_line":"        return consumer"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _get_rbac_role_id(self):"},{"line_number":40,"context_line":"        roles \u003d self.roles_client.list_roles()"},{"line_number":41,"context_line":"        role_id \u003d \u0027\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        for role in roles[\u0027roles\u0027]:"},{"line_number":44,"context_line":"            if role[\u0027name\u0027] \u003d\u003d CONF.rbac.rbac_test_role:"},{"line_number":45,"context_line":"                role_id \u003d role[\u0027id\u0027]"},{"line_number":46,"context_line":"                break"},{"line_number":47,"context_line":"        return role_id"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_consumer_request_token(self):"},{"line_number":50,"context_line":"        # Create a consumer"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_6b3904f0","line":47,"range":{"start_line":39,"start_character":0,"end_line":47,"end_character":22},"updated":"2017-05-01 18:33:39.000000000","message":"We can probably use self.get_role_by_name here: https://github.com/openstack/tempest/blob/5fc2548eae225ebe84ab378a6136f1be9cb8b443/tempest/api/identity/base.py#L64","commit_id":"ba13f96914d7930ffb5c979a305e0da43b116f0e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f5d20923e6a2e829916daa7663a5ade6183cd5f9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def resource_setup(cls):"},{"line_number":32,"context_line":"        super(IdentityConsumersV3RbacTest, cls).resource_setup()"},{"line_number":33,"context_line":"        cls.role_ids \u003d [cls.get_role_by_name(CONF.identity.admin_role)[\u0027id\u0027]]"},{"line_number":34,"context_line":"        cls.project_id \u003d cls.auth_provider.credentials.project_id"},{"line_number":35,"context_line":"        cls.user_id \u003d cls.auth_provider.credentials.user_id"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1f013ff3_aba3504f","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":77},"updated":"2017-05-15 19:20:06.000000000","message":"Also, I forgot to add a comment explaining why this is admin which I think is useful. Basically, need admin role to avoid Unauthorized because primary user has admin credentials during set up thanks to Patrole framework handling that in background.","commit_id":"fa032c93a31032aecc4344f46d93148dec2dd492"},{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"d9efecc9f2438c739c48511ecfa0c5b36dd0086b","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":17,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.lib import decorators"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from patrole_tempest_plugin import rbac_rule_validation"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_a6b72bd9","line":18,"updated":"2017-05-17 17:50:25.000000000","message":"Why is this newline here?  We should try to follow correct import guidelines.  https://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"e6a15f927a90d5cd78fcf9ea13aa92b1d33f35af"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"42b60e31f469dee6bbfd41d84c6d255141ad75b2","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":17,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.lib import decorators"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from patrole_tempest_plugin import rbac_rule_validation"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_7c7ab524","line":18,"in_reply_to":"ff0f0b1f_a6b72bd9","updated":"2017-05-18 08:11:54.000000000","message":"Ok. I\u0027ll fix this","commit_id":"e6a15f927a90d5cd78fcf9ea13aa92b1d33f35af"},{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"d9efecc9f2438c739c48511ecfa0c5b36dd0086b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                 rule\u003d\"identity:create_consumer\")"},{"line_number":39,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d970\u0027)"},{"line_number":40,"context_line":"    def test_create_consumer(self):"},{"line_number":41,"context_line":"        \"\"\"Create consumer"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":45,"context_line":"        self._create_consumer()"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_06c81753","line":43,"range":{"start_line":41,"start_character":8,"end_line":43,"end_character":11},"updated":"2017-05-17 17:50:25.000000000","message":"Do these comments add anything of value?","commit_id":"e6a15f927a90d5cd78fcf9ea13aa92b1d33f35af"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"42b60e31f469dee6bbfd41d84c6d255141ad75b2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                 rule\u003d\"identity:create_consumer\")"},{"line_number":39,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d970\u0027)"},{"line_number":40,"context_line":"    def test_create_consumer(self):"},{"line_number":41,"context_line":"        \"\"\"Create consumer"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"},{"line_number":45,"context_line":"        self._create_consumer()"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_dc98a16b","line":43,"range":{"start_line":41,"start_character":8,"end_line":43,"end_character":11},"in_reply_to":"ff0f0b1f_06c81753","updated":"2017-05-18 08:11:54.000000000","message":"The function names are self-descriptive. Do you suggest for these to be removed?","commit_id":"e6a15f927a90d5cd78fcf9ea13aa92b1d33f35af"}],"patrole_tempest_plugin/tests/api/identity/v3/test_oauth_tokens_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c4ecb6ace87889a795a64a1fe3db95b5e9520feb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def resource_setup(cls):"},{"line_number":32,"context_line":"        super(IdentityOAuthTokensV3RbacTest, cls).resource_setup()"},{"line_number":33,"context_line":"        # Authorize token on admin role since primary user have admin"},{"line_number":34,"context_line":"        # credentials. Populate role_ids with admin role id."},{"line_number":35,"context_line":"        cls.role_ids \u003d [cls.get_role_by_name(CONF.identity.admin_role)[\u0027id\u0027]]"},{"line_number":36,"context_line":"        cls.project_id \u003d cls.auth_provider.credentials.project_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f013ff3_329311a6","line":33,"range":{"start_line":33,"start_character":59,"end_line":33,"end_character":63},"updated":"2017-05-16 17:06:26.000000000","message":"has","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"e5adb688d07441855caab3ffc63f843f046b65b6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def resource_setup(cls):"},{"line_number":32,"context_line":"        super(IdentityOAuthTokensV3RbacTest, cls).resource_setup()"},{"line_number":33,"context_line":"        # Authorize token on admin role since primary user have admin"},{"line_number":34,"context_line":"        # credentials. Populate role_ids with admin role id."},{"line_number":35,"context_line":"        cls.role_ids \u003d [cls.get_role_by_name(CONF.identity.admin_role)[\u0027id\u0027]]"},{"line_number":36,"context_line":"        cls.project_id \u003d cls.auth_provider.credentials.project_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f013ff3_2bb385ec","line":33,"range":{"start_line":33,"start_character":59,"end_line":33,"end_character":63},"in_reply_to":"1f013ff3_329311a6","updated":"2017-05-17 09:53:39.000000000","message":"Done","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7cce248de75143aea2545b2c78902342e844324f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def resource_setup(cls):"},{"line_number":32,"context_line":"        super(IdentityOAuthTokensV3RbacTest, cls).resource_setup()"},{"line_number":33,"context_line":"        # Authorize token on admin role since primary user has admin"},{"line_number":34,"context_line":"        # credentials. Populate role_ids with admin role id."},{"line_number":35,"context_line":"        cls.role_ids \u003d [cls.get_role_by_name(CONF.identity.admin_role)[\u0027id\u0027]]"},{"line_number":36,"context_line":"        cls.project_id \u003d cls.auth_provider.credentials.project_id"},{"line_number":37,"context_line":"        cls.user_id \u003d cls.auth_provider.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_110eed8c","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":21},"updated":"2017-06-30 14:05:46.000000000","message":"credentials before switching roles.","commit_id":"7cae348d5ae98e91e0867f04803d7e60c75800f5"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"75b74288ec1743b5ed82e2ba2df4e38030aca21d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def resource_setup(cls):"},{"line_number":32,"context_line":"        super(IdentityOAuthTokensV3RbacTest, cls).resource_setup()"},{"line_number":33,"context_line":"        # Authorize token on admin role since primary user has admin"},{"line_number":34,"context_line":"        # credentials. Populate role_ids with admin role id."},{"line_number":35,"context_line":"        cls.role_ids \u003d [cls.get_role_by_name(CONF.identity.admin_role)[\u0027id\u0027]]"},{"line_number":36,"context_line":"        cls.project_id \u003d cls.auth_provider.credentials.project_id"},{"line_number":37,"context_line":"        cls.user_id \u003d cls.auth_provider.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_fa0d6435","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":21},"in_reply_to":"3f1d235d_110eed8c","updated":"2017-07-03 09:53:16.000000000","message":"Done","commit_id":"7cae348d5ae98e91e0867f04803d7e60c75800f5"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7cce248de75143aea2545b2c78902342e844324f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                 rule\u003d\"identity:authorize_request_token\")"},{"line_number":83,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d976\u0027)"},{"line_number":84,"context_line":"    def test_authorize_request_token(self):"},{"line_number":85,"context_line":"        \"\"\"Authorize request token"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        _, request_token \u003d self._create_consumer_and_request_token()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_512b45ea","line":87,"range":{"start_line":85,"start_character":8,"end_line":87,"end_character":11},"updated":"2017-06-30 14:05:46.000000000","message":"These comments should be removed as they don\u0027t add much value.","commit_id":"7cae348d5ae98e91e0867f04803d7e60c75800f5"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"75b74288ec1743b5ed82e2ba2df4e38030aca21d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                 rule\u003d\"identity:authorize_request_token\")"},{"line_number":83,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d976\u0027)"},{"line_number":84,"context_line":"    def test_authorize_request_token(self):"},{"line_number":85,"context_line":"        \"\"\"Authorize request token"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        _, request_token \u003d self._create_consumer_and_request_token()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        self.rbac_utils.switch_role(self, toggle_rbac_role\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_da1ce86b","line":87,"range":{"start_line":85,"start_character":8,"end_line":87,"end_character":11},"in_reply_to":"3f1d235d_512b45ea","updated":"2017-07-03 09:53:16.000000000","message":"Done","commit_id":"7cae348d5ae98e91e0867f04803d7e60c75800f5"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7cce248de75143aea2545b2c78902342e844324f","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                                 access_token)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":109,"context_line":"                                 rule\u003d\"identity:list_access_token_role_ids\")"},{"line_number":110,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d978\u0027)"},{"line_number":111,"context_line":"    def test_list_access_token_role_ids(self):"},{"line_number":112,"context_line":"        \"\"\"List access token role_ids"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_d1f99580","line":109,"range":{"start_line":109,"start_character":48,"end_line":109,"end_character":74},"updated":"2017-06-30 14:05:46.000000000","message":"This is incorrect: http://logs.openstack.org/46/459646/16/check/gate-tempest-dsvm-patrole-admin-ubuntu-xenial/49130ff/console.html#_2017-06-30_10_27_14_645771\n\nSee: https://github.com/openstack/keystone/blob/4dd73a8543dad565a032730bbe08597c87baa24a/keystone/common/policies/access_token.py#L45","commit_id":"7cae348d5ae98e91e0867f04803d7e60c75800f5"},{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"75b74288ec1743b5ed82e2ba2df4e38030aca21d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                                 access_token)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":109,"context_line":"                                 rule\u003d\"identity:list_access_token_role_ids\")"},{"line_number":110,"context_line":"    @decorators.idempotent_id(\u00270f148510-63bf-11e6-4522-080044d0d978\u0027)"},{"line_number":111,"context_line":"    def test_list_access_token_role_ids(self):"},{"line_number":112,"context_line":"        \"\"\"List access token role_ids"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_ba17ec45","line":109,"range":{"start_line":109,"start_character":48,"end_line":109,"end_character":74},"in_reply_to":"3f1d235d_d1f99580","updated":"2017-07-03 09:53:16.000000000","message":"Done","commit_id":"7cae348d5ae98e91e0867f04803d7e60c75800f5"}],"releasenotes/notes/test_oauth_consumers_rbac-13e1d3b5decbaf79.yaml":[{"author":{"_account_id":10366,"name":"Hemanth Nakkina","email":"hemanth.nakkina@canonical.com","username":"Hemanth"},"change_message_id":"967e019c0c4cda445cbd454a2d0f2f766b01a896","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Replace this text with content to appear at the top of the section for this"},{"line_number":4,"context_line":"    release. All of the prelude content is merged together and then rendered"},{"line_number":5,"context_line":"    separately from the items listed in other parts of the file, so the text"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5ff73747_964cdd42","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":10},"updated":"2017-04-27 03:06:10.000000000","message":"Update the relevant sections and remove the unrelevant ones.","commit_id":"1f324bd111a70811a0af734ae0b0ec12ff4d855d"}],"releasenotes/notes/test_oauth_tokens_rbac-13e1d3b5decbaf79.yaml":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c4ecb6ace87889a795a64a1fe3db95b5e9520feb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add test_oauth_tokens_rbac.py with API test cases related to"},{"line_number":4,"context_line":"    token APIs."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"1f013ff3_12e7f542","line":3,"range":{"start_line":3,"start_character":39,"end_line":3,"end_character":42},"updated":"2017-05-16 17:06:26.000000000","message":"RBAC","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"e5adb688d07441855caab3ffc63f843f046b65b6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add test_oauth_tokens_rbac.py with API test cases related to"},{"line_number":4,"context_line":"    token APIs."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"1f013ff3_cb9e6153","line":3,"range":{"start_line":3,"start_character":39,"end_line":3,"end_character":42},"in_reply_to":"1f013ff3_12e7f542","updated":"2017-05-17 09:53:39.000000000","message":"Done","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c4ecb6ace87889a795a64a1fe3db95b5e9520feb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add test_oauth_tokens_rbac.py with API test cases related to"},{"line_number":4,"context_line":"    token APIs."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"1f013ff3_72f639fc","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":14},"updated":"2017-05-16 17:06:26.000000000","message":"the OS-OAUTH1 Keystone v3 extension API.","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"},{"author":{"_account_id":25101,"name":"Manik Sidana","username":"maniksidana","inactive":true},"change_message_id":"e5adb688d07441855caab3ffc63f843f046b65b6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add test_oauth_tokens_rbac.py with API test cases related to"},{"line_number":4,"context_line":"    token APIs."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"1f013ff3_eba35d9d","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":14},"in_reply_to":"1f013ff3_72f639fc","updated":"2017-05-17 09:53:39.000000000","message":"Done","commit_id":"378eb687f4c59c456ffd73fec3518759cb03b242"}]}
