)]}'
{"releasenotes/notes/add-create-group-from-src-tempest-tests-9eb8b0b4b5c52055.yaml":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"33223730d617dd8e87a75ee411df59d7ab68a2ae","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add create_group_from_src to groups_client in the volume service library."},{"line_number":5,"context_line":"    Add tempest tests for create group from src volume API."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"df3967d1_3363391d","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":59},"updated":"2017-08-01 01:54:41.000000000","message":"this maybe unnecessary to be mentioned here?","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a5c6deff4de5a153df9f78295be7fd5b77ad3cca","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add create_group_from_src to groups_client in the volume service library."},{"line_number":5,"context_line":"    Add tempest tests for create group from src volume API."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"df3967d1_d4db8eea","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":59},"in_reply_to":"df3967d1_3363391d","updated":"2017-08-02 04:17:14.000000000","message":"Done","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"}],"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":"b1e8d4364d1863db7bc22812f9a48d52f8e6f8bc","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":206,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # Create volume"},{"line_number":209,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":210,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":211,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":212,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":213,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":214,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":215,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":216,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":217,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        # Create group_snapshot"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_4d1dd60d","line":216,"range":{"start_line":208,"start_character":7,"end_line":216,"end_character":61},"updated":"2017-07-02 07:16:51.000000000","message":"Can you create_volume in base volume class.","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eff98b6a7e41fd3fdfd871d3f903b27104ac48e0","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":206,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # Create volume"},{"line_number":209,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":210,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":211,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":212,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":213,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":214,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":215,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":216,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":217,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        # Create group_snapshot"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_002f7ef6","line":216,"range":{"start_line":208,"start_character":7,"end_line":216,"end_character":61},"in_reply_to":"3f1d235d_4d1dd60d","updated":"2017-07-15 03:57:17.000000000","message":"Done","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b1e8d4364d1863db7bc22812f9a48d52f8e6f8bc","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":215,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":216,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":217,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        # Create group_snapshot"},{"line_number":220,"context_line":"        group_snapshot_name \u003d data_utils.rand_name(\u0027group_snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_ad28ea33","line":217,"updated":"2017-07-02 07:16:51.000000000","message":"Put on L203","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eff98b6a7e41fd3fdfd871d3f903b27104ac48e0","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":215,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":216,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":217,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        # Create group_snapshot"},{"line_number":220,"context_line":"        group_snapshot_name \u003d data_utils.rand_name(\u0027group_snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_e035a247","line":217,"in_reply_to":"3f1d235d_ad28ea33","updated":"2017-07-15 03:57:17.000000000","message":"Done","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b1e8d4364d1863db7bc22812f9a48d52f8e6f8bc","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            self.admin_group_snapshots_client,"},{"line_number":233,"context_line":"            group_snapshot[\u0027id\u0027], \u0027available\u0027)"},{"line_number":234,"context_line":"        self.assertEqual(group_snapshot_name, group_snapshot[\u0027name\u0027])"},{"line_number":235,"context_line":"        self.addCleanup(self._delete_group_snapshot,"},{"line_number":236,"context_line":"                        group_snapshot[\u0027id\u0027], grp[\u0027id\u0027])"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # Create Group from Group snapshot"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_ed2ee241","line":235,"updated":"2017-07-02 07:16:51.000000000","message":"Better to include on L225","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eff98b6a7e41fd3fdfd871d3f903b27104ac48e0","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            self.admin_group_snapshots_client,"},{"line_number":233,"context_line":"            group_snapshot[\u0027id\u0027], \u0027available\u0027)"},{"line_number":234,"context_line":"        self.assertEqual(group_snapshot_name, group_snapshot[\u0027name\u0027])"},{"line_number":235,"context_line":"        self.addCleanup(self._delete_group_snapshot,"},{"line_number":236,"context_line":"                        group_snapshot[\u0027id\u0027], grp[\u0027id\u0027])"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # Create Group from Group snapshot"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_604992ce","line":235,"in_reply_to":"3f1d235d_ed2ee241","updated":"2017-07-15 03:57:17.000000000","message":"Done","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b1e8d4364d1863db7bc22812f9a48d52f8e6f8bc","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":270,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # Create volume"},{"line_number":273,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":274,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":275,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":276,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":277,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":278,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":279,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":280,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":281,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # Create Group from Group"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_8d12ce08","line":280,"range":{"start_line":272,"start_character":8,"end_line":280,"end_character":61},"updated":"2017-07-02 07:16:51.000000000","message":"Same comment as Part 2 commit: why not use the create_volume function in volume base class?","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eff98b6a7e41fd3fdfd871d3f903b27104ac48e0","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":270,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # Create volume"},{"line_number":273,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":274,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":275,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":276,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":277,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":278,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":279,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":280,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":281,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # Create Group from Group"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_e08362cb","line":280,"range":{"start_line":272,"start_character":8,"end_line":280,"end_character":61},"in_reply_to":"3f1d235d_8d12ce08","updated":"2017-07-15 03:57:17.000000000","message":"Done","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b1e8d4364d1863db7bc22812f9a48d52f8e6f8bc","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":279,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":280,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":281,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # Create Group from Group"},{"line_number":284,"context_line":"        grp_name2 \u003d data_utils.rand_name(\u0027Group_from_grp\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_6df9b2c6","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":54},"updated":"2017-07-02 07:16:51.000000000","message":"Should be on 268 before the assertion.","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eff98b6a7e41fd3fdfd871d3f903b27104ac48e0","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":279,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":280,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":281,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # Create Group from Group"},{"line_number":284,"context_line":"        grp_name2 \u003d data_utils.rand_name(\u0027Group_from_grp\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_c08626dc","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":54},"in_reply_to":"3f1d235d_6df9b2c6","updated":"2017-07-15 03:57:17.000000000","message":"Done","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b1e8d4364d1863db7bc22812f9a48d52f8e6f8bc","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":294,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":295,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":296,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_2d03baba","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":55},"updated":"2017-07-02 07:16:51.000000000","message":"Better to include on L287 (before self.assertEqual) so that this is always executed even if the assertion fails.","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eff98b6a7e41fd3fdfd871d3f903b27104ac48e0","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":294,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":295,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":296,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_a06d6a33","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":55},"in_reply_to":"3f1d235d_2d03baba","updated":"2017-07-15 03:57:17.000000000","message":"Done","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6b1edd7f06e5d08414ac5d2a65c7fa50230a9176","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def setup_clients(cls):"},{"line_number":32,"context_line":"        super(GroupsTest, cls).setup_clients()"},{"line_number":33,"context_line":"        cls.volumes_client \u003d cls.admin_volume_client"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _delete_group(self, grp_id, delete_volumes\u003dTrue):"},{"line_number":36,"context_line":"        self.admin_groups_client.delete_group(grp_id, delete_volumes)"}],"source_content_type":"text/x-python","patch_set":10,"id":"df3967d1_eac19d55","line":33,"range":{"start_line":33,"start_character":12,"end_line":33,"end_character":26},"updated":"2017-08-04 20:22:13.000000000","message":"I\u0027m not sure why these tests use the admin volume client at all?","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e3a011d8013c3f9506110fcc977ada54cad4b64","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def setup_clients(cls):"},{"line_number":32,"context_line":"        super(GroupsTest, cls).setup_clients()"},{"line_number":33,"context_line":"        cls.volumes_client \u003d cls.admin_volume_client"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _delete_group(self, grp_id, delete_volumes\u003dTrue):"},{"line_number":36,"context_line":"        self.admin_groups_client.delete_group(grp_id, delete_volumes)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bf3e73b7_36400008","line":33,"range":{"start_line":33,"start_character":12,"end_line":33,"end_character":26},"in_reply_to":"df3967d1_eac19d55","updated":"2017-08-04 22:11:31.000000000","message":"I did this so that I can use create_volume from the base volume client as create_group uses the admin client.\n\nThere\u0027s some misunderstanding here.  I\u0027ll remove this now.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c998f503cd3a70191ffe433a11829bad2733761a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.assertEmpty(group_snapshots)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @decorators.idempotent_id(\u0027eff52c70-efc7-45ed-b47a-4ad675d09b81\u0027)"},{"line_number":191,"context_line":"    def test_create_group_from_group_snapshot(self):"},{"line_number":192,"context_line":"        # Create volume type"},{"line_number":193,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff346bd7_0aad8887","line":191,"range":{"start_line":191,"start_character":0,"end_line":191,"end_character":52},"updated":"2017-07-25 08:30:21.000000000","message":"is this admin only APIs? I think admin_or_owner\n\nif so then we should not have these as admin only tests","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e3a011d8013c3f9506110fcc977ada54cad4b64","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.assertEmpty(group_snapshots)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @decorators.idempotent_id(\u0027eff52c70-efc7-45ed-b47a-4ad675d09b81\u0027)"},{"line_number":191,"context_line":"    def test_create_group_from_group_snapshot(self):"},{"line_number":192,"context_line":"        # Create volume type"},{"line_number":193,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bf3e73b7_165e1ce6","line":191,"range":{"start_line":191,"start_character":0,"end_line":191,"end_character":52},"in_reply_to":"df3967d1_8a76916f","updated":"2017-08-04 22:11:31.000000000","message":"I think I misunderstood this.  I will keep these tests under the admin folder because line 193 and 196 need to use the admin client to create group/volume type.  For create group and volumes, I will use non-admin client.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78feca4c7d78a8d70d52623b8bd0182e249f30ea","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.assertEmpty(group_snapshots)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @decorators.idempotent_id(\u0027eff52c70-efc7-45ed-b47a-4ad675d09b81\u0027)"},{"line_number":191,"context_line":"    def test_create_group_from_group_snapshot(self):"},{"line_number":192,"context_line":"        # Create volume type"},{"line_number":193,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff346bd7_abce49b1","line":191,"range":{"start_line":191,"start_character":0,"end_line":191,"end_character":52},"in_reply_to":"ff346bd7_0aad8887","updated":"2017-07-26 14:39:11.000000000","message":"You are right.  Groups APIs are not admin-only, but GroupTypes and VolumeTypes APIs are admin-only.  In order to create a group, a group_type and volume_types have to be created first using the admin client.  That means the group and volumes will be created using the same admin client as well.  So it doesn\u0027t look like I can move test_groups out of the admin folder.\n\nPlease let me know if there is a way to do this.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6b1edd7f06e5d08414ac5d2a65c7fa50230a9176","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.assertEmpty(group_snapshots)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    @decorators.idempotent_id(\u0027eff52c70-efc7-45ed-b47a-4ad675d09b81\u0027)"},{"line_number":191,"context_line":"    def test_create_group_from_group_snapshot(self):"},{"line_number":192,"context_line":"        # Create volume type"},{"line_number":193,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"df3967d1_8a76916f","line":191,"range":{"start_line":191,"start_character":0,"end_line":191,"end_character":52},"in_reply_to":"ff346bd7_abce49b1","updated":"2017-08-04 20:22:13.000000000","message":"I don\u0027t understand why group and volumes must be created by the same admin client. If I\u0027m not mistaken an admin defines a group_type and a volume_type to be used by non-admin users.\n\nWe never really agreed on the meaning of the admin folder. \nThe admin folder should include tests for admin APIs, however if a test requires admin to be executed we also keep it sometimes under admin because it make it easier for people to filter out admin tests.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6b1edd7f06e5d08414ac5d2a65c7fa50230a9176","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        # Create Group"},{"line_number":199,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":200,"context_line":"        grp \u003d self.admin_groups_client.create_group("},{"line_number":201,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":202,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":203,"context_line":"            name\u003dgrp_name)[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"df3967d1_aadef53a","line":200,"range":{"start_line":200,"start_character":19,"end_line":200,"end_character":38},"updated":"2017-08-04 20:22:13.000000000","message":"Why admin?","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e3a011d8013c3f9506110fcc977ada54cad4b64","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        # Create Group"},{"line_number":199,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":200,"context_line":"        grp \u003d self.admin_groups_client.create_group("},{"line_number":201,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":202,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":203,"context_line":"            name\u003dgrp_name)[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"bf3e73b7_36aa4085","line":200,"range":{"start_line":200,"start_character":19,"end_line":200,"end_character":38},"in_reply_to":"df3967d1_aadef53a","updated":"2017-08-04 22:11:31.000000000","message":"Changed to groups_client.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6b1edd7f06e5d08414ac5d2a65c7fa50230a9176","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Create volume"},{"line_number":210,"context_line":"        vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":211,"context_line":"                                 group_id\u003dgrp[\u0027id\u0027])"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        # Create group_snapshot"}],"source_content_type":"text/x-python","patch_set":10,"id":"df3967d1_cab499f4","line":210,"range":{"start_line":210,"start_character":19,"end_line":210,"end_character":32},"updated":"2017-08-04 20:22:13.000000000","message":"This will use the admin client, but it doesn\u0027t have to.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e3a011d8013c3f9506110fcc977ada54cad4b64","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Create volume"},{"line_number":210,"context_line":"        vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":211,"context_line":"                                 group_id\u003dgrp[\u0027id\u0027])"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        # Create group_snapshot"}],"source_content_type":"text/x-python","patch_set":10,"id":"bf3e73b7_16af3c95","line":210,"range":{"start_line":210,"start_character":19,"end_line":210,"end_character":32},"in_reply_to":"df3967d1_cab499f4","updated":"2017-08-04 22:11:31.000000000","message":"It will use the non-admin client now.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6b1edd7f06e5d08414ac5d2a65c7fa50230a9176","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        # Create Group from Group snapshot"},{"line_number":233,"context_line":"        grp_name2 \u003d data_utils.rand_name(\u0027Group_from_snap\u0027)"},{"line_number":234,"context_line":"        grp2 \u003d self.admin_groups_client.create_group_from_src("},{"line_number":235,"context_line":"            group_snapshot_id\u003dgroup_snapshot[\u0027id\u0027],"},{"line_number":236,"context_line":"            name\u003dgrp_name2)[\u0027group\u0027]"},{"line_number":237,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"df3967d1_8a97b148","line":234,"range":{"start_line":234,"start_character":20,"end_line":234,"end_character":39},"updated":"2017-08-04 20:22:13.000000000","message":"Why admin?","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e3a011d8013c3f9506110fcc977ada54cad4b64","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        # Create Group from Group snapshot"},{"line_number":233,"context_line":"        grp_name2 \u003d data_utils.rand_name(\u0027Group_from_snap\u0027)"},{"line_number":234,"context_line":"        grp2 \u003d self.admin_groups_client.create_group_from_src("},{"line_number":235,"context_line":"            group_snapshot_id\u003dgroup_snapshot[\u0027id\u0027],"},{"line_number":236,"context_line":"            name\u003dgrp_name2)[\u0027group\u0027]"},{"line_number":237,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"bf3e73b7_f693985b","line":234,"range":{"start_line":234,"start_character":20,"end_line":234,"end_character":39},"in_reply_to":"df3967d1_8a97b148","updated":"2017-08-04 22:11:31.000000000","message":"Changed to groups_client.","commit_id":"73e9430ca65242096e60876cef374a4ee8e85702"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"33223730d617dd8e87a75ee411df59d7ab68a2ae","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        group_type \u003d self.create_group_type()"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        # Create Group"},{"line_number":199,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":200,"context_line":"        grp \u003d self.admin_groups_client.create_group("},{"line_number":201,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":202,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":203,"context_line":"            name\u003dgrp_name)[\u0027group\u0027]"},{"line_number":204,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":205,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":206,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":207,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Create volume"},{"line_number":210,"context_line":"        vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_2e762ca6","line":207,"range":{"start_line":199,"start_character":0,"end_line":207,"end_character":47},"updated":"2017-08-01 01:54:41.000000000","message":"maybe you can define an _create_group in this file? it\u0027s used for many times.","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a5c6deff4de5a153df9f78295be7fd5b77ad3cca","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        group_type \u003d self.create_group_type()"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        # Create Group"},{"line_number":199,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":200,"context_line":"        grp \u003d self.admin_groups_client.create_group("},{"line_number":201,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":202,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":203,"context_line":"            name\u003dgrp_name)[\u0027group\u0027]"},{"line_number":204,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"},{"line_number":205,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":206,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":207,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        # Create volume"},{"line_number":210,"context_line":"        vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_1f0fef89","line":207,"range":{"start_line":199,"start_character":0,"end_line":207,"end_character":47},"in_reply_to":"df3967d1_2e762ca6","updated":"2017-08-02 04:17:14.000000000","message":"Done","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"33223730d617dd8e87a75ee411df59d7ab68a2ae","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            group_snapshot_id\u003dgroup_snapshot[\u0027id\u0027],"},{"line_number":236,"context_line":"            name\u003dgrp_name2)[\u0027group\u0027]"},{"line_number":237,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"},{"line_number":238,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":239,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":240,"context_line":"        for vol in vols:"},{"line_number":241,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp2[\u0027id\u0027]:"},{"line_number":242,"context_line":"                waiters.wait_for_volume_resource_status("}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_eecb84a2","line":239,"range":{"start_line":238,"start_character":0,"end_line":239,"end_character":35},"updated":"2017-08-01 01:54:41.000000000","message":"can be put in one line","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a5c6deff4de5a153df9f78295be7fd5b77ad3cca","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            group_snapshot_id\u003dgroup_snapshot[\u0027id\u0027],"},{"line_number":236,"context_line":"            name\u003dgrp_name2)[\u0027group\u0027]"},{"line_number":237,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"},{"line_number":238,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":239,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":240,"context_line":"        for vol in vols:"},{"line_number":241,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp2[\u0027id\u0027]:"},{"line_number":242,"context_line":"                waiters.wait_for_volume_resource_status("}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_b4ffea32","line":239,"range":{"start_line":238,"start_character":0,"end_line":239,"end_character":35},"in_reply_to":"df3967d1_eecb84a2","updated":"2017-08-02 04:17:14.000000000","message":"Done","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"33223730d617dd8e87a75ee411df59d7ab68a2ae","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        grp2 \u003d self.admin_groups_client.create_group_from_src("},{"line_number":274,"context_line":"            source_group_id\u003dgrp[\u0027id\u0027], name\u003dgrp_name2)[\u0027group\u0027]"},{"line_number":275,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"},{"line_number":276,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":277,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":278,"context_line":"        for vol in vols:"},{"line_number":279,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp2[\u0027id\u0027]:"},{"line_number":280,"context_line":"                waiters.wait_for_volume_resource_status("},{"line_number":281,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":282,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":283,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":284,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_8ec2b884","line":281,"range":{"start_line":276,"start_character":0,"end_line":281,"end_character":69},"updated":"2017-08-01 01:54:41.000000000","message":"a silly question: isn\u0027t there only one vol in the group? why we can\u0027t just do:\n    waiters.wait_for_volume_resource_status(\n        self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)\nMaybe we should check whether vol is in grp2?","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a5c6deff4de5a153df9f78295be7fd5b77ad3cca","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        grp2 \u003d self.admin_groups_client.create_group_from_src("},{"line_number":274,"context_line":"            source_group_id\u003dgrp[\u0027id\u0027], name\u003dgrp_name2)[\u0027group\u0027]"},{"line_number":275,"context_line":"        self.addCleanup(self._delete_group, grp2[\u0027id\u0027])"},{"line_number":276,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":277,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":278,"context_line":"        for vol in vols:"},{"line_number":279,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp2[\u0027id\u0027]:"},{"line_number":280,"context_line":"                waiters.wait_for_volume_resource_status("},{"line_number":281,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":282,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":283,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":284,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_3f9f53b5","line":281,"range":{"start_line":276,"start_character":0,"end_line":281,"end_character":69},"in_reply_to":"df3967d1_8ec2b884","updated":"2017-08-02 04:17:14.000000000","message":"There will be two volumes from line 276.  One is the vol created on line 268.  The other one is a new volume created as part of create_group_from_src.  I don\u0027t know the uuid of the new volume so I have to list all the volumes first and then find the volume whose group_id is set to grp2[\u0027id\u0027].","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"d70f51a25ea9099ba07d89ac2826634a8c6b2f4e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.admin_group_snapshots_client.wait_for_resource_deletion("},{"line_number":56,"context_line":"            group_snapshot_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_group(self, group_type, volume_type):"},{"line_number":59,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":60,"context_line":"        grp \u003d self.admin_groups_client.create_group("},{"line_number":61,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":62,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_98198b23","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":48},"updated":"2017-08-03 07:38:25.000000000","message":"if you add a grp_name parameter, then you can use _create_group to replace #L79-LL95 too:)\n    def _create_group(self, group_type, volume_type, grp_name\u003dNone):\n        if not grp_name:\n            grp_name \u003d data_utils.rand_name(\u0027Group\u0027)","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c122009898e1d14a4e70fdef4733bc7c348eb30","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.admin_group_snapshots_client.wait_for_resource_deletion("},{"line_number":56,"context_line":"            group_snapshot_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_group(self, group_type, volume_type):"},{"line_number":59,"context_line":"        grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":60,"context_line":"        grp \u003d self.admin_groups_client.create_group("},{"line_number":61,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":62,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_9d772fa1","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":48},"in_reply_to":"df3967d1_98198b23","updated":"2017-08-03 14:27:06.000000000","message":"Done.  Made the change to call _create_group in test_group_create_show_list_delete, but I have to make addCleanup optional because I was given review comments previously to clearly call out _delete_group in test_group_create_show_list_delete on line 136.","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"d70f51a25ea9099ba07d89ac2826634a8c6b2f4e","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":224,"context_line":"            self.admin_group_snapshots_client,"},{"line_number":225,"context_line":"            group_snapshot[\u0027id\u0027], \u0027available\u0027)"},{"line_number":226,"context_line":"        self.assertEqual(group_snapshot_name, group_snapshot[\u0027name\u0027])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        # Create Group from Group snapshot"},{"line_number":229,"context_line":"        grp_name2 \u003d data_utils.rand_name(\u0027Group_from_snap\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_c34cc443","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":69},"updated":"2017-08-03 07:38:25.000000000","message":"better to move this after #L216?","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c122009898e1d14a4e70fdef4733bc7c348eb30","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":224,"context_line":"            self.admin_group_snapshots_client,"},{"line_number":225,"context_line":"            group_snapshot[\u0027id\u0027], \u0027available\u0027)"},{"line_number":226,"context_line":"        self.assertEqual(group_snapshot_name, group_snapshot[\u0027name\u0027])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        # Create Group from Group snapshot"},{"line_number":229,"context_line":"        grp_name2 \u003d data_utils.rand_name(\u0027Group_from_snap\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_603e208c","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":69},"in_reply_to":"df3967d1_c34cc443","updated":"2017-08-03 14:27:06.000000000","message":"Done","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"d70f51a25ea9099ba07d89ac2826634a8c6b2f4e","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":239,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":240,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":241,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    @decorators.idempotent_id(\u00272424af8c-7851-4888-986a-794b10c3210e\u0027)"},{"line_number":244,"context_line":"    def test_create_group_from_group(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_4339f4a1","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":49},"updated":"2017-08-03 07:38:25.000000000","message":"better to move this after #L233?","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c122009898e1d14a4e70fdef4733bc7c348eb30","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":239,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":240,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":241,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    @decorators.idempotent_id(\u00272424af8c-7851-4888-986a-794b10c3210e\u0027)"},{"line_number":244,"context_line":"    def test_create_group_from_group(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_a061a8ab","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":49},"in_reply_to":"df3967d1_4339f4a1","updated":"2017-08-03 14:27:06.000000000","message":"Done","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"d70f51a25ea9099ba07d89ac2826634a8c6b2f4e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        grp \u003d self._create_group(group_type, volume_type)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Create volume"},{"line_number":255,"context_line":"        vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":256,"context_line":"                                 group_id\u003dgrp[\u0027id\u0027])"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        # Create Group from Group"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_a368a0b8","line":255,"range":{"start_line":255,"start_character":8,"end_line":255,"end_character":14},"updated":"2017-08-03 07:38:25.000000000","message":"vol seems not used","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c122009898e1d14a4e70fdef4733bc7c348eb30","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        grp \u003d self._create_group(group_type, volume_type)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        # Create volume"},{"line_number":255,"context_line":"        vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":256,"context_line":"                                 group_id\u003dgrp[\u0027id\u0027])"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        # Create Group from Group"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_c0670cb7","line":255,"range":{"start_line":255,"start_character":8,"end_line":255,"end_character":14},"in_reply_to":"df3967d1_a368a0b8","updated":"2017-08-03 14:27:06.000000000","message":"Done","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"d70f51a25ea9099ba07d89ac2826634a8c6b2f4e","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":269,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":270,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":271,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_a3db007a","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":49},"updated":"2017-08-03 07:38:25.000000000","message":"better to move this after #L262?","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c122009898e1d14a4e70fdef4733bc7c348eb30","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":269,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":270,"context_line":"            self.admin_groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":271,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_80346494","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":49},"in_reply_to":"df3967d1_a3db007a","updated":"2017-08-03 14:27:06.000000000","message":"Done","commit_id":"3c6bd1e340b9c52eaed0e50b4256906097c53ffe"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"fd49ba0c0a800b61751cded55c3c231ec4448dc6","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            group_snapshot_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_group(self, group_type, volume_type, grp_name\u003dNone,"},{"line_number":59,"context_line":"                      cleanup\u003dTrue):"},{"line_number":60,"context_line":"        if not grp_name:"},{"line_number":61,"context_line":"            grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":62,"context_line":"        grp \u003d self.admin_groups_client.create_group("}],"source_content_type":"text/x-python","patch_set":14,"id":"bf3e73b7_30ffe868","line":59,"range":{"start_line":59,"start_character":21,"end_line":59,"end_character":36},"updated":"2017-08-04 20:50:35.000000000","message":"Do we really need this? Scheduling an extra cleanup if the volume was already deleted during the test won\u0027t harm.","commit_id":"50ef1263fafa0e5a9e28cffa7af747e4421fadec"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fdd9bf1c7f55278ab63b9fbea1741a23b63acd26","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            group_snapshot_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_group(self, group_type, volume_type, grp_name\u003dNone,"},{"line_number":59,"context_line":"                      cleanup\u003dTrue):"},{"line_number":60,"context_line":"        if not grp_name:"},{"line_number":61,"context_line":"            grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":62,"context_line":"        grp \u003d self.admin_groups_client.create_group("}],"source_content_type":"text/x-python","patch_set":14,"id":"bf3e73b7_d38426b4","line":59,"range":{"start_line":59,"start_character":21,"end_line":59,"end_character":36},"in_reply_to":"bf3e73b7_30ffe868","updated":"2017-08-04 22:12:01.000000000","message":"Yes, this is needed.  I tried it.  It throws an exception if I have addCleanup for a group that is already deleted.","commit_id":"50ef1263fafa0e5a9e28cffa7af747e4421fadec"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3bb62aded2f8bae4c216f3b87e4dc3c6a02c3401","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            group_snapshot_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_group(self, group_type, volume_type, grp_name\u003dNone,"},{"line_number":59,"context_line":"                      cleanup\u003dTrue):"},{"line_number":60,"context_line":"        if not grp_name:"},{"line_number":61,"context_line":"            grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":62,"context_line":"        grp \u003d self.admin_groups_client.create_group("}],"source_content_type":"text/x-python","patch_set":14,"id":"bf3e73b7_3f27b367","line":59,"range":{"start_line":59,"start_character":21,"end_line":59,"end_character":36},"in_reply_to":"bf3e73b7_3fcb33a6","updated":"2017-08-05 01:29:19.000000000","message":"You are right!  Done.","commit_id":"50ef1263fafa0e5a9e28cffa7af747e4421fadec"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"faa0822b731e21b309e04a6904683ddd94368876","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            group_snapshot_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_group(self, group_type, volume_type, grp_name\u003dNone,"},{"line_number":59,"context_line":"                      cleanup\u003dTrue):"},{"line_number":60,"context_line":"        if not grp_name:"},{"line_number":61,"context_line":"            grp_name \u003d data_utils.rand_name(\u0027Group\u0027)"},{"line_number":62,"context_line":"        grp \u003d self.admin_groups_client.create_group("}],"source_content_type":"text/x-python","patch_set":14,"id":"bf3e73b7_3fcb33a6","line":59,"range":{"start_line":59,"start_character":21,"end_line":59,"end_character":36},"in_reply_to":"bf3e73b7_d38426b4","updated":"2017-08-05 00:52:52.000000000","message":"Could do: \n\n    self.addCleanup(test_utils.call_and_ignore_notfound_exc, self._delete_group, group[\u0027id\u0027]) to avoid that situation.","commit_id":"50ef1263fafa0e5a9e28cffa7af747e4421fadec"}],"tempest/lib/services/volume/v3/groups_client.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b1e8d4364d1863db7bc22812f9a48d52f8e6f8bc","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#create-group-from-source"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        post_body \u003d {}"},{"line_number":94,"context_line":"        if kwargs.get(\u0027group_snapshot_id\u0027):"},{"line_number":95,"context_line":"            post_body[\u0027group_snapshot_id\u0027] \u003d kwargs.get(\u0027group_snapshot_id\u0027)"},{"line_number":96,"context_line":"        if kwargs.get(\u0027source_group_id\u0027):"},{"line_number":97,"context_line":"            post_body[\u0027source_group_id\u0027] \u003d kwargs.get(\u0027source_group_id\u0027)"},{"line_number":98,"context_line":"        if kwargs.get(\u0027name\u0027):"},{"line_number":99,"context_line":"            post_body[\u0027name\u0027] \u003d kwargs.get(\u0027name\u0027)"},{"line_number":100,"context_line":"        if kwargs.get(\u0027description\u0027):"},{"line_number":101,"context_line":"            post_body[\u0027description\u0027] \u003d kwargs.get(\u0027description\u0027)"},{"line_number":102,"context_line":"        post_body \u003d json.dumps({\u0027create-from-src\u0027: post_body})"},{"line_number":103,"context_line":"        resp, body \u003d self.post(\u0027groups/action\u0027, post_body)"},{"line_number":104,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_cdd68628","line":101,"range":{"start_line":94,"start_character":8,"end_line":101,"end_character":64},"updated":"2017-07-02 07:16:51.000000000","message":"Is there a reason to do this? Why not pass kwargs directly to self.post and allow the server to return a 400 Bad Request if bad kwargs are passed in? Otherwise it is not possible to do that negative test case (in theory).\n\nAlso, it is cleaner to do:\n\nfor attr in [\u0027group_snapshot_id\u0027, \u0027source_group_id\u0027, \u0027name\u0027, \u0027description\u0027]:\n    if kwargs.get(attr):\n        post_body[attr] \u003d kwargs.get(attr)","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eff98b6a7e41fd3fdfd871d3f903b27104ac48e0","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        https://developer.openstack.org/api-ref/block-storage/v3/#create-group-from-source"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        post_body \u003d {}"},{"line_number":94,"context_line":"        if kwargs.get(\u0027group_snapshot_id\u0027):"},{"line_number":95,"context_line":"            post_body[\u0027group_snapshot_id\u0027] \u003d kwargs.get(\u0027group_snapshot_id\u0027)"},{"line_number":96,"context_line":"        if kwargs.get(\u0027source_group_id\u0027):"},{"line_number":97,"context_line":"            post_body[\u0027source_group_id\u0027] \u003d kwargs.get(\u0027source_group_id\u0027)"},{"line_number":98,"context_line":"        if kwargs.get(\u0027name\u0027):"},{"line_number":99,"context_line":"            post_body[\u0027name\u0027] \u003d kwargs.get(\u0027name\u0027)"},{"line_number":100,"context_line":"        if kwargs.get(\u0027description\u0027):"},{"line_number":101,"context_line":"            post_body[\u0027description\u0027] \u003d kwargs.get(\u0027description\u0027)"},{"line_number":102,"context_line":"        post_body \u003d json.dumps({\u0027create-from-src\u0027: post_body})"},{"line_number":103,"context_line":"        resp, body \u003d self.post(\u0027groups/action\u0027, post_body)"},{"line_number":104,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_20c83a20","line":101,"range":{"start_line":94,"start_character":8,"end_line":101,"end_character":64},"in_reply_to":"3f1d235d_cdd68628","updated":"2017-07-15 03:57:17.000000000","message":"Done","commit_id":"75cbf70a16ed1a8948c476f83885b3ff9163020b"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"33223730d617dd8e87a75ee411df59d7ab68a2ae","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":85,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def create_group_from_src(self, **kwargs):"},{"line_number":88,"context_line":"        \"\"\"Creates a group from source."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_538fddcb","line":87,"range":{"start_line":87,"start_character":26,"end_line":87,"end_character":29},"updated":"2017-08-01 01:54:41.000000000","message":"I\u0027d prefer \u0027source\u0027","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a5c6deff4de5a153df9f78295be7fd5b77ad3cca","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":85,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def create_group_from_src(self, **kwargs):"},{"line_number":88,"context_line":"        \"\"\"Creates a group from source."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        For a full list of available parameters, please refer to the official"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_34f41a5b","line":87,"range":{"start_line":87,"start_character":26,"end_line":87,"end_character":29},"in_reply_to":"df3967d1_538fddcb","updated":"2017-08-02 04:17:14.000000000","message":"Done","commit_id":"ac6d4067d2ce7e98cfae9e222363c46f9cf9ce02"}]}
