diff --git a/manila_tempest_tests/tests/api/admin/test_admin_actions.py b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
index adb0160..e0c49e7 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
@@ -21,6 +21,7 @@
 
 from manila_tempest_tests.common import waiters
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -148,7 +149,7 @@
 
     @decorators.idempotent_id('49a576eb-733a-4299-aa6f-918fe7c67a6a')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_reset_share_task_state(self):
         for task_state in self.task_states:
             self.shares_v2_client.reset_task_state(self.sh["id"], task_state)
diff --git a/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py b/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py
index dd64af5..82f59cb 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions_negative.py
@@ -21,6 +21,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -143,7 +144,7 @@
 
     @decorators.idempotent_id('d662457c-2b84-4f13-aee7-5ffafe2552f1')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_reset_task_state_invalid_state(self):
         self.assertRaises(
             lib_exc.BadRequest, self.admin_client.reset_task_state,
@@ -168,7 +169,7 @@
 
     @decorators.idempotent_id('aba8638c-bfed-4c3e-994b-5309fcd912b2')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_reset_task_state_share_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.admin_client.reset_task_state,
diff --git a/manila_tempest_tests/tests/api/admin/test_migration.py b/manila_tempest_tests/tests/api/admin/test_migration.py
index b75bac7..9269c71 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration.py
@@ -366,7 +366,7 @@
 
     @decorators.idempotent_id('d39dfa1b-6e91-4efc-84f1-76f878b51f2a')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @ddt.data(True, False)
     def test_migration_cancel(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
@@ -404,7 +404,7 @@
 
     @decorators.idempotent_id('640dce56-2084-488d-8dea-456840ff397e')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(
         CONF.share.run_snapshot_tests, 'Snapshot tests are disabled.')
     @testtools.skipUnless(
@@ -440,7 +440,7 @@
 
     @decorators.idempotent_id('d8cce50d-e8da-4fbc-8f94-0827bf277b6c')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @ddt.data(True, False)
     def test_migration_opposite_driver_modes(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
@@ -508,7 +508,7 @@
 
     @decorators.idempotent_id('e6cf0e4d-bdf3-49c1-b6ba-56d1ad6c81d2')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @ddt.data(True, False)
     def test_migration_2phase(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
@@ -560,7 +560,7 @@
 
     @decorators.idempotent_id('0e3d75e0-385a-4f7a-889f-2a3db79db8c2')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(
         CONF.share.run_extend_tests, 'Extend share tests are disabled.')
     @ddt.data(True, False)
@@ -574,7 +574,7 @@
 
     @decorators.idempotent_id('58c72e51-d217-48bc-8155-5a010912312e')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(
         CONF.share.run_shrink_tests, 'Shrink share tests are disabled.')
     @ddt.data(True, False)
@@ -588,7 +588,7 @@
 
     @decorators.idempotent_id('a95eb701-626a-4175-967b-4880d3716857')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(
         CONF.share.run_snapshot_tests, 'Snapshot tests are disabled.')
     @testtools.skipUnless(
@@ -630,7 +630,7 @@
 
     @decorators.idempotent_id('a18b3637-2070-4a1b-acd9-c392eb7963b5')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           'Snapshot tests are disabled.')
     @ddt.data(True, False)
@@ -643,7 +643,7 @@
 
     @decorators.idempotent_id('59313673-6576-4163-ab96-41bafcdad63a')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           'Snapshot tests are disabled.')
     @ddt.data(True, False)
diff --git a/manila_tempest_tests/tests/api/admin/test_migration_negative.py b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
index 939806e..cff14f0 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
@@ -83,7 +83,7 @@
 
     @decorators.idempotent_id('8aa1f2a0-bc44-4df5-a556-161590e594a3')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_migration_cancel_invalid(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migration_cancel,
@@ -91,7 +91,7 @@
 
     @decorators.idempotent_id('6d0dfb2e-51a0-4cb7-8c69-6135a49c6057')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_migration_get_progress_None(self):
         self.shares_v2_client.reset_task_state(self.share["id"], None)
         waiters.wait_for_resource_status(
@@ -103,7 +103,7 @@
 
     @decorators.idempotent_id('2ab1fc82-bc13-4c99-8324-c6b23530e8a4')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_migration_complete_invalid(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migration_complete,
@@ -111,7 +111,7 @@
 
     @decorators.idempotent_id('8ef562b4-7704-4a78-973f-9bf8d2b6f6a6')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_migration_cancel_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migration_cancel,
@@ -119,7 +119,7 @@
 
     @decorators.idempotent_id('044c792b-63e0-42c3-9f44-dc2280e2af08')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_migration_get_progress_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migration_get_progress,
@@ -127,7 +127,7 @@
 
     @decorators.idempotent_id('a509871a-3f3a-4618-bb60-9661732dd371')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_lt("2.22")
     def test_migration_complete_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migration_complete,
@@ -135,7 +135,7 @@
 
     @decorators.idempotent_id('6276bea6-6939-4569-930f-218d99c0fa56')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_migrate_share_with_snapshot(self):
@@ -150,7 +150,7 @@
 
     @decorators.idempotent_id('78670c24-c4ee-45b5-b166-2d053c333144')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @ddt.data(True, False)
     def test_migrate_share_same_host(self, specified):
         new_share_type_id = None
@@ -168,7 +168,7 @@
 
     @decorators.idempotent_id('af17204f-ffab-4ba8-8cb6-032e49216f67')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migrate_share_host_invalid(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migrate_share,
@@ -176,7 +176,7 @@
 
     @decorators.idempotent_id('0558e9c4-0416-41d2-b28a-803d4b81521a')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @ddt.data({'writable': False, 'preserve_metadata': False,
                'preserve_snapshots': False, 'nondisruptive': True},
               {'writable': False, 'preserve_metadata': False,
@@ -198,7 +198,7 @@
 
     @decorators.idempotent_id('ee57024c-d00e-4def-8eec-cbc62bae327f')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migrate_share_change_type_no_valid_host(self):
         if not CONF.share.multitenancy_enabled:
             new_share_network_id = self.create_share_network(
@@ -217,7 +217,7 @@
 
     @decorators.idempotent_id('e2bd0cca-c091-4785-a9dc-7f42d2bb95a5')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migrate_share_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migrate_share,
@@ -225,7 +225,7 @@
 
     @decorators.idempotent_id('86b427a7-27c0-4cd5-8f52-9688b339980b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migrate_share_not_available(self):
         self.shares_client.reset_state(self.share['id'],
                                        constants.STATUS_ERROR)
@@ -242,7 +242,7 @@
 
     @decorators.idempotent_id('e8f1e491-697a-4941-bf51-4d37f0a93fa5')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migrate_share_invalid_share_network(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migrate_share,
@@ -251,7 +251,7 @@
 
     @decorators.idempotent_id('be262d44-2ca2-4b9c-be3a-5a6a98ed871b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migrate_share_invalid_share_type(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migrate_share,
@@ -260,7 +260,7 @@
 
     @decorators.idempotent_id('16c72693-6f9e-4cb4-a166-c60accd3479b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migrate_share_opposite_type_share_network_invalid(self):
 
         extra_specs = utils.get_configured_extra_specs(
@@ -286,7 +286,7 @@
 
     @decorators.idempotent_id('1f529b09-e404-4f0e-9423-bb4b117b5522')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.48")
+    @utils.skip_if_microversion_lt("2.48")
     def test_share_type_azs_share_migrate_unsupported_az(self):
         extra_specs = self.add_extra_specs_to_dict({
             'availability_zones': 'non-existent az'})
@@ -302,13 +302,13 @@
     @testtools.skipUnless(CONF.share.run_driver_assisted_migration_tests,
                           "Driver-assisted migration tests are disabled.")
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_create_snapshot_during_share_migration(self):
         self._test_share_actions_during_share_migration('create_snapshot', [])
 
     @decorators.idempotent_id('20121039-bb11-45d8-9972-d2daff7a779c')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @ddt.data(('extend_share', [CONF.share.share_size + 2]),
               ('shrink_share', [CONF.share.share_size]))
     @ddt.unpack
@@ -326,7 +326,7 @@
 
     @decorators.idempotent_id('6e83fc25-4e3e-49a7-93e8-db4e6b355a91')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_add_access_rule_during_migration(self):
         access_type = "ip"
         access_to = "50.50.50.50"
diff --git a/manila_tempest_tests/tests/api/admin/test_multi_backend.py b/manila_tempest_tests/tests/api/admin/test_multi_backend.py
index 808debe..11feb5e 100644
--- a/manila_tempest_tests/tests/api/admin/test_multi_backend.py
+++ b/manila_tempest_tests/tests/api/admin/test_multi_backend.py
@@ -64,10 +64,10 @@
                 cls.__name__ + "-share-type-%s" % backend)
             extra_specs = {
                 "share_backend_name": backend,
+                "driver_handles_share_servers":
+                    CONF.share.multitenancy_enabled,
             }
-            st = cls.create_share_type(
-                name=st_name,
-                extra_specs=cls.add_extra_specs_to_dict(extra_specs))
+            st = cls.create_share_type(name=st_name, extra_specs=extra_specs)
             cls.sts.append(st["share_type"])
             st_id = st["share_type"]["id"]
             share_data_list.append({"kwargs": {
diff --git a/manila_tempest_tests/tests/api/admin/test_quotas.py b/manila_tempest_tests/tests/api/admin/test_quotas.py
index 25f43a4..481f7c4 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas.py
@@ -98,7 +98,7 @@
 
     @decorators.idempotent_id('2e98a13e-b2ed-4977-bafe-47ea48b504f2')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
     def test_show_sg_quotas_using_too_old_microversion(self):
         quotas = self.client.show_quotas(
             self.tenant_id, version=PRE_SHARE_GROUPS_MICROVERSION)
@@ -108,7 +108,7 @@
 
     @decorators.idempotent_id('b8bcbc04-68fb-4c8f-9f4c-a3b6c6b8911c')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
     def test_show_sg_quotas_for_user_using_too_old_microversion(self):
         quotas = self.client.show_quotas(
             self.tenant_id, self.user_id,
@@ -119,7 +119,7 @@
 
     @decorators.idempotent_id('19fe431b-e83e-4c4e-acb8-018d7a470c8b')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported(
+    @utils.skip_if_microversion_not_supported(
         PRE_SHARE_REPLICA_QUOTAS_MICROVERSION)
     def test_show_replica_quotas_for_user_using_too_old_microversion(self):
         quotas = self.client.show_quotas(
@@ -136,7 +136,7 @@
     @ddt.unpack
     @decorators.idempotent_id('836e1725-2853-4d54-b281-8173773d8527')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_show_share_type_quotas(self, share_type_key, is_st_public):
         # Check if the used microversion supports 'share_replica' and
         # 'replica_gigabytes' quotas
@@ -279,7 +279,8 @@
     @ddt.unpack
     @decorators.idempotent_id('af16dc89-c93d-43de-8902-2c88c75f107f')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported(SHARE_REPLICA_QUOTAS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(
+        SHARE_REPLICA_QUOTAS_MICROVERSION)
     def test_update_user_quota_replica_related(self, quota_key, use_user_id):
         kwargs = {}
 
@@ -304,7 +305,7 @@
     @ddt.unpack
     @decorators.idempotent_id('155ea3de-b3b5-4aa0-be8b-eebcc19ce874')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_update_share_type_quota(self, share_type_key, is_st_public):
         # Check if the used microversion supports 'share_replica' and
         # 'replica_gigabytes' quotas
@@ -547,7 +548,7 @@
     @ddt.unpack
     @decorators.idempotent_id('15e57302-5a14-4be4-8720-95b639c2bfad')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_reset_share_type_quotas(self, share_type_key, is_st_public):
         share_type = self._create_share_type(is_public=is_st_public)
         quota_keys = ['shares', 'snapshots', 'gigabytes', 'snapshot_gigabytes']
@@ -766,7 +767,7 @@
     @ddt.data(11, -1)
     @decorators.idempotent_id('315cb76f-920d-4cb9-ac7d-16be8e95e1b2')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_update_share_type_quotas_bigger_than_project_quota(self, st_q):
         share_type = self._create_share_type()
 
@@ -782,7 +783,7 @@
 
     @decorators.idempotent_id('c95be1eb-6331-4c37-9fac-ed6c36270457')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_set_share_type_quota_bigger_than_users_quota(self):
         share_type = self._create_share_type()
 
@@ -804,7 +805,7 @@
 
     @decorators.idempotent_id('4687eb25-17b3-4995-ace2-62f8bda29c57')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_quotas_usages(self):
         # Create share types
         st_1, st_2 = (self._create_share_type()
@@ -899,7 +900,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @testtools.skipUnless(
         CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-    @base.skip_if_microversion_lt(SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_lt(SHARE_GROUPS_MICROVERSION)
     def test_share_group_quotas_usages(self):
         # Set quotas for project (3 SG, 1 SGS) and user (2 SG, 1 SGS)
         self.update_quotas(self.tenant_id,
diff --git a/manila_tempest_tests/tests/api/admin/test_quotas_negative.py b/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
index e1e033f..af5cc9c 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
@@ -262,7 +262,7 @@
     @ddt.unpack
     @decorators.idempotent_id('ed38ab0a-694c-48ea-bce5-5c264f485d5b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported("2.7")
+    @utils.skip_if_microversion_not_supported("2.7")
     def test_show_quotas_with_wrong_versions(self, url, version, method_name):
         self.assertRaises(lib_exc.NotFound,
                           getattr(self.client, method_name),
@@ -285,7 +285,7 @@
     @ddt.data('show', 'reset', 'update')
     @decorators.idempotent_id('cf45eb7d-7330-4b2d-8214-e4149eb4a398')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_share_type_quotas_using_nonexistent_share_type(self, op):
 
         kwargs = {"share_type": "fake_nonexistent_share_type"}
@@ -301,7 +301,7 @@
     @ddt.data('id', 'name')
     @decorators.idempotent_id('2ba641a1-100b-417e-80e2-d3f717fd3c7c')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_try_update_share_type_quota_for_share_networks(self, key):
         share_type = self._create_share_type()
         tenant_quotas = self.client.show_quotas(self.tenant_id)
@@ -316,7 +316,7 @@
     @ddt.data('share_groups', 'share_group_snapshots')
     @decorators.idempotent_id('5eb6ce15-1172-4bcb-9c7b-91543bf714e8')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_lt(SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_lt(SHARE_GROUPS_MICROVERSION)
     def test_try_update_share_type_quota_for_share_groups(self, quota_name):
         share_type = self._create_share_type()
         tenant_quotas = self.client.show_quotas(self.tenant_id)
@@ -330,8 +330,8 @@
     @ddt.data('share_groups', 'share_group_snapshots')
     @decorators.idempotent_id('1b504c74-2ce9-40f6-87fb-9e643b1b5906')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
-    @base.skip_if_microversion_not_supported(SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(SHARE_GROUPS_MICROVERSION)
     def test_share_group_quotas_using_too_old_microversion(self, quota_key):
         tenant_quotas = self.client.show_quotas(
             self.tenant_id, version=SHARE_GROUPS_MICROVERSION)
@@ -348,7 +348,8 @@
     @ddt.data("share_replicas", "replica_gigabytes")
     @decorators.idempotent_id('66f22d42-37bc-4f9b-8e0b-a679341e1e88')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported(SHARE_REPLICA_QUOTAS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(
+        SHARE_REPLICA_QUOTAS_MICROVERSION)
     def test_share_replica_quotas_using_too_old_microversion(self, quota_key):
         tenant_quotas = self.client.show_quotas(
             self.tenant_id, version=SHARE_REPLICA_QUOTAS_MICROVERSION)
@@ -365,7 +366,7 @@
     @ddt.data('show', 'reset', 'update')
     @decorators.idempotent_id('acc609c2-f314-4540-984c-33e93d048f6c')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.38")
+    @utils.skip_if_microversion_lt("2.38")
     def test_share_type_quotas_using_too_old_microversion(self, op):
         share_type = self._create_share_type()
         kwargs = {"version": "2.38", "share_type": share_type["name"]}
@@ -381,7 +382,7 @@
     @ddt.data('show', 'reset', 'update')
     @decorators.idempotent_id('719768d1-d313-40e9-9127-c5777840ecbd')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_quotas_providing_share_type_and_user_id(self, op):
         share_type = self._create_share_type()
         kwargs = {"share_type": share_type["name"], "user_id": self.user_id}
@@ -397,7 +398,7 @@
     @ddt.data(11, -1)
     @decorators.idempotent_id('82256511-aa46-4b99-a6e5-8b400534e96d')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_lt("2.39")
     def test_update_share_type_quotas_bigger_than_project_quota(self, st_q):
         share_type = self._create_share_type()
         self.update_quotas(self.tenant_id, shares=10)
diff --git a/manila_tempest_tests/tests/api/admin/test_replication.py b/manila_tempest_tests/tests/api/admin/test_replication.py
index 6a3359c..6d5b40c 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication.py
@@ -90,7 +90,7 @@
                             LATEST_MICROVERSION]))
     def test_promote_out_of_sync_share_replica(self, version):
         """Test promote 'out_of_sync' share replica to active state."""
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         if (self.replication_type
                 not in constants.REPLICATION_PROMOTION_CHOICES):
             msg = "Option backend_replication_type should be one of (%s)!"
@@ -153,7 +153,7 @@
                             LATEST_MICROVERSION]))
     def test_force_delete_share_replica(self, version):
         """Test force deleting a replica that is in 'error_deleting' status."""
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         replica = self.create_share_replica(self.share['id'],
                                             self.replica_zone,
                                             cleanup_in_class=False,
@@ -176,7 +176,7 @@
                             LATEST_MICROVERSION]))
     def test_reset_share_replica_status(self, version):
         """Test resetting a replica's 'status' attribute."""
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         replica = self.create_share_replica(self.share['id'],
                                             self.replica_zone,
                                             cleanup_in_class=False,
@@ -197,7 +197,7 @@
                             LATEST_MICROVERSION]))
     def test_reset_share_replica_state(self, version):
         """Test resetting a replica's 'replica_state' attribute."""
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         replica = self.create_share_replica(self.share['id'],
                                             self.replica_zone,
                                             cleanup_in_class=False,
@@ -218,7 +218,7 @@
                             LATEST_MICROVERSION]))
     def test_resync_share_replica(self, version):
         """Test resyncing a replica."""
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         replica = self.create_share_replica(self.share['id'],
                                             self.replica_zone,
                                             cleanup_in_class=False,
diff --git a/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py b/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
index 1d0b873..928f193 100644
--- a/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
+++ b/manila_tempest_tests/tests/api/admin/test_scheduler_stats.py
@@ -19,6 +19,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -170,7 +171,7 @@
 
     @decorators.idempotent_id('f027fb62-1ec3-4f52-a782-e9dd9db34fda')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.23")
+    @utils.skip_if_microversion_not_supported("2.23")
     @ddt.data((True, "name"), (True, "id"), (False, "name"), (False, "id"))
     @ddt.unpack
     def test_pool_list_with_share_type_filter_with_detail(
@@ -196,7 +197,7 @@
 
     @decorators.idempotent_id('31cb2c99-3abf-4dce-8e66-7fd30b168300')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.23")
+    @utils.skip_if_microversion_not_supported("2.23")
     @ddt.data((True, "name"), (True, "id"), (False, "name"), (False, "id"))
     @ddt.unpack
     def test_pool_list_with_share_type_filter_with_detail_negative(
diff --git a/manila_tempest_tests/tests/api/admin/test_services_negative.py b/manila_tempest_tests/tests/api/admin/test_services_negative.py
index d74c609..e13618d 100644
--- a/manila_tempest_tests/tests/api/admin/test_services_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_services_negative.py
@@ -19,6 +19,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 
 @ddt.ddt
@@ -100,7 +101,7 @@
         ('services', '2.0'),
     )
     @ddt.unpack
-    @base.skip_if_microversion_not_supported("2.7")
+    @utils.skip_if_microversion_not_supported("2.7")
     def test_list_services_with_wrong_versions(self, url, version):
         self.assertRaises(
             lib_exc.NotFound,
diff --git a/manila_tempest_tests/tests/api/admin/test_share_group_types.py b/manila_tempest_tests/tests/api/admin/test_share_group_types.py
index 89d43fa..56d1881 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_group_types.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_group_types.py
@@ -65,7 +65,7 @@
              constants.SHARE_GROUPS_GRADUATION_VERSION])))
     @ddt.unpack
     def test_create_get_delete_share_group_type(self, st_key, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         name = data_utils.rand_name("tempest-manila")
 
         # Create share group type
@@ -151,7 +151,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_update_single_share_group_type_spec(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         name = data_utils.rand_name("tempest-manila")
         group_specs = {'key1': 'value1', 'key2': 'value2'}
 
@@ -207,7 +207,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_delete_single_share_group_type_spec_min(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         name = data_utils.rand_name("tempest-manila")
         group_specs = {'key1': 'value1', 'key2': 'value2'}
 
@@ -237,7 +237,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_private_share_group_type_access(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         name = data_utils.rand_name("tempest-manila")
         group_specs = {"key1": "value1", "key2": "value2"}
         project_id = self.shares_v2_client.tenant_id
@@ -297,7 +297,7 @@
     @ddt.data(*utils.deduplicate(('2.45', '2.46', LATEST_MICROVERSION)))
     def test_share_group_type_create_show_list_with_is_default_key(self,
                                                                    version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         name = data_utils.rand_name("tempest-manila")
 
         # Create share group type
diff --git a/manila_tempest_tests/tests/api/admin/test_share_groups.py b/manila_tempest_tests/tests/api/admin/test_share_groups.py
index 207db8c..a2724b9 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups.py
@@ -67,7 +67,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_create_share_group_with_single_share_type_min(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         share_group = self.create_share_group(
             share_group_type_id=self.sg_type_id,
             cleanup_in_class=False,
@@ -142,7 +142,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_default_share_group_type_applied(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         try:
             default_type = self.shares_v2_client.get_default_share_group_type(
                 version=version
diff --git a/manila_tempest_tests/tests/api/admin/test_share_instances.py b/manila_tempest_tests/tests/api/admin/test_share_instances.py
index 14cdbab..0833298 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_instances.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_instances.py
@@ -70,7 +70,7 @@
     @ddt.data('2.3', '2.9', '2.10', '2.30', '2.54')
     def test_get_share_instance(self, version):
         """Test that we get the proper keys back for the instance."""
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         share_instances = self.shares_v2_client.get_instances_of_share(
             self.share['id'], version=version,
@@ -105,7 +105,7 @@
     @ddt.data('path', 'id')
     @decorators.idempotent_id('c27b415d-341c-42f0-a269-2c94f69fbee1')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_lt("2.35")
     def test_list_share_instances_with_export_location_path_and_id(
             self, export_location_type):
         share_instances_except = (
diff --git a/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py b/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py
index ebf8364..a01ffb2 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py
@@ -15,6 +15,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 
 @ddt.ddt
@@ -31,7 +32,7 @@
 
     @decorators.idempotent_id('babe885e-a8ab-439d-8b95-e5422983a942')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.34")
+    @utils.skip_if_microversion_not_supported("2.34")
     @ddt.data('path', 'id')
     def test_list_share_instances_with_export_location_and_invalid_version(
             self, export_location_type):
@@ -48,7 +49,7 @@
 
     @decorators.idempotent_id('ce0d045c-e418-42fa-86e4-ead493fc0663')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_lt("2.35")
     @ddt.data('path', 'id')
     def test_list_share_instances_with_export_location_not_exist(
             self, export_location_type):
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 2622683..a8376c9 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_manage.py
@@ -148,19 +148,19 @@
 
     @decorators.idempotent_id('15b654d0-34ed-4154-9f5f-b96d2e4e9d1c')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.5")
+    @utils.skip_if_microversion_not_supported("2.5")
     def test_manage_with_os_share_manage_url(self):
         self._test_manage(version="2.5")
 
     @decorators.idempotent_id('8c0beefb-19da-441e-b73f-d90eb8000ff3')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.8")
+    @utils.skip_if_microversion_not_supported("2.8")
     def test_manage_with_is_public_True(self):
         self._test_manage(is_public=True, version="2.8")
 
     @decorators.idempotent_id('da7b7a4f-6693-4460-bdb7-1f8d42032bc6')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.16")
+    @utils.skip_if_microversion_not_supported("2.16")
     def test_manage_show_user_id(self):
         self._test_manage(version="2.16")
 
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 deb5e05..39b9557 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
@@ -50,7 +50,7 @@
     def resource_setup(cls):
         super(ManageNFSShareNegativeTest, cls).resource_setup()
         # Create share type
-        cls.st_name = data_utils.rand_name("manage-st-name")
+        cls.st_name = data_utils.rand_name(name="manage-st-name")
         cls.extra_specs = {
             'storage_protocol': CONF.share.capability_storage_protocol,
             'driver_handles_share_servers': CONF.share.multitenancy_enabled,
@@ -155,7 +155,8 @@
         self._unmanage_share_and_wait(share)
 
         for invalid_key, invalid_value in (
-            ('export_path', 'invalid_export'),
+            ('export_path',
+             data_utils.rand_name(name='invalid-share-export')),
             ('protocol', 'invalid_protocol'),
         ):
 
@@ -259,7 +260,7 @@
         # forge bad param to have a share in manage_error state
         invalid_params = valid_params.copy()
         invalid_params.update(
-            {'export_path': 'invalid-%s-share' % self.protocol}
+            {'export_path': data_utils.rand_name(name='invalid-share-export')}
         )
         invalid_share = self.shares_v2_client.manage_share(**invalid_params)
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types.py b/manila_tempest_tests/tests/api/admin/test_share_types.py
index 29b9038..560a41e 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types.py
@@ -73,7 +73,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data('2.0', '2.6', '2.7', '2.40', '2.41')
     def test_share_type_create_get(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         name = data_utils.rand_name("tempest-manila")
         description = None
@@ -102,7 +102,7 @@
         # Check that backwards compatibility didn't break
         self.assertDictMatch(get["volume_type"], get["share_type"])
 
-    @base.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_lt("2.50")
     @decorators.idempotent_id('a9af19e1-e789-4c4f-a39b-dd8df6ed00b1')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(
@@ -151,7 +151,7 @@
                 st_is_public,
                 updated_st["share_type"]["share_type_access:is_public"])
 
-    @base.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_lt("2.50")
     @decorators.idempotent_id('9019dc61-b2b1-472d-9b15-a3986439d4c3')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(
@@ -186,7 +186,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data('2.0', '2.6', '2.7', '2.40', '2.41')
     def test_share_type_create_list(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         name = data_utils.rand_name("tempest-manila")
         description = None
@@ -300,7 +300,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(*utils.deduplicate(('2.45', '2.46', LATEST_MICROVERSION)))
     def test_share_type_create_show_list_with_is_default_key(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         name = data_utils.rand_name("tempest-manila")
         extra_specs = self.add_extra_specs_to_dict()
 
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py
index ec65ab9..7d94157 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs.py
@@ -128,7 +128,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(*utils.deduplicate(['2.24', LATEST_MICROVERSION]))
     def test_delete_snapshot_support_extra_spec(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         # Delete one extra spec for share type
         self.shares_v2_client.delete_share_type_extra_spec(
             self.st_id, 'snapshot_support', version=version)
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py
index 8d2893c..9a94edf 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types_extra_specs_negative.py
@@ -336,7 +336,7 @@
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     @ddt.data('2.0', '2.23')
     def test_try_delete_required_spec_snapshot_support_version(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         st = self._create_share_type()
         # Try delete extra spec 'snapshot_support'
         self.assertRaises(
diff --git a/manila_tempest_tests/tests/api/admin/test_shares_actions.py b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
index d6b9d22..e7a5c4d 100644
--- a/manila_tempest_tests/tests/api/admin/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
@@ -21,6 +21,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -242,7 +243,7 @@
         for share in shares:
             self.assertEqual(filters['host'], share['host'])
 
-    @base.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_lt("2.35")
     @ddt.data(('path', True), ('id', True), ('path', False), ('id', False))
     @ddt.unpack
     @decorators.idempotent_id('a27e5e3f-451f-4200-af38-99a562ccbe86')
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py b/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
index 4198af3..15bd0f6 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
@@ -145,7 +145,7 @@
         utils.skip_if_manage_not_supported_for_version(version)
 
         # Skip in case specified version is not supported
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         snap_name = data_utils.rand_name("tempest-snapshot-name")
         snap_desc = data_utils.rand_name("tempest-snapshot-description")
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py b/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py
index a4075e4..9d6c8e5 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_manage_negative.py
@@ -33,7 +33,7 @@
     protocol = 'nfs'
 
     @classmethod
-    @base.skip_if_microversion_lt("2.12")
+    @utils.skip_if_microversion_lt("2.12")
     @testtools.skipUnless(
         CONF.share.run_manage_unmanage_snapshot_tests,
         "Manage/unmanage snapshot tests are disabled.")
diff --git a/manila_tempest_tests/tests/api/admin/test_user_messages.py b/manila_tempest_tests/tests/api/admin/test_user_messages.py
index 80c992c..81ccd8a 100644
--- a/manila_tempest_tests/tests/api/admin/test_user_messages.py
+++ b/manila_tempest_tests/tests/api/admin/test_user_messages.py
@@ -121,7 +121,7 @@
             message_id=self.message['id'])
 
     @decorators.attr(type=[base.TAG_POSITIVE, base.TAG_API])
-    @base.skip_if_microversion_not_supported(QUERY_BY_TIMESTAMP_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(QUERY_BY_TIMESTAMP_MICROVERSION)
     @decorators.idempotent_id('2ed0c40e-cdaa-471b-97d4-5ebe3fb040e9')
     def test_list_messages_with_since_and_before_filters(self):
         new_message = self.create_user_message()
diff --git a/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py b/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py
index d8fcd5d..a1ad386 100644
--- a/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_user_messages_negative.py
@@ -64,7 +64,7 @@
                           six.text_type(uuidutils.generate_uuid()))
 
     @decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
-    @base.skip_if_microversion_not_supported(QUERY_BY_TIMESTAMP_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(QUERY_BY_TIMESTAMP_MICROVERSION)
     @decorators.idempotent_id('03e80563-1a36-408e-baa8-0e3ed46f7a0a')
     def test_list_messages_with_invalid_time_format(self):
         params_key = ['created_since', 'created_before']
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 0a82cf8..dbcb1ff 100755
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -115,18 +115,6 @@
     # a stable class is used, which includes plugin registered services as well
     client_manager = clients.Clients
 
-    def skip_if_microversion_not_supported(self, microversion):
-        if not utils.is_microversion_supported(microversion):
-            raise self.skipException(
-                "Microversion '%s' is not supported." % microversion)
-
-    def skip_if_microversion_lt(self, microversion):
-        if utils.is_microversion_lt(CONF.share.max_api_microversion,
-                                    microversion):
-            raise self.skipException(
-                "Microversion must be greater than or equal to '%s'." %
-                microversion)
-
     @classmethod
     def skip_checks(cls):
         super(BaseSharesTest, cls).skip_checks()
diff --git a/manila_tempest_tests/tests/api/test_availability_zones.py b/manila_tempest_tests/tests/api/test_availability_zones.py
index 842d9e1..e344ab3 100644
--- a/manila_tempest_tests/tests/api/test_availability_zones.py
+++ b/manila_tempest_tests/tests/api/test_availability_zones.py
@@ -17,6 +17,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 
 class AvailabilityZonesTest(base.BaseSharesTest):
@@ -39,7 +40,7 @@
 
     @decorators.idempotent_id('7054f2f4-bc77-4d60-82a6-2f23b93d281e')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported("2.6")
+    @utils.skip_if_microversion_not_supported("2.6")
     def test_list_availability_zones_legacy_url_api_v2(self):
         # NOTE(vponomaryov): remove this test with removal of availability zone
         # extension url support.
@@ -49,7 +50,7 @@
 
     @decorators.idempotent_id('4caadb86-2988-4adb-b705-aece99235c1e')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported("2.7")
+    @utils.skip_if_microversion_not_supported("2.7")
     def test_list_availability_zones(self):
         azs = self.shares_v2_client.list_availability_zones(version='2.7')
         self._list_availability_zones_assertions(azs)
diff --git a/manila_tempest_tests/tests/api/test_quotas.py b/manila_tempest_tests/tests/api/test_quotas.py
index 52d54ea..1052cd5 100644
--- a/manila_tempest_tests/tests/api/test_quotas.py
+++ b/manila_tempest_tests/tests/api/test_quotas.py
@@ -99,7 +99,7 @@
     @decorators.idempotent_id('795614f6-4a18-47d5-b817-0b294e9d4c48')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     def test_show_quotas_detail(self, microversion, with_user):
-        self.skip_if_microversion_not_supported(microversion)
+        utils.skip_if_microversion_not_supported(microversion)
         quota_args = {"tenant_id": self.tenant_id, "version": microversion, }
         keys = ['gigabytes', 'snapshot_gigabytes', 'shares',
                 'snapshots', 'share_networks']
@@ -119,7 +119,7 @@
 
     @decorators.idempotent_id('7bd5ac42-9fcb-477f-a253-02cde2bde661')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_not_supported(PRE_SHARE_REPLICAS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(PRE_SHARE_REPLICAS_MICROVERSION)
     def test_quota_detail_2_52_no_share_replica_quotas(self):
         quota_args = {"tenant_id": self.tenant_id,
                       "version": PRE_SHARE_REPLICAS_MICROVERSION}
diff --git a/manila_tempest_tests/tests/api/test_replication.py b/manila_tempest_tests/tests/api/test_replication.py
index d5aa518..881262f 100644
--- a/manila_tempest_tests/tests/api/test_replication.py
+++ b/manila_tempest_tests/tests/api/test_replication.py
@@ -167,7 +167,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
-    @base.skip_if_microversion_not_supported("2.51")
+    @utils.skip_if_microversion_not_supported("2.51")
     def test_add_delete_share_replica_different_subnet(self):
         # Create new subnet in replica az
         subnet = utils.share_network_get_default_subnet(self.share_network)
@@ -300,7 +300,7 @@
 
     @decorators.idempotent_id('7904e3c7-e6d0-472d-b9c9-c0772b4f9f1b')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.48")
+    @utils.skip_if_microversion_not_supported("2.48")
     def test_share_type_azs_share_replicas(self):
         az_spec = ', '.join(self.zones)
         self.admin_shares_v2_client.update_share_type_extra_spec(
diff --git a/manila_tempest_tests/tests/api/test_replication_export_locations.py b/manila_tempest_tests/tests/api/test_replication_export_locations.py
index 36b6003..1b52a7a 100644
--- a/manila_tempest_tests/tests/api/test_replication_export_locations.py
+++ b/manila_tempest_tests/tests/api/test_replication_export_locations.py
@@ -125,7 +125,7 @@
     @ddt.data(*utils.deduplicate(['2.46', '2.47', LATEST_MICROVERSION]))
     def test_replicated_share_export_locations(self, version):
         """Test behavior changes in the share export locations API at 2.47"""
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         share, replica, primary_replica_exports, replica_exports = (
             self._create_share_and_replica_get_exports()
         )
@@ -146,7 +146,7 @@
         (constants.REPLICATION_STYLE_READABLE, constants.REPLICATION_STYLE_DR),
         'Promotion of secondary not supported in writable replication style.')
     def test_replicated_share_export_locations_with_promotion(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         share, replica, primary_replica_exports, replica_exports = (
             self._create_share_and_replica_get_exports(cleanup_replica=False)
         )
diff --git a/manila_tempest_tests/tests/api/test_replication_negative.py b/manila_tempest_tests/tests/api/test_replication_negative.py
index ef80fec..eac1999 100644
--- a/manila_tempest_tests/tests/api/test_replication_negative.py
+++ b/manila_tempest_tests/tests/api/test_replication_negative.py
@@ -207,7 +207,7 @@
                           CONF.share.run_driver_assisted_migration_tests,
                           "Share migration tests are disabled.")
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     def test_migration_of_replicated_share(self):
         pools = self.admin_client.list_pools(detail=True)['pools']
         hosts = [p['name'] for p in pools]
@@ -226,7 +226,7 @@
 
     @decorators.idempotent_id('bf01bcfc-57cb-4e56-957f-8aa9f1b9be1b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.48")
+    @utils.skip_if_microversion_lt("2.48")
     def test_try_add_replica_share_type_azs_unsupported_az(self):
         self.admin_shares_v2_client.update_share_type_extra_spec(
             self.share_type['id'], 'availability_zones', 'non-existent az')
@@ -242,7 +242,7 @@
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
-    @base.skip_if_microversion_lt("2.51")
+    @utils.skip_if_microversion_lt("2.51")
     def test_try_add_replica_nonexistent_subnet(self):
         # Create a new share network only for a specific az
         data = self.generate_share_network_data()
diff --git a/manila_tempest_tests/tests/api/test_rules.py b/manila_tempest_tests/tests/api/test_rules.py
index 5dd09f3..18e8472 100644
--- a/manila_tempest_tests/tests/api/test_rules.py
+++ b/manila_tempest_tests/tests/api/test_rules.py
@@ -595,7 +595,7 @@
     @ddt.data(*utils.deduplicate(
         ['1.0', '2.9', '2.27', '2.28', '2.45', LATEST_MICROVERSION]))
     def test_list_access_rules(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         if (utils.is_microversion_lt(version, '2.13') and
                 CONF.share.enable_cephx_rules_for_protocols):
             msg = ("API version %s does not support cephx access type, need "
diff --git a/manila_tempest_tests/tests/api/test_rules_negative.py b/manila_tempest_tests/tests/api/test_rules_negative.py
index ac54d1f..fd736a3 100644
--- a/manila_tempest_tests/tests/api/test_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_rules_negative.py
@@ -22,6 +22,7 @@
 
 from manila_tempest_tests.common import constants
 from manila_tempest_tests.common import waiters
+from manila_tempest_tests import share_exceptions
 from manila_tempest_tests.tests.api import base
 from manila_tempest_tests import utils
 
@@ -402,6 +403,17 @@
                           self.shares_v2_client.create_access_rule,
                           self.share["id"], self.access_type, access_to)
 
+    @decorators.idempotent_id('16b7d848-2f7c-4709-85a3-2dfb4576cc59')
+    @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
+    def test_create_access_rule_cephx_admin_user(self):
+        """CVE-2020-27781 - using admin in cephx rule must be disallowed"""
+
+        self.assertRaises(share_exceptions.AccessRuleBuildErrorException,
+                          self.allow_access,
+                          self.share["id"],
+                          access_type=self.access_type,
+                          access_to='admin')
+
     @decorators.idempotent_id('dd8be44c-c7e8-42fe-b81c-095a1c66730c')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_create_access_rule_cephx_with_wrong_level(self):
diff --git a/manila_tempest_tests/tests/api/test_security_services.py b/manila_tempest_tests/tests/api/test_security_services.py
index 3281248..5755473 100644
--- a/manila_tempest_tests/tests/api/test_security_services.py
+++ b/manila_tempest_tests/tests/api/test_security_services.py
@@ -48,7 +48,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(*utils.deduplicate(['1.0', '2.42', '2.44', LATEST_MICROVERSION]))
     def test_list_security_services_with_detail(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         with_ou = True if utils.is_microversion_ge(version, '2.44') else False
         if utils.is_microversion_ge(version, '2.0'):
             listed = self.shares_v2_client.list_security_services(
@@ -171,7 +171,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(*utils.deduplicate(['1.0', '2.43', '2.44', LATEST_MICROVERSION]))
     def test_get_security_service(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         with_ou = True if utils.is_microversion_ge(version, '2.44') else False
         data = self.generate_security_service_data(set_ou=with_ou)
 
diff --git a/manila_tempest_tests/tests/api/test_share_group_actions.py b/manila_tempest_tests/tests/api/test_share_group_actions.py
index b52d7f6..6b5ab8d 100644
--- a/manila_tempest_tests/tests/api/test_share_group_actions.py
+++ b/manila_tempest_tests/tests/api/test_share_group_actions.py
@@ -111,7 +111,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_get_share_group(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         # Get share group
         share_group = self.shares_v2_client.get_share_group(
@@ -166,7 +166,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_list_share_groups(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         # List share groups
         share_groups = self.shares_v2_client.list_share_groups(
@@ -198,7 +198,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_list_share_groups_with_detail_min(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
         params = None
         if utils.is_microversion_ge(version, '2.36'):
             params = {'name~': 'tempest', 'description~': 'tempest'}
@@ -259,7 +259,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_get_share_group_snapshot(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         # Get share group snapshot
         sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
@@ -317,7 +317,7 @@
                             LATEST_MICROVERSION]))
     def test_create_share_group_from_populated_share_group_snapshot(self,
                                                                     version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
             self.sg_snapshot['id'],
@@ -422,7 +422,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_update_share_group(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         # Get share_group
         share_group = self.shares_v2_client.get_share_group(
@@ -463,7 +463,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_create_update_read_share_group_with_unicode(self, version):
-        self.skip_if_microversion_not_supported(version)
+        utils.skip_if_microversion_not_supported(version)
 
         value1 = u'ಠ_ಠ'
         value2 = u'ಠ_ರೃ'
diff --git a/manila_tempest_tests/tests/api/test_share_groups.py b/manila_tempest_tests/tests/api/test_share_groups.py
index 4c655e9..8dc7c06 100644
--- a/manila_tempest_tests/tests/api/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/test_share_groups.py
@@ -196,7 +196,7 @@
             new_share_group['share_network_id'],
             msg)
 
-    @base.skip_if_microversion_lt("2.34")
+    @utils.skip_if_microversion_lt("2.34")
     @decorators.idempotent_id('14fd6d88-87ff-4af2-ad17-f95dbd8dcd61')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @ddt.data(
diff --git a/manila_tempest_tests/tests/api/test_share_groups_negative.py b/manila_tempest_tests/tests/api/test_share_groups_negative.py
index bfe07c6..8f67fbe 100644
--- a/manila_tempest_tests/tests/api/test_share_groups_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_groups_negative.py
@@ -290,7 +290,7 @@
             share_type_ids=[self.share_type_id],
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
-    @base.skip_if_microversion_lt("2.34")
+    @utils.skip_if_microversion_lt("2.34")
     @decorators.idempotent_id('64527564-9cd6-42db-8897-910f4fc1a151')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_create_sg_and_share_with_different_azs(self):
diff --git a/manila_tempest_tests/tests/api/test_share_networks.py b/manila_tempest_tests/tests/api/test_share_networks.py
index d2f8399..fa486b4 100644
--- a/manila_tempest_tests/tests/api/test_share_networks.py
+++ b/manila_tempest_tests/tests/api/test_share_networks.py
@@ -111,7 +111,7 @@
 
     @decorators.idempotent_id('bff1356e-70aa-4bbe-b398-cb4dadd8fcb1')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @base.skip_if_microversion_lt("2.36")
+    @utils.skip_if_microversion_lt("2.36")
     def test_list_share_networks_like_filter(self):
         valid_filter_opts = {
             'name': 'sn_with_ldap_ss',
@@ -300,7 +300,7 @@
     @testtools.skipUnless(CONF.share.multitenancy_enabled,
                           "Only for multitenancy.")
     @testtools.skipUnless(CONF.service_available.neutron, "Only with neutron.")
-    @base.skip_if_microversion_lt("2.18")
+    @utils.skip_if_microversion_lt("2.18")
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_gateway_with_neutron(self):
         subnet_client = self.subnets_client
@@ -324,7 +324,7 @@
     @testtools.skipUnless(CONF.share.multitenancy_enabled,
                           "Only for multitenancy.")
     @testtools.skipUnless(CONF.service_available.neutron, "Only with neutron.")
-    @base.skip_if_microversion_lt("2.20")
+    @utils.skip_if_microversion_lt("2.20")
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_mtu_with_neutron(self):
         network_client = self.networks_client
diff --git a/manila_tempest_tests/tests/api/test_share_networks_negative.py b/manila_tempest_tests/tests/api/test_share_networks_negative.py
index 0d9cbec..b9e57de 100644
--- a/manila_tempest_tests/tests/api/test_share_networks_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_networks_negative.py
@@ -20,6 +20,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -143,7 +144,7 @@
 
     @decorators.idempotent_id('4e71de31-1064-40da-948d-a72063fbd647')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.35")
+    @utils.skip_if_microversion_not_supported("2.35")
     def test_list_shares_with_like_filter_not_exist(self):
         filters = {
             'name~': 'fake_not_exist',
@@ -155,7 +156,7 @@
 
         self.assertEqual(0, len(share_networks))
 
-    @base.skip_if_microversion_lt("2.51")
+    @utils.skip_if_microversion_lt("2.51")
     @decorators.idempotent_id('8a995305-ede9-4002-a9cd-f24ff4d71f63')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_delete_share_network_contains_more_than_one_subnet(self):
@@ -184,7 +185,7 @@
         default_subnet = share_network['share_network_subnets'][0]
         self.assertIsNone(default_subnet['availability_zone'])
 
-    @base.skip_if_microversion_lt("2.51")
+    @utils.skip_if_microversion_lt("2.51")
     @decorators.idempotent_id('d84c3c5c-5913-42d4-9a66-0d5a78295adb')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_create_share_network_inexistent_az(self):
diff --git a/manila_tempest_tests/tests/api/test_share_types_negative.py b/manila_tempest_tests/tests/api/test_share_types_negative.py
index 95cc41f..a7d8826 100644
--- a/manila_tempest_tests/tests/api/test_share_types_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_types_negative.py
@@ -23,6 +23,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 
 CONF = config.CONF
@@ -79,7 +80,7 @@
                           self.st['id'],
                           self.shares_client.tenant_id)
 
-    @base.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_lt("2.50")
     @decorators.idempotent_id('4a22945c-8988-43a1-88c9-eb86e6abcd8e')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     @ddt.data(
@@ -100,7 +101,7 @@
                           st_id, st_name, st_is_public, st_description,
                           version)
 
-    @base.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_lt("2.50")
     @decorators.idempotent_id('7193465a-ed8e-44d5-9ca9-4e8a3c5958e0')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     @ddt.data('2.50', LATEST_MICROVERSION)
diff --git a/manila_tempest_tests/tests/api/test_shares_actions.py b/manila_tempest_tests/tests/api/test_shares_actions.py
index f0792eb..12af9f5 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions.py
@@ -369,7 +369,7 @@
 
     @decorators.idempotent_id('f446e8cb-5bef-45ac-8b87-f4136f44ca69')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.36")
+    @utils.skip_if_microversion_lt("2.36")
     def test_list_shares_with_detail_filter_by_existed_description(self):
         # list shares by description, at least one share is expected
         params = {"description": self.share_desc}
@@ -378,7 +378,7 @@
 
     @decorators.idempotent_id('1276b97b-cf46-4953-973f-f995985a1ce4')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.36")
+    @utils.skip_if_microversion_lt("2.36")
     def test_list_shares_with_detail_filter_by_inexact_name(self):
         # list shares by name, at least one share is expected
         params = {"name~": 'tempest-share'}
@@ -428,7 +428,7 @@
 
     @decorators.idempotent_id('0019afa2-fae2-417f-a7e0-2af665a966b0')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.42")
+    @utils.skip_if_microversion_lt("2.42")
     def test_list_shares_with_detail_with_count(self):
         # list shares by name, at least one share is expected
         params = {"with_count": 'true'}
@@ -446,7 +446,7 @@
         if version is None:
             snapshot = self.shares_client.get_snapshot(self.snap["id"])
         else:
-            self.skip_if_microversion_not_supported(version)
+            utils.skip_if_microversion_not_supported(version)
             snapshot = self.shares_v2_client.get_snapshot(
                 self.snap["id"], version=version)
 
@@ -523,7 +523,7 @@
         if version is None:
             snaps = self.shares_client.list_snapshots_with_detail()
         else:
-            self.skip_if_microversion_not_supported(version)
+            utils.skip_if_microversion_not_supported(version)
             snaps = self.shares_v2_client.list_snapshots_with_detail(
                 version=version, params=params)
 
@@ -590,7 +590,7 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
-    @base.skip_if_microversion_not_supported("2.35")
+    @utils.skip_if_microversion_not_supported("2.35")
     def test_list_snapshots_with_detail_filter_by_description(self):
         filters = {'description': self.snap_desc}
 
diff --git a/manila_tempest_tests/tests/api/test_shares_actions_negative.py b/manila_tempest_tests/tests/api/test_shares_actions_negative.py
index 8152130..f7acfda 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions_negative.py
@@ -22,6 +22,7 @@
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -168,7 +169,7 @@
 
     @decorators.idempotent_id('ff307c91-3bb9-48b5-926c-5a2747320151')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.34")
+    @utils.skip_if_microversion_not_supported("2.34")
     @ddt.data('path', 'id')
     def test_list_shares_with_export_location_and_invalid_version(
             self, export_location_type):
@@ -185,7 +186,7 @@
 
     @decorators.idempotent_id('ffc3dc76-2f92-4308-a125-1d3905ed72ba')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_lt("2.35")
     @ddt.data('path', 'id')
     def test_list_shares_with_export_location_not_exist(
             self, export_location_type):
@@ -199,7 +200,7 @@
 
     @decorators.idempotent_id('3dbcf17b-cc63-43ea-b45f-eae12300729e')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.36")
+    @utils.skip_if_microversion_not_supported("2.36")
     def test_list_shares_with_like_filter_and_invalid_version(self):
         # In API versions < v2.36, querying the share API by inexact
         # filter (name or description) should have no effect. Those
@@ -215,7 +216,7 @@
 
     @decorators.idempotent_id('f41c6cd2-62cf-4bba-a26e-21a6e86eae15')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.36")
+    @utils.skip_if_microversion_not_supported("2.36")
     def test_list_shares_with_like_filter_not_exist(self):
         filters = {
             'name~': 'fake_not_exist',
@@ -237,7 +238,7 @@
 
     @decorators.idempotent_id('5b0ceae1-357f-4b51-81a6-88973ea20c16')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.36")
+    @utils.skip_if_microversion_not_supported("2.36")
     def test_list_shares_with_description_not_exist(self):
         filters = {
             'description': "tempest-share",
@@ -248,7 +249,7 @@
 
     @decorators.idempotent_id('061ee37a-96b2-4b4f-9cfe-2c8c80ed4370')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @base.skip_if_microversion_not_supported("2.36")
+    @utils.skip_if_microversion_not_supported("2.36")
     def test_list_snapshots_with_description_not_exist(self):
         filters = {
             'description': "tempest-snapshot",
diff --git a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
index 70e6a30..b7d894b 100644
--- a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
+++ b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
@@ -133,7 +133,7 @@
 
     @decorators.idempotent_id('15d42949-545e-4ad8-b06e-bb2556c54375')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_lt("2.29")
     @testtools.skipUnless(CONF.share.run_host_assisted_migration_tests or
                           CONF.share.run_driver_assisted_migration_tests,
                           "Share migration tests are disabled.")
@@ -324,7 +324,7 @@
 
     @decorators.idempotent_id('c98e6876-3a4f-40e8-8b4f-023c94c242c3')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @base.skip_if_microversion_lt("2.32")
+    @utils.skip_if_microversion_lt("2.32")
     @testtools.skipUnless(CONF.share.run_mount_snapshot_tests,
                           'Mountable snapshots tests are disabled.')
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
