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
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 a7337fe..f74cd37 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 @@
# 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 76e1d5f..8c9e146 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 @@
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 @@
**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 @@
# 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 @@
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 @@
**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 @@
**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 @@
# 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 5cd39e7..62081c5 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 @@
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 @@
# 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'])