)]}'
{"patrole_tempest_plugin/config.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3d792807bc3adc3ee7b3b8cdb7b3f363cced833a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"RbacGroup \u003d ["},{"line_number":22,"context_line":"    cfg.StrOpt(\u0027rbac_test_role\u0027,"},{"line_number":23,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":24,"context_line":"               help\u003d\"RBAC role.\"),"},{"line_number":25,"context_line":"    cfg.BoolOpt(\u0027rbac_flag\u0027,"},{"line_number":26,"context_line":"                default\u003dFalse,"},{"line_number":27,"context_line":"                help\u003d\"Enables rbac tests\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_2f0e7332","line":24,"range":{"start_line":24,"start_character":21,"end_line":24,"end_character":31},"updated":"2017-01-10 20:01:04.000000000","message":"The current RBAC role against which to run Patrole tests.","commit_id":"e228c06896c4ddaf1d498d6f9cdebd1c6841176c"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3d792807bc3adc3ee7b3b8cdb7b3f363cced833a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"               help\u003d\"RBAC role.\"),"},{"line_number":25,"context_line":"    cfg.BoolOpt(\u0027rbac_flag\u0027,"},{"line_number":26,"context_line":"                default\u003dFalse,"},{"line_number":27,"context_line":"                help\u003d\"Enables rbac tests\"),"},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027rbac_roles\u0027,"},{"line_number":29,"context_line":"                default\u003d[\u0027admin\u0027],"},{"line_number":30,"context_line":"                help\u003d\"A list of rbac roles. \"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_f4b27ee4","line":27,"range":{"start_line":27,"start_character":22,"end_line":27,"end_character":40},"updated":"2017-01-10 20:01:04.000000000","message":"Enables RBAC tests.","commit_id":"e228c06896c4ddaf1d498d6f9cdebd1c6841176c"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3d792807bc3adc3ee7b3b8cdb7b3f363cced833a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                help\u003d\"Enables rbac tests\"),"},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027rbac_roles\u0027,"},{"line_number":29,"context_line":"                default\u003d[\u0027admin\u0027],"},{"line_number":30,"context_line":"                help\u003d\"A list of rbac roles. \"),"},{"line_number":31,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_94b5b2d1","line":30,"range":{"start_line":30,"start_character":22,"end_line":30,"end_character":44},"updated":"2017-01-10 20:01:04.000000000","message":"List of RBAC roles found in the policy files under testing.","commit_id":"e228c06896c4ddaf1d498d6f9cdebd1c6841176c"}],"patrole_tempest_plugin/rbac_auth.py":[{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"8439e80b9dcf333afc6d629696cee3bee6f2a5a7","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def get_permission(self, api, role):"},{"line_number":30,"context_line":"        if self.roles_dict is None:"},{"line_number":31,"context_line":"            raise exceptions.InvalidConfiguration(\"roles dictionary is empty!\")"},{"line_number":32,"context_line":"        try:"},{"line_number":33,"context_line":"            _api \u003d self.roles_dict[api]"},{"line_number":34,"context_line":"            if role in _api:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_9605fa15","line":31,"range":{"start_line":31,"start_character":51,"end_line":31,"end_character":52},"updated":"2017-01-09 16:44:55.000000000","message":"nit: Should be capitalized","commit_id":"63f584e562eb42ce1af3f4f08f440c5579f0e99c"}],"patrole_tempest_plugin/rbac_exceptions.py":[{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"8439e80b9dcf333afc6d629696cee3bee6f2a5a7","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class RbacActionFailed (exceptions.ClientRestClientException):"},{"line_number":20,"context_line":"    message \u003d \"Rbac Action Failed\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class RbacResourceSetupFailed (exceptions.TempestException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_310d3838","line":20,"range":{"start_line":20,"start_character":20,"end_line":20,"end_character":28},"updated":"2017-01-09 16:44:55.000000000","message":"nit: Lowercase","commit_id":"63f584e562eb42ce1af3f4f08f440c5579f0e99c"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"8439e80b9dcf333afc6d629696cee3bee6f2a5a7","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class RbacResourceSetupFailed (exceptions.TempestException):"},{"line_number":24,"context_line":"    message \u003d \"Rbac Resource Setup Failed\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class RbacOverPermission (exceptions.TempestException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_911c246c","line":24,"range":{"start_line":24,"start_character":20,"end_line":24,"end_character":36},"updated":"2017-01-09 16:44:55.000000000","message":"nit: Lowercase","commit_id":"63f584e562eb42ce1af3f4f08f440c5579f0e99c"}],"patrole_tempest_plugin/rbac_role_converter.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9f98925a233966c63890f17cab543dfb36c8635a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"TESTED_RULES \u003d []"},{"line_number":31,"context_line":"PARSED_RULES \u003d []"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\"\"\""},{"line_number":34,"context_line":"A class for parsing policy rules into lists of allowed roles."},{"line_number":35,"context_line":"RBAC testing requires that each rule in a policy file be broken up into"},{"line_number":36,"context_line":"the roles that constitute it. This class automates that process."},{"line_number":37,"context_line":"\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class RbacPolicyConverter(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_ce7d22b3","line":37,"range":{"start_line":33,"start_character":0,"end_line":37,"end_character":3},"updated":"2017-01-09 20:53:53.000000000","message":"This should be placed underneath the class definition. Also, I feel like this whole file should be better-documented.","commit_id":"2f5dbf70396dde853d20ec1376d167c4b9512699"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9f98925a233966c63890f17cab543dfb36c8635a","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class RbacPolicyConverter(object):"},{"line_number":41,"context_line":"    def __init__(self, service, path\u003dNone):"},{"line_number":42,"context_line":"        if(path is None):"},{"line_number":43,"context_line":"            path \u003d \u0027/etc/{0}/policy.json\u0027.format(service)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        if not os.path.isfile(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_6e2436c6","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":25},"updated":"2017-01-09 20:53:53.000000000","message":"if path is None:","commit_id":"2f5dbf70396dde853d20ec1376d167c4b9512699"}],"patrole_tempest_plugin/rbac_utils.py":[{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"8439e80b9dcf333afc6d629696cee3bee6f2a5a7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return RbacUtils.dictionary"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @staticmethod"},{"line_number":74,"context_line":"    def delete_all_role(self, base_url, headers):"},{"line_number":75,"context_line":"        # Find the current role"},{"line_number":76,"context_line":"        response \u003d http.request(\u0027GET\u0027, base_url, headers\u003dheaders)"},{"line_number":77,"context_line":"        if response.status !\u003d 200:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_f67c86ed","line":74,"range":{"start_line":74,"start_character":20,"end_line":74,"end_character":24},"updated":"2017-01-09 16:44:55.000000000","message":"nit: roles","commit_id":"63f584e562eb42ce1af3f4f08f440c5579f0e99c"}],"tests/test_rbac_role_converter.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9f98925a233966c63890f17cab543dfb36c8635a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DEFAULT_ROLES \u003d [CONF.rbac.rbac_roles]"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class RbacPolicyTest(base.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_2e0b0e7f","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":38},"updated":"2017-01-09 20:53:53.000000000","message":"Because this is a unit test I feel like these values should be hard-coded. Unit tests should pass regardless of configuration settings.","commit_id":"2f5dbf70396dde853d20ec1376d167c4b9512699"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9f98925a233966c63890f17cab543dfb36c8635a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.custom_policy_file \u003d os.path.join(current_directory,"},{"line_number":34,"context_line":"                                               \u0027custom_rbac_policy.json\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        CONF.set_override(\u0027rbac_roles\u0027, DEFAULT_ROLES, group\u003d\u0027rbac\u0027,"},{"line_number":37,"context_line":"                          enforce_type\u003dTrue)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_custom_policy(self):"},{"line_number":40,"context_line":"        default_roles \u003d [\u0027zero\u0027, \u0027one\u0027, \u0027two\u0027, \u0027three\u0027, \u0027four\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_2e594e8f","line":37,"range":{"start_line":36,"start_character":8,"end_line":37,"end_character":44},"updated":"2017-01-09 20:53:53.000000000","message":"This is recursive. You\u0027re overriding a value you retrieved with the value you first retrieved when you declared DEFAULT_ROLES.","commit_id":"2f5dbf70396dde853d20ec1376d167c4b9512699"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3d792807bc3adc3ee7b3b8cdb7b3f363cced833a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \u0027policy_action_6\u0027: [\u0027eight\u0027],"},{"line_number":54,"context_line":"        }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        for rule in expected.keys():"},{"line_number":57,"context_line":"            self.assertTrue(rule in self.roles_dict.keys())"},{"line_number":58,"context_line":"            for role in expected[rule]:"},{"line_number":59,"context_line":"                self.assertTrue(role in self.roles_dict[rule])"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_54f18acc","line":59,"range":{"start_line":56,"start_character":8,"end_line":59,"end_character":62},"updated":"2017-01-10 20:01:04.000000000","message":"A nice to have here is to test whether the role is NOT in self.roles_dict if it shouldn\u0027t be. Because in theory all the roles might be present.","commit_id":"e228c06896c4ddaf1d498d6f9cdebd1c6841176c"}],"tests/test_rbac_rule_validation.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9f98925a233966c63890f17cab543dfb36c8635a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        decorator \u003d rbac_rv.action(\"\", \"\", \"\")"},{"line_number":29,"context_line":"        mock_function \u003d mock.Mock()"},{"line_number":30,"context_line":"        wrapper \u003d decorator(mock_function)"},{"line_number":31,"context_line":"        wrapper()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @mock.patch(\u0027patrole_tempest_plugin.rbac_auth.RbacAuthority\u0027)"},{"line_number":34,"context_line":"    def test_RBAC_rv_forbidden(self, mock_auth):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_2efdce6e","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":17},"updated":"2017-01-09 20:53:53.000000000","message":"Need assertion.","commit_id":"2f5dbf70396dde853d20ec1376d167c4b9512699"}]}
