)]}'
{"tempest/api/volume/admin/test_volume_type_access.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"352b1adbba9e960012268d3a2b236c2138d376b9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def resource_setup(cls):"},{"line_number":37,"context_line":"        super(VolumeTypesAccessV2Test, cls).resource_setup()"},{"line_number":38,"context_line":"        # Creating a NON public volume type"},{"line_number":39,"context_line":"        cls.vol_type_name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":40,"context_line":"        proto \u003d CONF.volume.storage_protocol"},{"line_number":41,"context_line":"        vendor \u003d CONF.volume.vendor_name"},{"line_number":42,"context_line":"        extra_specs \u003d {\"storage_protocol\": proto,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_f98056c1","line":39,"updated":"2016-05-26 09:08:26.000000000","message":"You don\u0027t need a class variable here. A local variable would work.","commit_id":"8294554ec9efcf6048b4efe8b0b20e8f746800d6"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"fe8c7f555a8268810c4683da89eeaf184f98fa06","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def resource_setup(cls):"},{"line_number":37,"context_line":"        super(VolumeTypesAccessV2Test, cls).resource_setup()"},{"line_number":38,"context_line":"        # Creating a NON public volume type"},{"line_number":39,"context_line":"        cls.vol_type_name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":40,"context_line":"        proto \u003d CONF.volume.storage_protocol"},{"line_number":41,"context_line":"        vendor \u003d CONF.volume.vendor_name"},{"line_number":42,"context_line":"        extra_specs \u003d {\"storage_protocol\": proto,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_fc954240","line":39,"in_reply_to":"bab6814e_f98056c1","updated":"2016-05-29 08:30:19.000000000","message":"Done","commit_id":"8294554ec9efcf6048b4efe8b0b20e8f746800d6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"352b1adbba9e960012268d3a2b236c2138d376b9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(VolumeTypesAccessV2Test, cls).resource_setup()"},{"line_number":38,"context_line":"        # Creating a NON public volume type"},{"line_number":39,"context_line":"        cls.vol_type_name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":40,"context_line":"        proto \u003d CONF.volume.storage_protocol"},{"line_number":41,"context_line":"        vendor \u003d CONF.volume.vendor_name"},{"line_number":42,"context_line":"        extra_specs \u003d {\"storage_protocol\": proto,"},{"line_number":43,"context_line":"                       \"vendor_name\": vendor}"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_5c46b04f","line":40,"updated":"2016-05-26 09:08:26.000000000","message":"L40 to L47 looks like copy/pasted code from tests in the VolumeTypesV2Test class.\n\nWe can\u0027t have a lot of duplicated code. It makes maintenance harder. \n\nYou should introduce a new and generic \"create_volume_type\" method in the BaseVolumeAdminTest class and use it here and also change tests in VolumeTypesV2Test to use that new method.","commit_id":"8294554ec9efcf6048b4efe8b0b20e8f746800d6"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"fe8c7f555a8268810c4683da89eeaf184f98fa06","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(VolumeTypesAccessV2Test, cls).resource_setup()"},{"line_number":38,"context_line":"        # Creating a NON public volume type"},{"line_number":39,"context_line":"        cls.vol_type_name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":40,"context_line":"        proto \u003d CONF.volume.storage_protocol"},{"line_number":41,"context_line":"        vendor \u003d CONF.volume.vendor_name"},{"line_number":42,"context_line":"        extra_specs \u003d {\"storage_protocol\": proto,"},{"line_number":43,"context_line":"                       \"vendor_name\": vendor}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_7c883223","line":40,"in_reply_to":"bab6814e_5c46b04f","updated":"2016-05-29 08:30:19.000000000","message":"Thanks for your comment, I\u0027ll create a generic method for all tests","commit_id":"8294554ec9efcf6048b4efe8b0b20e8f746800d6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"1475c065ebc208596b3c1dec96aa08ec3de861ef","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        params \u003d {\u0027os-volume-type-access:is_public\u0027: False}"},{"line_number":36,"context_line":"        cls.volume_type \u003d cls.create_volume_type(**params)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _delete_volume(self, volume_id):"},{"line_number":39,"context_line":"        self.volumes_client.delete_volume(volume_id)"},{"line_number":40,"context_line":"        self.volumes_client.wait_for_resource_deletion(volume_id)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_7a51ad61","line":38,"updated":"2016-06-14 15:51:44.000000000","message":"This function is now in Tempest at 1000 different places :) What about some refactoring ? (not now maybe, but something to consider)","commit_id":"46013a4471ae4577ecde4b136de44a9120f3e7db"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"7bbd85d19f161d6bb2513d313b0e12d788b33181","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        params \u003d {\u0027os-volume-type-access:is_public\u0027: False}"},{"line_number":36,"context_line":"        cls.volume_type \u003d cls.create_volume_type(**params)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _delete_volume(self, volume_id):"},{"line_number":39,"context_line":"        self.volumes_client.delete_volume(volume_id)"},{"line_number":40,"context_line":"        self.volumes_client.wait_for_resource_deletion(volume_id)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_81f20a99","line":38,"in_reply_to":"7aa08908_7a51ad61","updated":"2016-06-19 07:21:56.000000000","message":"I\u0027ll work on it","commit_id":"46013a4471ae4577ecde4b136de44a9120f3e7db"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"1475c065ebc208596b3c1dec96aa08ec3de861ef","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self.volume_type[\u0027id\u0027])[\u0027volume_type_access\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"},{"line_number":75,"context_line":"                         type_access_list[0][\u0027volume_type_id\u0027])"},{"line_number":76,"context_line":"        self.assertIn(self.volumes_client.tenant_id,"},{"line_number":77,"context_line":"                      map(lambda x: x[\u0027project_id\u0027], type_access_list))"},{"line_number":78,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_5a3f9186","line":75,"updated":"2016-06-14 15:51:44.000000000","message":"How do you know that the volume type you are looking for is at index 0 ? What if Tempest is run on a production cloud with 10 volume types ?","commit_id":"46013a4471ae4577ecde4b136de44a9120f3e7db"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"7bbd85d19f161d6bb2513d313b0e12d788b33181","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self.volume_type[\u0027id\u0027])[\u0027volume_type_access\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"},{"line_number":75,"context_line":"                         type_access_list[0][\u0027volume_type_id\u0027])"},{"line_number":76,"context_line":"        self.assertIn(self.volumes_client.tenant_id,"},{"line_number":77,"context_line":"                      map(lambda x: x[\u0027project_id\u0027], type_access_list))"},{"line_number":78,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_61ef1eb1","line":75,"in_reply_to":"7aa08908_5a3f9186","updated":"2016-06-19 07:21:56.000000000","message":"Right, It\u0027ll be fixed","commit_id":"46013a4471ae4577ecde4b136de44a9120f3e7db"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"1475c065ebc208596b3c1dec96aa08ec3de861ef","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"},{"line_number":75,"context_line":"                         type_access_list[0][\u0027volume_type_id\u0027])"},{"line_number":76,"context_line":"        self.assertIn(self.volumes_client.tenant_id,"},{"line_number":77,"context_line":"                      map(lambda x: x[\u0027project_id\u0027], type_access_list))"},{"line_number":78,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"},{"line_number":79,"context_line":"                         type_access_list[1][\u0027volume_type_id\u0027])"},{"line_number":80,"context_line":"        self.assertIn(self.alt_client.tenant_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_fae11dd1","line":77,"updated":"2016-06-14 15:51:44.000000000","message":"I suggest either using \n\nmap(operator.itemgetter(\u0027project_id\u0027), type_access_list)\n\nor a list comprehension\n\n[x[\u0027project_id\u0027] for x in type_access_list]\n\nI find lambda ugly and not pythonic :) But I am not going to -1 for this, it\u0027s just coding style.","commit_id":"46013a4471ae4577ecde4b136de44a9120f3e7db"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"7bbd85d19f161d6bb2513d313b0e12d788b33181","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"},{"line_number":75,"context_line":"                         type_access_list[0][\u0027volume_type_id\u0027])"},{"line_number":76,"context_line":"        self.assertIn(self.volumes_client.tenant_id,"},{"line_number":77,"context_line":"                      map(lambda x: x[\u0027project_id\u0027], type_access_list))"},{"line_number":78,"context_line":"        self.assertEqual(self.volume_type[\u0027id\u0027],"},{"line_number":79,"context_line":"                         type_access_list[1][\u0027volume_type_id\u0027])"},{"line_number":80,"context_line":"        self.assertIn(self.alt_client.tenant_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_6146fec0","line":77,"in_reply_to":"7aa08908_fae11dd1","updated":"2016-06-19 07:21:56.000000000","message":"I accept your suggestion","commit_id":"46013a4471ae4577ecde4b136de44a9120f3e7db"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"50b2695224575707d8a0445bda7f59f5d84774c3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        params \u003d {\u0027os-volume-type-access:is_public\u0027: False}"},{"line_number":38,"context_line":"        cls.volume_type \u003d cls.create_volume_type(**params)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _delete_volume(self, volume_id):"},{"line_number":41,"context_line":"        self.volumes_client.delete_volume(volume_id)"},{"line_number":42,"context_line":"        self.volumes_client.wait_for_resource_deletion(volume_id)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_0a73c1b2","line":40,"updated":"2016-06-20 09:19:00.000000000","message":"This would have to be changed once your good work on https://review.openstack.org/#/c/331475/ is merged.\n\nNo need to do it now though.","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        params \u003d {\u0027os-volume-type-access:is_public\u0027: False}"},{"line_number":38,"context_line":"        cls.volume_type \u003d cls.create_volume_type(**params)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _delete_volume(self, volume_id):"},{"line_number":41,"context_line":"        self.volumes_client.delete_volume(volume_id)"},{"line_number":42,"context_line":"        self.volumes_client.wait_for_resource_deletion(volume_id)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_93cfb77e","line":40,"in_reply_to":"5a9d85d2_0a73c1b2","updated":"2016-06-21 09:55:37.000000000","message":"Since that patch is merged, it might be worth re-spinning this now.","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"c1ef5237028be0cf015a2c9417cbbf5fde86ee61","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        params \u003d {\u0027os-volume-type-access:is_public\u0027: False}"},{"line_number":38,"context_line":"        cls.volume_type \u003d cls.create_volume_type(**params)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _delete_volume(self, volume_id):"},{"line_number":41,"context_line":"        self.volumes_client.delete_volume(volume_id)"},{"line_number":42,"context_line":"        self.volumes_client.wait_for_resource_deletion(volume_id)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_69b6e23e","line":40,"in_reply_to":"5a9d85d2_93cfb77e","updated":"2016-06-21 19:02:23.000000000","message":"Done","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            volume_type\u003dself.volume_type[\u0027id\u0027])[\u0027volume\u0027]"},{"line_number":58,"context_line":"        waiters.wait_for_volume_status(self.volumes_client, volume[\u0027id\u0027],"},{"line_number":59,"context_line":"                                       \u0027available\u0027)"},{"line_number":60,"context_line":"        self.addCleanup(self._delete_volume, volume[\u0027id\u0027])"},{"line_number":61,"context_line":"        # Validating the created volume is based on the volume type"},{"line_number":62,"context_line":"        self.assertEqual(self.volume_type[\u0027name\u0027], volume[\u0027volume_type\u0027])"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_3386c313","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":58},"updated":"2016-06-21 09:55:37.000000000","message":"This cleanup should be scheduled right after the create, else a failure during the wait will leak resources.","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"c1ef5237028be0cf015a2c9417cbbf5fde86ee61","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            volume_type\u003dself.volume_type[\u0027id\u0027])[\u0027volume\u0027]"},{"line_number":58,"context_line":"        waiters.wait_for_volume_status(self.volumes_client, volume[\u0027id\u0027],"},{"line_number":59,"context_line":"                                       \u0027available\u0027)"},{"line_number":60,"context_line":"        self.addCleanup(self._delete_volume, volume[\u0027id\u0027])"},{"line_number":61,"context_line":"        # Validating the created volume is based on the volume type"},{"line_number":62,"context_line":"        self.assertEqual(self.volume_type[\u0027name\u0027], volume[\u0027volume_type\u0027])"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_c981d64f","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":58},"in_reply_to":"5a9d85d2_3386c313","updated":"2016-06-21 19:02:23.000000000","message":"Done","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @test.idempotent_id(\u00275220eb28-a435-43ce-baaf-ed46f0e95159\u0027)"},{"line_number":65,"context_line":"    def test_volume_type_access_list(self):"},{"line_number":66,"context_line":"        # Adding volume type access for primary tenant"},{"line_number":67,"context_line":"        self.admin_volume_types_client.add_type_access("},{"line_number":68,"context_line":"            self.volume_type[\u0027id\u0027], project\u003dself.volumes_client.tenant_id)"},{"line_number":69,"context_line":"        # Adding volume type access for alt tenant"},{"line_number":70,"context_line":"        self.admin_volume_types_client.add_type_access("},{"line_number":71,"context_line":"            self.volume_type[\u0027id\u0027], project\u003dself.alt_client.tenant_id)"},{"line_number":72,"context_line":"        # List tenant access for the given volume type"},{"line_number":73,"context_line":"        type_access_list \u003d self.admin_volume_types_client.list_type_access("},{"line_number":74,"context_line":"            self.volume_type[\u0027id\u0027])[\u0027volume_type_access\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_73c68b4a","line":71,"range":{"start_line":66,"start_character":0,"end_line":71,"end_character":70},"updated":"2016-06-21 09:55:37.000000000","message":"Cleanup is missing for these","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"c1ef5237028be0cf015a2c9417cbbf5fde86ee61","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @test.idempotent_id(\u00275220eb28-a435-43ce-baaf-ed46f0e95159\u0027)"},{"line_number":65,"context_line":"    def test_volume_type_access_list(self):"},{"line_number":66,"context_line":"        # Adding volume type access for primary tenant"},{"line_number":67,"context_line":"        self.admin_volume_types_client.add_type_access("},{"line_number":68,"context_line":"            self.volume_type[\u0027id\u0027], project\u003dself.volumes_client.tenant_id)"},{"line_number":69,"context_line":"        # Adding volume type access for alt tenant"},{"line_number":70,"context_line":"        self.admin_volume_types_client.add_type_access("},{"line_number":71,"context_line":"            self.volume_type[\u0027id\u0027], project\u003dself.alt_client.tenant_id)"},{"line_number":72,"context_line":"        # List tenant access for the given volume type"},{"line_number":73,"context_line":"        type_access_list \u003d self.admin_volume_types_client.list_type_access("},{"line_number":74,"context_line":"            self.volume_type[\u0027id\u0027])[\u0027volume_type_access\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_097c7e71","line":71,"range":{"start_line":66,"start_character":0,"end_line":71,"end_character":70},"in_reply_to":"5a9d85d2_73c68b4a","updated":"2016-06-21 19:02:23.000000000","message":"Done","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"}],"tempest/api/volume/admin/test_volume_types.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                name\u003dvol_type_name,"},{"line_number":53,"context_line":"                extra_specs\u003dextra_specs)[\u0027volume_type\u0027]"},{"line_number":54,"context_line":"            volume_types.append(vol_type)"},{"line_number":55,"context_line":"            self.addCleanup(self.admin_volume_types_client.delete_volume_type,"},{"line_number":56,"context_line":"                            vol_type[\u0027id\u0027])"},{"line_number":57,"context_line":"        params \u003d {self.name_field: vol_name,"},{"line_number":58,"context_line":"                  \u0027volume_type\u0027: volume_types[0][\u0027id\u0027]}"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_f69f0801","side":"PARENT","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":43},"updated":"2016-06-21 09:55:37.000000000","message":"Volume types here used to be deleted after the test. With this change they will only be deleted at the end of the test class.","commit_id":"0a6dceb0bf1835508196519ffad6c954748b1b0f"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":131,"context_line":"        body \u003d self.admin_volume_types_client.create_volume_type("},{"line_number":132,"context_line":"            name\u003dname)[\u0027volume_type\u0027]"},{"line_number":133,"context_line":"        self.addCleanup(self.admin_volume_types_client.delete_volume_type,"},{"line_number":134,"context_line":"                        body[\u0027id\u0027])"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        # Create encryption type"},{"line_number":137,"context_line":"        encryption_type \u003d \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_d6a2cc4a","side":"PARENT","line":134,"range":{"start_line":133,"start_character":0,"end_line":134,"end_character":35},"updated":"2016-06-21 09:55:37.000000000","message":"Volume types here used to be deleted after the test. With this change they will only be deleted at the end of the test class.","commit_id":"0a6dceb0bf1835508196519ffad6c954748b1b0f"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        vendor \u003d CONF.volume.vendor_name"},{"line_number":97,"context_line":"        extra_specs \u003d {\"storage_protocol\": proto,"},{"line_number":98,"context_line":"                       \"vendor_name\": vendor}"},{"line_number":99,"context_line":"        body \u003d self.create_volume_type("},{"line_number":100,"context_line":"            name\u003dname,"},{"line_number":101,"context_line":"            extra_specs\u003dextra_specs)"},{"line_number":102,"context_line":"        self.assertIn(\u0027id\u0027, body)"},{"line_number":103,"context_line":"        self.addCleanup(self.admin_volume_types_client.delete_volume_type,"},{"line_number":104,"context_line":"                        body[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_d6ebec76","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":36},"updated":"2016-06-21 09:55:37.000000000","message":"You schedule the cleanup at the end of the test class but also at the end of the test in L103. It\u0027s ok with me, but it seems to be that the main point of the create_volume_type function is to have a cleanup scheduled at class teardown, so you could simply use the client call here.","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"c1ef5237028be0cf015a2c9417cbbf5fde86ee61","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        vendor \u003d CONF.volume.vendor_name"},{"line_number":97,"context_line":"        extra_specs \u003d {\"storage_protocol\": proto,"},{"line_number":98,"context_line":"                       \"vendor_name\": vendor}"},{"line_number":99,"context_line":"        body \u003d self.create_volume_type("},{"line_number":100,"context_line":"            name\u003dname,"},{"line_number":101,"context_line":"            extra_specs\u003dextra_specs)"},{"line_number":102,"context_line":"        self.assertIn(\u0027id\u0027, body)"},{"line_number":103,"context_line":"        self.addCleanup(self.admin_volume_types_client.delete_volume_type,"},{"line_number":104,"context_line":"                        body[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_49f966c8","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":36},"in_reply_to":"5a9d85d2_d6ebec76","updated":"2016-06-21 19:02:23.000000000","message":"Thanks, you definitely right I missed it","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"}],"tempest/api/volume/base.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"50b2695224575707d8a0445bda7f59f5d84774c3","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                cls.admin_volume_qos_client.wait_for_resource_deletion, qos_id)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @classmethod"},{"line_number":245,"context_line":"    def clear_volume_types(cls):"},{"line_number":246,"context_line":"        for vol_type in cls.volume_types:"},{"line_number":247,"context_line":"            test_utils.call_and_ignore_notfound_exc("},{"line_number":248,"context_line":"                cls.admin_volume_types_client.delete_volume_type, vol_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_2af31d0c","line":245,"updated":"2016-06-20 09:19:00.000000000","message":"This looks good but I am not 100% sure of it though. If a reviewer could have an extra eye on it that would be great.","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"f93c6770d0e2449b3b95fa1cd83bc5a25c024d88","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        return qos_specs"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @classmethod"},{"line_number":236,"context_line":"    def create_volume_type(cls, name\u003dNone, **kwargs):"},{"line_number":237,"context_line":"        \"\"\"Create a test volume-type\"\"\""},{"line_number":238,"context_line":"        name \u003d name or data_utils.rand_name(\u0027volume-type\u0027)"},{"line_number":239,"context_line":"        volume_type \u003d cls.admin_volume_types_client.create_volume_type("}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_b9ee6d1f","line":236,"range":{"start_line":236,"start_character":32,"end_line":236,"end_character":42},"updated":"2016-06-27 08:48:08.000000000","message":"NIT: you don\u0027t really need this, all tests are just doing the same s in L238...","commit_id":"7665057f51bb027e54dbc1787da1ce8bba928ab0"}],"tempest/services/volume/base/admin/base_types_client.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def add_type_access(self, volume_type_id, **kwargs):"},{"line_number":184,"context_line":"        \"\"\"Adds volume type access for the given project.\"\"\""},{"line_number":185,"context_line":"        post_body \u003d json.dumps({\u0027addProjectAccess\u0027: kwargs})"},{"line_number":186,"context_line":"        url \u003d \u0027types/%s/action\u0027 % (volume_type_id)"},{"line_number":187,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":188,"context_line":"        self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_f68268ff","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":60},"updated":"2016-06-21 09:55:37.000000000","message":"POST requests with kwargs should include a link to the API specs for the API with the list of valid parameters.","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"c1ef5237028be0cf015a2c9417cbbf5fde86ee61","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def add_type_access(self, volume_type_id, **kwargs):"},{"line_number":184,"context_line":"        \"\"\"Adds volume type access for the given project.\"\"\""},{"line_number":185,"context_line":"        post_body \u003d json.dumps({\u0027addProjectAccess\u0027: kwargs})"},{"line_number":186,"context_line":"        url \u003d \u0027types/%s/action\u0027 % (volume_type_id)"},{"line_number":187,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":188,"context_line":"        self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_c9d27634","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":60},"in_reply_to":"5a9d85d2_f68268ff","updated":"2016-06-21 19:02:23.000000000","message":"Done","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"71296f5ac89cc7aba6ecc6293d7ca6d92fb4337f","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def remove_type_access(self, volume_type_id, **kwargs):"},{"line_number":192,"context_line":"        \"\"\"Removes volume type access for the given project.\"\"\""},{"line_number":193,"context_line":"        post_body \u003d json.dumps({\u0027removeProjectAccess\u0027: kwargs})"},{"line_number":194,"context_line":"        url \u003d \u0027types/%s/action\u0027 % (volume_type_id)"},{"line_number":195,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":196,"context_line":"        self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_b68f4022","line":193,"range":{"start_line":193,"start_character":0,"end_line":193,"end_character":63},"updated":"2016-06-21 09:55:37.000000000","message":"Ditto","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"c1ef5237028be0cf015a2c9417cbbf5fde86ee61","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def remove_type_access(self, volume_type_id, **kwargs):"},{"line_number":192,"context_line":"        \"\"\"Removes volume type access for the given project.\"\"\""},{"line_number":193,"context_line":"        post_body \u003d json.dumps({\u0027removeProjectAccess\u0027: kwargs})"},{"line_number":194,"context_line":"        url \u003d \u0027types/%s/action\u0027 % (volume_type_id)"},{"line_number":195,"context_line":"        resp, body \u003d self.post(url, post_body)"},{"line_number":196,"context_line":"        self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_a9d72a22","line":193,"range":{"start_line":193,"start_character":0,"end_line":193,"end_character":63},"in_reply_to":"5a9d85d2_b68f4022","updated":"2016-06-21 19:02:23.000000000","message":"Done","commit_id":"b31d7b310f7bb31846d61f963ac5b9ea5e5ee431"}]}
