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