)]}'
{"tempest/api/volume/admin/test_volume_attachments.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"69544b8294fe660f983dc0ce7d368702b3401141","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            **create_kwargs)[\u0027attachment\u0027]"},{"line_number":44,"context_line":"        self.addCleanup(self.admin_attachments_client.delete_attachment,"},{"line_number":45,"context_line":"                        attachment[\u0027id\u0027])"},{"line_number":46,"context_line":"        for key in [\u0027id\u0027, \u0027instance\u0027, \u0027volume_id\u0027,"},{"line_number":47,"context_line":"                    \u0027status\u0027, \u0027connection_info\u0027]:"},{"line_number":48,"context_line":"            self.assertIn(key, attachment)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # List volume attachments with detail, needs admin client"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_3f40cb07","line":47,"range":{"start_line":46,"start_character":7,"end_line":47,"end_character":48},"updated":"2017-06-09 17:29:08.000000000","message":"You can also save a few lines and increase readability by storing this list into a variable like:\n\n    expected_attrs \u003d [\u0027id\u0027, \u0027instance\u0027, \u0027volume_id\u0027,\n                      \u0027status\u0027, \u0027connection_info\u0027]\n\nThen use it to assert whether all the attrs are in there.\n\nThen on L55, do:\n\n    expected_attrs \u003d expected_attrs.extend([\u0027attached_at\u0027, \u0027attach_mode\u0027, \u0027detached_at\u0027])\n\nThen iterate over expected_attrs to check that all attributes in there exist.","commit_id":"0157144b73f8d3bf1d7319200111e82396b52c14"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"69544b8294fe660f983dc0ce7d368702b3401141","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        # Delete volume attachment, needs admin client"},{"line_number":69,"context_line":"        self.admin_attachments_client.delete_attachment(attachment[\u0027id\u0027])"},{"line_number":70,"context_line":"        self.attachments_client.wait_for_resource_deletion(attachment[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_7fd1a357","line":70,"updated":"2017-06-09 17:29:08.000000000","message":"Would be nice to do a self.assertRaises(lib_exc.NotFound, self.attachments_client.show_attachment, attachment[\u0027id\u0027]) after the wait deletion call to validate that the deletion indeed succeeded.","commit_id":"0157144b73f8d3bf1d7319200111e82396b52c14"}],"tempest/api/volume/test_volume_attachments.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f59ecf4aa4575e51acd79fea2808e01b1181fca4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @decorators.idempotent_id(\u0027fedf1aac-eb0a-4ab2-a1a9-035fc29b076a\u0027)"},{"line_number":26,"context_line":"    def test_volume_attachment_create_list_show_delete(self):"},{"line_number":27,"context_line":"        # Note(jeremyZ): Update attachment API is to update a reserved"},{"line_number":28,"context_line":"        # attachment record with connector information and set up the"},{"line_number":29,"context_line":"        # appropriate connection_info from the driver. The mandatory parameter"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_f582444f","line":26,"range":{"start_line":26,"start_character":48,"end_line":26,"end_character":54},"updated":"2017-06-09 02:25:00.000000000","message":"I don\u0027t see delete being tested below (technically it\u0027s done in clean up but not the same thing). Also, why not test update too?","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"448f050cf95de1c7e30dc421ebbf145d590cc83b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @decorators.idempotent_id(\u0027fedf1aac-eb0a-4ab2-a1a9-035fc29b076a\u0027)"},{"line_number":26,"context_line":"    def test_volume_attachment_create_list_show_delete(self):"},{"line_number":27,"context_line":"        # Note(jeremyZ): Update attachment API is to update a reserved"},{"line_number":28,"context_line":"        # attachment record with connector information and set up the"},{"line_number":29,"context_line":"        # appropriate connection_info from the driver. The mandatory parameter"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_5fd70725","line":26,"range":{"start_line":26,"start_character":48,"end_line":26,"end_character":54},"in_reply_to":"bf091321_e0972490","updated":"2017-06-09 17:31:26.000000000","message":"Thanks for clarifying update, if it\u0027s back-end-specific there\u0027s no easy way to do update, unless there are tempest config settings that can be used to determine which type of connector setting to use.","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"56ae1f1d5c0b12d2f60e48eb814fe2ab42198007","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @decorators.idempotent_id(\u0027fedf1aac-eb0a-4ab2-a1a9-035fc29b076a\u0027)"},{"line_number":26,"context_line":"    def test_volume_attachment_create_list_show_delete(self):"},{"line_number":27,"context_line":"        # Note(jeremyZ): Update attachment API is to update a reserved"},{"line_number":28,"context_line":"        # attachment record with connector information and set up the"},{"line_number":29,"context_line":"        # appropriate connection_info from the driver. The mandatory parameter"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_e0972490","line":26,"range":{"start_line":26,"start_character":48,"end_line":26,"end_character":54},"in_reply_to":"bf091321_f582444f","updated":"2017-06-09 03:21:17.000000000","message":"Ok, \u0027delete\u0027 test will be explicitly added.\nFor the \u0027update\u0027 test, as I mentioned in the note, the \u0027connector\u0027 parameter for updating attachment is driver specified. For LVM driver, it should provide \u0027initiator\u0027, while for FC driver, \u0027wwpns\u0027 or \u0027wwnns\u0027 is needed. The \u0027connector\u0027 will be validated by the storage driver, so for different drivers, the \u0027connector\u0027 is not generic for the test.\nLooking forward your opinions, :)","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"}],"tempest/lib/services/volume/v3/attachments_client.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f59ecf4aa4575e51acd79fea2808e01b1181fca4","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        put_body \u003d json.dumps({\u0027attachment\u0027: kwargs})"},{"line_number":75,"context_line":"        resp, body \u003d self.put(\u0027attachments/%s\u0027 % attachment_id, put_body)"},{"line_number":76,"context_line":"        body \u003d json.loads(body)"},{"line_number":77,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":78,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def delete_attachment(self, attachment_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_951c286b","line":77,"range":{"start_line":77,"start_character":30,"end_line":77,"end_character":33},"updated":"2017-06-09 02:25:00.000000000","message":"This is 202 according to docs above","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"56ae1f1d5c0b12d2f60e48eb814fe2ab42198007","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        put_body \u003d json.dumps({\u0027attachment\u0027: kwargs})"},{"line_number":75,"context_line":"        resp, body \u003d self.put(\u0027attachments/%s\u0027 % attachment_id, put_body)"},{"line_number":76,"context_line":"        body \u003d json.loads(body)"},{"line_number":77,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":78,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def delete_attachment(self, attachment_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_55f0d067","line":77,"range":{"start_line":77,"start_character":30,"end_line":77,"end_character":33},"in_reply_to":"bf091321_951c286b","updated":"2017-06-09 03:21:17.000000000","message":"Done","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"}],"tempest/tests/lib/services/volume/v3/test_attachments_client.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f59ecf4aa4575e51acd79fea2808e01b1181fca4","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    FAKE_ATTACHMENT_LIST \u003d {"},{"line_number":37,"context_line":"        \"attachments\": ["},{"line_number":38,"context_line":"            {"},{"line_number":39,"context_line":"                \"status\": \"attaching\","},{"line_number":40,"context_line":"                \"detached_at\": \"2015-09-16T09:28:52.000000\","},{"line_number":41,"context_line":"                \"connection_info\": {},"},{"line_number":42,"context_line":"                \"attached_at\": \"2015-09-16T09:28:52.000000\","},{"line_number":43,"context_line":"                \"attach_mode\": \"ro\","},{"line_number":44,"context_line":"                \"instance\": \"31c79baf-b59e-469c-979f-1df4ecb6eea7\","},{"line_number":45,"context_line":"                \"volume_id\": \"462dcc2d-130d-4654-8db1-da0df2da6a0d\","},{"line_number":46,"context_line":"                \"id\": \"3b8b6631-1cf7-4fd7-9afb-c01e541a073c\""},{"line_number":47,"context_line":"            }"},{"line_number":48,"context_line":"        ]"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_956308dd","line":47,"range":{"start_line":38,"start_character":12,"end_line":47,"end_character":13},"updated":"2017-06-09 02:25:00.000000000","message":"nit: you could do (less LOCs):\n\nFAKE_ATTACHMENT_LIST \u003d {\"attachments\": [copy.deepcopy(FAKE_ATTACHMENT_INFO[\u0027attachment\u0027])]}","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"56ae1f1d5c0b12d2f60e48eb814fe2ab42198007","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    FAKE_ATTACHMENT_LIST \u003d {"},{"line_number":37,"context_line":"        \"attachments\": ["},{"line_number":38,"context_line":"            {"},{"line_number":39,"context_line":"                \"status\": \"attaching\","},{"line_number":40,"context_line":"                \"detached_at\": \"2015-09-16T09:28:52.000000\","},{"line_number":41,"context_line":"                \"connection_info\": {},"},{"line_number":42,"context_line":"                \"attached_at\": \"2015-09-16T09:28:52.000000\","},{"line_number":43,"context_line":"                \"attach_mode\": \"ro\","},{"line_number":44,"context_line":"                \"instance\": \"31c79baf-b59e-469c-979f-1df4ecb6eea7\","},{"line_number":45,"context_line":"                \"volume_id\": \"462dcc2d-130d-4654-8db1-da0df2da6a0d\","},{"line_number":46,"context_line":"                \"id\": \"3b8b6631-1cf7-4fd7-9afb-c01e541a073c\""},{"line_number":47,"context_line":"            }"},{"line_number":48,"context_line":"        ]"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_15ea5874","line":47,"range":{"start_line":38,"start_character":12,"end_line":47,"end_character":13},"in_reply_to":"bf091321_956308dd","updated":"2017-06-09 03:21:17.000000000","message":"Yeah, it\u0027s OK, Done","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f59ecf4aa4575e51acd79fea2808e01b1181fca4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    FAKE_ATTACHMENT_UPDATE \u003d {"},{"line_number":69,"context_line":"        \"attachment\": {"},{"line_number":70,"context_line":"            \"connector\": {"},{"line_number":71,"context_line":"                \"initiator\": \"iqn.1993-08.org.debian:01:cad181614cec\","},{"line_number":72,"context_line":"                \"ip\": \"192.168.1.20\","},{"line_number":73,"context_line":"                \"platform\": \"x86_64\","},{"line_number":74,"context_line":"                \"host\": \"tempest-1\","},{"line_number":75,"context_line":"                \"os_type\": \"linux2\","},{"line_number":76,"context_line":"                \"multipath\": False,"},{"line_number":77,"context_line":"                \"mountpoint\": \"/dev/vdb\","},{"line_number":78,"context_line":"                \"mode\": \"ro\""},{"line_number":79,"context_line":"            }"},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_b5abacd4","line":78,"range":{"start_line":71,"start_character":16,"end_line":78,"end_character":28},"updated":"2017-06-09 02:25:00.000000000","message":"nit: Can also copy this from FAKE_ATTACHMENT_CREATE[\u0027attachment\u0027][\u0027connector\u0027] above","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"56ae1f1d5c0b12d2f60e48eb814fe2ab42198007","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    FAKE_ATTACHMENT_UPDATE \u003d {"},{"line_number":69,"context_line":"        \"attachment\": {"},{"line_number":70,"context_line":"            \"connector\": {"},{"line_number":71,"context_line":"                \"initiator\": \"iqn.1993-08.org.debian:01:cad181614cec\","},{"line_number":72,"context_line":"                \"ip\": \"192.168.1.20\","},{"line_number":73,"context_line":"                \"platform\": \"x86_64\","},{"line_number":74,"context_line":"                \"host\": \"tempest-1\","},{"line_number":75,"context_line":"                \"os_type\": \"linux2\","},{"line_number":76,"context_line":"                \"multipath\": False,"},{"line_number":77,"context_line":"                \"mountpoint\": \"/dev/vdb\","},{"line_number":78,"context_line":"                \"mode\": \"ro\""},{"line_number":79,"context_line":"            }"},{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_d503c041","line":78,"range":{"start_line":71,"start_character":16,"end_line":78,"end_character":28},"in_reply_to":"bf091321_b5abacd4","updated":"2017-06-09 03:21:17.000000000","message":"Done","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f59ecf4aa4575e51acd79fea2808e01b1181fca4","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.put\u0027,"},{"line_number":118,"context_line":"            self.FAKE_ATTACHMENT_UPDATE,"},{"line_number":119,"context_line":"            bytes_body,"},{"line_number":120,"context_line":"            attachment_id\u003d\"3b8b6631-1cf7-4fd7-9afb-c01e541a073c\")"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_list_attachments_with_str_body(self):"},{"line_number":123,"context_line":"        self._test_list_attachments()"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_7532b4f3","line":120,"updated":"2017-06-09 02:25:00.000000000","message":"status\u003d202 (again, according to docs)","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"56ae1f1d5c0b12d2f60e48eb814fe2ab42198007","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.put\u0027,"},{"line_number":118,"context_line":"            self.FAKE_ATTACHMENT_UPDATE,"},{"line_number":119,"context_line":"            bytes_body,"},{"line_number":120,"context_line":"            attachment_id\u003d\"3b8b6631-1cf7-4fd7-9afb-c01e541a073c\")"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_list_attachments_with_str_body(self):"},{"line_number":123,"context_line":"        self._test_list_attachments()"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_153b78eb","line":120,"in_reply_to":"bf091321_7532b4f3","updated":"2017-06-09 03:21:17.000000000","message":"Done","commit_id":"11ee796a22e984fc1fa39ad71e79701e45b5968e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"69544b8294fe660f983dc0ce7d368702b3401141","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    FAKE_ATTACHMENT_LIST \u003d {"},{"line_number":37,"context_line":"        \"attachments\": [FAKE_ATTACHMENT_INFO[\"attachment\"]]"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    FAKE_ATTACHMENT_CREATE \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_1f5e2fe6","line":37,"updated":"2017-06-09 17:29:08.000000000","message":"Not sure if copy.deepcopy is required here by convention; it\u0027s safer but isn\u0027t necessary.","commit_id":"0157144b73f8d3bf1d7319200111e82396b52c14"}]}
