)]}'
{"tempest/api/volume/test_volume_transfers.py":[{"author":{"_account_id":6983,"name":"YangLei","email":"iamhappg@aliyun.com","username":"YangLei"},"change_message_id":"54e2221324af61e57812042c64d32eae94a946f5","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":75,"context_line":"        self.alt_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"#         Cleanup resources instead of Teardown"},{"line_number":78,"context_line":"        self.alt_client.delete_volume(volume[\u0027id\u0027])"},{"line_number":79,"context_line":"        self.alt_client.wait_for_resource_deletion(volume[\u0027id\u0027])"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2F1dw%3D","line":77,"updated":"2013-10-28 08:52:42.000000000","message":"Please correct the format of line 77.","commit_id":"1d9b04e02e3cd1c79a1b36ec9536f2445a7cd32e"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"8991b2590b3b7e145afe5ab44f56ea365c616625","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        cls.alt_client \u003d cls.os_alt.volumes_client"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":52,"context_line":"    def test_create_get_accept_volume_transfer(self):"},{"line_number":53,"context_line":"        # Create a volume first"},{"line_number":54,"context_line":"        vol_name \u003d rand_name(\u0027-Volume-\u0027)"},{"line_number":55,"context_line":"        _, volume \u003d self.client.create_volume(size\u003d1, display_name\u003dvol_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Fsak%3D","line":52,"updated":"2013-10-30 10:49:26.000000000","message":"this is very nice, maybe you could add a call to list_volume_transfers (from self.alt_client) and rename the test name accordingly?","commit_id":"73b5241c2ab54bb5c2de73b13ba9fa1d4cbc8ff8"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"8991b2590b3b7e145afe5ab44f56ea365c616625","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.alt_client.delete_volume(volume[\u0027id\u0027])"},{"line_number":79,"context_line":"        self.alt_client.wait_for_resource_deletion(volume[\u0027id\u0027])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":82,"context_line":"    def test_create_list_delete_volume_transfer(self):"},{"line_number":83,"context_line":"        # Create a volume first"},{"line_number":84,"context_line":"        vol_name \u003d rand_name(\u0027-Volume-\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FsbM%3D","line":81,"updated":"2013-10-30 10:49:26.000000000","message":"it looks like this is a demanding test, as it needs to create a volume, but compared to the previous test we\u0027re just adding a test for the ability to \"delete\" a volume transfer; I would remove the \"gate\" attribute and let this run only with the periodic jobs","commit_id":"73b5241c2ab54bb5c2de73b13ba9fa1d4cbc8ff8"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"ce698f9502ec05c427c6fb12ebe863bdcb18d5eb","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":75,"context_line":"        self.alt_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # List all transfers, it should be an empty dict after accept above"},{"line_number":78,"context_line":"        resp, body \u003d self.alt_client.list_volume_transfers()"},{"line_number":79,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":80,"context_line":"        self.assertEqual([], body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2FoBw%3D","line":77,"updated":"2013-10-31 08:52:09.000000000","message":"well, move it above the accept","commit_id":"6b184424ac8b6f8d9adaf340a4e1719f61f283bc"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"b49d367213f7f28562401925e97bfe76af6054ee","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":69,"context_line":"        self.assertEqual(volume[\u0027id\u0027], body[\u0027volume_id\u0027])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # List all transfers by alt_tenant, it should be an empty dict here"},{"line_number":72,"context_line":"        resp, body \u003d self.alt_client.list_volume_transfers()"},{"line_number":73,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":74,"context_line":"        self.assertEqual([], body)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FeC4%3D","line":71,"updated":"2013-11-05 10:20:40.000000000","message":"sorry I think we\u0027re doing something wrong here, this isn\u0027t and shouldn\u0027t be a \"negative\" test; I wrongly assumed this was going to list the acceptable transfers if moved above accept, it is not instead.\n\nwould the list operation return the transfer if issued by the original tenant rather than alt_tenant?","commit_id":"6f8ae852f373c3830661902b2d2ab31bad72af0f"},{"author":{"_account_id":8021,"name":"wingwj","email":"wingwj@gmail.com","username":"wingwj"},"change_message_id":"5711b73f11425c0ebefef1fc14b8a12a5fdc896c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":69,"context_line":"        self.assertEqual(volume[\u0027id\u0027], body[\u0027volume_id\u0027])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # List all transfers by alt_tenant, it should be an empty dict here"},{"line_number":72,"context_line":"        resp, body \u003d self.alt_client.list_volume_transfers()"},{"line_number":73,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":74,"context_line":"        self.assertEqual([], body)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FWkw%3D","line":71,"in_reply_to":"AAAATn%2F%2FeC4%3D","updated":"2013-11-08 13:26:32.000000000","message":"Yes, it is, I checked the original blueprint and API doc, but there\u0027s no more description about it. I\u0027ll reexamine the code again to check when I return from the summit this week.\nThanks, Giulio.","commit_id":"6f8ae852f373c3830661902b2d2ab31bad72af0f"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"f71cdbcbcc8cc10096efb248a8db9ef61377c623","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":69,"context_line":"        self.assertEqual(volume[\u0027id\u0027], body[\u0027volume_id\u0027])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # List volume transfers, the result should be greater than 1"},{"line_number":72,"context_line":"        resp, body \u003d self.client.list_volume_transfers()"},{"line_number":73,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":74,"context_line":"        self.assertGreaterEqual(len(body), 1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FHQg%3D","line":71,"updated":"2013-11-14 09:26:14.000000000","message":"Shouldn\u0027t this comment be \"greater than or equal to 1\" to match the assertion?","commit_id":"34e729204ad05b3d797ea03f9e050ad2d57cb456"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0e74c2ad35c5c3aa2aeeccdc1882fd9cb3d0043f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":69,"context_line":"        self.assertEqual(volume[\u0027id\u0027], body[\u0027volume_id\u0027])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # List volume transfers, the result should be greater than 1"},{"line_number":72,"context_line":"        resp, body \u003d self.client.list_volume_transfers()"},{"line_number":73,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":74,"context_line":"        self.assertGreaterEqual(len(body), 1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FHHI%3D","line":71,"in_reply_to":"AAAATn%2F%2FHQg%3D","updated":"2013-11-14 10:02:55.000000000","message":"if more changes are demanded, please update the comment and maybe also add an assertion for transfer[\u0027id\u0027] in list_volume_transfers()","commit_id":"34e729204ad05b3d797ea03f9e050ad2d57cb456"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"517da2d5da2bd02053b39998b8b213ba035b544a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":80,"context_line":"        self.alt_client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Cleanup resources instead of Teardown"},{"line_number":83,"context_line":"        self.alt_client.delete_volume(volume[\u0027id\u0027])"},{"line_number":84,"context_line":"        self.alt_client.wait_for_resource_deletion(volume[\u0027id\u0027])"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FGLk%3D","line":82,"updated":"2013-11-14 13:10:33.000000000","message":"addCleanup usage could be more tricky here, you may need to use both clients to attempt to delete the volume or use an admin user.","commit_id":"34e729204ad05b3d797ea03f9e050ad2d57cb456"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"517da2d5da2bd02053b39998b8b213ba035b544a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":107,"context_line":"        self.client.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # Cleanup resources instead of tearDown"},{"line_number":110,"context_line":"        self.client.delete_volume(volume[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.client.wait_for_resource_deletion(volume[\u0027id\u0027])"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FGL4%3D","line":109,"updated":"2013-11-14 13:10:33.000000000","message":"Please use self.addCleanup with helper method immediately after the the volume creation.","commit_id":"34e729204ad05b3d797ea03f9e050ad2d57cb456"}],"tempest/api/volume/test_volumes_actions.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f0d974c674a9bb583c0feae9bb52bb6ca5514d69","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":116,"context_line":"    def test_create_get_accept_volume_transfer(self):"},{"line_number":117,"context_line":"        # Create a volume transfer"},{"line_number":118,"context_line":"        resp, body \u003d self.client.create_volume_transfer(self.volume[\u0027id\u0027])"},{"line_number":119,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":120,"context_line":"        transfer_id \u003d body[\u0027id\u0027]"},{"line_number":121,"context_line":"        auth_key \u003d body[\u0027auth_key\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATX%2F%2F%2BC8%3D","line":118,"updated":"2013-10-23 15:08:02.000000000","message":"please rename the \"body\" variable into \"transfer\" as I think it helps figuring the kind of object we\u0027re using in the test","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"},{"author":{"_account_id":8021,"name":"wingwj","email":"wingwj@gmail.com","username":"wingwj"},"change_message_id":"427c082407ee0a36e6b8d5364f0a3c59d50b8b9d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":116,"context_line":"    def test_create_get_accept_volume_transfer(self):"},{"line_number":117,"context_line":"        # Create a volume transfer"},{"line_number":118,"context_line":"        resp, body \u003d self.client.create_volume_transfer(self.volume[\u0027id\u0027])"},{"line_number":119,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":120,"context_line":"        transfer_id \u003d body[\u0027id\u0027]"},{"line_number":121,"context_line":"        auth_key \u003d body[\u0027auth_key\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F%2F%2BY%3D","line":118,"in_reply_to":"AAAATX%2F%2F%2BC8%3D","updated":"2013-10-24 04:15:56.000000000","message":"Done","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f0d974c674a9bb583c0feae9bb52bb6ca5514d69","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":128,"context_line":"        self.assertEqual(self.volume[\u0027id\u0027], body[\u0027volume_id\u0027])"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        # Accept a volume transfer for myself"},{"line_number":131,"context_line":"        resp, body \u003d self.client.accept_volume_transfer(transfer_id, auth_key)"},{"line_number":132,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":133,"context_line":"        self.client.wait_for_volume_status(self.volume[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATX%2F%2F92g%3D","line":130,"updated":"2013-10-23 15:08:02.000000000","message":"I know it will make things more complex but I think we should run the accept with a different user, in tempest we have two demo users defined.\n\nMaybe you can look at this to get some ideas: https://review.openstack.org/#/c/50122","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"},{"author":{"_account_id":8021,"name":"wingwj","email":"wingwj@gmail.com","username":"wingwj"},"change_message_id":"427c082407ee0a36e6b8d5364f0a3c59d50b8b9d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":128,"context_line":"        self.assertEqual(self.volume[\u0027id\u0027], body[\u0027volume_id\u0027])"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        # Accept a volume transfer for myself"},{"line_number":131,"context_line":"        resp, body \u003d self.client.accept_volume_transfer(transfer_id, auth_key)"},{"line_number":132,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":133,"context_line":"        self.client.wait_for_volume_status(self.volume[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F%2FvY%3D","line":130,"in_reply_to":"AAAATX%2F%2F92g%3D","updated":"2013-10-24 04:15:56.000000000","message":"Hi, Giulio,\nThanks for your reviewing. I\u0027ll change it.\n\nMaybe I need to move out from \u0027test_volume_actions.py\u0027, and create a new test file, like \u0027test_volume_transfers.py\u0027?","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"}],"tempest/services/volume/json/volumes_client.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f0d974c674a9bb583c0feae9bb52bb6ca5514d69","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        body \u003d json.loads(body)"},{"line_number":150,"context_line":"        return resp, body[\u0027transfer\u0027]"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def list_volume_transfers(self, params\u003dNone):"},{"line_number":153,"context_line":"        \"\"\"List all the volume transfers created.\"\"\""},{"line_number":154,"context_line":"        url \u003d \u0027os-volume-transfer\u0027"},{"line_number":155,"context_line":"        if params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATX%2F%2F9%2BA%3D","line":152,"updated":"2013-10-23 15:08:02.000000000","message":"you don\u0027t seem to be using this in the tests","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"},{"author":{"_account_id":8021,"name":"wingwj","email":"wingwj@gmail.com","username":"wingwj"},"change_message_id":"427c082407ee0a36e6b8d5364f0a3c59d50b8b9d","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        body \u003d json.loads(body)"},{"line_number":150,"context_line":"        return resp, body[\u0027transfer\u0027]"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def list_volume_transfers(self, params\u003dNone):"},{"line_number":153,"context_line":"        \"\"\"List all the volume transfers created.\"\"\""},{"line_number":154,"context_line":"        url \u003d \u0027os-volume-transfer\u0027"},{"line_number":155,"context_line":"        if params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F%2F%2BM%3D","line":152,"in_reply_to":"AAAATX%2F%2F9%2BA%3D","updated":"2013-10-24 04:15:56.000000000","message":"Done","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"}],"tempest/services/volume/xml/volumes_client.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f0d974c674a9bb583c0feae9bb52bb6ca5514d69","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        volume \u003d xml_to_json(etree.fromstring(body))"},{"line_number":248,"context_line":"        return resp, volume"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def list_volume_transfers(self, params\u003dNone):"},{"line_number":251,"context_line":"        \"\"\"List all the volume transfers created.\"\"\""},{"line_number":252,"context_line":"        url \u003d \u0027os-volume-transfer\u0027"},{"line_number":253,"context_line":"        if params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATX%2F%2F99k%3D","line":250,"updated":"2013-10-23 15:08:02.000000000","message":"you don\u0027t seem to be using this in the tests","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"},{"author":{"_account_id":8021,"name":"wingwj","email":"wingwj@gmail.com","username":"wingwj"},"change_message_id":"427c082407ee0a36e6b8d5364f0a3c59d50b8b9d","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        volume \u003d xml_to_json(etree.fromstring(body))"},{"line_number":248,"context_line":"        return resp, volume"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def list_volume_transfers(self, params\u003dNone):"},{"line_number":251,"context_line":"        \"\"\"List all the volume transfers created.\"\"\""},{"line_number":252,"context_line":"        url \u003d \u0027os-volume-transfer\u0027"},{"line_number":253,"context_line":"        if params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2F%2F%2BU%3D","line":250,"in_reply_to":"AAAATX%2F%2F99k%3D","updated":"2013-10-24 04:15:56.000000000","message":"Done","commit_id":"f92fb39d4cc879f89f85c6bae695a04a54dc83a0"}]}
