From 9743939c6cd1ac48efe705388abf30165718f27e Mon Sep 17 00:00:00 2001 From: Lucio Seki Date: Tue, 19 Mar 2019 18:05:35 -0300 Subject: [PATCH] Delete servers before deleting its share network When deleting a share network, the belonging share servers were being deleted automatically. However, any possible errors were being ignored, possibly leaving share servers in the backend. The patch https://review.openstack.org/644560 avoids this by making the Manila API to return an error if the share network about to be deleted still has any share server, which in turn has `is_auto_deletable=True` or contains any share. This patch modifies the base test class tearDown method, to delete the share servers before the share network they belong to. Change-Id: I7d330b8b5fb3f08d3cbdae2c1735e266e75a70d3 Depends-On: I4144a532d5827b929a1dce0d4d642e6d1cee47b1 Related-Bug: #1820118 --- .../tests/api/admin/test_share_manage.py | 8 +++ .../api/admin/test_share_manage_negative.py | 71 +++++++++++++++---- .../test_share_servers_manage_negative.py | 11 +++ 3 files changed, 77 insertions(+), 13 deletions(-) diff --git a/manila_tempest_tests/tests/api/admin/test_share_manage.py b/manila_tempest_tests/tests/api/admin/test_share_manage.py index a7337fe1..f74cd37e 100644 --- a/manila_tempest_tests/tests/api/admin/test_share_manage.py +++ b/manila_tempest_tests/tests/api/admin/test_share_manage.py @@ -131,6 +131,14 @@ class ManageNFSShareTest(base.BaseSharesAdminTest): # Delete share self._delete_share_and_wait(managed_share) + # Delete share server, since it can't be "auto-deleted" + if (CONF.share.multitenancy_enabled and + not CONF.share.share_network_id): + # For a pre-configured share_network_id, we don't + # delete the share server. + self._delete_share_server_and_wait( + managed_share['share_server_id']) + @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND) @base.skip_if_microversion_not_supported("2.5") def test_manage_with_os_share_manage_url(self): diff --git a/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py b/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py index 76e1d5f1..8c9e1467 100644 --- a/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py +++ b/manila_tempest_tests/tests/api/admin/test_share_manage_negative.py @@ -59,14 +59,11 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest): cleanup_in_class=True, extra_specs=cls.extra_specs) - def _manage_share_for_cleanup_and_wait(self, params, - state=constants.STATUS_AVAILABLE): - # Manage the share, schedule its deletion upon tearDown and wait for - # the expected state. + def _manage_share_and_wait(self, params, + state=constants.STATUS_AVAILABLE): + # Manage the share and wait for the expected state. # Return the managed share object. managed_share = self.shares_v2_client.manage_share(**params) - self.addCleanup(self._reset_state_and_delete_share, - managed_share) self.shares_v2_client.wait_for_share_status( managed_share['id'], state) @@ -128,8 +125,17 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest): **invalid_params ) - # manage it properly and schedule cleanup upon tearDown - self._manage_share_for_cleanup_and_wait(valid_params) + # manage it properly and cleanup + managed_share = self._manage_share_and_wait(valid_params) + self._delete_share_and_wait(managed_share) + + # Delete share server, since it can't be "auto-deleted" + if (CONF.share.multitenancy_enabled and + not CONF.share.share_network_id): + # For a pre-configured share_network_id, we don't + # delete the share server. + self._delete_share_server_and_wait( + managed_share['share_server_id']) @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND) def test_manage_invalid_param_manage_error(self): @@ -163,8 +169,17 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest): # cleanup self._unmanage_share_and_wait(invalid_share) - # manage it properly and schedule cleanup upon tearDown - self._manage_share_for_cleanup_and_wait(valid_params) + # manage it properly and cleanup + managed_share = self._manage_share_and_wait(valid_params) + self._delete_share_and_wait(managed_share) + + # Delete share server, since it can't be "auto-deleted" + if (CONF.share.multitenancy_enabled and + not CONF.share.share_network_id): + # For a pre-configured share_network_id, we don't + # delete the share server. + self._delete_share_server_and_wait( + managed_share['share_server_id']) @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND) def test_manage_share_duplicate(self): @@ -174,7 +189,7 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest): self._unmanage_share_and_wait(share) # manage the share for the first time - managed_share = self._manage_share_for_cleanup_and_wait(manage_params) + managed_share = self._manage_share_and_wait(manage_params) # update managed share's reference managed_share = self.shares_v2_client.get_share(managed_share['id']) @@ -187,6 +202,17 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest): **manage_params ) + # cleanup + self._delete_share_and_wait(managed_share) + + # Delete share server, since it can't be "auto-deleted" + if (CONF.share.multitenancy_enabled and + not CONF.share.share_network_id): + # For a pre-configured share_network_id, we don't + # delete the share server. + self._delete_share_server_and_wait( + managed_share['share_server_id']) + @testtools.skipUnless(CONF.share.multitenancy_enabled, 'Multitenancy tests are disabled.') @utils.skip_if_microversion_not_supported("2.49") @@ -203,7 +229,17 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest): **manage_params) manage_params['share_server_id'] = share_server_id - self._manage_share_for_cleanup_and_wait(manage_params) + + managed_share = self._manage_share_and_wait(manage_params) + self._delete_share_and_wait(managed_share) + + # Delete share server, since it can't be "auto-deleted" + if (CONF.share.multitenancy_enabled and + not CONF.share.share_network_id): + # For a pre-configured share_network_id, we don't + # delete the share server. + self._delete_share_server_and_wait( + managed_share['share_server_id']) @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND) def test_delete_share_in_manage_error(self): @@ -230,7 +266,16 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest): # cleanup self.shares_v2_client.unmanage_share(invalid_share['id']) - self._manage_share_for_cleanup_and_wait(valid_params) + managed_share = self._manage_share_and_wait(valid_params) + self._delete_share_and_wait(managed_share) + + # Delete share server, since it can't be "auto-deleted" + if (CONF.share.multitenancy_enabled and + not CONF.share.share_network_id): + # For a pre-configured share_network_id, we don't + # delete the share server. + self._delete_share_server_and_wait( + managed_share['share_server_id']) @testtools.skipUnless(CONF.share.run_snapshot_tests, 'Snapshot tests are disabled.') diff --git a/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py b/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py index 5cd39e7a..62081c5a 100644 --- a/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py +++ b/manila_tempest_tests/tests/api/admin/test_share_servers_manage_negative.py @@ -260,6 +260,11 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest): invalid_params ) + # unmanage the share server in manage_error + search_opts = {'identifier': 'invalid_id'} + invalid_servers = self.shares_v2_client.list_share_servers(search_opts) + self._unmanage_share_server_and_wait(invalid_servers[0]) + # manage in the correct way managed_share_server = self._manage_share_server(share_server) managed_share_server = self.shares_v2_client.show_share_server( @@ -318,3 +323,9 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest): # delete share self._delete_share_and_wait(share) + + # Delete share server, since it can't be "auto-deleted" + if not CONF.share.share_network_id: + # For a pre-configured share_network_id, we don't + # delete the share server. + self._delete_share_server_and_wait(share_server['id'])