)]}'
{"releasenotes/notes/add-volume-groups-tempest-tests-dd7b2abfe2b48427.yaml":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add tempest tests for create group, delete group, show group, and"},{"line_number":5,"context_line":"    list group volume APIs."}],"source_content_type":"text/x-yaml","patch_set":27,"id":"ff0f0b1f_f3ea60aa","line":5,"updated":"2017-05-27 04:18:19.000000000","message":"Mention adding groups and group_types clients too.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add tempest tests for create group, delete group, show group, and"},{"line_number":5,"context_line":"    list group volume APIs."}],"source_content_type":"text/x-yaml","patch_set":27,"id":"df140735_e913aab7","line":5,"in_reply_to":"ff0f0b1f_f3ea60aa","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"b8897d1a19e16449a57b986a5e732eab54e1974f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add groups and group_types clients."},{"line_number":5,"context_line":"    Add tempest tests for create group, delete group, show group, and"},{"line_number":6,"context_line":"    list group volume APIs."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"bf091321_c070a075","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":39},"updated":"2017-06-09 04:08:11.000000000","message":"better to mention where to add, e.g., \n    \"Add groups and group_types clients for the volume service as library\"","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de252fb3a74cdbc63843d2020598d4dc03e48080","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add groups and group_types clients."},{"line_number":5,"context_line":"    Add tempest tests for create group, delete group, show group, and"},{"line_number":6,"context_line":"    list group volume APIs."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"7f231b9d_fcadc1ea","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":39},"in_reply_to":"bf091321_c070a075","updated":"2017-06-09 16:23:19.000000000","message":"Done","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"}],"tempest/api/volume/admin/test_groups.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class GroupsTest(base.BaseVolumeAdminTest):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_973c7393","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":33},"updated":"2017-05-01 21:34:45.000000000","message":"Currently unused.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class GroupsTest(base.BaseVolumeAdminTest):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_3834a9fb","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":33},"in_reply_to":"5ff73747_973c7393","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                                self.admin_volume_client.build_timeout))"},{"line_number":65,"context_line":"                raise lib_exc.TimeoutException(message)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _delete_group_type(self, group_type_id):"},{"line_number":68,"context_line":"        self.admin_group_types_client.delete_group_type(group_type_id)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _delete_group(self, grp_id):"},{"line_number":71,"context_line":"        self.admin_groups_client.delete_group(grp_id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_171f4308","line":68,"range":{"start_line":67,"start_character":0,"end_line":68,"end_character":70},"updated":"2017-05-01 21:34:45.000000000","message":"Imo, this is an unnecessary wrapper. Either add the clean up in here (instead of doing it on L85 below) or see by comments for volume/base.py.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                                self.admin_volume_client.build_timeout))"},{"line_number":65,"context_line":"                raise lib_exc.TimeoutException(message)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _delete_group_type(self, group_type_id):"},{"line_number":68,"context_line":"        self.admin_group_types_client.delete_group_type(group_type_id)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _delete_group(self, grp_id):"},{"line_number":71,"context_line":"        self.admin_groups_client.delete_group(grp_id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_a6dad674","line":68,"range":{"start_line":67,"start_character":0,"end_line":68,"end_character":70},"in_reply_to":"5ff73747_171f4308","updated":"2017-05-24 03:13:45.000000000","message":"Moved to volume/base.py.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.admin_groups_client.wait_for_resource_deletion(grp_id)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @decorators.idempotent_id(\u00274b111d28-b73d-4908-9bd2-03dc2992e4d4\u0027)"},{"line_number":79,"context_line":"    def test_group_create_delete(self):"},{"line_number":80,"context_line":"        # Create volume type"},{"line_number":81,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_97a6b3c0","line":79,"range":{"start_line":79,"start_character":26,"end_line":79,"end_character":32},"updated":"2017-05-01 21:34:45.000000000","message":"You don\u0027t actually do deletion in the context of the test (you only do deletion during clean up).\n\nWhy not delete the group, then verify that it\u0027s been deleted with an assertion?","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.admin_groups_client.wait_for_resource_deletion(grp_id)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @decorators.idempotent_id(\u00274b111d28-b73d-4908-9bd2-03dc2992e4d4\u0027)"},{"line_number":79,"context_line":"    def test_group_create_delete(self):"},{"line_number":80,"context_line":"        # Create volume type"},{"line_number":81,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_bbce7360","line":79,"range":{"start_line":79,"start_character":26,"end_line":79,"end_character":32},"in_reply_to":"5ff73747_97a6b3c0","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"e19dc86bb930afdb7d4ab772b8cf16983bc5a86b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":111,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":112,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":113,"context_line":"        self.assertEqual([], grps)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ff0f0b1f_d5cc4036","line":113,"range":{"start_line":113,"start_character":13,"end_line":113,"end_character":34},"updated":"2017-05-24 14:25:45.000000000","message":"nit: assertEmpty(grps) is better","commit_id":"829c0bec50b3822b095a2c7dabd5fa61863eaa98"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3d8899b064ceca8f3caf1a4f679f363b0cf75950","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":111,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":112,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":113,"context_line":"        self.assertEqual([], grps)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ff0f0b1f_fd33aaa9","line":113,"range":{"start_line":113,"start_character":13,"end_line":113,"end_character":34},"in_reply_to":"ff0f0b1f_d5cc4036","updated":"2017-05-24 15:40:05.000000000","message":"Done","commit_id":"829c0bec50b3822b095a2c7dabd5fa61863eaa98"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"3b1563c4b96c25a54c00669c1b640d74b36de068","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import time"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.api.volume import base"},{"line_number":19,"context_line":"from tempest.common.utils import data_utils"},{"line_number":20,"context_line":"from tempest.common import waiters"},{"line_number":21,"context_line":"from tempest import config"},{"line_number":22,"context_line":"from tempest.lib import decorators"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_93f2049a","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":43},"updated":"2017-05-27 04:22:37.000000000","message":"please import data_utils from tempest.lib.common.utils, :)","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import time"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.api.volume import base"},{"line_number":19,"context_line":"from tempest.common.utils import data_utils"},{"line_number":20,"context_line":"from tempest.common import waiters"},{"line_number":21,"context_line":"from tempest import config"},{"line_number":22,"context_line":"from tempest.lib import decorators"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_86889d1f","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":43},"in_reply_to":"ff0f0b1f_93f2049a","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"            if int(time.time()) - start \u003e\u003d ("},{"line_number":45,"context_line":"                    self.admin_volume_client.build_timeout):"},{"line_number":46,"context_line":"                if group_id:"},{"line_number":47,"context_line":"                    message \u003d (\u0027Volume %s failed to be added to group %s \u0027"},{"line_number":48,"context_line":"                               \u0027within the required time (%s s).\u0027 %"},{"line_number":49,"context_line":"                               (volume_id, group_id,"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_7373f04e","line":46,"range":{"start_line":46,"start_character":16,"end_line":46,"end_character":28},"updated":"2017-05-27 04:18:19.000000000","message":"This would necessarily always be initialized unless you set group_id\u003dNone on L33 (or unless you pass in None -- which is counter-intuitive).","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"            if int(time.time()) - start \u003e\u003d ("},{"line_number":45,"context_line":"                    self.admin_volume_client.build_timeout):"},{"line_number":46,"context_line":"                if group_id:"},{"line_number":47,"context_line":"                    message \u003d (\u0027Volume %s failed to be added to group %s \u0027"},{"line_number":48,"context_line":"                               \u0027within the required time (%s s).\u0027 %"},{"line_number":49,"context_line":"                               (volume_id, group_id,"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_a6ff2166","line":46,"range":{"start_line":46,"start_character":16,"end_line":46,"end_character":28},"in_reply_to":"ff0f0b1f_7373f04e","updated":"2017-05-29 16:13:03.000000000","message":"This is used in update_group.  If group_id is None, it means we are waiting for a volume to be removed from the group.  If group_id is not None, it means we are waiting for a volume to be added to group with the specified group_id.  Since this patch does not have update_group yet, I\u0027ll remove this function for now.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Create volume"},{"line_number":84,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":85,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":86,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":87,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":88,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":89,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":90,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":91,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Get a given Group"},{"line_number":94,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_53dc6c17","line":91,"range":{"start_line":84,"start_character":8,"end_line":91,"end_character":61},"updated":"2017-05-27 04:18:19.000000000","message":"I think you can use self.create_volume(group_id\u003dgrp[\u0027id\u0027]) (unless you need admin_volume_client)","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"99671f661129b99c136a3507402c1ae1b93cc360","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Create volume"},{"line_number":84,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":85,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":86,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":87,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":88,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":89,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":90,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":91,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Get a given Group"},{"line_number":94,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_b323c805","line":91,"range":{"start_line":84,"start_character":0,"end_line":91,"end_character":61},"updated":"2017-05-27 04:35:22.000000000","message":"It may be better to add a assertion for new created volume\u0027s group_id property.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Create volume"},{"line_number":84,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":85,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":86,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":87,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":88,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":89,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":90,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":91,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Get a given Group"},{"line_number":94,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_463ba537","line":91,"range":{"start_line":84,"start_character":8,"end_line":91,"end_character":61},"in_reply_to":"ff0f0b1f_53dc6c17","updated":"2017-05-29 16:13:03.000000000","message":"I need to use admin_volume_client to be consistent with admin_groups_client.  I need to use the same tenant.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Create volume"},{"line_number":84,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":85,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":86,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":87,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":88,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":89,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":90,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":91,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Get a given Group"},{"line_number":94,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_86877dd8","line":91,"range":{"start_line":84,"start_character":0,"end_line":91,"end_character":61},"in_reply_to":"ff0f0b1f_b323c805","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # Get all Groups with detail"},{"line_number":98,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":99,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":100,"context_line":"        self.assertIn((grp[\u0027name\u0027], grp[\u0027id\u0027]),"},{"line_number":101,"context_line":"                      [(m[\u0027name\u0027], m[\u0027id\u0027]) for m in grps])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # Delete Group"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_33bc58ba","line":100,"updated":"2017-05-27 04:18:19.000000000","message":"This patch is already big, but I think it would be also nice to:\n\n* assert that volume_type[\u0027id\u0027] is in grps[0][\u0027volume_types\u0027]\n* assert that group_type[\u0027id\u0027] is equal to grps[0][\u0027group_type\u0027]\n\nAnd since you are doing a for loop here, why not create more than 1 group? Maybe add 1 volume to group 1 and zero volumes to group 2 and then asserted expected -- something like that.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # Get all Groups with detail"},{"line_number":98,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":99,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":100,"context_line":"        self.assertIn((grp[\u0027name\u0027], grp[\u0027id\u0027]),"},{"line_number":101,"context_line":"                      [(m[\u0027name\u0027], m[\u0027id\u0027]) for m in grps])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # Delete Group"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_8982ee4e","line":100,"in_reply_to":"ff0f0b1f_33bc58ba","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5da057b47721e7a136ef116628c6eacb637d637b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # Get all groups with detail"},{"line_number":86,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":87,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":88,"context_line":"        for grp in grps:"},{"line_number":89,"context_line":"            self.assertEqual(volume_type[\u0027id\u0027], grp[\u0027volume_types\u0027][0])"},{"line_number":90,"context_line":"            self.assertEqual(group_type[\u0027id\u0027], grp[\u0027group_type\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":93,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"df140735_5588e9c4","line":90,"range":{"start_line":88,"start_character":8,"end_line":90,"end_character":65},"updated":"2017-05-29 19:34:27.000000000","message":"I don\u0027t *think* this is a problem here because looks like groups are project-scoped but...What if another test or class doesn\u0027t do clean up correctly, then because you assume that the list of groups is empty, this would fail.\n\nOne way to get around this is to do:\n\nself.assertNotEmpty(grps)\nfiltered_grps \u003d filter(grps, lambda g: g[\u0027id\u0027] in [grp1_id, grp2_id])\nself.assertEqual(2, len(filtered_grps)) #  Check that both groups present\nfor grp in filtered_grps:\n    self.assertEqual([volume_type[\u0027id\u0027]], grp[\u0027volume_types\u0027])\n    self.assertEqual(group_type[\u0027id\u0027], grp[\u0027group_type\u0027])","commit_id":"128f9edf6a6912639a76807e3e8eb0713ea81158"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5de8c2b245d3306700e4561376f0b65f6a458c64","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # Get all groups with detail"},{"line_number":86,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":87,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":88,"context_line":"        for grp in grps:"},{"line_number":89,"context_line":"            self.assertEqual(volume_type[\u0027id\u0027], grp[\u0027volume_types\u0027][0])"},{"line_number":90,"context_line":"            self.assertEqual(group_type[\u0027id\u0027], grp[\u0027group_type\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":93,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"}],"source_content_type":"text/x-python","patch_set":28,"id":"df140735_46338eac","line":90,"range":{"start_line":88,"start_character":8,"end_line":90,"end_character":65},"in_reply_to":"df140735_5588e9c4","updated":"2017-05-30 14:27:24.000000000","message":"Done","commit_id":"128f9edf6a6912639a76807e3e8eb0713ea81158"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5da057b47721e7a136ef116628c6eacb637d637b","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":93,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":94,"context_line":"        for vol in vols:"},{"line_number":95,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":96,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # Delete group"},{"line_number":99,"context_line":"        # grp1 has a volume so delete_volumes flag is set to True by default"}],"source_content_type":"text/x-python","patch_set":28,"id":"df140735_5576a9da","line":96,"range":{"start_line":94,"start_character":0,"end_line":96,"end_character":57},"updated":"2017-05-29 19:34:27.000000000","message":"Same logic as above applies.","commit_id":"128f9edf6a6912639a76807e3e8eb0713ea81158"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5de8c2b245d3306700e4561376f0b65f6a458c64","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":93,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":94,"context_line":"        for vol in vols:"},{"line_number":95,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":96,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # Delete group"},{"line_number":99,"context_line":"        # grp1 has a volume so delete_volumes flag is set to True by default"}],"source_content_type":"text/x-python","patch_set":28,"id":"df140735_26289a32","line":96,"range":{"start_line":94,"start_character":0,"end_line":96,"end_character":57},"in_reply_to":"df140735_5576a9da","updated":"2017-05-30 14:27:24.000000000","message":"Done","commit_id":"128f9edf6a6912639a76807e3e8eb0713ea81158"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c56451daecb1c9378dbcc55d99e95f76e1d538c5","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.admin_groups_client.wait_for_resource_deletion(grp_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @decorators.idempotent_id(\u00274b111d28-b73d-4908-9bd2-03dc2992e4d4\u0027)"},{"line_number":39,"context_line":"    def test_group_create_delete(self):"},{"line_number":40,"context_line":"        # Create volume type"},{"line_number":41,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_cc7d781d","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":32},"updated":"2017-05-30 17:40:43.000000000","message":"Could also add \"show\" here too.","commit_id":"783cf9bbc9ca91057360a24651af013e0b557ac1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"726016ec1d87f338890b00c75f0f14c3aa0d02e1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.admin_groups_client.wait_for_resource_deletion(grp_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @decorators.idempotent_id(\u00274b111d28-b73d-4908-9bd2-03dc2992e4d4\u0027)"},{"line_number":39,"context_line":"    def test_group_create_delete(self):"},{"line_number":40,"context_line":"        # Create volume type"},{"line_number":41,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_a5c81755","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":32},"in_reply_to":"df140735_cc7d781d","updated":"2017-05-30 19:30:25.000000000","message":"Done","commit_id":"783cf9bbc9ca91057360a24651af013e0b557ac1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c56451daecb1c9378dbcc55d99e95f76e1d538c5","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # Get all groups with detail"},{"line_number":87,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":88,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":89,"context_line":"        self.assertNotEmpty(grps)"},{"line_number":90,"context_line":"        filtered_grps \u003d filter(lambda g: g[\u0027id\u0027] in [grp1_id, grp2_id], grps)"},{"line_number":91,"context_line":"        self.assertEqual(2, len(filtered_grps))"},{"line_number":92,"context_line":"        for grp in filtered_grps:"}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_6ced4cee","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":33},"updated":"2017-05-30 17:40:43.000000000","message":"Looking back at this, this is probably redundant with L91. (Even if grps is empty filtered_grps will be empty so L91 assertion will fail.)","commit_id":"783cf9bbc9ca91057360a24651af013e0b557ac1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"726016ec1d87f338890b00c75f0f14c3aa0d02e1","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # Get all groups with detail"},{"line_number":87,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":88,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":89,"context_line":"        self.assertNotEmpty(grps)"},{"line_number":90,"context_line":"        filtered_grps \u003d filter(lambda g: g[\u0027id\u0027] in [grp1_id, grp2_id], grps)"},{"line_number":91,"context_line":"        self.assertEqual(2, len(filtered_grps))"},{"line_number":92,"context_line":"        for grp in filtered_grps:"}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_2519a7d6","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":33},"in_reply_to":"df140735_6ced4cee","updated":"2017-05-30 19:30:25.000000000","message":"Done","commit_id":"783cf9bbc9ca91057360a24651af013e0b557ac1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5bedaef255ae7f938dfb276b0507138bfa124521","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":88,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":89,"context_line":"        self.assertNotEmpty(grps)"},{"line_number":90,"context_line":"        filtered_grps \u003d filter(lambda g: g[\u0027id\u0027] in [grp1_id, grp2_id], grps)"},{"line_number":91,"context_line":"        self.assertEqual(2, len(filtered_grps))"},{"line_number":92,"context_line":"        for grp in filtered_grps:"},{"line_number":93,"context_line":"            self.assertEqual([volume_type[\u0027id\u0027]], grp[\u0027volume_types\u0027])"},{"line_number":94,"context_line":"            self.assertEqual(group_type[\u0027id\u0027], grp[\u0027group_type\u0027])"}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_e53f2fd4","line":91,"range":{"start_line":90,"start_character":0,"end_line":91,"end_character":47},"updated":"2017-05-30 19:47:59.000000000","message":"Also need to change line 90 to use list(filter()) because filter returns iterator instead of list in python3.\n\nhttps://docs.python.org/3.0/whatsnew/3.0.html#views-and-iterators-instead-of-lists","commit_id":"783cf9bbc9ca91057360a24651af013e0b557ac1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c56451daecb1c9378dbcc55d99e95f76e1d538c5","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":97,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":98,"context_line":"        self.assertNotEmpty(vols)"},{"line_number":99,"context_line":"        filtered_vols \u003d filter(lambda v: v[\u0027id\u0027] in [vol1_id], vols)"},{"line_number":100,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":101,"context_line":"        for vol in filtered_vols:"}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_6cc66c6a","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":33},"updated":"2017-05-30 17:40:43.000000000","message":"Same as above.","commit_id":"783cf9bbc9ca91057360a24651af013e0b557ac1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"726016ec1d87f338890b00c75f0f14c3aa0d02e1","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":97,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":98,"context_line":"        self.assertNotEmpty(vols)"},{"line_number":99,"context_line":"        filtered_vols \u003d filter(lambda v: v[\u0027id\u0027] in [vol1_id], vols)"},{"line_number":100,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":101,"context_line":"        for vol in filtered_vols:"}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_050ea38c","line":98,"range":{"start_line":98,"start_character":8,"end_line":98,"end_character":33},"in_reply_to":"df140735_6cc66c6a","updated":"2017-05-30 19:30:25.000000000","message":"Done","commit_id":"783cf9bbc9ca91057360a24651af013e0b557ac1"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"b8897d1a19e16449a57b986a5e732eab54e1974f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":69,"context_line":"                  \u0027group_id\u0027: grp1[\u0027id\u0027],"},{"line_number":70,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":71,"context_line":"        vol1 \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":72,"context_line":"        self.assertEqual(grp1[\u0027id\u0027], vol1[\u0027group_id\u0027])"},{"line_number":73,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":74,"context_line":"            self.admin_volume_client, vol1[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"bf091321_401930d5","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":12},"updated":"2017-06-09 04:08:11.000000000","message":"only one volume is created in this testcase, so the variable name is not suitable","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de252fb3a74cdbc63843d2020598d4dc03e48080","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":69,"context_line":"                  \u0027group_id\u0027: grp1[\u0027id\u0027],"},{"line_number":70,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":71,"context_line":"        vol1 \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":72,"context_line":"        self.assertEqual(grp1[\u0027id\u0027], vol1[\u0027group_id\u0027])"},{"line_number":73,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":74,"context_line":"            self.admin_volume_client, vol1[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_593287a9","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":12},"in_reply_to":"bf091321_401930d5","updated":"2017-06-09 16:23:19.000000000","message":"I changed this from vol to vol1 to differentiate from \"vol\" used on line 100.  Technically they should not interfere, but I\u0027d prefer not to use the same name.","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"b8897d1a19e16449a57b986a5e732eab54e1974f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # Get all groups with detail"},{"line_number":87,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":88,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":89,"context_line":"        filtered_grps \u003d list(filter(lambda g: g[\u0027id\u0027] in [grp1_id, grp2_id],"},{"line_number":90,"context_line":"                                    grps))"},{"line_number":91,"context_line":"        self.assertEqual(2, len(filtered_grps))"},{"line_number":92,"context_line":"        for grp in filtered_grps:"},{"line_number":93,"context_line":"            self.assertEqual([volume_type[\u0027id\u0027]], grp[\u0027volume_types\u0027])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bf091321_c0c8a056","line":90,"range":{"start_line":89,"start_character":0,"end_line":90,"end_character":42},"updated":"2017-06-09 04:08:11.000000000","message":"nit: if you use list comprehension, you can make it in one line:\n        filtered_grps \u003d [g for g in grps if g[\u0027id\u0027] in [grp1_id, grp2_id]]","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de252fb3a74cdbc63843d2020598d4dc03e48080","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # Get all groups with detail"},{"line_number":87,"context_line":"        grps \u003d self.admin_groups_client.list_groups("},{"line_number":88,"context_line":"            detail\u003dTrue)[\u0027groups\u0027]"},{"line_number":89,"context_line":"        filtered_grps \u003d list(filter(lambda g: g[\u0027id\u0027] in [grp1_id, grp2_id],"},{"line_number":90,"context_line":"                                    grps))"},{"line_number":91,"context_line":"        self.assertEqual(2, len(filtered_grps))"},{"line_number":92,"context_line":"        for grp in filtered_grps:"},{"line_number":93,"context_line":"            self.assertEqual([volume_type[\u0027id\u0027]], grp[\u0027volume_types\u0027])"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_3c569908","line":90,"range":{"start_line":89,"start_character":0,"end_line":90,"end_character":42},"in_reply_to":"bf091321_c0c8a056","updated":"2017-06-09 16:23:19.000000000","message":"Done","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"b8897d1a19e16449a57b986a5e732eab54e1974f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            self.assertEqual([volume_type[\u0027id\u0027]], grp[\u0027volume_types\u0027])"},{"line_number":94,"context_line":"            self.assertEqual(group_type[\u0027id\u0027], grp[\u0027group_type\u0027])"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":97,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":98,"context_line":"        filtered_vols \u003d list(filter(lambda v: v[\u0027id\u0027] in [vol1_id], vols))"},{"line_number":99,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":100,"context_line":"        for vol in filtered_vols:"},{"line_number":101,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":102,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"}],"source_content_type":"text/x-python","patch_set":34,"id":"bf091321_20eabc74","line":99,"range":{"start_line":96,"start_character":0,"end_line":99,"end_character":47},"updated":"2017-06-09 04:08:11.000000000","message":"this is not relevant with this testcase","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de252fb3a74cdbc63843d2020598d4dc03e48080","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            self.assertEqual([volume_type[\u0027id\u0027]], grp[\u0027volume_types\u0027])"},{"line_number":94,"context_line":"            self.assertEqual(group_type[\u0027id\u0027], grp[\u0027group_type\u0027])"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":97,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":98,"context_line":"        filtered_vols \u003d list(filter(lambda v: v[\u0027id\u0027] in [vol1_id], vols))"},{"line_number":99,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":100,"context_line":"        for vol in filtered_vols:"},{"line_number":101,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":102,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_390eabe5","line":99,"range":{"start_line":96,"start_character":0,"end_line":99,"end_character":47},"in_reply_to":"bf091321_20eabc74","updated":"2017-06-09 16:23:19.000000000","message":"I think this is relevant.  I create a volume and add it to the group in this test case (which is a test relevant to groups).  Here I\u0027m retrieving the volumes and then use the filtered_vols on line 101 to verify it has group_id.","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"b8897d1a19e16449a57b986a5e732eab54e1974f","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        filtered_vols \u003d list(filter(lambda v: v[\u0027id\u0027] in [vol1_id], vols))"},{"line_number":99,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":100,"context_line":"        for vol in filtered_vols:"},{"line_number":101,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":102,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        # Delete group"}],"source_content_type":"text/x-python","patch_set":34,"id":"bf091321_004b3884","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":54},"updated":"2017-06-09 04:08:11.000000000","message":"this is done in line 72, and you can add a show_volume before line 72","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de252fb3a74cdbc63843d2020598d4dc03e48080","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        filtered_vols \u003d list(filter(lambda v: v[\u0027id\u0027] in [vol1_id], vols))"},{"line_number":99,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":100,"context_line":"        for vol in filtered_vols:"},{"line_number":101,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":102,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        # Delete group"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_798e6328","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":54},"in_reply_to":"bf091321_004b3884","updated":"2017-06-09 16:23:19.000000000","message":"See my replies above.","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"b8897d1a19e16449a57b986a5e732eab54e1974f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":100,"context_line":"        for vol in filtered_vols:"},{"line_number":101,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":102,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        # Delete group"},{"line_number":105,"context_line":"        # grp1 has a volume so delete_volumes flag is set to True by default"}],"source_content_type":"text/x-python","patch_set":34,"id":"bf091321_e05f243f","line":102,"range":{"start_line":102,"start_character":12,"end_line":102,"end_character":57},"updated":"2017-06-09 04:08:11.000000000","message":"this seems not necessary","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de252fb3a74cdbc63843d2020598d4dc03e48080","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.assertEqual(1, len(filtered_vols))"},{"line_number":100,"context_line":"        for vol in filtered_vols:"},{"line_number":101,"context_line":"            self.assertEqual(grp1_id, vol[\u0027group_id\u0027])"},{"line_number":102,"context_line":"            self.assertNotEqual(grp2_id, vol[\u0027group_id\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        # Delete group"},{"line_number":105,"context_line":"        # grp1 has a volume so delete_volumes flag is set to True by default"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f231b9d_3998eb68","line":102,"range":{"start_line":102,"start_character":12,"end_line":102,"end_character":57},"in_reply_to":"bf091321_e05f243f","updated":"2017-06-09 16:23:19.000000000","message":"Removed.","commit_id":"3bc56d9620e43a63bdc132d661ae8852a04ceb03"}],"tempest/api/volume/base.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                cls.os.volume_v2_availability_zone_client)"},{"line_number":84,"context_line":"            cls.volume_limits_client \u003d cls.os.volume_v2_limits_client"},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            cls.snapshots_client \u003d cls.os.snapshots_v2_client"},{"line_number":87,"context_line":"            cls.volumes_client \u003d cls.os.volumes_v3_client"},{"line_number":88,"context_line":"            cls.backups_client \u003d cls.os.backups_v2_client"},{"line_number":89,"context_line":"            cls.volumes_extension_client \u003d cls.os.volumes_v2_extension_client"},{"line_number":90,"context_line":"            cls.availability_zone_client \u003d ("},{"line_number":91,"context_line":"                cls.os.volume_v2_availability_zone_client)"},{"line_number":92,"context_line":"            cls.volume_limits_client \u003d cls.os.volume_v2_limits_client"},{"line_number":93,"context_line":"            cls.groups_client \u003d cls.os.groups_v3_client"},{"line_number":94,"context_line":"            cls.group_snapshots_client \u003d cls.os.group_snapshots_v3_client"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_77ffac34","line":92,"range":{"start_line":86,"start_character":0,"end_line":92,"end_character":69},"updated":"2017-03-14 05:37:35.000000000","message":"why some v2 clients?","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                cls.os.volume_v2_availability_zone_client)"},{"line_number":84,"context_line":"            cls.volume_limits_client \u003d cls.os.volume_v2_limits_client"},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            cls.snapshots_client \u003d cls.os.snapshots_v2_client"},{"line_number":87,"context_line":"            cls.volumes_client \u003d cls.os.volumes_v3_client"},{"line_number":88,"context_line":"            cls.backups_client \u003d cls.os.backups_v2_client"},{"line_number":89,"context_line":"            cls.volumes_extension_client \u003d cls.os.volumes_v2_extension_client"},{"line_number":90,"context_line":"            cls.availability_zone_client \u003d ("},{"line_number":91,"context_line":"                cls.os.volume_v2_availability_zone_client)"},{"line_number":92,"context_line":"            cls.volume_limits_client \u003d cls.os.volume_v2_limits_client"},{"line_number":93,"context_line":"            cls.groups_client \u003d cls.os.groups_v3_client"},{"line_number":94,"context_line":"            cls.group_snapshots_client \u003d cls.os.group_snapshots_v3_client"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_0e72ece5","line":92,"range":{"start_line":86,"start_character":0,"end_line":92,"end_character":69},"in_reply_to":"7a25e98e_77ffac34","updated":"2017-03-14 18:21:36.000000000","message":"Removed or changed to v3.","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                vol_type)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    @classmethod"},{"line_number":398,"context_line":"    def clear_group_types(cls):"},{"line_number":399,"context_line":"        for grp_type in cls.group_types:"},{"line_number":400,"context_line":"            test_utils.call_and_ignore_notfound_exc("},{"line_number":401,"context_line":"                cls.admin_group_types_client.delete_group_type, grp_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_faed4326","line":398,"range":{"start_line":398,"start_character":8,"end_line":398,"end_character":25},"updated":"2017-03-14 05:37:35.000000000","message":"should be added to resource_cleanup","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                vol_type)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    @classmethod"},{"line_number":398,"context_line":"    def clear_group_types(cls):"},{"line_number":399,"context_line":"        for grp_type in cls.group_types:"},{"line_number":400,"context_line":"            test_utils.call_and_ignore_notfound_exc("},{"line_number":401,"context_line":"                cls.admin_group_types_client.delete_group_type, grp_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_0e490c8c","line":398,"range":{"start_line":398,"start_character":8,"end_line":398,"end_character":25},"in_reply_to":"7a25e98e_faed4326","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3a79b85e0eafb7682e71f5351d4c9478ea2d371e","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        return volume"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @classmethod"},{"line_number":127,"context_line":"    def create_group(cls, wait_until\u003d\u0027available\u0027, **kwargs):"},{"line_number":128,"context_line":"        \"\"\"Wrapper utility that returns a test group."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"           :param wait_until: wait till group status."}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_a8e3dca2","line":127,"updated":"2017-03-22 09:32:16.000000000","message":"Using classmethod to create and delete resources is not the way to go anymore. You must define only instance method and schedule resources deletion with self.addCleanup(...).","commit_id":"fdc65d3bac20e2a997a3b177d131d16024f89f8a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"27eaa5233877b897f4d5ca0c72b51f419dc37790","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        return volume"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @classmethod"},{"line_number":127,"context_line":"    def create_group(cls, wait_until\u003d\u0027available\u0027, **kwargs):"},{"line_number":128,"context_line":"        \"\"\"Wrapper utility that returns a test group."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"           :param wait_until: wait till group status."}],"source_content_type":"text/x-python","patch_set":13,"id":"dfeb2761_c627af64","line":127,"in_reply_to":"1a1ced50_a8e3dca2","updated":"2017-03-31 15:59:15.000000000","message":"Done","commit_id":"fdc65d3bac20e2a997a3b177d131d16024f89f8a"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":315,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("},{"line_number":316,"context_line":"            name\u003dname, **kwargs)[\u0027group_type\u0027]"},{"line_number":317,"context_line":"        return group_type"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    @classmethod"},{"line_number":320,"context_line":"    def clear_qos_specs(cls):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_973353ab","line":317,"updated":"2017-05-01 21:34:45.000000000","message":"Why not add a cleanup here (if you choose to keep it as a test-level function) or a cls.group_types.append(group_type) then iterate over cls.group_types in resource_cleanup and delete each group_type in the array (if you choose to make it as class-level function, just like create_volume_type above).","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":315,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("},{"line_number":316,"context_line":"            name\u003dname, **kwargs)[\u0027group_type\u0027]"},{"line_number":317,"context_line":"        return group_type"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    @classmethod"},{"line_number":320,"context_line":"    def clear_qos_specs(cls):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_a6c3f688","line":317,"in_reply_to":"5ff73747_973353ab","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"d332dc50bfd9d81b29c94cc7a0bd98a26e2d91d5","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        cls.snapshots_client \u003d cls.os_primary.snapshots_v2_client"},{"line_number":73,"context_line":"        cls.volumes_client \u003d cls.os_primary.volumes_v2_client"},{"line_number":74,"context_line":"        if cls._api_version \u003d\u003d 3:"},{"line_number":75,"context_line":"            cls.volumes_client \u003d cls.os_primary.volumes_v3_client"},{"line_number":76,"context_line":"        cls.backups_client \u003d cls.os_primary.backups_v2_client"},{"line_number":77,"context_line":"        cls.volumes_extension_client \u003d\\"},{"line_number":78,"context_line":"            cls.os_primary.volumes_v2_extension_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_13f27407","line":75,"range":{"start_line":74,"start_character":8,"end_line":75,"end_character":65},"updated":"2017-05-27 04:19:51.000000000","message":"this is redundant, as it\u0027s defined below, :)","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        cls.snapshots_client \u003d cls.os_primary.snapshots_v2_client"},{"line_number":73,"context_line":"        cls.volumes_client \u003d cls.os_primary.volumes_v2_client"},{"line_number":74,"context_line":"        if cls._api_version \u003d\u003d 3:"},{"line_number":75,"context_line":"            cls.volumes_client \u003d cls.os_primary.volumes_v3_client"},{"line_number":76,"context_line":"        cls.backups_client \u003d cls.os_primary.backups_v2_client"},{"line_number":77,"context_line":"        cls.volumes_extension_client \u003d\\"},{"line_number":78,"context_line":"            cls.os_primary.volumes_v2_extension_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_862c1d48","line":75,"range":{"start_line":74,"start_character":8,"end_line":75,"end_character":65},"in_reply_to":"ff0f0b1f_13f27407","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23081,"name":"Jeremy Zhang","email":"zhangjun_inspur@163.com","username":"jeremy.zhang"},"change_message_id":"d332dc50bfd9d81b29c94cc7a0bd98a26e2d91d5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        cls.admin_volume_types_client \u003d cls.os_admin.volume_types_v2_client"},{"line_number":256,"context_line":"        cls.admin_volume_manage_client \u003d cls.os_admin.volume_manage_v2_client"},{"line_number":257,"context_line":"        cls.admin_volume_client \u003d cls.os_admin.volumes_v2_client"},{"line_number":258,"context_line":"        if cls._api_version \u003d\u003d 3:"},{"line_number":259,"context_line":"            cls.admin_volume_client \u003d cls.os_admin.volumes_v3_client"},{"line_number":260,"context_line":"        cls.admin_hosts_client \u003d cls.os_admin.volume_hosts_v2_client"},{"line_number":261,"context_line":"        cls.admin_snapshot_manage_client \u003d \\"},{"line_number":262,"context_line":"            cls.os_admin.snapshot_manage_v2_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_f3f6e0f9","line":259,"range":{"start_line":258,"start_character":0,"end_line":259,"end_character":68},"updated":"2017-05-27 04:19:51.000000000","message":"ditto","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        cls.admin_volume_types_client \u003d cls.os_admin.volume_types_v2_client"},{"line_number":256,"context_line":"        cls.admin_volume_manage_client \u003d cls.os_admin.volume_manage_v2_client"},{"line_number":257,"context_line":"        cls.admin_volume_client \u003d cls.os_admin.volumes_v2_client"},{"line_number":258,"context_line":"        if cls._api_version \u003d\u003d 3:"},{"line_number":259,"context_line":"            cls.admin_volume_client \u003d cls.os_admin.volumes_v3_client"},{"line_number":260,"context_line":"        cls.admin_hosts_client \u003d cls.os_admin.volume_hosts_v2_client"},{"line_number":261,"context_line":"        cls.admin_snapshot_manage_client \u003d \\"},{"line_number":262,"context_line":"            cls.os_admin.snapshot_manage_v2_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_46e3a506","line":259,"range":{"start_line":258,"start_character":0,"end_line":259,"end_character":68},"in_reply_to":"ff0f0b1f_f3f6e0f9","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        cls.volume_types.append(volume_type[\u0027id\u0027])"},{"line_number":312,"context_line":"        return volume_type"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def create_group_type(self, name\u003dNone, **kwargs):"},{"line_number":315,"context_line":"        \"\"\"Create a test group-type\"\"\""},{"line_number":316,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":317,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_f387000f","line":314,"range":{"start_line":314,"start_character":8,"end_line":314,"end_character":25},"updated":"2017-05-27 04:18:19.000000000","message":"Is it better to make this a classmethod to be consistent with the other methods above and below?","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        cls.volume_types.append(volume_type[\u0027id\u0027])"},{"line_number":312,"context_line":"        return volume_type"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def create_group_type(self, name\u003dNone, **kwargs):"},{"line_number":315,"context_line":"        \"\"\"Create a test group-type\"\"\""},{"line_number":316,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":317,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_e48e3126","line":314,"range":{"start_line":314,"start_character":8,"end_line":314,"end_character":25},"in_reply_to":"ff0f0b1f_f387000f","updated":"2017-05-29 16:13:03.000000000","message":"Unfortunately I can\u0027t use the classmethod above.  I tried but it didn\u0027t work.  It won\u0027t delete the group_types if I make it a classmethod because the microversion will be removed before group_types are deleted and as a result the group_types won\u0027t be deleted.  Please see my reply below from patch set 12.  The same problem still exists.  So I\u0027ll have to keep it this way.\n\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nxing-yang\nMar 15 12:51 AM\n↩\nPatch Set 12:\n(1 comment)\ntempest/api/volume/v3/test_groups.py\nLine 101:\nI can\u0027t rely on clear_group_types() in api/volume/base.py to delete group_types.  This is because in _setUp() in api_microversion_fixture.py, we have:\n        base_client.VOLUME_MICROVERSION \u003d self.volume_microversion\n        self.addCleanup(self._reset_volume_microversion)\nsetUp() is called after resource_setup() and therefore its tearDown method will be called first.  At cleanup time, _reset_volume_microversion() is called before resource_cleanup().  So base_client.VOLUME_MICROVERSION is set to None before group_type is deleted.  Without the correct microversion, the group_type API won\u0027t be found and therefore delete group_type fails.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9c2eac8627219b7f691178a31100b1c589851454","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_group_type(self, name\u003dNone, **kwargs):"},{"line_number":309,"context_line":"        \"\"\"Create a test group-type\"\"\""},{"line_number":310,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":311,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("},{"line_number":312,"context_line":"            name\u003dname, **kwargs)[\u0027group_type\u0027]"},{"line_number":313,"context_line":"        self.addCleanup(self.admin_group_types_client.delete_group_type,"}],"source_content_type":"text/x-python","patch_set":33,"id":"bf091321_a36ca836","line":310,"range":{"start_line":310,"start_character":44,"end_line":310,"end_character":69},"updated":"2017-06-08 16:40:54.000000000","message":"cls.__name__ + \u0027-group-type","commit_id":"4d643c260f9ec8d6708f4a18cf90fa2879d535a1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c394564c6ffc279779f8322ebf323660b3302d91","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_group_type(self, name\u003dNone, **kwargs):"},{"line_number":309,"context_line":"        \"\"\"Create a test group-type\"\"\""},{"line_number":310,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":311,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("},{"line_number":312,"context_line":"            name\u003dname, **kwargs)[\u0027group_type\u0027]"},{"line_number":313,"context_line":"        self.addCleanup(self.admin_group_types_client.delete_group_type,"}],"source_content_type":"text/x-python","patch_set":33,"id":"bf091321_b4aa9982","line":310,"range":{"start_line":310,"start_character":44,"end_line":310,"end_character":69},"in_reply_to":"bf091321_a36ca836","updated":"2017-06-08 19:32:04.000000000","message":"This is not a class method like create_volume_type though.  \"cls\" is not defined here.","commit_id":"4d643c260f9ec8d6708f4a18cf90fa2879d535a1"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"8ec7beb05e55268900c6037b50eafee9b99bdb05","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_group_type(self, name\u003dNone, **kwargs):"},{"line_number":309,"context_line":"        \"\"\"Create a test group-type\"\"\""},{"line_number":310,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":311,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("},{"line_number":312,"context_line":"            name\u003dname, **kwargs)[\u0027group_type\u0027]"},{"line_number":313,"context_line":"        self.addCleanup(self.admin_group_types_client.delete_group_type,"}],"source_content_type":"text/x-python","patch_set":33,"id":"bf091321_eca2859a","line":310,"range":{"start_line":310,"start_character":44,"end_line":310,"end_character":69},"in_reply_to":"bf091321_b4aa9982","updated":"2017-06-08 23:23:58.000000000","message":"self.__class__.__name__\n\n\u0027GroupsV3Test\u0027 is too specific and doesn\u0027t make sense in the base class context as other classes can call this method.","commit_id":"4d643c260f9ec8d6708f4a18cf90fa2879d535a1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6b87c1eaf0dbe923ae42b9499170442829ab9977","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_group_type(self, name\u003dNone, **kwargs):"},{"line_number":309,"context_line":"        \"\"\"Create a test group-type\"\"\""},{"line_number":310,"context_line":"        name \u003d name or data_utils.rand_name(\u0027GroupsV3Test-group-type\u0027)"},{"line_number":311,"context_line":"        group_type \u003d self.admin_group_types_client.create_group_type("},{"line_number":312,"context_line":"            name\u003dname, **kwargs)[\u0027group_type\u0027]"},{"line_number":313,"context_line":"        self.addCleanup(self.admin_group_types_client.delete_group_type,"}],"source_content_type":"text/x-python","patch_set":33,"id":"bf091321_3a0aebd1","line":310,"range":{"start_line":310,"start_character":44,"end_line":310,"end_character":69},"in_reply_to":"bf091321_eca2859a","updated":"2017-06-09 01:24:40.000000000","message":"Sure.  Done.","commit_id":"4d643c260f9ec8d6708f4a18cf90fa2879d535a1"}],"tempest/api/volume/v3/test_groups.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"0e012875714282600639a8876a31b6fcef4d016e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(GroupsV3Test, cls).skip_checks()"},{"line_number":35,"context_line":"        if not CONF.volume_feature_enabled.group:"},{"line_number":36,"context_line":"            raise cls.skipException(\"Cinder group \""},{"line_number":37,"context_line":"                                    \"feature disabled\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _delete_group(self, grp_id):"},{"line_number":40,"context_line":"        self.admin_groups_client.delete_group(grp_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_b0c87a56","line":37,"range":{"start_line":36,"start_character":36,"end_line":37,"end_character":54},"updated":"2017-03-13 09:36:35.000000000","message":"can be put in one line","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1a485fddceaccb1563c966dfe7dfb64654617bb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(GroupsV3Test, cls).skip_checks()"},{"line_number":35,"context_line":"        if not CONF.volume_feature_enabled.group:"},{"line_number":36,"context_line":"            raise cls.skipException(\"Cinder group \""},{"line_number":37,"context_line":"                                    \"feature disabled\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _delete_group(self, grp_id):"},{"line_number":40,"context_line":"        self.admin_groups_client.delete_group(grp_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_2114344b","line":37,"range":{"start_line":36,"start_character":36,"end_line":37,"end_character":54},"in_reply_to":"9a30ddce_b0c87a56","updated":"2017-03-13 16:14:01.000000000","message":"Done","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # Create Group"},{"line_number":70,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":71,"context_line":"        create_group \u003d self.admin_groups_client.create_group"},{"line_number":72,"context_line":"        grp \u003d create_group(group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":73,"context_line":"                           volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":74,"context_line":"                           name\u003dgrp_name)[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_f7671c23","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":60},"updated":"2017-03-14 05:37:35.000000000","message":"better not to do this","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # Create Group"},{"line_number":70,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":71,"context_line":"        create_group \u003d self.admin_groups_client.create_group"},{"line_number":72,"context_line":"        grp \u003d create_group(group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":73,"context_line":"                           volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":74,"context_line":"                           name\u003dgrp_name)[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_a12ba932","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":60},"in_reply_to":"7a25e98e_f7671c23","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                           volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":74,"context_line":"                           name\u003dgrp_name)[\u0027group\u0027]"},{"line_number":75,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":76,"context_line":"            self.admin_groups_client,"},{"line_number":77,"context_line":"            grp[\u0027id\u0027],"},{"line_number":78,"context_line":"            \u0027available\u0027)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # Create volume"},{"line_number":81,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_3717f452","line":78,"range":{"start_line":76,"start_character":0,"end_line":78,"end_character":23},"updated":"2017-03-14 05:37:35.000000000","message":"better to put in one line","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                           volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":74,"context_line":"                           name\u003dgrp_name)[\u0027group\u0027]"},{"line_number":75,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":76,"context_line":"            self.admin_groups_client,"},{"line_number":77,"context_line":"            grp[\u0027id\u0027],"},{"line_number":78,"context_line":"            \u0027available\u0027)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # Create volume"},{"line_number":81,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_c130a5a1","line":78,"range":{"start_line":76,"start_character":0,"end_line":78,"end_character":23},"in_reply_to":"7a25e98e_3717f452","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":86,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":87,"context_line":"        self.admin_volume_client.create_volume(**params)"},{"line_number":88,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":89,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":90,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":91,"context_line":"        for vol in vols:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_f71c7c79","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":47},"updated":"2017-03-14 05:37:35.000000000","message":"this should be put after line #74","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":86,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":87,"context_line":"        self.admin_volume_client.create_volume(**params)"},{"line_number":88,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":89,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":90,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":91,"context_line":"        for vol in vols:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_21f979c9","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":47},"in_reply_to":"7a25e98e_f71c7c79","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":87,"context_line":"        self.admin_volume_client.create_volume(**params)"},{"line_number":88,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":89,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":90,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":91,"context_line":"        for vol in vols:"},{"line_number":92,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027]:"},{"line_number":93,"context_line":"                waiters.wait_for_volume_resource_status("},{"line_number":94,"context_line":"                    self.admin_volume_client,"},{"line_number":95,"context_line":"                    vol[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_ba1aeb6c","line":92,"range":{"start_line":89,"start_character":0,"end_line":92,"end_character":44},"updated":"2017-03-14 05:37:35.000000000","message":"this seems not necessary, you can use id of created volume directly","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":87,"context_line":"        self.admin_volume_client.create_volume(**params)"},{"line_number":88,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":89,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":90,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":91,"context_line":"        for vol in vols:"},{"line_number":92,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027]:"},{"line_number":93,"context_line":"                waiters.wait_for_volume_resource_status("},{"line_number":94,"context_line":"                    self.admin_volume_client,"},{"line_number":95,"context_line":"                    vol[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_e125a15c","line":92,"range":{"start_line":89,"start_character":0,"end_line":92,"end_character":44},"in_reply_to":"7a25e98e_ba1aeb6c","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                      [(m[\u0027name\u0027], m[\u0027id\u0027]) for m in grps])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # Clean up"},{"line_number":109,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.admin_volume_types_client.delete_volume_type(volume_type[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.admin_group_types_client.delete_group_type(group_type[\u0027id\u0027])"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_9a628fd7","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":37},"updated":"2017-03-14 05:37:35.000000000","message":"this should be used as addCleanup after line #74","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                      [(m[\u0027name\u0027], m[\u0027id\u0027]) for m in grps])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # Clean up"},{"line_number":109,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.admin_volume_types_client.delete_volume_type(volume_type[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.admin_group_types_client.delete_group_type(group_type[\u0027id\u0027])"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_c1bee5d3","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":37},"in_reply_to":"7a25e98e_9a628fd7","updated":"2017-03-14 18:21:36.000000000","message":"I tried removing this line and adding \"self.addCleanup(self._delete_group, self.admin_groups_client, grp[\u0027id\u0027])\" after #74, but the group and volumes were not deleted before the volume_type was deleted and therefore volume_type failed to be deleted as part of the create_volume_type cleanup procedure.  I got the following error:\n\nDetails: {u\u0027message\u0027: u\u0027Target volume type is still in use.\u0027, u\u0027code\u0027: 400}","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # Clean up"},{"line_number":109,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.admin_volume_types_client.delete_volume_type(volume_type[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.admin_group_types_client.delete_group_type(group_type[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_9ab9af31","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":76},"updated":"2017-03-14 05:37:35.000000000","message":"this is not needed because in create_volume_type already has cleanup procedure","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # Clean up"},{"line_number":109,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.admin_volume_types_client.delete_volume_type(volume_type[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.admin_group_types_client.delete_group_type(group_type[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_81178dec","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":76},"in_reply_to":"7a25e98e_9ab9af31","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # Clean up"},{"line_number":109,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.admin_volume_types_client.delete_volume_type(volume_type[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.admin_group_types_client.delete_group_type(group_type[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"},{"line_number":114,"context_line":"    def test_group_update(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_da36c7b3","line":111,"range":{"start_line":111,"start_character":73,"end_line":111,"end_character":73},"updated":"2017-03-14 05:37:35.000000000","message":"this is not needed because create_group_type already has cleanup procedure","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # Clean up"},{"line_number":109,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":110,"context_line":"        self.admin_volume_types_client.delete_volume_type(volume_type[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.admin_group_types_client.delete_group_type(group_type[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"},{"line_number":114,"context_line":"    def test_group_update(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_c1d7c521","line":111,"range":{"start_line":111,"start_character":73,"end_line":111,"end_character":73},"in_reply_to":"7a25e98e_da36c7b3","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # Create Group"},{"line_number":122,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":123,"context_line":"        desc \u003d \u0027Test group\u0027"},{"line_number":124,"context_line":"        create_group \u003d self.admin_groups_client.create_group"},{"line_number":125,"context_line":"        grp \u003d create_group(group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":126,"context_line":"                           volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":127,"context_line":"                           name\u003dgrp_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a25e98e_377294e6","line":124,"range":{"start_line":124,"start_character":8,"end_line":124,"end_character":60},"updated":"2017-03-14 05:37:35.000000000","message":"better not to do this","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa190ae43574790d04be0b3bc38ab62a4f824ccf","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # Create Group"},{"line_number":122,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":123,"context_line":"        desc \u003d \u0027Test group\u0027"},{"line_number":124,"context_line":"        create_group \u003d self.admin_groups_client.create_group"},{"line_number":125,"context_line":"        grp \u003d create_group(group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":126,"context_line":"                           volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":127,"context_line":"                           name\u003dgrp_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a1ff146_df2f9cf4","line":124,"range":{"start_line":124,"start_character":8,"end_line":124,"end_character":60},"in_reply_to":"7a25e98e_377294e6","updated":"2017-03-14 18:21:36.000000000","message":"Done","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eb9f5ba5a3c64230370d1bb06e83ac5b3a5b6bd0","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        # Clean up"},{"line_number":100,"context_line":"        self._delete_group(grp[\u0027id\u0027])"},{"line_number":101,"context_line":"        self.admin_group_types_client.delete_group_type(group_type[\u0027id\u0027])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"},{"line_number":104,"context_line":"    def test_group_update(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a1ff146_4773d3b1","line":101,"updated":"2017-03-15 04:51:47.000000000","message":"I can\u0027t rely on clear_group_types() in api/volume/base.py to delete group_types.  This is because in _setUp() in api_microversion_fixture.py, we have:\n\n        base_client.VOLUME_MICROVERSION \u003d self.volume_microversion\n        self.addCleanup(self._reset_volume_microversion)\n\nsetUp() is called after resource_setup() and therefore its tearDown method will be called first.  At cleanup time, _reset_volume_microversion() is called before resource_cleanup().  So base_client.VOLUME_MICROVERSION is set to None before group_type is deleted.  Without the correct microversion, the group_type API won\u0027t be found and therefore delete group_type fails.","commit_id":"6e26a8e2712daadcac673e8d17e11c106c3cae7c"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0f23c36627a1c80873b4016a14f136fd9f90d7e9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if not CONF.volume_feature_enabled.group:"},{"line_number":39,"context_line":"            raise cls.skipException(\"Cinder group feature disabled\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _wait_for_volume_group_id(self, volume_id, group_id):"},{"line_number":42,"context_line":"        \"\"\"Waits for a Volume to be added to group or removed from group.\"\"\""},{"line_number":43,"context_line":"        body \u003d self.admin_volume_client.show_volume(volume_id)[\u0027volume\u0027]"},{"line_number":44,"context_line":"        current_group_id \u003d body[\u0027group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"dfeb2761_67e0b8cd","line":41,"updated":"2017-04-03 09:18:30.000000000","message":"That\u0027s good but you forgot to remove this in waiters.py, now we have that function twice.","commit_id":"9563b2d200a47d0aa50f8ff1841556a0ab9c6fac"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7122a8919d29941e7e1550ab5b0b46c7aeb1165e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if not CONF.volume_feature_enabled.group:"},{"line_number":39,"context_line":"            raise cls.skipException(\"Cinder group feature disabled\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _wait_for_volume_group_id(self, volume_id, group_id):"},{"line_number":42,"context_line":"        \"\"\"Waits for a Volume to be added to group or removed from group.\"\"\""},{"line_number":43,"context_line":"        body \u003d self.admin_volume_client.show_volume(volume_id)[\u0027volume\u0027]"},{"line_number":44,"context_line":"        current_group_id \u003d body[\u0027group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"dfeb2761_74b96d2c","line":41,"in_reply_to":"dfeb2761_67e0b8cd","updated":"2017-04-03 20:14:39.000000000","message":"Good catch!  Removed it from waiters.py.","commit_id":"9563b2d200a47d0aa50f8ff1841556a0ab9c6fac"}],"tempest/common/waiters.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"0e012875714282600639a8876a31b6fcef4d016e","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        time.sleep(client.build_interval)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def wait_for_volume_deletion(client, volume_id):"},{"line_number":268,"context_line":"    \"\"\"Waits for volume deletion\"\"\""},{"line_number":269,"context_line":"    start_time \u003d int(time.time())"},{"line_number":270,"context_line":"    while True:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_1029468a","line":267,"range":{"start_line":267,"start_character":4,"end_line":267,"end_character":28},"updated":"2017-03-13 09:36:35.000000000","message":"seems no need to add this, there is ready wait_for_resource_deletion in RestClient.\nSo are other wait_for_xxx_deletions","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1a485fddceaccb1563c966dfe7dfb64654617bb","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        time.sleep(client.build_interval)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def wait_for_volume_deletion(client, volume_id):"},{"line_number":268,"context_line":"    \"\"\"Waits for volume deletion\"\"\""},{"line_number":269,"context_line":"    start_time \u003d int(time.time())"},{"line_number":270,"context_line":"    while True:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_5cf74bd2","line":267,"range":{"start_line":267,"start_character":4,"end_line":267,"end_character":28},"in_reply_to":"9a30ddce_1029468a","updated":"2017-03-13 16:14:01.000000000","message":"Done","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3a79b85e0eafb7682e71f5351d4c9478ea2d371e","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            raise lib_exc.TimeoutException(message)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"def wait_for_volume_group_id(client, volume_id, group_id):"},{"line_number":217,"context_line":"    \"\"\"Waits for a Volume to be added to group or removed from group.\"\"\""},{"line_number":218,"context_line":"    body \u003d client.show_volume(volume_id)[\u0027volume\u0027]"},{"line_number":219,"context_line":"    current_group_id \u003d body[\u0027group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a1ced50_4870a8dc","line":216,"updated":"2017-03-22 09:32:16.000000000","message":"Puting all the waiters function in a waiters.py file was a bad idea. As this is unlikely to be reused, please move that function in the test class.","commit_id":"fdc65d3bac20e2a997a3b177d131d16024f89f8a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"27eaa5233877b897f4d5ca0c72b51f419dc37790","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            raise lib_exc.TimeoutException(message)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"def wait_for_volume_group_id(client, volume_id, group_id):"},{"line_number":217,"context_line":"    \"\"\"Waits for a Volume to be added to group or removed from group.\"\"\""},{"line_number":218,"context_line":"    body \u003d client.show_volume(volume_id)[\u0027volume\u0027]"},{"line_number":219,"context_line":"    current_group_id \u003d body[\u0027group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"ffe62b97_b7b1b046","line":216,"in_reply_to":"1a1ced50_4870a8dc","updated":"2017-03-31 15:59:15.000000000","message":"Done","commit_id":"fdc65d3bac20e2a997a3b177d131d16024f89f8a"}],"tempest/lib/services/volume/v3/__init__.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from tempest.lib.services.volume.v3.volumes_client import VolumesClient"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"__all__ \u003d [\u0027MessagesClient\u0027, \u0027GroupsClient\u0027, \u0027GroupTypesClient\u0027,"},{"line_number":23,"context_line":"           \u0027VolumesClient\u0027, \u0027BaseClient\u0027, \u0027VersionsClient\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_7797a73b","line":23,"range":{"start_line":23,"start_character":29,"end_line":23,"end_character":39},"updated":"2017-05-01 21:34:45.000000000","message":"nit: Could alphabetically order this, too, although it\u0027s not your fault it\u0027s already out of order.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from tempest.lib.services.volume.v3.volumes_client import VolumesClient"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"__all__ \u003d [\u0027MessagesClient\u0027, \u0027GroupsClient\u0027, \u0027GroupTypesClient\u0027,"},{"line_number":23,"context_line":"           \u0027VolumesClient\u0027, \u0027BaseClient\u0027, \u0027VersionsClient\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_a6cd3686","line":23,"range":{"start_line":23,"start_character":29,"end_line":23,"end_character":39},"in_reply_to":"5ff73747_7797a73b","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"}],"tempest/lib/services/volume/v3/group_snapshots_client.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"0e012875714282600639a8876a31b6fcef4d016e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":63,"context_line":"        body \u003d json.loads(body)"},{"line_number":64,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":65,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_d0ac0e8e","line":65,"updated":"2017-03-13 09:36:35.000000000","message":"should implement is_resource_deleted(self, id):","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1a485fddceaccb1563c966dfe7dfb64654617bb","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":63,"context_line":"        body \u003d json.loads(body)"},{"line_number":64,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":65,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_bcbcc7dc","line":65,"in_reply_to":"9a30ddce_d0ac0e8e","updated":"2017-03-13 16:14:01.000000000","message":"Done","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"153df8756bf9b83fc54205c8ac92bcdc30c7d3be","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# \"GroupSnapshotsClient\" so we can use wait_for_volume_resource_status in"},{"line_number":25,"context_line":"# waiters.py which automatically forms the resource name \"group_snapshot\""},{"line_number":26,"context_line":"# and function name \"show_group_snapshot\"."},{"line_number":27,"context_line":"class Group_SnapshotsClient(base_client.BaseClient):"},{"line_number":28,"context_line":"    \"\"\"Client class to send CRUD Volume Group API requests\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def create_group_snapshot(self, group_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ffa3b31_5f5e6112","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":27},"updated":"2017-04-20 00:21:27.000000000","message":"Class names should not be CamelCase, not include _ at all","commit_id":"279082671f3b2e288a5ccd726bd16d29b00b60c1"}],"tempest/lib/services/volume/v3/group_types_client.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class GroupTypesClient(base_client.BaseClient):"},{"line_number":25,"context_line":"    \"\"\"Client class to send CRUD Volume V3 API requests\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def is_resource_deleted(self, id):"},{"line_number":28,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_17a0638f","line":25,"range":{"start_line":25,"start_character":33,"end_line":25,"end_character":39},"updated":"2017-05-01 21:34:45.000000000","message":"Shouldn\u0027t this say something about group types?","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class GroupTypesClient(base_client.BaseClient):"},{"line_number":25,"context_line":"    \"\"\"Client class to send CRUD Volume V3 API requests\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def is_resource_deleted(self, id):"},{"line_number":28,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_869d9267","line":25,"range":{"start_line":25,"start_character":33,"end_line":25,"end_character":39},"in_reply_to":"5ff73747_17a0638f","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def show_group_type_specs(self, group_type_id, group_specs_name):"},{"line_number":104,"context_line":"        \"\"\"Returns the details of a single group_type spec.\"\"\""},{"line_number":105,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"},{"line_number":106,"context_line":"                                                 group_specs_name)"},{"line_number":107,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_97bd93b8","line":104,"range":{"start_line":104,"start_character":43,"end_line":104,"end_character":53},"updated":"2017-05-01 21:34:45.000000000","message":"nit: Elsewhere this is capitalized.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def show_group_type_specs(self, group_type_id, group_specs_name):"},{"line_number":104,"context_line":"        \"\"\"Returns the details of a single group_type spec.\"\"\""},{"line_number":105,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"},{"line_number":106,"context_line":"                                                 group_specs_name)"},{"line_number":107,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_e69a0e60","line":104,"range":{"start_line":104,"start_character":43,"end_line":104,"end_character":53},"in_reply_to":"5ff73747_97bd93b8","updated":"2017-05-24 03:13:45.000000000","message":"Changed all to group_type.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def create_group_type_specs(self, group_type_id, group_specs):"},{"line_number":113,"context_line":"        \"\"\"Creates a new Group_type spec."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        group_type_id: Id of group_type."},{"line_number":116,"context_line":"        group_specs: A dictionary of values to be used as group_specs."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_77e567db","line":115,"updated":"2017-05-01 21:34:45.000000000","message":"Shouldn\u0027t this begin with :param group_type_id: ...?\n\nFor example, see https://github.com/openstack/tempest/blob/master/tempest/api/volume/base.py#L113","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def create_group_type_specs(self, group_type_id, group_specs):"},{"line_number":113,"context_line":"        \"\"\"Creates a new Group_type spec."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        group_type_id: Id of group_type."},{"line_number":116,"context_line":"        group_specs: A dictionary of values to be used as group_specs."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_86f23299","line":115,"in_reply_to":"5ff73747_77e567db","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def update_group_type(self, group_type_id, **kwargs):"},{"line_number":137,"context_line":"        \"\"\"Updates group type name, description, and/or is_public."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":140,"context_line":"        API reference:"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_b7088f91","line":137,"range":{"start_line":137,"start_character":11,"end_line":137,"end_character":66},"updated":"2017-05-01 21:34:45.000000000","message":"nit: This isn\u0027t a future-proof comment. Could be that additional stuff is allowed to be updated in the future.\n\nWhy not keep it simple and just say \"Updates a group type.\"","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def update_group_type(self, group_type_id, **kwargs):"},{"line_number":137,"context_line":"        \"\"\"Updates group type name, description, and/or is_public."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":140,"context_line":"        API reference:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_e60fae85","line":137,"range":{"start_line":137,"start_character":11,"end_line":137,"end_character":66},"in_reply_to":"5ff73747_b7088f91","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                                group_specs):"},{"line_number":151,"context_line":"        \"\"\"Update a group_type spec."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        group_type_id: Id of group_type."},{"line_number":154,"context_line":"        group_spec_name: Name of the group spec to be updated."},{"line_number":155,"context_line":"        group_spec: A dictionary of with key as group_spec_name and the"},{"line_number":156,"context_line":"                    updated value."},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"},{"line_number":159,"context_line":"                                                 group_spec_name)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_77fe876b","line":156,"range":{"start_line":153,"start_character":8,"end_line":156,"end_character":34},"updated":"2017-05-01 21:34:45.000000000","message":"See :param comment above.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                                group_specs):"},{"line_number":151,"context_line":"        \"\"\"Update a group_type spec."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        group_type_id: Id of group_type."},{"line_number":154,"context_line":"        group_spec_name: Name of the group spec to be updated."},{"line_number":155,"context_line":"        group_spec: A dictionary of with key as group_spec_name and the"},{"line_number":156,"context_line":"                    updated value."},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"},{"line_number":159,"context_line":"                                                 group_spec_name)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_a63c162f","line":156,"range":{"start_line":153,"start_character":8,"end_line":156,"end_character":34},"in_reply_to":"5ff73747_77fe876b","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":53,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":56,"context_line":"        \"\"\"Returns the details of a single group_type."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_33a578b6","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":23},"updated":"2017-05-27 04:18:19.000000000","message":"In show_group (in GroupsClient) you include **kwargs even though the kwargs documentation only shows project_id/resource_type_id.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":53,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":56,"context_line":"        \"\"\"Returns the details of a single group_type."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_c609f5dd","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":23},"in_reply_to":"ff0f0b1f_33a578b6","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        :param group_type_id: Id of group_type."},{"line_number":154,"context_line":"        :param group_spec_name: Name of the group spec to be updated."},{"line_number":155,"context_line":"        :param group_spec: A dictionary of with key as group_spec_name and the"},{"line_number":156,"context_line":"                           updated value."},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_53890c24","line":155,"range":{"start_line":155,"start_character":40,"end_line":155,"end_character":47},"updated":"2017-05-27 04:18:19.000000000","message":"with","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        :param group_type_id: Id of group_type."},{"line_number":154,"context_line":"        :param group_spec_name: Name of the group spec to be updated."},{"line_number":155,"context_line":"        :param group_spec: A dictionary of with key as group_spec_name and the"},{"line_number":156,"context_line":"                           updated value."},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_66f8e9c3","line":155,"range":{"start_line":155,"start_character":40,"end_line":155,"end_character":47},"in_reply_to":"ff0f0b1f_53890c24","updated":"2017-05-29 16:13:03.000000000","message":"Done","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":90,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def list_group_types_specs(self, group_type_id, **params):"},{"line_number":93,"context_line":"        \"\"\"List all the group_types specs created.\"\"\""},{"line_number":94,"context_line":"        url \u003d \u0027group_types/%s/group_specs\u0027 % group_type_id"},{"line_number":95,"context_line":"        if params:"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_7c2c154a","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":30},"updated":"2017-06-06 17:24:52.000000000","message":"s/list_group_types_specs/list_group_type_specs/","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":90,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def list_group_types_specs(self, group_type_id, **params):"},{"line_number":93,"context_line":"        \"\"\"List all the group_types specs created.\"\"\""},{"line_number":94,"context_line":"        url \u003d \u0027group_types/%s/group_specs\u0027 % group_type_id"},{"line_number":95,"context_line":"        if params:"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_4e12acb3","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":30},"in_reply_to":"df140735_7c2c154a","updated":"2017-06-08 04:13:32.000000000","message":"Remove this function.","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":101,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def show_group_type_specs(self, group_type_id, group_specs_name):"},{"line_number":104,"context_line":"        \"\"\"Returns the details of a single group_type spec.\"\"\""},{"line_number":105,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"},{"line_number":106,"context_line":"                                                 group_specs_name)"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_5cd6f129","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":29},"updated":"2017-06-06 17:24:52.000000000","message":"s/show_group_type_specs/show_group_type_spec/","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":101,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def show_group_type_specs(self, group_type_id, group_specs_name):"},{"line_number":104,"context_line":"        \"\"\"Returns the details of a single group_type spec.\"\"\""},{"line_number":105,"context_line":"        url \u003d \"group_types/%s/group_specs/%s\" % (group_type_id,"},{"line_number":106,"context_line":"                                                 group_specs_name)"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_2e277815","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":29},"in_reply_to":"df140735_5cd6f129","updated":"2017-06-08 04:13:32.000000000","message":"Remove this function.","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":110,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def create_group_type_specs(self, group_type_id, group_specs):"},{"line_number":113,"context_line":"        \"\"\"Creates a new group_type spec."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param group_type_id: Id of group_type."}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_9ceb69db","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":31},"updated":"2017-06-06 17:24:52.000000000","message":"s/create_group_type_specs/create_group_type_spec/","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":110,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def create_group_type_specs(self, group_type_id, group_specs):"},{"line_number":113,"context_line":"        \"\"\"Creates a new group_type spec."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param group_type_id: Id of group_type."}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_0e24b40c","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":31},"in_reply_to":"df140735_9ceb69db","updated":"2017-06-08 04:13:32.000000000","message":"Remove this function.","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":127,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_group_type_specs(self, group_type_id, group_spec_name):"},{"line_number":130,"context_line":"        \"\"\"Deletes the specified group_type spec.\"\"\""},{"line_number":131,"context_line":"        resp, body \u003d self.delete(\"group_types/%s/group_specs/%s\" % ("},{"line_number":132,"context_line":"            group_type_id, group_spec_name))"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_3cb45df2","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":31},"updated":"2017-06-06 17:24:52.000000000","message":"s/delete_group_type_specs/delete_group_type_spec/","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":127,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_group_type_specs(self, group_type_id, group_spec_name):"},{"line_number":130,"context_line":"        \"\"\"Deletes the specified group_type spec.\"\"\""},{"line_number":131,"context_line":"        resp, body \u003d self.delete(\"group_types/%s/group_specs/%s\" % ("},{"line_number":132,"context_line":"            group_type_id, group_spec_name))"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_8e7d64e9","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":31},"in_reply_to":"df140735_3cb45df2","updated":"2017-06-08 04:13:32.000000000","message":"Remove this function.","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":147,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def update_group_type_specs(self, group_type_id, group_spec_name,"},{"line_number":150,"context_line":"                                group_specs):"},{"line_number":151,"context_line":"        \"\"\"Update a group_type spec."},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_dcca016d","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":31},"updated":"2017-06-06 17:24:52.000000000","message":"s/update_group_type_specs/update_group_type_spec/","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":147,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def update_group_type_specs(self, group_type_id, group_spec_name,"},{"line_number":150,"context_line":"                                group_specs):"},{"line_number":151,"context_line":"        \"\"\"Update a group_type spec."},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_6e8210cb","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":31},"in_reply_to":"df140735_dcca016d","updated":"2017-06-08 04:13:32.000000000","message":"Remove this function.","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4e26cca51824f071d54627a212bcada7cb741585","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":39,"context_line":"        \"\"\"Returns the details of a single group_type."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":42,"context_line":"        API reference:"},{"line_number":43,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#show-group-type-details"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        url \u003d \"group_types/%s\" % group_type_id"},{"line_number":46,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf091321_b6350bfa","line":43,"range":{"start_line":41,"start_character":8,"end_line":43,"end_character":89},"updated":"2017-06-08 14:15:33.000000000","message":"This is really only needed if the function takes additional kwargs.","commit_id":"8fae451e8ef535984061a6e359c5ee1ef5463e7b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d82db57ff3f626630f13d42fbbb45f0e9569cb01","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":39,"context_line":"        \"\"\"Returns the details of a single group_type."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":42,"context_line":"        API reference:"},{"line_number":43,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#show-group-type-details"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        url \u003d \"group_types/%s\" % group_type_id"},{"line_number":46,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf091321_f7513e10","line":43,"range":{"start_line":41,"start_character":8,"end_line":43,"end_character":89},"in_reply_to":"bf091321_b6350bfa","updated":"2017-06-08 14:46:44.000000000","message":"Done","commit_id":"8fae451e8ef535984061a6e359c5ee1ef5463e7b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4e26cca51824f071d54627a212bcada7cb741585","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def delete_group_type(self, group_type_id):"},{"line_number":65,"context_line":"        \"\"\"Deletes the specified group_type."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":68,"context_line":"        API reference:"},{"line_number":69,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#delete-group-type"},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        resp, body \u003d self.delete(\"group_types/%s\" % group_type_id)"},{"line_number":72,"context_line":"        self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf091321_3447b44e","line":69,"range":{"start_line":67,"start_character":7,"end_line":69,"end_character":83},"updated":"2017-06-08 14:15:33.000000000","message":"Ditto.","commit_id":"8fae451e8ef535984061a6e359c5ee1ef5463e7b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d82db57ff3f626630f13d42fbbb45f0e9569cb01","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def delete_group_type(self, group_type_id):"},{"line_number":65,"context_line":"        \"\"\"Deletes the specified group_type."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":68,"context_line":"        API reference:"},{"line_number":69,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#delete-group-type"},{"line_number":70,"context_line":"        \"\"\""},{"line_number":71,"context_line":"        resp, body \u003d self.delete(\"group_types/%s\" % group_type_id)"},{"line_number":72,"context_line":"        self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf091321_d7563a07","line":69,"range":{"start_line":67,"start_character":7,"end_line":69,"end_character":83},"in_reply_to":"bf091321_3447b44e","updated":"2017-06-08 14:46:44.000000000","message":"Done","commit_id":"8fae451e8ef535984061a6e359c5ee1ef5463e7b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"18e0fc1a9b0129cc2b698b216afa847858f02008","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\"Returns the primary type of resource this client works with.\"\"\""},{"line_number":36,"context_line":"        return \u0027group-type\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":39,"context_line":"        \"\"\"Returns the details of a single group_type.\"\"\""},{"line_number":40,"context_line":"        url \u003d \"group_types/%s\" % group_type_id"},{"line_number":41,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f231b9d_8a18bb84","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":23},"updated":"2017-06-19 20:45:46.000000000","message":"This method is not used in the test, because wait_for_resource_deletion() which calls is_resource_deleted() is not used.\n\nIt would be nice to add a call of show_group_type() or remove both the method and the above is_resource_deleted().","commit_id":"5bf298e7b6718a59cf5428db9178883a062c1dd6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6274a587555ef03f0fb5e63f2bfa17c68f1f4fe4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\"Returns the primary type of resource this client works with.\"\"\""},{"line_number":36,"context_line":"        return \u0027group-type\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":39,"context_line":"        \"\"\"Returns the details of a single group_type.\"\"\""},{"line_number":40,"context_line":"        url \u003d \"group_types/%s\" % group_type_id"},{"line_number":41,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f231b9d_8561cc14","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":23},"in_reply_to":"7f231b9d_25ae7898","updated":"2017-06-19 21:14:51.000000000","message":"You are right!  Removed show_group_type and is_resource_deleted from this patch.","commit_id":"5bf298e7b6718a59cf5428db9178883a062c1dd6"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b4aed65d13cc5f1ca3e825a2d3894872f63bd532","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\"Returns the primary type of resource this client works with.\"\"\""},{"line_number":36,"context_line":"        return \u0027group-type\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":39,"context_line":"        \"\"\"Returns the details of a single group_type.\"\"\""},{"line_number":40,"context_line":"        url \u003d \"group_types/%s\" % group_type_id"},{"line_number":41,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f231b9d_25ae7898","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":23},"in_reply_to":"7f231b9d_45a3b401","updated":"2017-06-19 21:00:55.000000000","message":"No, that uses volumes_client\u0027s wait_for_resource_deletion() at line 35, not this group_types_client\u0027s one.","commit_id":"5bf298e7b6718a59cf5428db9178883a062c1dd6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0ac884541e8591a83c0b0ffd812b9e686750d4d0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\"Returns the primary type of resource this client works with.\"\"\""},{"line_number":36,"context_line":"        return \u0027group-type\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def show_group_type(self, group_type_id):"},{"line_number":39,"context_line":"        \"\"\"Returns the details of a single group_type.\"\"\""},{"line_number":40,"context_line":"        url \u003d \"group_types/%s\" % group_type_id"},{"line_number":41,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f231b9d_45a3b401","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":23},"in_reply_to":"7f231b9d_8a18bb84","updated":"2017-06-19 20:50:35.000000000","message":"Isn\u0027t wait_for_resource_deletion() used on line 35 of https://review.openstack.org/#/c/442691/35/tempest/api/volume/admin/test_groups.py?","commit_id":"5bf298e7b6718a59cf5428db9178883a062c1dd6"}],"tempest/lib/services/volume/v3/groups_client.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"0e012875714282600639a8876a31b6fcef4d016e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Client class to send CRUD Volume Group API requests\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def create_group(self, group_type, volume_types, **kwargs):"},{"line_number":26,"context_line":"        \"\"\"Creates a group.\"\"\""},{"line_number":27,"context_line":"        post_body \u003d {\u0027group_type\u0027: group_type,"},{"line_number":28,"context_line":"                     \u0027volume_types\u0027: volume_types}"},{"line_number":29,"context_line":"        if kwargs.get(\u0027availability_zone\u0027):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_5081fef9","line":26,"updated":"2017-03-13 09:36:35.000000000","message":"add api link ref if any","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1a485fddceaccb1563c966dfe7dfb64654617bb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Client class to send CRUD Volume Group API requests\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def create_group(self, group_type, volume_types, **kwargs):"},{"line_number":26,"context_line":"        \"\"\"Creates a group.\"\"\""},{"line_number":27,"context_line":"        post_body \u003d {\u0027group_type\u0027: group_type,"},{"line_number":28,"context_line":"                     \u0027volume_types\u0027: volume_types}"},{"line_number":29,"context_line":"        if kwargs.get(\u0027availability_zone\u0027):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_6c753c30","line":26,"in_reply_to":"9a30ddce_5081fef9","updated":"2017-03-13 16:14:01.000000000","message":"Done","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"0e012875714282600639a8876a31b6fcef4d016e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def create_group_from_src(self, **kwargs):"},{"line_number":42,"context_line":"        \"\"\"Creates a group from source.\"\"\""},{"line_number":43,"context_line":"        post_body \u003d {}"},{"line_number":44,"context_line":"        if kwargs.get(\u0027group_snapshot_id\u0027):"},{"line_number":45,"context_line":"            post_body[\u0027group_snapshot_id\u0027] \u003d kwargs.get(\u0027group_snapshot_id\u0027)"},{"line_number":46,"context_line":"        if kwargs.get(\u0027source_group_id\u0027):"},{"line_number":47,"context_line":"            post_body[\u0027source_group_id\u0027] \u003d kwargs.get(\u0027source_group_id\u0027)"},{"line_number":48,"context_line":"        if kwargs.get(\u0027name\u0027):"},{"line_number":49,"context_line":"            post_body[\u0027name\u0027] \u003d kwargs.get(\u0027name\u0027)"},{"line_number":50,"context_line":"        if kwargs.get(\u0027description\u0027):"},{"line_number":51,"context_line":"            post_body[\u0027description\u0027] \u003d kwargs.get(\u0027description\u0027)"},{"line_number":52,"context_line":"        post_body \u003d json.dumps({\u0027create-from-src\u0027: post_body})"},{"line_number":53,"context_line":"        resp, body \u003d self.post(\u0027groups/action\u0027, post_body)"},{"line_number":54,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_50aade85","line":51,"range":{"start_line":44,"start_character":0,"end_line":51,"end_character":64},"updated":"2017-03-13 09:36:35.000000000","message":"this can be refactoried","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1a485fddceaccb1563c966dfe7dfb64654617bb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def create_group_from_src(self, **kwargs):"},{"line_number":42,"context_line":"        \"\"\"Creates a group from source.\"\"\""},{"line_number":43,"context_line":"        post_body \u003d {}"},{"line_number":44,"context_line":"        if kwargs.get(\u0027group_snapshot_id\u0027):"},{"line_number":45,"context_line":"            post_body[\u0027group_snapshot_id\u0027] \u003d kwargs.get(\u0027group_snapshot_id\u0027)"},{"line_number":46,"context_line":"        if kwargs.get(\u0027source_group_id\u0027):"},{"line_number":47,"context_line":"            post_body[\u0027source_group_id\u0027] \u003d kwargs.get(\u0027source_group_id\u0027)"},{"line_number":48,"context_line":"        if kwargs.get(\u0027name\u0027):"},{"line_number":49,"context_line":"            post_body[\u0027name\u0027] \u003d kwargs.get(\u0027name\u0027)"},{"line_number":50,"context_line":"        if kwargs.get(\u0027description\u0027):"},{"line_number":51,"context_line":"            post_body[\u0027description\u0027] \u003d kwargs.get(\u0027description\u0027)"},{"line_number":52,"context_line":"        post_body \u003d json.dumps({\u0027create-from-src\u0027: post_body})"},{"line_number":53,"context_line":"        resp, body \u003d self.post(\u0027groups/action\u0027, post_body)"},{"line_number":54,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_8c70b041","line":51,"range":{"start_line":44,"start_character":0,"end_line":51,"end_character":64},"in_reply_to":"9a30ddce_50aade85","updated":"2017-03-13 16:14:01.000000000","message":"Done","commit_id":"09368ae2dd83ce4b81f82fb42a89c893883e9adb"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7e4486c509910858fb5e7ae4b413d1879a5a6ea7","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        API reference:"},{"line_number":52,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#create-group-from-source"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        post_body \u003d {}"},{"line_number":55,"context_line":"        if kwargs.get(\u0027group_snapshot_id\u0027):"},{"line_number":56,"context_line":"            post_body[\u0027group_snapshot_id\u0027] \u003d kwargs.get(\u0027group_snapshot_id\u0027)"},{"line_number":57,"context_line":"        if kwargs.get(\u0027source_group_id\u0027):"},{"line_number":58,"context_line":"            post_body[\u0027source_group_id\u0027] \u003d kwargs.get(\u0027source_group_id\u0027)"},{"line_number":59,"context_line":"        if kwargs.get(\u0027name\u0027):"},{"line_number":60,"context_line":"            post_body[\u0027name\u0027] \u003d kwargs.get(\u0027name\u0027)"},{"line_number":61,"context_line":"        if kwargs.get(\u0027description\u0027):"},{"line_number":62,"context_line":"            post_body[\u0027description\u0027] \u003d kwargs.get(\u0027description\u0027)"},{"line_number":63,"context_line":"        post_body \u003d json.dumps({\u0027create-from-src\u0027: post_body})"},{"line_number":64,"context_line":"        resp, body \u003d self.post(\u0027groups/action\u0027, post_body)"},{"line_number":65,"context_line":"        body \u003d json.loads(body)"},{"line_number":66,"context_line":"        self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a22e58a_2848832d","line":63,"range":{"start_line":54,"start_character":0,"end_line":63,"end_character":62},"updated":"2017-03-14 05:37:35.000000000","message":"post_body \u003d json.dumps({\u0027create-from-src\u0027: kwargs})","commit_id":"86c3ab16925a0481b8ec68268632e204ce18add7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \"\"\""},{"line_number":33,"context_line":"        post_body \u003d {\u0027group_type\u0027: group_type,"},{"line_number":34,"context_line":"                     \u0027volume_types\u0027: volume_types}"},{"line_number":35,"context_line":"        if kwargs.get(\u0027availability_zone\u0027):"},{"line_number":36,"context_line":"            post_body[\u0027availability_zone\u0027] \u003d kwargs.get(\u0027availability_zone\u0027)"},{"line_number":37,"context_line":"        if kwargs.get(\u0027name\u0027):"},{"line_number":38,"context_line":"            post_body[\u0027name\u0027] \u003d kwargs.get(\u0027name\u0027)"},{"line_number":39,"context_line":"        if kwargs.get(\u0027description\u0027):"},{"line_number":40,"context_line":"            post_body[\u0027description\u0027] \u003d kwargs.get(\u0027description\u0027)"},{"line_number":41,"context_line":"        post_body \u003d json.dumps({\u0027group\u0027: post_body})"},{"line_number":42,"context_line":"        resp, body \u003d self.post(\u0027groups\u0027, post_body)"},{"line_number":43,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_9730f357","line":40,"range":{"start_line":35,"start_character":8,"end_line":40,"end_character":64},"updated":"2017-05-01 21:34:45.000000000","message":"Why not just do \n\n    if kwargs:\n        post_body.update(kwargs)","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \"\"\""},{"line_number":33,"context_line":"        post_body \u003d {\u0027group_type\u0027: group_type,"},{"line_number":34,"context_line":"                     \u0027volume_types\u0027: volume_types}"},{"line_number":35,"context_line":"        if kwargs.get(\u0027availability_zone\u0027):"},{"line_number":36,"context_line":"            post_body[\u0027availability_zone\u0027] \u003d kwargs.get(\u0027availability_zone\u0027)"},{"line_number":37,"context_line":"        if kwargs.get(\u0027name\u0027):"},{"line_number":38,"context_line":"            post_body[\u0027name\u0027] \u003d kwargs.get(\u0027name\u0027)"},{"line_number":39,"context_line":"        if kwargs.get(\u0027description\u0027):"},{"line_number":40,"context_line":"            post_body[\u0027description\u0027] \u003d kwargs.get(\u0027description\u0027)"},{"line_number":41,"context_line":"        post_body \u003d json.dumps({\u0027group\u0027: post_body})"},{"line_number":42,"context_line":"        resp, body \u003d self.post(\u0027groups\u0027, post_body)"},{"line_number":43,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_66495eb5","line":40,"range":{"start_line":35,"start_character":8,"end_line":40,"end_character":64},"in_reply_to":"5ff73747_9730f357","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":45,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def delete_group(self, grp_id):"},{"line_number":48,"context_line":"        \"\"\"Deletes a group."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_77cfa728","line":47,"updated":"2017-05-01 21:34:45.000000000","message":"This requires **kwargs because it takes optional params project_id and group_id.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":45,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def delete_group(self, grp_id):"},{"line_number":48,"context_line":"        \"\"\"Deletes a group."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_41ec0429","line":47,"in_reply_to":"5ff73747_77cfa728","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        API reference:"},{"line_number":52,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#delete-group"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        post_body \u003d {\u0027delete-volumes\u0027: True}"},{"line_number":55,"context_line":"        post_body \u003d json.dumps({\u0027delete\u0027: post_body})"},{"line_number":56,"context_line":"        resp, body \u003d self.post(\u0027groups/%s/action\u0027 % grp_id,"},{"line_number":57,"context_line":"                               post_body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_17250309","line":54,"range":{"start_line":54,"start_character":39,"end_line":54,"end_character":43},"updated":"2017-05-01 21:34:45.000000000","message":"This should be an optional parameter, according to the API docs linked above.\n\nThe description for \"delete-volumes\" param is: \"If set to true, allows deletion of a group as well as all volumes in the group.\"\n\nWhich to me ought to be controlled by the user/tester/operator/whoever.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        API reference:"},{"line_number":52,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#delete-group"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        post_body \u003d {\u0027delete-volumes\u0027: True}"},{"line_number":55,"context_line":"        post_body \u003d json.dumps({\u0027delete\u0027: post_body})"},{"line_number":56,"context_line":"        resp, body \u003d self.post(\u0027groups/%s/action\u0027 % grp_id,"},{"line_number":57,"context_line":"                               post_body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_01f28c06","line":54,"range":{"start_line":54,"start_character":39,"end_line":54,"end_character":43},"in_reply_to":"5ff73747_17250309","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        post_body \u003d {\u0027delete-volumes\u0027: True}"},{"line_number":55,"context_line":"        post_body \u003d json.dumps({\u0027delete\u0027: post_body})"},{"line_number":56,"context_line":"        resp, body \u003d self.post(\u0027groups/%s/action\u0027 % grp_id,"},{"line_number":57,"context_line":"                               post_body)"},{"line_number":58,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":59,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_97cc7335","line":56,"range":{"start_line":56,"start_character":26,"end_line":56,"end_character":30},"updated":"2017-05-01 21:34:45.000000000","message":"This is really bizarre but that\u0027s what the API docs say. I wonder whether that\u0027s a typo or is this really a POST not a DELETE?","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        post_body \u003d {\u0027delete-volumes\u0027: True}"},{"line_number":55,"context_line":"        post_body \u003d json.dumps({\u0027delete\u0027: post_body})"},{"line_number":56,"context_line":"        resp, body \u003d self.post(\u0027groups/%s/action\u0027 % grp_id,"},{"line_number":57,"context_line":"                               post_body)"},{"line_number":58,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":59,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_77d8c651","line":56,"range":{"start_line":56,"start_character":26,"end_line":56,"end_character":30},"in_reply_to":"5ff73747_97cc7335","updated":"2017-05-24 03:13:45.000000000","message":"It is not a typo.  A DELETE cannot take a body.  This API has a body.  So it has to be a POST.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":59,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def show_group(self, grp_id):"},{"line_number":62,"context_line":"        \"\"\"Returns the details of a single group."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_d76f9b25","line":61,"updated":"2017-05-01 21:34:45.000000000","message":"Takes optional parameters as well like project_id and group_id (so add **params).","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":59,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def show_group(self, grp_id):"},{"line_number":62,"context_line":"        \"\"\"Returns the details of a single group."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_01ff2c67","line":61,"in_reply_to":"5ff73747_d76f9b25","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":72,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def list_groups(self, detail\u003dFalse):"},{"line_number":75,"context_line":"        \"\"\"Information for all the tenant\u0027s groups."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_575dcb76","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":19},"updated":"2017-05-01 21:34:45.000000000","message":"Takes a bunch of optional params like project_id, sort_key, etc., so add **params.","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":72,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def list_groups(self, detail\u003dFalse):"},{"line_number":75,"context_line":"        \"\"\"Information for all the tenant\u0027s groups."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_4109a493","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":19},"in_reply_to":"5ff73747_575dcb76","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"5bf79d546d64eb9510d791e09756720a692b2cb8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def list_groups(self, detail\u003dFalse):"},{"line_number":75,"context_line":"        \"\"\"Information for all the tenant\u0027s groups."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":78,"context_line":"        API reference:"}],"source_content_type":"text/x-python","patch_set":23,"id":"5ff73747_b77beff2","line":75,"range":{"start_line":75,"start_character":11,"end_line":75,"end_character":22},"updated":"2017-05-01 21:34:45.000000000","message":"Lists information","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c46574b26e4bc09a1073904c81f3b0882b3c9656","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def list_groups(self, detail\u003dFalse):"},{"line_number":75,"context_line":"        \"\"\"Information for all the tenant\u0027s groups."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":78,"context_line":"        API reference:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff0f0b1f_616708b9","line":75,"range":{"start_line":75,"start_character":11,"end_line":75,"end_character":22},"in_reply_to":"5ff73747_b77beff2","updated":"2017-05-24 03:13:45.000000000","message":"Done","commit_id":"2c3841dfb3ea3ee93552cf53323a3a71f5e6c529"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class GroupsClient(base_client.BaseClient):"},{"line_number":25,"context_line":"    \"\"\"Client class to send CRUD Volume Group API requests\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def create_group(self, group_type, volume_types, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"Creates a group."}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_f3b940e9","line":25,"range":{"start_line":25,"start_character":30,"end_line":25,"end_character":31},"updated":"2017-05-27 04:18:19.000000000","message":"Update isn\u0027t provided but I guess that can be included in follow-up patch.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class GroupsClient(base_client.BaseClient):"},{"line_number":25,"context_line":"    \"\"\"Client class to send CRUD Volume Group API requests\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def create_group(self, group_type, volume_types, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"Creates a group."}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_666909bd","line":25,"range":{"start_line":25,"start_character":30,"end_line":25,"end_character":31},"in_reply_to":"ff0f0b1f_f3b940e9","updated":"2017-05-29 16:13:03.000000000","message":"Yes","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"07b82d447eb8219f5e1937b7a0425e42182e922a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":58,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def show_group(self, grp_id, **kwargs):"},{"line_number":61,"context_line":"        \"\"\"Returns the details of a single group."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff0f0b1f_b3cbc870","line":60,"range":{"start_line":60,"start_character":33,"end_line":60,"end_character":41},"updated":"2017-05-27 04:18:19.000000000","message":"I don\u0027t see any other kwargs in the documentation -- only group_id and project_id (both already included).","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7cd0d3a8a7e8b4418afb80f8ca9b20e9eddf3767","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":58,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def show_group(self, grp_id, **kwargs):"},{"line_number":61,"context_line":"        \"\"\"Returns the details of a single group."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":27,"id":"df140735_26b8b128","line":60,"range":{"start_line":60,"start_character":33,"end_line":60,"end_character":41},"in_reply_to":"ff0f0b1f_b3cbc870","updated":"2017-05-29 16:13:03.000000000","message":"Removed.  For the same reason, I removed kwargs from delete_group.","commit_id":"9780bf3c2ac99ddd9d39f5358469f355cc930d88"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class GroupsClient(base_client.BaseClient):"},{"line_number":25,"context_line":"    \"\"\"Client class to send CRUD Volume Group API requests\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def create_group(self, group_type, volume_types, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"Creates a group."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_dcd7a14f","line":27,"range":{"start_line":27,"start_character":27,"end_line":27,"end_character":52},"updated":"2017-06-06 17:24:52.000000000","message":"Why don\u0027t we set these parameters(group_type, volume_types) also as kwargs?\nThese parameters are just passed into a request body as the same as the other kwargs.\n\nMaybe these parameters are mandatory and that is reason why, but it would be useful to handle them as kwargs for implementing some negative tests which don\u0027t pass mandatory parameters.","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class GroupsClient(base_client.BaseClient):"},{"line_number":25,"context_line":"    \"\"\"Client class to send CRUD Volume Group API requests\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def create_group(self, group_type, volume_types, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"Creates a group."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_0ecdd45c","line":27,"range":{"start_line":27,"start_character":27,"end_line":27,"end_character":52},"in_reply_to":"df140735_dcd7a14f","updated":"2017-06-08 04:13:32.000000000","message":"Yes, group_type and volume_types are required.  I removed them so they will be in kwargs too.","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":42,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def delete_group(self, grp_id, delete_volumes\u003dTrue):"},{"line_number":45,"context_line":"        \"\"\"Deletes a group."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_1ccf59b1","line":44,"range":{"start_line":44,"start_character":27,"end_line":44,"end_character":33},"updated":"2017-06-06 17:24:52.000000000","message":"s/grp_id/group_id/","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":42,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def delete_group(self, grp_id, delete_volumes\u003dTrue):"},{"line_number":45,"context_line":"        \"\"\"Deletes a group."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_2e3e5829","line":44,"range":{"start_line":44,"start_character":27,"end_line":44,"end_character":33},"in_reply_to":"df140735_1ccf59b1","updated":"2017-06-08 04:13:32.000000000","message":"Done","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9dbf4e41ad10ea793cb55363381d6c3bb40ac09d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":56,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def show_group(self, grp_id):"},{"line_number":59,"context_line":"        \"\"\"Returns the details of a single group."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":31,"id":"df140735_dcc0c17f","line":58,"updated":"2017-06-06 17:24:52.000000000","message":"s/grp_id/group_id/","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ac17b6bfeca9dc57fa71e5426e2b9e3f301f582b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":56,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def show_group(self, grp_id):"},{"line_number":59,"context_line":"        \"\"\"Returns the details of a single group."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf091321_0e3b9438","line":58,"in_reply_to":"df140735_dcc0c17f","updated":"2017-06-08 04:13:32.000000000","message":"Done","commit_id":"09be2aa21e49df438b9823bd5dd5492d5034adf9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4e26cca51824f071d54627a212bcada7cb741585","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":66,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def list_groups(self, detail\u003dFalse, **kwargs):"},{"line_number":69,"context_line":"        \"\"\"Lists information for all the tenant\u0027s groups."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf091321_144dd071","line":68,"range":{"start_line":68,"start_character":42,"end_line":68,"end_character":48},"updated":"2017-06-08 14:15:33.000000000","message":"nit: params in this context is the convention, example: https://github.com/openstack/tempest/blob/a08435523af5c7d7134b861fdd9b542a2be923e5/tempest/lib/services/volume/v2/types_client.py#L39","commit_id":"8fae451e8ef535984061a6e359c5ee1ef5463e7b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d82db57ff3f626630f13d42fbbb45f0e9569cb01","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":66,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def list_groups(self, detail\u003dFalse, **kwargs):"},{"line_number":69,"context_line":"        \"\"\"Lists information for all the tenant\u0027s groups."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":32,"id":"bf091321_176032a5","line":68,"range":{"start_line":68,"start_character":42,"end_line":68,"end_character":48},"in_reply_to":"bf091321_144dd071","updated":"2017-06-08 14:46:44.000000000","message":"Done","commit_id":"8fae451e8ef535984061a6e359c5ee1ef5463e7b"}],"tempest/lib/services/volume/v3/volumes_client.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"72f0c880e88341a70d03922e3248a4591246897c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest.lib.services.volume.v3 import base_client"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class VolumesClient(base_client.BaseClient, volumes_client.VolumesClient):"},{"line_number":21,"context_line":"    \"\"\"Client class to send CRUD Volume V3 API requests\"\"\""},{"line_number":22,"context_line":"    api_version \u003d \"v3\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5ff73747_c30f982c","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":19},"updated":"2017-04-25 03:28:01.000000000","message":"Is this being used anywhere in this current patch?","commit_id":"e688833ec6d1ecae7a15aad98e08ded5e06adf47"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ca905750956c7eb34aceeb0b409eb8dca546aea1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest.lib.services.volume.v3 import base_client"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class VolumesClient(base_client.BaseClient, volumes_client.VolumesClient):"},{"line_number":21,"context_line":"    \"\"\"Client class to send CRUD Volume V3 API requests\"\"\""},{"line_number":22,"context_line":"    api_version \u003d \"v3\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5ff73747_839bd070","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":19},"in_reply_to":"5ff73747_c30f982c","updated":"2017-04-25 03:53:05.000000000","message":"Yes.  See here: https://review.openstack.org/#/c/442691/21/tempest/clients.py\n\nOn line #102 of the following file: https://review.openstack.org/#/c/442691/21/tempest/api/volume/admin/test_groups.py, it uses the V3 VolumesClient to create a volume so that it can be added to the group.  If I use V2 VolumesClient, group_id will be removed so the volume won\u0027t be added to the group.","commit_id":"e688833ec6d1ecae7a15aad98e08ded5e06adf47"}]}
