)]}'
{"patrole_tempest_plugin/tests/api/compute/test_attach_volume_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0e872951d2e94e3efef9d4af8cd7c17860348ad1","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 tempest import config"},{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.common import waiters"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_e0ed968f","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":26},"updated":"2017-02-19 18:17:47.000000000","message":"Never used.","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0e872951d2e94e3efef9d4af8cd7c17860348ad1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from patrole_tempest_plugin.rbac_utils import rbac_utils"},{"line_number":23,"context_line":"from patrole_tempest_plugin.tests.api.compute import rbac_base"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d config.CONF"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class RBACAttachVolumeTestJSON(rbac_base.BaseV2ComputeRbacTest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_00f38a74","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":18},"updated":"2017-02-19 18:17:47.000000000","message":"Never used.","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0e872951d2e94e3efef9d4af8cd7c17860348ad1","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _create_and_attach(self):"},{"line_number":37,"context_line":"        self.server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":38,"context_line":"        self.addCleanup(self.delete_server, self.server[\u0027id\u0027])"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # Create a volume and wait for it to become ready"},{"line_number":41,"context_line":"        self.volume \u003d self.create_volume()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_e0c67615","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":62},"updated":"2017-02-19 18:17:47.000000000","message":"Strictly speaking, this isn\u0027t needed. When create_test_server is called, the server[\u0027id\u0027] is placed in an array, and during resource_cleanup, the base compute class iterates over the array and deletes the servers for you.","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"4a09fcba9af5dd1bf0e0e608b68dd59e110d1e67","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # Create a volume and wait for it to become ready"},{"line_number":41,"context_line":"        self.volume \u003d self.create_volume()"},{"line_number":42,"context_line":"        waiters.wait_for_volume_status(self.volumes_client, self.volume[\u0027id\u0027],"},{"line_number":43,"context_line":"                                       \u0027available\u0027)"},{"line_number":44,"context_line":"        # Attach the volume to the server"},{"line_number":45,"context_line":"        self.attachment \u003d self.servers_client.attach_volume("},{"line_number":46,"context_line":"            self.server[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_273c0d93","line":43,"range":{"start_line":42,"start_character":8,"end_line":43,"end_character":51},"updated":"2017-02-20 16:33:25.000000000","message":"Not needed; this is part of create_volume","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"005dae2a57d85cf94f82302786754752aabfde77","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @rbac_rule_validation.action(service\u003d\"nova\", rule\u003d\"os_compute_api:\""},{"line_number":52,"context_line":"                                 \"os-volumes-attachments:index\")"},{"line_number":53,"context_line":"    @test.idempotent_id(\u002758766dab-b943-47ee-8709-4972c6ac415e\u0027)"},{"line_number":54,"context_line":"    def test_list_volume_attachments_rbac(self):"},{"line_number":55,"context_line":"        self._create_and_attach()"},{"line_number":56,"context_line":"        self.addCleanup(self._detach, self.server[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_c7c89177","line":53,"range":{"start_line":53,"start_character":5,"end_line":53,"end_character":9},"updated":"2017-02-20 16:34:36.000000000","message":"This should be \"decorators\" for all","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0e872951d2e94e3efef9d4af8cd7c17860348ad1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":59,"context_line":"        body \u003d self.servers_client.list_volume_attachments("},{"line_number":60,"context_line":"            self.server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":61,"context_line":"        self.assertEqual(1, len(body))"},{"line_number":62,"context_line":"        self.assertIn(self.attachment, body)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @rbac_rule_validation.action(service\u003d\"nova\", rule\u003d\"os_compute_api:\""},{"line_number":65,"context_line":"                                 \"os-volumes-attachments:show\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_c0e2529f","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":44},"updated":"2017-02-19 18:17:47.000000000","message":"Not needed. I\u0027m not opposed to including assertions, but others might be.","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"4a09fcba9af5dd1bf0e0e608b68dd59e110d1e67","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":59,"context_line":"        body \u003d self.servers_client.list_volume_attachments("},{"line_number":60,"context_line":"            self.server[\u0027id\u0027])[\u0027volumeAttachments\u0027]"},{"line_number":61,"context_line":"        self.assertEqual(1, len(body))"},{"line_number":62,"context_line":"        self.assertIn(self.attachment, body)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @rbac_rule_validation.action(service\u003d\"nova\", rule\u003d\"os_compute_api:\""},{"line_number":65,"context_line":"                                 \"os-volumes-attachments:show\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_a76f1d91","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":44},"in_reply_to":"da36d5c6_c0e2529f","updated":"2017-02-20 16:33:25.000000000","message":"I\u0027m opposed since we\u0027re testing the endpoints, not functionality.","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"4a09fcba9af5dd1bf0e0e608b68dd59e110d1e67","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @test.idempotent_id(\u002772924d69-ddce-4cca-b04b-0f3fdce344d3\u0027)"},{"line_number":78,"context_line":"    def test_create_and_attach_volume_rbac(self):"},{"line_number":79,"context_line":"        self.server \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":80,"context_line":"        self.addCleanup(self.delete_server, self.server[\u0027id\u0027])"},{"line_number":81,"context_line":"        # Create a volume and wait for it to become ready"},{"line_number":82,"context_line":"        self.volume \u003d self.create_volume()"},{"line_number":83,"context_line":"        waiters.wait_for_volume_status(self.volumes_client, self.volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_8720594b","line":80,"range":{"start_line":80,"start_character":7,"end_line":80,"end_character":61},"updated":"2017-02-20 16:33:25.000000000","message":"Not needed; see Felipe\u0027s note on L38","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"4a09fcba9af5dd1bf0e0e608b68dd59e110d1e67","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.addCleanup(self.delete_server, self.server[\u0027id\u0027])"},{"line_number":81,"context_line":"        # Create a volume and wait for it to become ready"},{"line_number":82,"context_line":"        self.volume \u003d self.create_volume()"},{"line_number":83,"context_line":"        waiters.wait_for_volume_status(self.volumes_client, self.volume[\u0027id\u0027],"},{"line_number":84,"context_line":"                                       \u0027available\u0027)"},{"line_number":85,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":86,"context_line":"        # Attach the volume to the server"},{"line_number":87,"context_line":"        self.attachment \u003d self.servers_client.attach_volume("}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_e71755eb","line":84,"range":{"start_line":83,"start_character":8,"end_line":84,"end_character":51},"updated":"2017-02-20 16:33:25.000000000","message":"See L42","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"4a09fcba9af5dd1bf0e0e608b68dd59e110d1e67","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self._create_and_attach()"},{"line_number":100,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":101,"context_line":"        self._detach(self.server[\u0027id\u0027], self.volume[\u0027id\u0027])"},{"line_number":102,"context_line":"        self.attachment \u003d None"},{"line_number":103,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":104,"context_line":"        if self.attachment is not None:"},{"line_number":105,"context_line":"            self.addCleanup(self._detach, self.server[\u0027id\u0027],"},{"line_number":106,"context_line":"                            self.volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_c7f171cf","line":104,"range":{"start_line":102,"start_character":8,"end_line":104,"end_character":39},"updated":"2017-02-20 16:33:25.000000000","message":"In Tempest test_utils, there\u0027s a function called call_and_ignore_notfound_exc that we\u0027ve been making use of in the cleanup to avoid this issue","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0e872951d2e94e3efef9d4af8cd7c17860348ad1","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self._create_and_attach()"},{"line_number":100,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":101,"context_line":"        self._detach(self.server[\u0027id\u0027], self.volume[\u0027id\u0027])"},{"line_number":102,"context_line":"        self.attachment \u003d None"},{"line_number":103,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dFalse)"},{"line_number":104,"context_line":"        if self.attachment is not None:"},{"line_number":105,"context_line":"            self.addCleanup(self._detach, self.server[\u0027id\u0027],"},{"line_number":106,"context_line":"                            self.volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_80d85af1","line":104,"range":{"start_line":102,"start_character":8,"end_line":104,"end_character":39},"updated":"2017-02-19 18:17:47.000000000","message":"Isn\u0027t self.attachment always None?","commit_id":"828470837203d1a7c3c7d00027e60ecd8b06a22b"}]}
