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
This commit is contained in:
Lucio Seki 2019-03-19 18:05:35 -03:00 committed by Goutham Pacha Ravi
parent 370569423e
commit 9743939c6c
3 changed files with 77 additions and 13 deletions

View File

@ -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):

View File

@ -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.')

View File

@ -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'])