)]}'
{"tempest/api/compute/admin/test_update_attached_negative.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"65c3924aabd330cf9ba6e14d8c12745862742462","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3fa7e38b_19989074","updated":"2020-01-15 01:54:25.000000000","message":"instead, if new file, let\u0027s add this test in existing tempest/api/compute/admin/test_volumes_negative.py","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"aaee55f9413e98659e58458aa096dbb908140866","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3fa7e38b_afb55dd1","in_reply_to":"3fa7e38b_19989074","updated":"2020-01-15 23:20:26.000000000","message":"I think you missed this comment. let\u0027s add this test in existing file.","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"76caf57833d2ddb2de1d0fef0276ac4e5d471bd0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3fa7e38b_46360ee2","in_reply_to":"3fa7e38b_afb55dd1","updated":"2020-01-16 08:40:45.000000000","message":"Ack yeah sorry, I\u0027ll move it.","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"65c3924aabd330cf9ba6e14d8c12745862742462","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @decorators.attr(type\u003d[\u0027negative\u0027])"},{"line_number":34,"context_line":"    @decorators.idempotent_id(\u00277576d497-b7c6-44bd-9cc5-c5b4e50fec71\u0027)"},{"line_number":35,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":36,"context_line":"    def test_volume_update_with_multiattach(self):"},{"line_number":37,"context_line":"        # Create two multiattach capable volumes"},{"line_number":38,"context_line":"        vol1 \u003d self.create_volume(multiattach\u003dTrue)"},{"line_number":39,"context_line":"        vol2 \u003d self.create_volume(multiattach\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_feba3ade","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":43},"updated":"2020-01-15 01:54:25.000000000","message":"We can swap only read-only volume and if volume is rw then we cannot swap. let\u0027s rename this to match that behaviour:  \n\ntest_multiattach_rw_volume_swap_failure","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"7604461cf12734990920ca7d8fb566959692e7c4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @decorators.attr(type\u003d[\u0027negative\u0027])"},{"line_number":34,"context_line":"    @decorators.idempotent_id(\u00277576d497-b7c6-44bd-9cc5-c5b4e50fec71\u0027)"},{"line_number":35,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":36,"context_line":"    def test_volume_update_with_multiattach(self):"},{"line_number":37,"context_line":"        # Create two multiattach capable volumes"},{"line_number":38,"context_line":"        vol1 \u003d self.create_volume(multiattach\u003dTrue)"},{"line_number":39,"context_line":"        vol2 \u003d self.create_volume(multiattach\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c044381d","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":43},"in_reply_to":"3fa7e38b_feba3ade","updated":"2020-01-15 08:58:17.000000000","message":"Done","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"65c3924aabd330cf9ba6e14d8c12745862742462","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @decorators.idempotent_id(\u00277576d497-b7c6-44bd-9cc5-c5b4e50fec71\u0027)"},{"line_number":35,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":36,"context_line":"    def test_volume_update_with_multiattach(self):"},{"line_number":37,"context_line":"        # Create two multiattach capable volumes"},{"line_number":38,"context_line":"        vol1 \u003d self.create_volume(multiattach\u003dTrue)"},{"line_number":39,"context_line":"        vol2 \u003d self.create_volume(multiattach\u003dTrue)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # Create two instances"},{"line_number":42,"context_line":"        server1 \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_99afa09c","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":51},"updated":"2020-01-15 01:54:25.000000000","message":"can you add a NOTE here about default volume mode is rw and rw multiattach volume cannot be swapped.","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"7604461cf12734990920ca7d8fb566959692e7c4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @decorators.idempotent_id(\u00277576d497-b7c6-44bd-9cc5-c5b4e50fec71\u0027)"},{"line_number":35,"context_line":"    @utils.services(\u0027volume\u0027)"},{"line_number":36,"context_line":"    def test_volume_update_with_multiattach(self):"},{"line_number":37,"context_line":"        # Create two multiattach capable volumes"},{"line_number":38,"context_line":"        vol1 \u003d self.create_volume(multiattach\u003dTrue)"},{"line_number":39,"context_line":"        vol2 \u003d self.create_volume(multiattach\u003dTrue)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        # Create two instances"},{"line_number":42,"context_line":"        server1 \u003d self.create_test_server(wait_until\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2040ac06","line":39,"range":{"start_line":37,"start_character":0,"end_line":39,"end_character":51},"in_reply_to":"3fa7e38b_99afa09c","updated":"2020-01-15 08:58:17.000000000","message":"Done","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"65c3924aabd330cf9ba6e14d8c12745862742462","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # Attach vol1 to both of these instances"},{"line_number":46,"context_line":"        vol1_attachment1 \u003d self.attach_volume(server1, vol1)"},{"line_number":47,"context_line":"        vol1_attachment2 \u003d self.attach_volume(server2, vol1)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Assert that a BadRequest is raised when we attempt to update or swap"},{"line_number":50,"context_line":"        # volume1 to volume2 on server1 or server2."},{"line_number":51,"context_line":"        self.assertRaises(lib_exc.BadRequest,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_59c92878","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":0},"updated":"2020-01-15 01:54:25.000000000","message":"attach_mdoe is rw by default but still can you assert those explicitly?","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"7604461cf12734990920ca7d8fb566959692e7c4","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        # Attach vol1 to both of these instances"},{"line_number":46,"context_line":"        vol1_attachment1 \u003d self.attach_volume(server1, vol1)"},{"line_number":47,"context_line":"        vol1_attachment2 \u003d self.attach_volume(server2, vol1)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Assert that a BadRequest is raised when we attempt to update or swap"},{"line_number":50,"context_line":"        # volume1 to volume2 on server1 or server2."},{"line_number":51,"context_line":"        self.assertRaises(lib_exc.BadRequest,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_003b309b","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":0},"in_reply_to":"3fa7e38b_59c92878","updated":"2020-01-15 08:58:17.000000000","message":"Done","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"65c3924aabd330cf9ba6e14d8c12745862742462","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # Fetch the volume to check the current attachments"},{"line_number":63,"context_line":"        vol1 \u003d self.volumes_client.show_volume(vol1[\u0027id\u0027])[\u0027volume\u0027]"},{"line_number":64,"context_line":"        vol1_attachment_ids \u003d [a[\u0027id\u0027] for a in vol1[\u0027attachments\u0027]]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # Assert that volume 1 is still attached to both server 1 and 2."},{"line_number":67,"context_line":"        self.assertIn(vol1_attachment1[\u0027id\u0027], vol1_attachment_ids)"},{"line_number":68,"context_line":"        self.assertIn(vol1_attachment2[\u0027id\u0027], vol1_attachment_ids)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_99a480ba","line":65,"range":{"start_line":65,"start_character":0,"end_line":65,"end_character":0},"updated":"2020-01-15 01:54:25.000000000","message":"one more assert to check the vol2 attachments is 0 can confirm that update did not happen in case API lies with return code :)","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"7604461cf12734990920ca7d8fb566959692e7c4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # Fetch the volume to check the current attachments"},{"line_number":63,"context_line":"        vol1 \u003d self.volumes_client.show_volume(vol1[\u0027id\u0027])[\u0027volume\u0027]"},{"line_number":64,"context_line":"        vol1_attachment_ids \u003d [a[\u0027id\u0027] for a in vol1[\u0027attachments\u0027]]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # Assert that volume 1 is still attached to both server 1 and 2."},{"line_number":67,"context_line":"        self.assertIn(vol1_attachment1[\u0027id\u0027], vol1_attachment_ids)"},{"line_number":68,"context_line":"        self.assertIn(vol1_attachment2[\u0027id\u0027], vol1_attachment_ids)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a0b6dc24","line":65,"range":{"start_line":65,"start_character":0,"end_line":65,"end_character":0},"in_reply_to":"3fa7e38b_99a480ba","updated":"2020-01-15 08:58:17.000000000","message":"Done","commit_id":"cf4bccddb4492124cfe66a64f4f2bd77260c5706"}],"tempest/api/compute/volumes/test_attach_volume_negative.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f08ac8a5d2c6c1bf5c30b6f704f9221b201332ba","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                          self.attach_volume, server2, volume)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class AttachVolumeMultiAttachTest(base.BaseV2ComputeAdminTest):"},{"line_number":74,"context_line":"    min_microversion \u003d \u00272.60\u0027"},{"line_number":75,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f9ad3f84","line":73,"range":{"start_line":73,"start_character":6,"end_line":73,"end_character":33},"updated":"2019-12-20 16:48:39.000000000","message":"AttachVolumeMultiAttachNegativeTest","commit_id":"49ad5c0fc34ed9a264ce64bb9607d69f303fcbf2"}],"tempest/lib/services/volume/v3/volumes_client.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"aaee55f9413e98659e58458aa096dbb908140866","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        resp, body \u003d self.post(\u0027volumes/%s/action\u0027 % volume_id, post_body)"},{"line_number":400,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":401,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def show_attachment(self, attachment_id):"},{"line_number":404,"context_line":"        \"\"\"Show volume attachment.\"\"\""},{"line_number":405,"context_line":"        url \u003d \"attachments/%s\" % (attachment_id)"},{"line_number":406,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":407,"context_line":"        body \u003d json.loads(body)"},{"line_number":408,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":409,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_cfa699ad","line":409,"range":{"start_line":402,"start_character":0,"end_line":409,"end_character":51},"updated":"2020-01-15 23:20:26.000000000","message":"this is a separate resource than volume so we need to add this is a separate file. You can create new file attachments_client.py under tempest/lib/services/volume/v3/ and add this method.\n\nAs this is lib interface please add the reno for this. example: https://github.com/openstack/tempest/blob/master/releasenotes/notes/add-update-backup-api-to-v3-backups-client-e8465b2b66617dc0.yaml","commit_id":"2a3e199eea5fb3a2072a77bd2841982677f70cd8"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"76caf57833d2ddb2de1d0fef0276ac4e5d471bd0","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        resp, body \u003d self.post(\u0027volumes/%s/action\u0027 % volume_id, post_body)"},{"line_number":400,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":401,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def show_attachment(self, attachment_id):"},{"line_number":404,"context_line":"        \"\"\"Show volume attachment.\"\"\""},{"line_number":405,"context_line":"        url \u003d \"attachments/%s\" % (attachment_id)"},{"line_number":406,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":407,"context_line":"        body \u003d json.loads(body)"},{"line_number":408,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":409,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_e644da4a","line":409,"range":{"start_line":402,"start_character":0,"end_line":409,"end_character":51},"in_reply_to":"3fa7e38b_cfa699ad","updated":"2020-01-16 08:40:45.000000000","message":"ACK, will do.","commit_id":"2a3e199eea5fb3a2072a77bd2841982677f70cd8"}]}
