)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    1. create server"},{"line_number":11,"context_line":"    2. delete server"},{"line_number":12,"context_line":"    3. update server"},{"line_number":13,"context_line":"    4. reset network server"},{"line_number":14,"context_line":"    5. inject network information"},{"line_number":15,"context_line":"    6. create agent"},{"line_number":16,"context_line":"    7. aggregate list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a1ced50_963a5635","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":27},"updated":"2017-03-17 13:59:09.000000000","message":"I believe you removed this. Make sure this list is up to date.","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"c6e83838db5a4e614d811c1eb4c082be7dd3f8ad","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    1. create server"},{"line_number":11,"context_line":"    2. delete server"},{"line_number":12,"context_line":"    3. update server"},{"line_number":13,"context_line":"    4. reset network server"},{"line_number":14,"context_line":"    5. inject network information"},{"line_number":15,"context_line":"    6. create agent"},{"line_number":16,"context_line":"    7. aggregate list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a1ced50_76b6ba8b","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":27},"in_reply_to":"1a1ced50_963a5635","updated":"2017-03-17 14:07:37.000000000","message":"fine, some how missed it. Thanks","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"}],"patrole_tempest_plugin/tests/api/compute/test_agents_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","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(AgentsRbacTest, cls).skip_checks()"},{"line_number":30,"context_line":"        if not CONF.compute_feature_enabled.api_extensions:"},{"line_number":31,"context_line":"            raise cls.skipException("},{"line_number":32,"context_line":"                \u0027%s skipped as no compute extensions enabled\u0027 % cls.__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @rbac_rule_validation.action("},{"line_number":35,"context_line":"        service\u003d\"nova\", rule\u003d\"os_compute_api:os-agents\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_bad80cf1","line":32,"range":{"start_line":30,"start_character":0,"end_line":32,"end_character":77},"updated":"2017-03-17 17:57:12.000000000","message":"I know you didn\u0027t do this, but can we change this to:\n\nif not test.is_extension_enabled(\u0027compute\u0027, \u0027os-agents\u0027):\n    ...\n\nwhere test is:\n\nfrom tempest import test","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9bea427c53b4ef3d8e2b48b2b15a18ebb51a664c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                  \u0027version\u0027: \u00277.0\u0027, \u0027url\u0027: \u0027xxx://xxxx/xxx/xxx\u0027,"},{"line_number":50,"context_line":"                  \u0027md5hash\u0027: \u0027add6bb58e139be103324d04d82d8f545\u0027}"},{"line_number":51,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":52,"context_line":"        body \u003d self.os.agents_client.create_agent(**params)[\u0027agent\u0027]"},{"line_number":53,"context_line":"        self.addCleanup(self.os.agents_client.delete_agent,"},{"line_number":54,"context_line":"                        body[\u0027agent_id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_7365711c","line":52,"range":{"start_line":52,"start_character":15,"end_line":52,"end_character":36},"updated":"2017-03-21 17:53:18.000000000","message":"You can just use self.agents_client.","commit_id":"802406581cab706b94e26ccbbc57bbd0329beacc"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9bea427c53b4ef3d8e2b48b2b15a18ebb51a664c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                  \u0027md5hash\u0027: \u0027add6bb58e139be103324d04d82d8f545\u0027}"},{"line_number":51,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":52,"context_line":"        body \u003d self.os.agents_client.create_agent(**params)[\u0027agent\u0027]"},{"line_number":53,"context_line":"        self.addCleanup(self.os.agents_client.delete_agent,"},{"line_number":54,"context_line":"                        body[\u0027agent_id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_936aedec","line":53,"range":{"start_line":53,"start_character":24,"end_line":53,"end_character":45},"updated":"2017-03-21 17:53:18.000000000","message":"Ditto.","commit_id":"802406581cab706b94e26ccbbc57bbd0329beacc"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"5c3ebd9658e14664bb5c36ff716d72837c4d2f49","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @rbac_rule_validation.action("},{"line_number":44,"context_line":"        service\u003d\"nova\","},{"line_number":45,"context_line":"        rule\u003d\"os_compute_api:os-agents\")"},{"line_number":46,"context_line":"    @decorators.idempotent_id(\u002777d6cae4-1ced-47f7-af2e-3d6a45958fd6\u0027)"},{"line_number":47,"context_line":"    def test_create_agent(self):"},{"line_number":48,"context_line":"        params \u003d {\u0027hypervisor\u0027: \u0027kvm\u0027, \u0027os\u0027: \u0027win\u0027, \u0027architecture\u0027: \u0027x86\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_90c2bae7","line":45,"range":{"start_line":45,"start_character":14,"end_line":45,"end_character":38},"updated":"2017-03-22 14:39:07.000000000","message":"This is testing the same policy as the one above. Patrole tests access not functionality, so I don\u0027t see the value in testing the same policy multiple times.","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"47f927cce100eb393b8bd94e9405d627a81b447f","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @rbac_rule_validation.action("},{"line_number":44,"context_line":"        service\u003d\"nova\","},{"line_number":45,"context_line":"        rule\u003d\"os_compute_api:os-agents\")"},{"line_number":46,"context_line":"    @decorators.idempotent_id(\u002777d6cae4-1ced-47f7-af2e-3d6a45958fd6\u0027)"},{"line_number":47,"context_line":"    def test_create_agent(self):"},{"line_number":48,"context_line":"        params \u003d {\u0027hypervisor\u0027: \u0027kvm\u0027, \u0027os\u0027: \u0027win\u0027, \u0027architecture\u0027: \u0027x86\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_1dc97e59","line":45,"range":{"start_line":45,"start_character":14,"end_line":45,"end_character":38},"in_reply_to":"1a1ced50_0743f1b2","updated":"2017-03-22 15:33:03.000000000","message":"I actually think each API should have its own policy action. I would see if you can create a bug in Nova and see if you can break down os_compute_api:os-agents into separate actions, a distinct action for create, list, delete, and update .... I spoke to Cinder about this at the PTG and they told me we can create a bug in Cinder to address these types of scenarios.","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"79a2856d70fee80753ef007339e9b73b4bae851c","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @rbac_rule_validation.action("},{"line_number":44,"context_line":"        service\u003d\"nova\","},{"line_number":45,"context_line":"        rule\u003d\"os_compute_api:os-agents\")"},{"line_number":46,"context_line":"    @decorators.idempotent_id(\u002777d6cae4-1ced-47f7-af2e-3d6a45958fd6\u0027)"},{"line_number":47,"context_line":"    def test_create_agent(self):"},{"line_number":48,"context_line":"        params \u003d {\u0027hypervisor\u0027: \u0027kvm\u0027, \u0027os\u0027: \u0027win\u0027, \u0027architecture\u0027: \u0027x86\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_0743f1b2","line":45,"range":{"start_line":45,"start_character":14,"end_line":45,"end_character":38},"in_reply_to":"1a1ced50_90c2bae7","updated":"2017-03-22 15:04:30.000000000","message":"I will check for it Samantha. Thanks.","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"}],"patrole_tempest_plugin/tests/api/compute/test_server_migrations_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ServerMigrationRbacTest(base.BaseV2ComputeRbacTest):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_76ab1a8a","line":30,"range":{"start_line":30,"start_character":6,"end_line":30,"end_character":29},"updated":"2017-03-17 13:59:09.000000000","message":"May we call this MigrateServerRbacTest?\n\nThere are literally three files in nova/nova/policies similar to this:\n* migrate_server (which is this one)\n* migrations\n* server_migrations","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def setup_clients(cls):"},{"line_number":34,"context_line":"        super(ServerMigrationRbacTest, cls).setup_clients()"},{"line_number":35,"context_line":"        cls.client \u003d cls.servers_client"},{"line_number":36,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @rbac_rule_validation.action("},{"line_number":39,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_bb02db3c","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":48},"updated":"2017-03-17 13:59:09.000000000","message":"Already defined in superclass.","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        service\u003d\"nova\","},{"line_number":40,"context_line":"        rule\u003d\"os_compute_api:os-migrate-server:migrate\")"},{"line_number":41,"context_line":"    @decorators.idempotent_id(\u0027c6f1607c-9fed-4c00-807e-9ba675b98b1b\u0027)"},{"line_number":42,"context_line":"    def test_migration(self):"},{"line_number":43,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":44,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":45,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_b6e75211","line":42,"updated":"2017-03-17 13:59:09.000000000","message":"I\u0027m surprised this doesn\u0027t also throw a BadRequest.","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"8aa4c1e6ece583cc7c3a8f27919c396ef6837534","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        service\u003d\"nova\","},{"line_number":40,"context_line":"        rule\u003d\"os_compute_api:os-migrate-server:migrate\")"},{"line_number":41,"context_line":"    @decorators.idempotent_id(\u0027c6f1607c-9fed-4c00-807e-9ba675b98b1b\u0027)"},{"line_number":42,"context_line":"    def test_migration(self):"},{"line_number":43,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":44,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":45,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_90ced981","line":42,"in_reply_to":"1a1ced50_b6e75211","updated":"2017-03-17 15:00:53.000000000","message":"Yes Bad request handling should be there. Will add this.","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.client.migrate_server(server[\u0027id\u0027], host\u003dtarget_host,"},{"line_number":47,"context_line":"                                   block_migration\u003dFalse,"},{"line_number":48,"context_line":"                                   disk_over_commit\u003dFalse)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @rbac_rule_validation.action("},{"line_number":51,"context_line":"        service\u003d\"nova\","},{"line_number":52,"context_line":"        rule\u003d\"os_compute_api:os-migrate-server:migrate_live\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_d6f68ed6","line":49,"updated":"2017-03-17 13:59:09.000000000","message":"This might be needed above this test: @testtools.skipUnless(CONF.compute_feature_enabled.live_migration)","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        rule\u003d\"os_compute_api:os-migrate-server:migrate_live\")"},{"line_number":53,"context_line":"    @decorators.idempotent_id(\u002733520834-72c8-4edb-a189-a2e0fc9eb0d3\u0027)"},{"line_number":54,"context_line":"    def test_migration_live(self):"},{"line_number":55,"context_line":"        # Create a fake host to migrate. If a user is allowed, BadRequest"},{"line_number":56,"context_line":"        # will be thrown else Forbidden will be thrown."},{"line_number":57,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":58,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":59,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":60,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_7b9f8303","line":57,"range":{"start_line":55,"start_character":8,"end_line":57,"end_character":32},"updated":"2017-03-17 13:59:09.000000000","message":"Since this is used twice (here and in test above), may we put this in setUp or setup_resources and is it possible to use data_utils.rand_name(\u0027host\u0027) for target_host?","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"8aa4c1e6ece583cc7c3a8f27919c396ef6837534","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        rule\u003d\"os_compute_api:os-migrate-server:migrate_live\")"},{"line_number":53,"context_line":"    @decorators.idempotent_id(\u002733520834-72c8-4edb-a189-a2e0fc9eb0d3\u0027)"},{"line_number":54,"context_line":"    def test_migration_live(self):"},{"line_number":55,"context_line":"        # Create a fake host to migrate. If a user is allowed, BadRequest"},{"line_number":56,"context_line":"        # will be thrown else Forbidden will be thrown."},{"line_number":57,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":58,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":59,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":60,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_709ebd57","line":57,"range":{"start_line":55,"start_character":8,"end_line":57,"end_character":32},"in_reply_to":"1a1ced50_7b9f8303","updated":"2017-03-17 15:00:53.000000000","message":"For me, moving them in setUp is not a good idea.\nBut yes random name generation can be used. Will add it.","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # Create a fake host to migrate. If a user is allowed, BadRequest"},{"line_number":46,"context_line":"        # will be thrown else Forbidden will be thrown."},{"line_number":47,"context_line":"        target_host \u003d data_utils.rand_name(\u0027host\u0027)"},{"line_number":48,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":49,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            self.client.migrate_server(server[\u0027id\u0027], host\u003dtarget_host,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_fa9c446b","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":61},"updated":"2017-03-17 17:57:12.000000000","message":"This can be a class-level resource since both these tests throw a BadRequest--which means that server is unaffected--since we\u0027re using a fake host.","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        # Create a fake host to migrate. If a user is allowed, BadRequest"},{"line_number":65,"context_line":"        # will be thrown else Forbidden will be thrown."},{"line_number":66,"context_line":"        target_host \u003d data_utils.rand_name(\u0027host\u0027)"},{"line_number":67,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":68,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            self.client.live_migrate_server(server[\u0027id\u0027], host\u003dtarget_host,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_1a884022","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":61},"updated":"2017-03-17 17:57:12.000000000","message":"See above.","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7f4e3343ad3e20248417d05ed23e2665f9182fa1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        target_host \u003d data_utils.rand_name(\u0027host\u0027)"},{"line_number":53,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        with testtools.ExpectedException(exceptions.BadRequest):"},{"line_number":56,"context_line":"            self.client.migrate_server(self.server[\u0027id\u0027], host\u003dtarget_host,"},{"line_number":57,"context_line":"                                       block_migration\u003dFalse,"},{"line_number":58,"context_line":"                                       disk_over_commit\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_622d0aa7","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":64},"updated":"2017-03-17 20:35:11.000000000","message":"If you look at the code for this API call here:\nhttps://github.com/openstack/nova/blob/99b1a4a7b78ea50ff2a259980c7e4370729eeafc/nova/api/openstack/compute/migrate_server.py\n\nYou\u0027ll see that the exception that is thrown is role-dependent. For Member it should throw a Forbidden (because it\u0027s admin_api) and for admin it should throw a BadRequest.\n\nThere\u0027s no clean way to do this right now. Rick is working on handling an expected_exception kwarg to the decorator, but that could be further enhanced to:\n1) Have a kwarg for expected admin exception\n2) Have a kwarg for expected non-admin exception\n\nRight now, there\u0027s no clean way to handle this other than by doing something like:\n\nif CONF.rbac.test_rbac_role \u003d\u003d \u0027admin\u0027:\n    with testtools.ExpectedException(...):\n        self.client.migrate_server(...)\nelse:\n    self.client.migrate_server(...)\n\nThough, I\u0027m getting an OverPermission for Member when I do this on my local environment, not sure why.","commit_id":"39f8cb663dacdde9a7a2e86fdb59eab6504013b7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7f4e3343ad3e20248417d05ed23e2665f9182fa1","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # will be thrown else Forbidden will be thrown."},{"line_number":69,"context_line":"        target_host \u003d data_utils.rand_name(\u0027host\u0027)"},{"line_number":70,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":71,"context_line":"        with testtools.ExpectedException(exceptions.BadRequest):"},{"line_number":72,"context_line":"            self.client.live_migrate_server(self.server[\u0027id\u0027],"},{"line_number":73,"context_line":"                                            host\u003dtarget_host,"},{"line_number":74,"context_line":"                                            block_migration\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_c2123e62","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":64},"updated":"2017-03-17 20:35:11.000000000","message":"See above.","commit_id":"39f8cb663dacdde9a7a2e86fdb59eab6504013b7"},{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"a6711609be9004bb97ebe0240c5c5ed5dfadaf7e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            self.client.migrate_server(self.server[\u0027id\u0027], host\u003dtarget_host,"},{"line_number":56,"context_line":"                                       block_migration\u003dFalse,"},{"line_number":57,"context_line":"                                       disk_over_commit\u003dFalse)"},{"line_number":58,"context_line":"        except exceptions.BadRequest:"},{"line_number":59,"context_line":"            pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @testtools.skipUnless(CONF.compute_feature_enabled.live_migration,"},{"line_number":62,"context_line":"                          \u0027Live migration feature is not enabled.\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_557de6e5","line":59,"range":{"start_line":58,"start_character":8,"end_line":59,"end_character":16},"updated":"2017-03-20 22:19:54.000000000","message":"I strongly dislike passing on a 400 error.  It is too easy to accidentally trigger a false-positive result.","commit_id":"5b835417256ef19fc6e9e3a194684b3c662bc503"},{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"a6711609be9004bb97ebe0240c5c5ed5dfadaf7e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                                            host\u003dtarget_host,"},{"line_number":75,"context_line":"                                            block_migration\u003dFalse,"},{"line_number":76,"context_line":"                                            disk_over_commit\u003dFalse)"},{"line_number":77,"context_line":"        except exceptions.BadRequest:"},{"line_number":78,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_95875ed6","line":78,"range":{"start_line":77,"start_character":8,"end_line":78,"end_character":16},"updated":"2017-03-20 22:19:54.000000000","message":"see above","commit_id":"5b835417256ef19fc6e9e3a194684b3c662bc503"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4931b45edc73d1e4498313c4237a2408848d3bce","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import testtools"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from tempest.common import waiters"},{"line_number":21,"context_line":"from tempest import config"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_eda94f25","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":24},"updated":"2017-03-22 17:08:30.000000000","message":"Unused.","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4931b45edc73d1e4498313c4237a2408848d3bce","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from patrole_tempest_plugin.tests.api.compute import rbac_base as base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d config.CONF"},{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class MigrateServerRbacTest(base.BaseV2ComputeRbacTest):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_cdae532d","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":29},"updated":"2017-03-22 17:08:30.000000000","message":"Unused.","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"b1e8eecd323944941bd562ad42d58c1a308aad29","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 AT\u0026T Corporations."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_844889b4","line":1,"range":{"start_line":1,"start_character":22,"end_line":1,"end_character":34},"updated":"2017-03-23 14:47:04.000000000","message":"Corporation","commit_id":"51bfd1e28aab3b5b2c6d20a7a6cc144c8b35f53a"}],"patrole_tempest_plugin/tests/api/compute/test_server_password_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    @rbac_rule_validation.action("},{"line_number":45,"context_line":"        service\u003d\"nova\","},{"line_number":46,"context_line":"        rule\u003d\"os_compute_api:os-server-password\")"},{"line_number":47,"context_line":"    def test_delete_password(self):"},{"line_number":48,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":49,"context_line":"        self.client.delete_password(self.server[\u0027id\u0027])"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_1aa120aa","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":28},"updated":"2017-03-17 17:57:12.000000000","message":"test_delete_server_password (for consistency with below)","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9bea427c53b4ef3d8e2b48b2b15a18ebb51a664c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        rule\u003d\"os_compute_api:os-server-password\")"},{"line_number":54,"context_line":"    @decorators.idempotent_id(\u0027f677971a-7d20-493c-977f-6ff0a74b5b2c\u0027)"},{"line_number":55,"context_line":"    def test_get_server_password(self):"},{"line_number":56,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":57,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":58,"context_line":"        self.client.show_password(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_734c919e","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":61},"updated":"2017-03-21 17:53:18.000000000","message":"This isn\u0027t needed. Use class-level server. Instead, add this to test_delete_server_password test above, in case other tests are added here, so that they can also use the class-level server.","commit_id":"802406581cab706b94e26ccbbc57bbd0329beacc"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9bea427c53b4ef3d8e2b48b2b15a18ebb51a664c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def test_get_server_password(self):"},{"line_number":56,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":57,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":58,"context_line":"        self.client.show_password(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_b3428966","line":58,"range":{"start_line":58,"start_character":34,"end_line":58,"end_character":46},"updated":"2017-03-21 17:53:18.000000000","message":"self.server[\u0027id\u0027]","commit_id":"802406581cab706b94e26ccbbc57bbd0329beacc"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"5c3ebd9658e14664bb5c36ff716d72837c4d2f49","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @rbac_rule_validation.action("},{"line_number":52,"context_line":"        service\u003d\"nova\","},{"line_number":53,"context_line":"        rule\u003d\"os_compute_api:os-server-password\")"},{"line_number":54,"context_line":"    @decorators.idempotent_id(\u0027f677971a-7d20-493c-977f-6ff0a74b5b2c\u0027)"},{"line_number":55,"context_line":"    def test_get_server_password(self):"},{"line_number":56,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_2439cbd7","line":53,"range":{"start_line":53,"start_character":14,"end_line":53,"end_character":47},"updated":"2017-03-22 14:39:07.000000000","message":"See comment from test_agents_rbac","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"}],"patrole_tempest_plugin/tests/api/compute/test_server_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        cls.servers_admin_client \u003d cls.os_adm.servers_client"},{"line_number":40,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def tearDown(self):"},{"line_number":43,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":44,"context_line":"        super(ComputeServersRbacTest, self).tearDown()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @rbac_rule_validation.action("},{"line_number":47,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_2c3fb226","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":54},"updated":"2017-03-16 19:32:36.000000000","message":"Remove. See: https://review.openstack.org/#/c/444994/","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        cls.servers_admin_client \u003d cls.os_adm.servers_client"},{"line_number":40,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def tearDown(self):"},{"line_number":43,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":44,"context_line":"        super(ComputeServersRbacTest, self).tearDown()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @rbac_rule_validation.action("},{"line_number":47,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_a4556e1e","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":54},"in_reply_to":"1a1ced50_2c3fb226","updated":"2017-03-17 05:59:26.000000000","message":"Ohh yes, that is merged :)","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":44,"context_line":"        super(ComputeServersRbacTest, self).tearDown()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @rbac_rule_validation.action("},{"line_number":47,"context_line":"        service\u003d\"nova\","},{"line_number":48,"context_line":"        rule\u003d\"os_compute_api:servers:create\")"},{"line_number":49,"context_line":"    @decorators.idempotent_id(\u00274f34c73a-6ddc-4677-976f-71320fa855bd\u0027)"},{"line_number":50,"context_line":"    def test_create_server(self):"},{"line_number":51,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":52,"context_line":"        self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @rbac_rule_validation.action("},{"line_number":55,"context_line":"        service\u003d\"nova\","},{"line_number":56,"context_line":"        rule\u003d\"os_compute_api:servers:delete\")"},{"line_number":57,"context_line":"    @decorators.idempotent_id(\u0027062e3440-e873-4b41-9317-bf6d8be50c12\u0027)"},{"line_number":58,"context_line":"    def test_delete_server(self):"},{"line_number":59,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":60,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":61,"context_line":"        self.client.delete_server(server[\u0027id\u0027])"},{"line_number":62,"context_line":"        waiters.wait_for_server_termination(self.client, server[\u0027id\u0027])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @rbac_rule_validation.action("},{"line_number":65,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_cc2ffef4","line":62,"range":{"start_line":46,"start_character":0,"end_line":62,"end_character":70},"updated":"2017-03-16 19:32:36.000000000","message":"Move both into test_server_actions_rbac if not already there.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":44,"context_line":"        super(ComputeServersRbacTest, self).tearDown()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @rbac_rule_validation.action("},{"line_number":47,"context_line":"        service\u003d\"nova\","},{"line_number":48,"context_line":"        rule\u003d\"os_compute_api:servers:create\")"},{"line_number":49,"context_line":"    @decorators.idempotent_id(\u00274f34c73a-6ddc-4677-976f-71320fa855bd\u0027)"},{"line_number":50,"context_line":"    def test_create_server(self):"},{"line_number":51,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":52,"context_line":"        self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @rbac_rule_validation.action("},{"line_number":55,"context_line":"        service\u003d\"nova\","},{"line_number":56,"context_line":"        rule\u003d\"os_compute_api:servers:delete\")"},{"line_number":57,"context_line":"    @decorators.idempotent_id(\u0027062e3440-e873-4b41-9317-bf6d8be50c12\u0027)"},{"line_number":58,"context_line":"    def test_delete_server(self):"},{"line_number":59,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":60,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":61,"context_line":"        self.client.delete_server(server[\u0027id\u0027])"},{"line_number":62,"context_line":"        waiters.wait_for_server_termination(self.client, server[\u0027id\u0027])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @rbac_rule_validation.action("},{"line_number":65,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_6f650fe0","line":62,"range":{"start_line":46,"start_character":0,"end_line":62,"end_character":70},"in_reply_to":"1a1ced50_cc2ffef4","updated":"2017-03-17 05:59:26.000000000","message":"Although, I will check whether they are present there or not but Ideally we should not move these test cases in server_action.py file.\nserver creation/deletion/update/network_inject etc. are not server actions. These are something which are directly associated with server existence.\nBasically, server actions are reboot, resize, suspend, backup, start, stop,getting server vnc console etc.\n\nSo, Ideally these should not be moved in action\u0027s test.\n\nAlso, if we see tempest api tests, we can see that similar approach they are also following.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.client.delete_server(server[\u0027id\u0027])"},{"line_number":62,"context_line":"        waiters.wait_for_server_termination(self.client, server[\u0027id\u0027])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @rbac_rule_validation.action("},{"line_number":65,"context_line":"        service\u003d\"nova\","},{"line_number":66,"context_line":"        rule\u003d\"os_compute_api:servers:update\")"},{"line_number":67,"context_line":"    @decorators.idempotent_id(\u0027077b17cb-5621-43b9-8adf-5725f0d7a863\u0027)"},{"line_number":68,"context_line":"    def test_update_server(self):"},{"line_number":69,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":70,"context_line":"        new_name \u003d data_utils.rand_name(\u0027server\u0027)"},{"line_number":71,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            self.client.update_server(server[\u0027id\u0027], name\u003dnew_name)"},{"line_number":74,"context_line":"        except exceptions.ServerFault as e:"},{"line_number":75,"context_line":"            # Some other policy may have blocked it."},{"line_number":76,"context_line":"            LOG.info(\"ServerFault exception caught. Some other policy \""},{"line_number":77,"context_line":"                     \"blocked updating of server\")"},{"line_number":78,"context_line":"            raise rbac_exceptions.RbacActionFailed(e)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @rbac_rule_validation.action("},{"line_number":81,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_0cecb6c6","line":78,"range":{"start_line":64,"start_character":0,"end_line":78,"end_character":53},"updated":"2017-03-16 19:32:36.000000000","message":"Move into test_server_actions_rbac.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.client.delete_server(server[\u0027id\u0027])"},{"line_number":62,"context_line":"        waiters.wait_for_server_termination(self.client, server[\u0027id\u0027])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @rbac_rule_validation.action("},{"line_number":65,"context_line":"        service\u003d\"nova\","},{"line_number":66,"context_line":"        rule\u003d\"os_compute_api:servers:update\")"},{"line_number":67,"context_line":"    @decorators.idempotent_id(\u0027077b17cb-5621-43b9-8adf-5725f0d7a863\u0027)"},{"line_number":68,"context_line":"    def test_update_server(self):"},{"line_number":69,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":70,"context_line":"        new_name \u003d data_utils.rand_name(\u0027server\u0027)"},{"line_number":71,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            self.client.update_server(server[\u0027id\u0027], name\u003dnew_name)"},{"line_number":74,"context_line":"        except exceptions.ServerFault as e:"},{"line_number":75,"context_line":"            # Some other policy may have blocked it."},{"line_number":76,"context_line":"            LOG.info(\"ServerFault exception caught. Some other policy \""},{"line_number":77,"context_line":"                     \"blocked updating of server\")"},{"line_number":78,"context_line":"            raise rbac_exceptions.RbacActionFailed(e)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @rbac_rule_validation.action("},{"line_number":81,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_8f624bd7","line":78,"range":{"start_line":64,"start_character":0,"end_line":78,"end_character":53},"in_reply_to":"1a1ced50_0cecb6c6","updated":"2017-03-17 05:59:26.000000000","message":"Not required, see above comment.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                     \"blocked updating of server\")"},{"line_number":78,"context_line":"            raise rbac_exceptions.RbacActionFailed(e)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @rbac_rule_validation.action("},{"line_number":81,"context_line":"        service\u003d\"nova\","},{"line_number":82,"context_line":"        rule\u003d\"os_compute_api:os-admin-actions:reset_network\")"},{"line_number":83,"context_line":"    @decorators.idempotent_id(\u0027e931f67d-247e-4fad-b306-9a37497556f3\u0027)"},{"line_number":84,"context_line":"    def test_reset_network_server(self):"},{"line_number":85,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":86,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":87,"context_line":"        self.client.reset_network(server[\u0027id\u0027])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @rbac_rule_validation.action("},{"line_number":90,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_6c760a40","line":87,"range":{"start_line":80,"start_character":0,"end_line":87,"end_character":47},"updated":"2017-03-16 19:32:36.000000000","message":"Redundant. See test_admin_server_actions_rbac.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                     \"blocked updating of server\")"},{"line_number":78,"context_line":"            raise rbac_exceptions.RbacActionFailed(e)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @rbac_rule_validation.action("},{"line_number":81,"context_line":"        service\u003d\"nova\","},{"line_number":82,"context_line":"        rule\u003d\"os_compute_api:os-admin-actions:reset_network\")"},{"line_number":83,"context_line":"    @decorators.idempotent_id(\u0027e931f67d-247e-4fad-b306-9a37497556f3\u0027)"},{"line_number":84,"context_line":"    def test_reset_network_server(self):"},{"line_number":85,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":86,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":87,"context_line":"        self.client.reset_network(server[\u0027id\u0027])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @rbac_rule_validation.action("},{"line_number":90,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_cf81a34f","line":87,"range":{"start_line":80,"start_character":0,"end_line":87,"end_character":47},"in_reply_to":"1a1ced50_6c760a40","updated":"2017-03-17 05:59:26.000000000","message":"Sure, i will remove it. Thanks.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":87,"context_line":"        self.client.reset_network(server[\u0027id\u0027])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @rbac_rule_validation.action("},{"line_number":90,"context_line":"        service\u003d\"nova\","},{"line_number":91,"context_line":"        rule\u003d\"os_compute_api:os-admin-actions:inject_network_info\")"},{"line_number":92,"context_line":"    @decorators.idempotent_id(\u0027248b7fe6-ff2d-4093-9ec0-e7a263eba388\u0027)"},{"line_number":93,"context_line":"    def test_inject_network_info_server(self):"},{"line_number":94,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":95,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":96,"context_line":"        self.client.inject_network_info(server[\u0027id\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @rbac_rule_validation.action("},{"line_number":99,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_2c7c1220","line":96,"range":{"start_line":89,"start_character":0,"end_line":96,"end_character":53},"updated":"2017-03-16 19:32:36.000000000","message":"Redundant. See test_admin_server_actions_rbac.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":87,"context_line":"        self.client.reset_network(server[\u0027id\u0027])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @rbac_rule_validation.action("},{"line_number":90,"context_line":"        service\u003d\"nova\","},{"line_number":91,"context_line":"        rule\u003d\"os_compute_api:os-admin-actions:inject_network_info\")"},{"line_number":92,"context_line":"    @decorators.idempotent_id(\u0027248b7fe6-ff2d-4093-9ec0-e7a263eba388\u0027)"},{"line_number":93,"context_line":"    def test_inject_network_info_server(self):"},{"line_number":94,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":95,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":96,"context_line":"        self.client.inject_network_info(server[\u0027id\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @rbac_rule_validation.action("},{"line_number":99,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_af8d477d","line":96,"range":{"start_line":89,"start_character":0,"end_line":96,"end_character":53},"in_reply_to":"1a1ced50_2c7c1220","updated":"2017-03-17 05:59:26.000000000","message":"I will remove it. Thanks.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":96,"context_line":"        self.client.inject_network_info(server[\u0027id\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @rbac_rule_validation.action("},{"line_number":99,"context_line":"        service\u003d\"nova\","},{"line_number":100,"context_line":"        rule\u003d\"os_compute_api:os-agents\")"},{"line_number":101,"context_line":"    @decorators.idempotent_id(\u002777d6cae4-1ced-47f7-af2e-3d6a45958fd6\u0027)"},{"line_number":102,"context_line":"    def test_create_agent(self):"},{"line_number":103,"context_line":"        params \u003d {\u0027hypervisor\u0027: \u0027kvm\u0027, \u0027os\u0027: \u0027win\u0027, \u0027architecture\u0027: \u0027x86\u0027,"},{"line_number":104,"context_line":"                  \u0027version\u0027: \u00277.0\u0027, \u0027url\u0027: \u0027xxx://xxxx/xxx/xxx\u0027,"},{"line_number":105,"context_line":"                  \u0027md5hash\u0027: \u0027add6bb58e139be103324d04d82d8f545\u0027}"},{"line_number":106,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":107,"context_line":"        body \u003d self.os.agents_client.create_agent(**params)[\u0027agent\u0027]"},{"line_number":108,"context_line":"        self.addCleanup(self.os.agents_client.delete_agent,"},{"line_number":109,"context_line":"                        body[\u0027agent_id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @rbac_rule_validation.action("},{"line_number":112,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_0ccf56b1","line":109,"range":{"start_line":98,"start_character":0,"end_line":109,"end_character":41},"updated":"2017-03-16 19:32:36.000000000","message":"May we move this to test_agents_rbac?","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":96,"context_line":"        self.client.inject_network_info(server[\u0027id\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @rbac_rule_validation.action("},{"line_number":99,"context_line":"        service\u003d\"nova\","},{"line_number":100,"context_line":"        rule\u003d\"os_compute_api:os-agents\")"},{"line_number":101,"context_line":"    @decorators.idempotent_id(\u002777d6cae4-1ced-47f7-af2e-3d6a45958fd6\u0027)"},{"line_number":102,"context_line":"    def test_create_agent(self):"},{"line_number":103,"context_line":"        params \u003d {\u0027hypervisor\u0027: \u0027kvm\u0027, \u0027os\u0027: \u0027win\u0027, \u0027architecture\u0027: \u0027x86\u0027,"},{"line_number":104,"context_line":"                  \u0027version\u0027: \u00277.0\u0027, \u0027url\u0027: \u0027xxx://xxxx/xxx/xxx\u0027,"},{"line_number":105,"context_line":"                  \u0027md5hash\u0027: \u0027add6bb58e139be103324d04d82d8f545\u0027}"},{"line_number":106,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":107,"context_line":"        body \u003d self.os.agents_client.create_agent(**params)[\u0027agent\u0027]"},{"line_number":108,"context_line":"        self.addCleanup(self.os.agents_client.delete_agent,"},{"line_number":109,"context_line":"                        body[\u0027agent_id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @rbac_rule_validation.action("},{"line_number":112,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_efed7f26","line":109,"range":{"start_line":98,"start_character":0,"end_line":109,"end_character":41},"in_reply_to":"1a1ced50_0ccf56b1","updated":"2017-03-17 05:59:26.000000000","message":"Yes, this can be moved. I will move it.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.addCleanup(self.os.agents_client.delete_agent,"},{"line_number":109,"context_line":"                        body[\u0027agent_id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @rbac_rule_validation.action("},{"line_number":112,"context_line":"        service\u003d\"nova\","},{"line_number":113,"context_line":"        rule\u003d\"os_compute_api:os-aggregates:index\")"},{"line_number":114,"context_line":"    @decorators.idempotent_id(\u00271d1295c4-c101-416d-81e0-f17541839300\u0027)"},{"line_number":115,"context_line":"    def test_aggregate_list(self):"},{"line_number":116,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":117,"context_line":"        self.aggregates_client.list_aggregates()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @rbac_rule_validation.action("},{"line_number":120,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_ec403a0a","line":117,"range":{"start_line":111,"start_character":0,"end_line":117,"end_character":48},"updated":"2017-03-16 19:32:36.000000000","message":"Redundant. See test_list_aggregate_rbac in test_aggregates_rbac.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.addCleanup(self.os.agents_client.delete_agent,"},{"line_number":109,"context_line":"                        body[\u0027agent_id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @rbac_rule_validation.action("},{"line_number":112,"context_line":"        service\u003d\"nova\","},{"line_number":113,"context_line":"        rule\u003d\"os_compute_api:os-aggregates:index\")"},{"line_number":114,"context_line":"    @decorators.idempotent_id(\u00271d1295c4-c101-416d-81e0-f17541839300\u0027)"},{"line_number":115,"context_line":"    def test_aggregate_list(self):"},{"line_number":116,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":117,"context_line":"        self.aggregates_client.list_aggregates()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @rbac_rule_validation.action("},{"line_number":120,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_0ff3bb0b","line":117,"range":{"start_line":111,"start_character":0,"end_line":117,"end_character":48},"in_reply_to":"1a1ced50_ec403a0a","updated":"2017-03-17 05:59:26.000000000","message":"I will remove it. thanks.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":117,"context_line":"        self.aggregates_client.list_aggregates()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @rbac_rule_validation.action("},{"line_number":120,"context_line":"        service\u003d\"nova\","},{"line_number":121,"context_line":"        rule\u003d\"os_compute_api:os-migrate-server:migrate\")"},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027c6f1607c-9fed-4c00-807e-9ba675b98b1b\u0027)"},{"line_number":123,"context_line":"    def test_migration(self):"},{"line_number":124,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":125,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":126,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":127,"context_line":"        self.client.migrate_server(server[\u0027id\u0027], host\u003dtarget_host,"},{"line_number":128,"context_line":"                                   block_migration\u003dFalse,"},{"line_number":129,"context_line":"                                   disk_over_commit\u003dFalse)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @rbac_rule_validation.action("},{"line_number":132,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_cce1bed2","line":129,"range":{"start_line":119,"start_character":0,"end_line":129,"end_character":58},"updated":"2017-03-16 19:32:36.000000000","message":"Move into a new file called test_server_migrations_rbac.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":117,"context_line":"        self.aggregates_client.list_aggregates()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @rbac_rule_validation.action("},{"line_number":120,"context_line":"        service\u003d\"nova\","},{"line_number":121,"context_line":"        rule\u003d\"os_compute_api:os-migrate-server:migrate\")"},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027c6f1607c-9fed-4c00-807e-9ba675b98b1b\u0027)"},{"line_number":123,"context_line":"    def test_migration(self):"},{"line_number":124,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":125,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":126,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":127,"context_line":"        self.client.migrate_server(server[\u0027id\u0027], host\u003dtarget_host,"},{"line_number":128,"context_line":"                                   block_migration\u003dFalse,"},{"line_number":129,"context_line":"                                   disk_over_commit\u003dFalse)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @rbac_rule_validation.action("},{"line_number":132,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_8fe7ab3f","line":129,"range":{"start_line":119,"start_character":0,"end_line":129,"end_character":58},"in_reply_to":"1a1ced50_cce1bed2","updated":"2017-03-17 05:59:26.000000000","message":"Fine, this can be moved into new file.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":139,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":140,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            self.client.live_migrate_server(server[\u0027id\u0027], host\u003dtarget_host,"},{"line_number":143,"context_line":"                                            block_migration\u003dFalse,"},{"line_number":144,"context_line":"                                            disk_over_commit\u003dFalse)"},{"line_number":145,"context_line":"        except exceptions.BadRequest:"},{"line_number":146,"context_line":"            pass"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @rbac_rule_validation.action("},{"line_number":149,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_cca53eb6","line":146,"range":{"start_line":141,"start_character":8,"end_line":146,"end_character":16},"updated":"2017-03-16 19:32:36.000000000","message":"Did you confirm whether the policy action is enforced by the system? Because I\u0027m concerned whether the BadRequest is thrown before the Forbidden, in which case the policy enforcement will not have happened.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        target_host \u003d \u0027SomeHost\u0027"},{"line_number":139,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":140,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            self.client.live_migrate_server(server[\u0027id\u0027], host\u003dtarget_host,"},{"line_number":143,"context_line":"                                            block_migration\u003dFalse,"},{"line_number":144,"context_line":"                                            disk_over_commit\u003dFalse)"},{"line_number":145,"context_line":"        except exceptions.BadRequest:"},{"line_number":146,"context_line":"            pass"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @rbac_rule_validation.action("},{"line_number":149,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_2fcf97b1","line":146,"range":{"start_line":141,"start_character":8,"end_line":146,"end_character":16},"in_reply_to":"1a1ced50_cca53eb6","updated":"2017-03-17 05:59:26.000000000","message":"target host being checked after policy enforcement.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        except exceptions.BadRequest:"},{"line_number":146,"context_line":"            pass"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @rbac_rule_validation.action("},{"line_number":149,"context_line":"        service\u003d\"nova\","},{"line_number":150,"context_line":"        rule\u003d\"os_compute_api:os-server-password\")"},{"line_number":151,"context_line":"    @decorators.idempotent_id(\u0027f677971a-7d20-493c-977f-6ff0a74b5b2c\u0027)"},{"line_number":152,"context_line":"    def test_get_server_password(self):"},{"line_number":153,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":154,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":155,"context_line":"        self.client.show_password(server[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @rbac_rule_validation.action("},{"line_number":158,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_ec983a6d","line":155,"range":{"start_line":148,"start_character":0,"end_line":155,"end_character":47},"updated":"2017-03-16 19:32:36.000000000","message":"May we move this to test_server_password_rbac?","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        except exceptions.BadRequest:"},{"line_number":146,"context_line":"            pass"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @rbac_rule_validation.action("},{"line_number":149,"context_line":"        service\u003d\"nova\","},{"line_number":150,"context_line":"        rule\u003d\"os_compute_api:os-server-password\")"},{"line_number":151,"context_line":"    @decorators.idempotent_id(\u0027f677971a-7d20-493c-977f-6ff0a74b5b2c\u0027)"},{"line_number":152,"context_line":"    def test_get_server_password(self):"},{"line_number":153,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":154,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":155,"context_line":"        self.client.show_password(server[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @rbac_rule_validation.action("},{"line_number":158,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_ef3bbf9a","line":155,"range":{"start_line":148,"start_character":0,"end_line":155,"end_character":47},"in_reply_to":"1a1ced50_ec983a6d","updated":"2017-03-17 05:59:26.000000000","message":"because we have that file, i can move it there. Thanks.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":155,"context_line":"        self.client.show_password(server[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @rbac_rule_validation.action("},{"line_number":158,"context_line":"        service\u003d\"nova\","},{"line_number":159,"context_line":"        rule\u003d\"os_compute_api:os-server-password\")"},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00278fa1632f-4088-4e09-9d0f-cc0d82ecebcf\u0027)"},{"line_number":161,"context_line":"    def test_delete_server_password(self):"},{"line_number":162,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":163,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":164,"context_line":"        self.client.delete_password(server[\u0027id\u0027])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @rbac_rule_validation.action("},{"line_number":167,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_0c9e7656","line":164,"range":{"start_line":157,"start_character":0,"end_line":164,"end_character":49},"updated":"2017-03-16 19:32:36.000000000","message":"Redundant, see above.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":155,"context_line":"        self.client.show_password(server[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @rbac_rule_validation.action("},{"line_number":158,"context_line":"        service\u003d\"nova\","},{"line_number":159,"context_line":"        rule\u003d\"os_compute_api:os-server-password\")"},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00278fa1632f-4088-4e09-9d0f-cc0d82ecebcf\u0027)"},{"line_number":161,"context_line":"    def test_delete_server_password(self):"},{"line_number":162,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":163,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":164,"context_line":"        self.client.delete_password(server[\u0027id\u0027])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @rbac_rule_validation.action("},{"line_number":167,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_2f46b723","line":164,"range":{"start_line":157,"start_character":0,"end_line":164,"end_character":49},"in_reply_to":"1a1ced50_0c9e7656","updated":"2017-03-17 05:59:26.000000000","message":"Sure I will remove it. Thanks.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1d3afb3e4550602b05f60aee3a730ce240121b72","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        except exceptions.ServerFault as e:"},{"line_number":176,"context_line":"            LOG.info(\"ServerFault exception caught. %s\" % e)"},{"line_number":177,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":178,"context_line":"            msg \u003d \"Listing virtual interfaces is not supported by this cloud.\""},{"line_number":179,"context_line":"            if msg \u003d\u003d str(e.resp_body[\u0027message\u0027]):"},{"line_number":180,"context_line":"                raise self.skipException(msg)"},{"line_number":181,"context_line":"            else:"},{"line_number":182,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_0cb596cc","line":179,"range":{"start_line":178,"start_character":12,"end_line":179,"end_character":50},"updated":"2017-03-16 19:32:36.000000000","message":"This requires a @testtools.skipUnless(CONF.whatever_setting_this_correspond_to_is_true) instead (above the test function).","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"b8d85e3c2ce974ac0e1d04bb5cd2ec24f7cd52f4","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        except exceptions.ServerFault as e:"},{"line_number":176,"context_line":"            LOG.info(\"ServerFault exception caught. %s\" % e)"},{"line_number":177,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":178,"context_line":"            msg \u003d \"Listing virtual interfaces is not supported by this cloud.\""},{"line_number":179,"context_line":"            if msg \u003d\u003d str(e.resp_body[\u0027message\u0027]):"},{"line_number":180,"context_line":"                raise self.skipException(msg)"},{"line_number":181,"context_line":"            else:"},{"line_number":182,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_4f72137e","line":179,"range":{"start_line":178,"start_character":12,"end_line":179,"end_character":50},"in_reply_to":"1a1ced50_0cb596cc","updated":"2017-03-17 05:59:26.000000000","message":"hmm, you are right. I will amend it. Thanks.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"83c219ac31f152ade91ad46d62a67a28c15d8650","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        except exceptions.ServerFault as e:"},{"line_number":176,"context_line":"            LOG.info(\"ServerFault exception caught. %s\" % e)"},{"line_number":177,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":178,"context_line":"            msg \u003d \"Listing virtual interfaces is not supported by this cloud.\""},{"line_number":179,"context_line":"            if msg \u003d\u003d str(e.resp_body[\u0027message\u0027]):"},{"line_number":180,"context_line":"                raise self.skipException(msg)"},{"line_number":181,"context_line":"            else:"},{"line_number":182,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_8125bfc3","line":179,"range":{"start_line":178,"start_character":12,"end_line":179,"end_character":50},"in_reply_to":"1a1ced50_4f72137e","updated":"2017-03-17 08:30:37.000000000","message":"But, I see one thing here, you are trying to check for a configurable value. \nBut this particular case is not dependent on a configuration option. It is something which is coming as a part of API response.\nSo this implementation is fine.","commit_id":"f5c4883f5bfca6c795548e11accd64d5fc4189fe"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def setup_clients(cls):"},{"line_number":37,"context_line":"        super(ComputeServersRbacTest, cls).setup_clients()"},{"line_number":38,"context_line":"        cls.client \u003d cls.servers_client"},{"line_number":39,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @rbac_rule_validation.action("},{"line_number":42,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_368fe224","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":48},"updated":"2017-03-17 13:59:09.000000000","message":"Already defined in superclass.","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"241862664d484dabaefcaff3c64a734737672725","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                     \"blocked updating of server\")"},{"line_number":73,"context_line":"            raise rbac_exceptions.RbacActionFailed(e)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @rbac_rule_validation.action("},{"line_number":76,"context_line":"        service\u003d\"nova\","},{"line_number":77,"context_line":"        rule\u003d\"os_compute_api:os-virtual-interfaces\")"},{"line_number":78,"context_line":"    @decorators.idempotent_id(\u0027fc719ae3-0f73-4689-8378-1b841f0f2818\u0027)"},{"line_number":79,"context_line":"    def test_get_virtual_interfaces(self):"},{"line_number":80,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":81,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":82,"context_line":"        try:"},{"line_number":83,"context_line":"            self.client.list_virtual_interfaces(server[\u0027id\u0027])"},{"line_number":84,"context_line":"        except exceptions.ServerFault as e:"},{"line_number":85,"context_line":"            LOG.info(\"ServerFault exception caught. %s\" % e)"},{"line_number":86,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":87,"context_line":"            msg \u003d \"Listing virtual interfaces is not supported by this cloud.\""},{"line_number":88,"context_line":"            if msg \u003d\u003d str(e.resp_body[\u0027message\u0027]):"},{"line_number":89,"context_line":"                raise self.skipException(msg)"},{"line_number":90,"context_line":"            else:"},{"line_number":91,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_76e79ae4","line":91,"range":{"start_line":75,"start_character":0,"end_line":91,"end_character":23},"updated":"2017-03-17 13:59:09.000000000","message":"You also have this defined in your test_server_virtual_interfaces_rbac file.","commit_id":"941ac79ea921a46b02849cb16fe8bc6b731e17b4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from patrole_tempest_plugin import rbac_rule_validation"},{"line_number":27,"context_line":"from patrole_tempest_plugin.tests.api.compute import rbac_base as base"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d config.CONF"},{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_5a58f8fa","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":18},"updated":"2017-03-17 17:57:12.000000000","message":"Looks like this is unused.","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"b1e8eecd323944941bd562ad42d58c1a308aad29","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 AT\u0026T Corporations."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_04d3b9d5","line":1,"range":{"start_line":1,"start_character":22,"end_line":1,"end_character":34},"updated":"2017-03-23 14:47:04.000000000","message":"Corporation","commit_id":"51bfd1e28aab3b5b2c6d20a7a6cc144c8b35f53a"}],"patrole_tempest_plugin/tests/api/compute/test_server_virtual_interfaces_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def setup_clients(cls):"},{"line_number":34,"context_line":"        super(ServerVirtualInterfacesRbacTest, cls).setup_clients()"},{"line_number":35,"context_line":"        cls.client \u003d cls.servers_client"},{"line_number":36,"context_line":"        cls.auth_provider \u003d cls.os.auth_provider"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @rbac_rule_validation.action("},{"line_number":39,"context_line":"        service\u003d\"nova\","}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_5ab478f1","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":48},"updated":"2017-03-17 17:57:12.000000000","message":"In superclass already.","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        service\u003d\"nova\","},{"line_number":40,"context_line":"        rule\u003d\"os_compute_api:os-virtual-interfaces\")"},{"line_number":41,"context_line":"    @decorators.idempotent_id(\u0027fc719ae3-0f73-4689-8378-1b841f0f2818\u0027)"},{"line_number":42,"context_line":"    def test_get_virtual_interfaces(self):"},{"line_number":43,"context_line":"        server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":44,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":45,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_fac1a42f","line":42,"range":{"start_line":42,"start_character":13,"end_line":42,"end_character":16},"updated":"2017-03-17 17:57:12.000000000","message":"list","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"534ab0970d55b3939b5708179534c12c102b5fb5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if msg \u003d\u003d str(e.resp_body[\u0027message\u0027]):"},{"line_number":52,"context_line":"                raise self.skipException(msg)"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_da4948d2","line":54,"updated":"2017-03-17 17:57:12.000000000","message":"This is how Tempest implements this test:\n\n    @decorators.idempotent_id(\u002796c4e2ef-5e4d-4d7f-87f5-fed6dca18016\u0027)\n    @test.services(\u0027network\u0027)\n    def test_list_virtual_interfaces(self):\n        # Positive test:Should be able to GET the virtual interfaces list\n        # for a given server_id\n\n        if CONF.service_available.neutron:\n            # TODO(mriedem): After a microversion implements the API for\n            # neutron, a 400 should be a failure for nova-network and neutron.\n            with testtools.ExpectedException(exceptions.BadRequest):\n                self.client.list_virtual_interfaces(self.server[\u0027id\u0027])\n        else:\n            output \u003d self.client.list_virtual_interfaces(self.server[\u0027id\u0027])\n            self.assertIsNotNone(output)\n            virt_ifaces \u003d output\n            self.assertNotEqual(0, len(virt_ifaces[\u0027virtual_interfaces\u0027]),\n                                \u0027Expected virtual interfaces, got 0 \u0027\n                                \u0027interfaces.\u0027)\n            for virt_iface in virt_ifaces[\u0027virtual_interfaces\u0027]:\n                mac_address \u003d virt_iface[\u0027mac_address\u0027]\n                self.assertTrue(netaddr.valid_mac(mac_address),\n                                \"Invalid mac address detected. mac address: %s\"\n                                % mac_address)\n\nI personally like using the testtools.ExpectedException(exceptions.BadRequest) since this is only used by nova-network, so we should do our test like this too, since it is logical to expect an exception being thrown here.","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":8205,"name":"Mh Raies","email":"raiesmh08@gmail.com","username":"raiesmh08"},"change_message_id":"bc936508eba4503cc2ecd48a502c99162a49b5ba","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            if msg \u003d\u003d str(e.resp_body[\u0027message\u0027]):"},{"line_number":52,"context_line":"                raise self.skipException(msg)"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_59c64568","line":54,"in_reply_to":"1a1ced50_da4948d2","updated":"2017-03-17 18:54:20.000000000","message":"Felipe, I know this handling.\nSimilar kind of handling is done mostly in negative tests.\nIn current case why I am not bothering to use this methodology is that it not just expecting bad request instead on bad request it takes decision based on returned string. \nSo, for this case for me implementation is correct.","commit_id":"20193fcee5bed6b56dcf2ae043520a8edd664250"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9bea427c53b4ef3d8e2b48b2b15a18ebb51a664c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":44,"context_line":"        try:"},{"line_number":45,"context_line":"            self.client.list_virtual_interfaces(server[\u0027id\u0027])"},{"line_number":46,"context_line":"        except exceptions.ServerFault as e:"},{"line_number":47,"context_line":"            LOG.info(\"ServerFault exception caught. %s\" % e)"},{"line_number":48,"context_line":"        except exceptions.BadRequest as e:"},{"line_number":49,"context_line":"            msg \u003d \"Listing virtual interfaces is not supported by this cloud.\""},{"line_number":50,"context_line":"            if msg \u003d\u003d str(e.resp_body[\u0027message\u0027]):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_f706ac1a","line":47,"range":{"start_line":46,"start_character":8,"end_line":47,"end_character":60},"updated":"2017-03-21 17:53:18.000000000","message":"This should probably throw an RbacActionFailed exception.","commit_id":"802406581cab706b94e26ccbbc57bbd0329beacc"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4931b45edc73d1e4498313c4237a2408848d3bce","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 oslo_log import log"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest import config"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_2d3447fa","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":24},"updated":"2017-03-22 17:08:30.000000000","message":"Unused.","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4931b45edc73d1e4498313c4237a2408848d3bce","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from patrole_tempest_plugin.tests.api.compute import rbac_base as base"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class ServerVirtualInterfacesRbacTest(base.BaseV2ComputeRbacTest):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_0d7cebb3","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":29},"updated":"2017-03-22 17:08:30.000000000","message":"Unused.","commit_id":"5ca2b339d6d24dfa09f3333edc55ad3c435fcaef"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"b1e8eecd323944941bd562ad42d58c1a308aad29","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 AT\u0026T Corporations."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a1ced50_64fb8d47","line":1,"range":{"start_line":1,"start_character":22,"end_line":1,"end_character":34},"updated":"2017-03-23 14:47:04.000000000","message":"Corporation","commit_id":"51bfd1e28aab3b5b2c6d20a7a6cc144c8b35f53a"}]}
