Merge "Add stable branch jobs on the plugins master gate"
diff --git a/manila_tempest_tests/config.py b/manila_tempest_tests/config.py
index 7aaf5c9..5a9087c 100644
--- a/manila_tempest_tests/config.py
+++ b/manila_tempest_tests/config.py
@@ -27,7 +27,9 @@
     cfg.StrOpt("min_api_microversion",
                default="2.0",
                help="The minimum api microversion is configured to be the "
-                    "value of the minimum microversion supported by Manila."),
+                    "value of the minimum microversion supported by Manila. "
+                    "This value is only used to validate the versions "
+                    "response from Manila."),
     cfg.StrOpt("max_api_microversion",
                default="2.61",
                help="The maximum api microversion is configured to be the "
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 e0c49e7..05848de 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
@@ -16,6 +16,7 @@
 import ddt
 from tempest import config
 from tempest.lib import decorators
+from tempest.lib import exceptions as lib_exc
 import testtools
 from testtools import testcase as tc
 
@@ -36,10 +37,13 @@
                            "migration_success", None]
         cls.bad_status = "error_deleting"
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
-        cls.sh = cls.create_share(share_type_id=cls.share_type_id)
+        cls.share = cls.create_share(share_type_id=cls.share_type_id)
 
     def _reset_resource_available(self, resource_id, resource_type="shares"):
         self.shares_v2_client.reset_state(
@@ -52,17 +56,17 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @ddt.data("error", "available", "error_deleting", "deleting", "creating")
     def test_reset_share_state(self, status):
-        self.shares_v2_client.reset_state(self.sh["id"], status=status)
+        self.shares_v2_client.reset_state(self.share["id"], status=status)
         waiters.wait_for_resource_status(self.shares_v2_client,
-                                         self.sh["id"], status)
-        self.addCleanup(self._reset_resource_available, self.sh["id"])
+                                         self.share["id"], status)
+        self.addCleanup(self._reset_resource_available, self.share["id"])
 
     @decorators.idempotent_id('13075b2d-fe83-41bf-b6ef-99cfcc00257d')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @ddt.data("error", "available", "error_deleting", "deleting", "creating")
     def test_reset_share_instance_state(self, status):
         sh_instance = self.shares_v2_client.get_instances_of_share(
-            self.sh["id"])[0]
+            self.share["id"])[0]
         share_instance_id = sh_instance["id"]
         self.shares_v2_client.reset_state(
             share_instance_id, s_type="share_instances", status=status)
@@ -78,7 +82,7 @@
                           "Snapshot tests are disabled.")
     @ddt.data("error", "available", "error_deleting", "deleting", "creating")
     def test_reset_snapshot_state(self, status):
-        snapshot = self.create_snapshot_wait_for_active(self.sh["id"])
+        snapshot = self.create_snapshot_wait_for_active(self.share["id"])
         self.shares_v2_client.reset_state(
             snapshot["id"], s_type="snapshots", status=status)
         waiters.wait_for_resource_status(
@@ -127,13 +131,17 @@
             instance["id"], s_type="share_instances")
         self.shares_v2_client.wait_for_resource_deletion(
             share_instance_id=instance["id"])
+        # Verify that the share has been deleted.
+        self.assertRaises(lib_exc.NotFound,
+                          self.shares_v2_client.get_share,
+                          share['id'])
 
     @decorators.idempotent_id('d5a48182-ecd7-463e-a31a-148c81d3c5ed')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_force_delete_snapshot(self):
-        sn = self.create_snapshot_wait_for_active(self.sh["id"])
+        sn = self.create_snapshot_wait_for_active(self.share["id"])
 
         # Change status from 'available' to 'error_deleting'
         self.shares_v2_client.reset_state(
@@ -149,12 +157,13 @@
 
     @decorators.idempotent_id('49a576eb-733a-4299-aa6f-918fe7c67a6a')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("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)
+            self.shares_v2_client.reset_task_state(self.share["id"],
+                                                   task_state)
             waiters.wait_for_resource_status(
-                self.shares_v2_client, self.sh["id"], task_state,
+                self.shares_v2_client, self.share["id"], task_state,
                 status_attr='task_state')
 
     @decorators.idempotent_id('4233b941-a909-4f35-9ec9-753736949dd2')
@@ -163,7 +172,7 @@
         # This check will ensure that when a share creation request is handled,
         # if the driver has the "driver handles share servers" option enabled,
         # that a share server will be created, otherwise, not.
-        share_get = self.admin_shares_v2_client.get_share(self.sh['id'])
+        share_get = self.admin_shares_v2_client.get_share(self.share['id'])
         share_server = share_get['share_server_id']
         if CONF.share.multitenancy_enabled:
             self.assertNotEmpty(share_server)
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 82f59cb..d6eb449 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
@@ -34,24 +34,27 @@
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
-        cls.sh = cls.create_share(share_type_id=cls.share_type_id,
-                                  client=cls.admin_client)
+        cls.share = cls.create_share(share_type_id=cls.share_type_id,
+                                     client=cls.admin_client)
         cls.sh_instance = (
-            cls.admin_client.get_instances_of_share(cls.sh["id"])[0]
+            cls.admin_client.get_instances_of_share(cls.share["id"])[0]
         )
         if CONF.share.run_snapshot_tests:
-            cls.sn = cls.create_snapshot_wait_for_active(
-                cls.sh["id"], client=cls.admin_client)
+            cls.snapshot = cls.create_snapshot_wait_for_active(
+                cls.share["id"], client=cls.admin_client)
 
     @decorators.idempotent_id('f730c395-a501-44cf-90d9-a3273771b895')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_reset_share_state_to_unacceptable_state(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.admin_client.reset_state,
-                          self.sh["id"], status="fake")
+                          self.share["id"], status="fake")
 
     @decorators.idempotent_id('3bfa9555-9c7e-45a2-b5bd-384329cb6fda')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -71,7 +74,9 @@
     def test_reset_snapshot_state_to_unacceptable_state(self):
         self.assertRaises(lib_exc.BadRequest,
                           self.admin_client.reset_state,
-                          self.sn["id"], s_type="snapshots", status="fake")
+                          self.snapshot["id"],
+                          s_type="snapshots",
+                          status="fake")
 
     @decorators.idempotent_id('3b525c29-b657-493f-aa41-b17676a95fd2')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -79,7 +84,7 @@
         # Even if member from another tenant, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_client.reset_state,
-                          self.sh["id"])
+                          self.share["id"])
 
     @decorators.idempotent_id('d4abddba-1c20-49e1-85b1-5452f0faceb0')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -97,7 +102,7 @@
         # Even if member from another tenant, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_client.reset_state,
-                          self.sn["id"], s_type="snapshots")
+                          self.snapshot["id"], s_type="snapshots")
 
     @decorators.idempotent_id('7cd0b48e-2815-4f8c-8718-3c071ff9701f')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -105,7 +110,7 @@
         # If a non-admin tries to do force_delete, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_client.force_delete,
-                          self.sh["id"])
+                          self.share["id"])
 
     @decorators.idempotent_id('257da3e0-9460-4d97-8a56-c86c0427cc64')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -123,7 +128,7 @@
         # If a non-admin tries to do force_delete, it should be unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_client.force_delete,
-                          self.sn["id"], s_type="snapshots")
+                          self.snapshot["id"], s_type="snapshots")
 
     @decorators.idempotent_id('821da7c8-3501-44ba-9ffe-45f485a6e573')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -140,15 +145,15 @@
         # unauthorized
         self.assertRaises(lib_exc.Forbidden,
                           self.member_client.get_instances_of_share,
-                          self.sh['id'])
+                          self.share['id'])
 
     @decorators.idempotent_id('d662457c-2b84-4f13-aee7-5ffafe2552f1')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("2.22")
     def test_reset_task_state_invalid_state(self):
         self.assertRaises(
             lib_exc.BadRequest, self.admin_client.reset_task_state,
-            self.sh['id'], 'fake_state')
+            self.share['id'], 'fake_state')
 
 
 @ddt.ddt
@@ -169,7 +174,7 @@
 
     @decorators.idempotent_id('aba8638c-bfed-4c3e-994b-5309fcd912b2')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("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_export_locations_negative.py b/manila_tempest_tests/tests/api/admin/test_export_locations_negative.py
index 065013d..f7f4670 100644
--- a/manila_tempest_tests/tests/api/admin/test_export_locations_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_export_locations_negative.py
@@ -29,7 +29,7 @@
     @classmethod
     def skip_checks(cls):
         super(ExportLocationsNegativeTest, cls).skip_checks()
-        utils.check_skip_if_microversion_lt("2.9")
+        utils.check_skip_if_microversion_not_supported("2.9")
 
     @classmethod
     def resource_setup(cls):
@@ -120,7 +120,7 @@
     @classmethod
     def skip_checks(cls):
         super(ExportLocationsAPIOnlyNegativeTest, cls).skip_checks()
-        utils.check_skip_if_microversion_lt("2.9")
+        utils.check_skip_if_microversion_not_supported("2.9")
 
     @decorators.idempotent_id('4b5b4e89-0c80-4383-b272-62d5e0419d9a')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
diff --git a/manila_tempest_tests/tests/api/admin/test_migration.py b/manila_tempest_tests/tests/api/admin/test_migration.py
index 9269c71..e93c603 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration.py
@@ -72,8 +72,11 @@
                                     "needed to run share migration tests.")
 
         # create share type (generic)
-        cls.share_type = cls._create_share_type()
-        cls.share_type_id = cls.share_type['id']
+        cls.share_type = cls.create_share_type(
+            name=data_utils.rand_name('original_share_type_for_migration'),
+            cleanup_in_class=True,
+            extra_specs=utils.get_configured_extra_specs())
+        cls.share_type_id = cls.share_type['share_type']['id']
 
         cls.new_type = cls.create_share_type(
             name=data_utils.rand_name('new_share_type_for_migration'),
@@ -338,7 +341,10 @@
         # Share type with snapshot support
         st_name = data_utils.rand_name(
             'snapshot_capable_share_type_for_migration')
-        extra_specs = self.add_extra_specs_to_dict({"snapshot_support": True})
+        extra_specs = self.add_extra_specs_to_dict({
+            "snapshot_support": True,
+            "create_share_from_snapshot_support": True,
+        })
         ss_type = self.create_share_type(st_name, extra_specs=extra_specs)
 
         # New share type with no snapshot support capability
@@ -366,7 +372,7 @@
 
     @decorators.idempotent_id('d39dfa1b-6e91-4efc-84f1-76f878b51f2a')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @ddt.data(True, False)
     def test_migration_cancel(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
@@ -404,7 +410,7 @@
 
     @decorators.idempotent_id('640dce56-2084-488d-8dea-456840ff397e')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @testtools.skipUnless(
         CONF.share.run_snapshot_tests, 'Snapshot tests are disabled.')
     @testtools.skipUnless(
@@ -440,7 +446,7 @@
 
     @decorators.idempotent_id('d8cce50d-e8da-4fbc-8f94-0827bf277b6c')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("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 +514,7 @@
 
     @decorators.idempotent_id('e6cf0e4d-bdf3-49c1-b6ba-56d1ad6c81d2')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @ddt.data(True, False)
     def test_migration_2phase(self, force_host_assisted):
         self._check_migration_enabled(force_host_assisted)
@@ -560,7 +566,7 @@
 
     @decorators.idempotent_id('0e3d75e0-385a-4f7a-889f-2a3db79db8c2')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @testtools.skipUnless(
         CONF.share.run_extend_tests, 'Extend share tests are disabled.')
     @ddt.data(True, False)
@@ -574,7 +580,7 @@
 
     @decorators.idempotent_id('58c72e51-d217-48bc-8155-5a010912312e')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @testtools.skipUnless(
         CONF.share.run_shrink_tests, 'Shrink share tests are disabled.')
     @ddt.data(True, False)
@@ -588,7 +594,7 @@
 
     @decorators.idempotent_id('a95eb701-626a-4175-967b-4880d3716857')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @testtools.skipUnless(
         CONF.share.run_snapshot_tests, 'Snapshot tests are disabled.')
     @testtools.skipUnless(
@@ -630,7 +636,7 @@
 
     @decorators.idempotent_id('a18b3637-2070-4a1b-acd9-c392eb7963b5')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           'Snapshot tests are disabled.')
     @ddt.data(True, False)
@@ -643,7 +649,7 @@
 
     @decorators.idempotent_id('59313673-6576-4163-ab96-41bafcdad63a')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("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 cff14f0..e6e10ca 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
@@ -57,7 +57,11 @@
                                     "are needed to run share migration tests.")
 
         # create share type (generic)
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
         # create share
@@ -83,7 +87,7 @@
 
     @decorators.idempotent_id('8aa1f2a0-bc44-4df5-a556-161590e594a3')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("2.22")
     def test_migration_cancel_invalid(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migration_cancel,
@@ -91,7 +95,7 @@
 
     @decorators.idempotent_id('6d0dfb2e-51a0-4cb7-8c69-6135a49c6057')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("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 +107,7 @@
 
     @decorators.idempotent_id('2ab1fc82-bc13-4c99-8324-c6b23530e8a4')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("2.22")
     def test_migration_complete_invalid(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migration_complete,
@@ -111,7 +115,7 @@
 
     @decorators.idempotent_id('8ef562b4-7704-4a78-973f-9bf8d2b6f6a6')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("2.22")
     def test_migration_cancel_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migration_cancel,
@@ -119,7 +123,7 @@
 
     @decorators.idempotent_id('044c792b-63e0-42c3-9f44-dc2280e2af08')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("2.22")
     def test_migration_get_progress_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migration_get_progress,
@@ -127,7 +131,7 @@
 
     @decorators.idempotent_id('a509871a-3f3a-4618-bb60-9661732dd371')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.22")
+    @utils.skip_if_microversion_not_supported("2.22")
     def test_migration_complete_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migration_complete,
@@ -135,7 +139,7 @@
 
     @decorators.idempotent_id('6276bea6-6939-4569-930f-218d99c0fa56')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_migrate_share_with_snapshot(self):
@@ -150,7 +154,7 @@
 
     @decorators.idempotent_id('78670c24-c4ee-45b5-b166-2d053c333144')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @ddt.data(True, False)
     def test_migrate_share_same_host(self, specified):
         new_share_type_id = None
@@ -168,7 +172,7 @@
 
     @decorators.idempotent_id('af17204f-ffab-4ba8-8cb6-032e49216f67')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     def test_migrate_share_host_invalid(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migrate_share,
@@ -176,7 +180,7 @@
 
     @decorators.idempotent_id('0558e9c4-0416-41d2-b28a-803d4b81521a')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @ddt.data({'writable': False, 'preserve_metadata': False,
                'preserve_snapshots': False, 'nondisruptive': True},
               {'writable': False, 'preserve_metadata': False,
@@ -198,7 +202,7 @@
 
     @decorators.idempotent_id('ee57024c-d00e-4def-8eec-cbc62bae327f')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("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 +221,7 @@
 
     @decorators.idempotent_id('e2bd0cca-c091-4785-a9dc-7f42d2bb95a5')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     def test_migrate_share_not_found(self):
         self.assertRaises(
             lib_exc.NotFound, self.shares_v2_client.migrate_share,
@@ -225,7 +229,7 @@
 
     @decorators.idempotent_id('86b427a7-27c0-4cd5-8f52-9688b339980b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     def test_migrate_share_not_available(self):
         self.shares_client.reset_state(self.share['id'],
                                        constants.STATUS_ERROR)
@@ -242,7 +246,7 @@
 
     @decorators.idempotent_id('e8f1e491-697a-4941-bf51-4d37f0a93fa5')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     def test_migrate_share_invalid_share_network(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migrate_share,
@@ -251,7 +255,7 @@
 
     @decorators.idempotent_id('be262d44-2ca2-4b9c-be3a-5a6a98ed871b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     def test_migrate_share_invalid_share_type(self):
         self.assertRaises(
             lib_exc.BadRequest, self.shares_v2_client.migrate_share,
@@ -260,7 +264,7 @@
 
     @decorators.idempotent_id('16c72693-6f9e-4cb4-a166-c60accd3479b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     def test_migrate_share_opposite_type_share_network_invalid(self):
 
         extra_specs = utils.get_configured_extra_specs(
@@ -286,7 +290,7 @@
 
     @decorators.idempotent_id('1f529b09-e404-4f0e-9423-bb4b117b5522')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.48")
+    @utils.skip_if_microversion_not_supported("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 +306,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)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("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)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @ddt.data(('extend_share', [CONF.share.share_size + 2]),
               ('shrink_share', [CONF.share.share_size]))
     @ddt.unpack
@@ -326,7 +330,7 @@
 
     @decorators.idempotent_id('6e83fc25-4e3e-49a7-93e8-db4e6b355a91')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("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_quotas.py b/manila_tempest_tests/tests/api/admin/test_quotas.py
index 481f7c4..fc035a2 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas.py
@@ -136,7 +136,7 @@
     @ddt.unpack
     @decorators.idempotent_id('836e1725-2853-4d54-b281-8173773d8527')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("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
@@ -196,7 +196,12 @@
     def resource_setup(cls):
         super(SharesAdminQuotasUpdateTest, cls).resource_setup()
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        if CONF.share.capability_create_share_from_snapshot_support:
+            extra_specs.update({'create_share_from_snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share group type
         cls.share_group_type = cls._create_share_group_type()
@@ -305,7 +310,7 @@
     @ddt.unpack
     @decorators.idempotent_id('155ea3de-b3b5-4aa0-be8b-eebcc19ce874')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("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
@@ -548,7 +553,7 @@
     @ddt.unpack
     @decorators.idempotent_id('15e57302-5a14-4be4-8720-95b639c2bfad')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("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']
@@ -767,7 +772,7 @@
     @ddt.data(11, -1)
     @decorators.idempotent_id('315cb76f-920d-4cb9-ac7d-16be8e95e1b2')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("2.39")
     def test_update_share_type_quotas_bigger_than_project_quota(self, st_q):
         share_type = self._create_share_type()
 
@@ -783,7 +788,7 @@
 
     @decorators.idempotent_id('c95be1eb-6331-4c37-9fac-ed6c36270457')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("2.39")
     def test_set_share_type_quota_bigger_than_users_quota(self):
         share_type = self._create_share_type()
 
@@ -805,7 +810,7 @@
 
     @decorators.idempotent_id('4687eb25-17b3-4995-ace2-62f8bda29c57')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("2.39")
     def test_quotas_usages(self):
         # Create share types
         st_1, st_2 = (self._create_share_type()
@@ -900,7 +905,12 @@
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     @testtools.skipUnless(
         CONF.share.run_share_group_tests, 'Share Group tests disabled.')
-    @utils.skip_if_microversion_lt(SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(SHARE_GROUPS_MICROVERSION)
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
+    @testtools.skipUnless(
+        CONF.share.capability_create_share_from_snapshot_support,
+        "Tests for shares from snapshots are disabled.")
     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 af5cc9c..0016911 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas_negative.py
@@ -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)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("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)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("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)
-    @utils.skip_if_microversion_lt(SHARE_GROUPS_MICROVERSION)
+    @utils.skip_if_microversion_not_supported(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)
@@ -366,7 +366,7 @@
     @ddt.data('show', 'reset', 'update')
     @decorators.idempotent_id('acc609c2-f314-4540-984c-33e93d048f6c')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.38")
+    @utils.skip_if_microversion_not_supported("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"]}
@@ -382,7 +382,7 @@
     @ddt.data('show', 'reset', 'update')
     @decorators.idempotent_id('719768d1-d313-40e9-9127-c5777840ecbd')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("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}
@@ -398,7 +398,7 @@
     @ddt.data(11, -1)
     @decorators.idempotent_id('82256511-aa46-4b99-a6e5-8b400534e96d')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
-    @utils.skip_if_microversion_lt("2.39")
+    @utils.skip_if_microversion_not_supported("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)
@@ -446,7 +446,8 @@
         if not CONF.share.run_quota_tests:
             msg = "Quota tests are disabled."
             raise cls.skipException(msg)
-        utils.check_skip_if_microversion_lt(SHARE_REPLICA_QUOTAS_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            SHARE_REPLICA_QUOTAS_MICROVERSION)
 
     def _modify_quotas_for_test(self, quota_key, new_limit):
         kwargs = {quota_key: new_limit}
diff --git a/manila_tempest_tests/tests/api/admin/test_replication.py b/manila_tempest_tests/tests/api/admin/test_replication.py
index 6d5b40c..1658237 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication.py
@@ -38,7 +38,8 @@
         if not CONF.share.run_replication_tests:
             raise cls.skipException('Replication tests are disabled.')
 
-        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            _MIN_SUPPORTED_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
@@ -90,7 +91,7 @@
                             LATEST_MICROVERSION]))
     def test_promote_out_of_sync_share_replica(self, version):
         """Test promote 'out_of_sync' share replica to active state."""
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 +154,7 @@
                             LATEST_MICROVERSION]))
     def test_force_delete_share_replica(self, version):
         """Test force deleting a replica that is in 'error_deleting' status."""
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
         replica = self.create_share_replica(self.share['id'],
                                             self.replica_zone,
                                             cleanup_in_class=False,
@@ -176,7 +177,7 @@
                             LATEST_MICROVERSION]))
     def test_reset_share_replica_status(self, version):
         """Test resetting a replica's 'status' attribute."""
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
         replica = self.create_share_replica(self.share['id'],
                                             self.replica_zone,
                                             cleanup_in_class=False,
@@ -197,7 +198,7 @@
                             LATEST_MICROVERSION]))
     def test_reset_share_replica_state(self, version):
         """Test resetting a replica's 'replica_state' attribute."""
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
         replica = self.create_share_replica(self.share['id'],
                                             self.replica_zone,
                                             cleanup_in_class=False,
@@ -218,7 +219,7 @@
                             LATEST_MICROVERSION]))
     def test_resync_share_replica(self, version):
         """Test resyncing a replica."""
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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_replication_actions.py b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
index 9a3af60..1c879b2 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
@@ -37,7 +37,8 @@
             raise cls.skipException(
                 'Only for driver_handles_share_servers = False driver mode.')
 
-        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            _MIN_SUPPORTED_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
@@ -55,6 +56,8 @@
 
         # create share type
         extra_specs = {"replication_type": cls.replication_type}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({"snapshot_support": True})
         cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
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 56d1881..3a0fb2b 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
@@ -40,7 +40,7 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @classmethod
@@ -65,7 +65,7 @@
              constants.SHARE_GROUPS_GRADUATION_VERSION])))
     @ddt.unpack
     def test_create_get_delete_share_group_type(self, st_key, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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_group_types_negative.py b/manila_tempest_tests/tests/api/admin/test_share_group_types_negative.py
index 30ab384..7bc5b51 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_group_types_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_group_types_negative.py
@@ -31,7 +31,7 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @classmethod
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 a2724b9..216409f 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups.py
@@ -38,17 +38,19 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
         super(ShareGroupsTest, cls).resource_setup()
         # Create 2 share_types
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
-
-        cls.share_type2 = cls._create_share_type()
+        cls.share_type2 = cls._create_share_type(specs=extra_specs)
         cls.share_type_id2 = cls.share_type2['id']
 
         # Create a share group type
@@ -67,7 +69,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_create_share_group_with_single_share_type_min(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 +144,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_default_share_group_type_applied(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
         try:
             default_type = self.shares_v2_client.get_default_share_group_type(
                 version=version
@@ -176,6 +178,8 @@
     @decorators.idempotent_id('8ca1f0a0-2a36-4adb-af6b-6741b00307c5')
     @testtools.skipUnless(
         CONF.share.multitenancy_enabled, "Only for multitenancy.")
+    @testtools.skipUnless(
+        CONF.share.run_snapshot_tests, "Snapshot tests are disabled.")
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_create_sg_from_snapshot_verify_share_server_information_min(self):
         # Create a share group
diff --git a/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py b/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py
index dd66559..115c0e6 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py
@@ -34,23 +34,20 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @decorators.idempotent_id('b90537b7-634d-4fca-b451-770fbcca7927')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     def test_create_share_group_with_wrong_consistent_snapshot_spec(self):
         # Create valid share type for share group type
-        name = data_utils.rand_name("tempest-manila")
-        extra_specs = self.add_extra_specs_to_dict()
-        st = self.create_share_type(name, extra_specs=extra_specs)
-        share_type = st['share_type'] if 'share_type' in st else st
+        share_type = self._create_share_type(cleanup_in_class=False)
 
         # Create share group type with wrong value for
         # 'consistent_snapshot_support' capability, we always expect
         # NoValidHostFound using this SG type.
         sg_type = self.create_share_group_type(
-            name=name,
+            name=data_utils.rand_name("tempest-manila"),
             share_types=[share_type['id']],
             group_specs={"consistent_snapshot_support": "fake"},
             cleanup_in_class=False)
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 0833298..b993ea8 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."""
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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)
-    @utils.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_not_supported("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 a01ffb2..30a83db 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
@@ -49,7 +49,7 @@
 
     @decorators.idempotent_id('ce0d045c-e418-42fa-86e4-ead493fc0663')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_not_supported("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_servers_manage.py b/manila_tempest_tests/tests/api/admin/test_share_servers_manage.py
index fa9966e..4db370d 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers_manage.py
@@ -37,7 +37,7 @@
         if not CONF.share.run_manage_unmanage_tests:
             raise cls.skipException('Manage/unmanage tests are disabled.')
 
-        utils.check_skip_if_microversion_lt('2.49')
+        utils.check_skip_if_microversion_not_supported('2.49')
 
     @classmethod
     def resource_setup(cls):
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 3b2db49..7673b47 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
@@ -42,7 +42,7 @@
         if not CONF.share.run_manage_unmanage_tests:
             raise cls.skipException('Manage/unmanage tests are disabled.')
 
-        utils.check_skip_if_microversion_lt('2.49')
+        utils.check_skip_if_microversion_not_supported('2.49')
 
     @classmethod
     def resource_setup(cls):
diff --git a/manila_tempest_tests/tests/api/admin/test_share_servers_migration.py b/manila_tempest_tests/tests/api/admin/test_share_servers_migration.py
index ba774d3..46f7fdc 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_servers_migration.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_servers_migration.py
@@ -40,7 +40,7 @@
         if not CONF.share.run_share_server_migration_tests:
             raise cls.skipException(
                 'Share server migration tests are disabled.')
-        utils.check_skip_if_microversion_lt('2.57')
+        utils.check_skip_if_microversion_not_supported('2.57')
 
     @classmethod
     def resource_setup(cls):
@@ -57,7 +57,10 @@
             raise cls.skipException(msg)
 
         # create share type (generic)
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
 
         # create two non routable IPs to be used in NFS access rulesi
         cls.access_rules_ip_rw = utils.rand_ip()
diff --git a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
index 0aec375..477135e 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances.py
@@ -34,13 +34,14 @@
         if not CONF.share.run_snapshot_tests:
             raise cls.skipException('Snapshot tests are disabled.')
 
-        utils.check_skip_if_microversion_lt("2.19")
+        utils.check_skip_if_microversion_not_supported("2.19")
 
     @classmethod
     def resource_setup(cls):
         super(ShareSnapshotInstancesTest, cls).resource_setup()
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {'snapshot_support': True}
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(share_type_id=cls.share_type_id)
diff --git a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
index 730ce8b..3ba2217 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_snapshot_instances_negative.py
@@ -32,7 +32,7 @@
         if not CONF.share.run_snapshot_tests:
             raise cls.skipException('Snapshot tests are disabled.')
 
-        utils.check_skip_if_microversion_lt('2.19')
+        utils.check_skip_if_microversion_not_supported('2.19')
 
     @classmethod
     def resource_setup(cls):
@@ -40,7 +40,8 @@
         cls.admin_client = cls.admin_shares_v2_client
         cls.member_client = cls.shares_v2_client
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {'snapshot_support': True}
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(share_type_id=cls.share_type_id,
@@ -86,7 +87,7 @@
         if not CONF.share.run_snapshot_tests:
             raise cls.skipException('Snapshot tests are disabled.')
 
-        utils.check_skip_if_microversion_lt('2.19')
+        utils.check_skip_if_microversion_not_supported('2.19')
 
     @classmethod
     def resource_setup(cls):
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 560a41e..1bfb3c8 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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
 
         name = data_utils.rand_name("tempest-manila")
         description = None
@@ -93,16 +93,24 @@
 
         # Get share type
         get = self.shares_v2_client.get_share_type(st_id, version=version)
+
         self.assertEqual(name, get["share_type"]["name"])
         self.assertEqual(st_id, get["share_type"]["id"])
         self._verify_description(description, get['share_type'], version)
+
+        if utils.is_microversion_lt(version, "2.24"):
+            # snapshot_support is an implied/required extra-spec until
+            # version 2.24, and the service assumes it to be True since we
+            # don't provide it during share type creation.
+            extra_specs.update({"snapshot_support": 'True'})
+
         self.assertEqual(extra_specs, get["share_type"]["extra_specs"])
         self._verify_is_public_key_name(get['share_type'], version)
 
         # Check that backwards compatibility didn't break
         self.assertDictMatch(get["volume_type"], get["share_type"])
 
-    @utils.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_not_supported("2.50")
     @decorators.idempotent_id('a9af19e1-e789-4c4f-a39b-dd8df6ed00b1')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(
@@ -151,7 +159,7 @@
                 st_is_public,
                 updated_st["share_type"]["share_type_access:is_public"])
 
-    @utils.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_not_supported("2.50")
     @decorators.idempotent_id('9019dc61-b2b1-472d-9b15-a3986439d4c3')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(
@@ -186,7 +194,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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
 
         name = data_utils.rand_name("tempest-manila")
         description = None
@@ -300,7 +308,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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 7d94157..5bf8e91 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,12 +128,25 @@
     @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):
-        utils.skip_if_microversion_not_supported(version)
-        # Delete one extra spec for share type
+        """Is snapshot_support really an optional extra-spec if API > v2.24?"""
+        utils.check_skip_if_microversion_not_supported(version)
+
+        # set snapshot_support extra-spec
+        self.shares_v2_client.update_share_type_extra_specs(
+            self.st_id, {'snapshot_support': 'True'})
+
+        # Get extra specs
+        share_type_extra_specs = self.shares_client.get_share_type_extra_specs(
+            self.st_id)
+
+        self.assertIn('snapshot_support', share_type_extra_specs)
+        self.assertEqual('True', share_type_extra_specs['snapshot_support'])
+
+        # Delete the 'snapshot_support' extra spec from the share type
         self.shares_v2_client.delete_share_type_extra_spec(
             self.st_id, 'snapshot_support', version=version)
 
-        # Get metadata
+        # Get extra specs
         share_type_extra_specs = self.shares_client.get_share_type_extra_specs(
             self.st_id)
 
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 9a94edf..c6ee2bf 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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 e7a5c4d..fe20c48 100644
--- a/manila_tempest_tests/tests/api/admin/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
@@ -38,6 +38,10 @@
 
         # create share type for share filtering purposes
         specs = {"storage_protocol": CONF.share.capability_storage_protocol}
+        if CONF.share.capability_snapshot_support:
+            specs.update({'snapshot_support': True})
+        if CONF.share.capability_create_share_from_snapshot_support:
+            specs.update({'create_share_from_snapshot_support': True})
         cls.share_type = cls._create_share_type(specs=specs)
         cls.share_type_id = cls.share_type['id']
 
@@ -243,7 +247,7 @@
         for share in shares:
             self.assertEqual(filters['host'], share['host'])
 
-    @utils.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_not_supported("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_export_locations.py b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
index 0d27e21..ef3ed17 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations.py
@@ -38,7 +38,7 @@
         if not CONF.share.run_mount_snapshot_tests:
             raise cls.skipException('Mountable snapshots tests are disabled.')
 
-        utils.check_skip_if_microversion_lt("2.32")
+        utils.check_skip_if_microversion_not_supported("2.32")
 
     @classmethod
     def setup_clients(cls):
@@ -49,7 +49,11 @@
     def resource_setup(cls):
         super(SnapshotExportLocationsTest, cls).resource_setup()
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {
+            'snapshot_support': True,
+            'mount_snapshot_support': True,
+        }
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(share_type_id=cls.share_type_id,
diff --git a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
index 2c3a8c7..bb1d48d 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_export_locations_negative.py
@@ -34,7 +34,7 @@
         if not CONF.share.run_mount_snapshot_tests:
             raise cls.skipException('Mountable snapshots tests are disabled.')
 
-        utils.check_skip_if_microversion_lt("2.32")
+        utils.check_skip_if_microversion_not_supported("2.32")
 
     @classmethod
     def setup_clients(cls):
@@ -46,7 +46,11 @@
     def resource_setup(cls):
         super(SnapshotExportLocationsNegativeTest, cls).resource_setup()
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {
+            'snapshot_support': True,
+            'mount_snapshot_support': True,
+        }
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(share_type_id=cls.share_type_id,
@@ -129,7 +133,7 @@
         if not CONF.share.run_mount_snapshot_tests:
             raise cls.skipException('Mountable snapshots tests are disabled.')
 
-        utils.check_skip_if_microversion_lt('2.32')
+        utils.check_skip_if_microversion_not_supported('2.32')
 
     @classmethod
     def setup_clients(cls):
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 15bd0f6..5ea3f92 100644
--- a/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_snapshot_manage.py
@@ -46,7 +46,7 @@
             message = "%s tests are disabled" % cls.protocol
             raise cls.skipException(message)
 
-        utils.check_skip_if_microversion_lt('2.12')
+        utils.check_skip_if_microversion_not_supported('2.12')
         utils.skip_if_manage_not_supported_for_version()
 
     @classmethod
@@ -145,7 +145,7 @@
         utils.skip_if_manage_not_supported_for_version(version)
 
         # Skip in case specified version is not supported
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 9d6c8e5..eb7448d 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
-    @utils.skip_if_microversion_lt("2.12")
+    @utils.skip_if_microversion_not_supported("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 81ccd8a..1aeb5a5 100644
--- a/manila_tempest_tests/tests/api/admin/test_user_messages.py
+++ b/manila_tempest_tests/tests/api/admin/test_user_messages.py
@@ -45,7 +45,7 @@
     @classmethod
     def skip_checks(cls):
         super(UserMessageTest, cls).skip_checks()
-        utils.check_skip_if_microversion_lt(MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(MICROVERSION)
 
     def setUp(self):
         super(UserMessageTest, self).setUp()
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 a1ad386..197b883 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
@@ -29,7 +29,7 @@
     @classmethod
     def skip_checks(cls):
         super(UserMessageNegativeTest, cls).skip_checks()
-        utils.check_skip_if_microversion_lt(MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(MICROVERSION)
 
     def setUp(self):
         super(UserMessageNegativeTest, self).setUp()
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index dbcb1ff..73ad104 100755
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -94,10 +94,6 @@
         return True  # Suppress error if any
 
 
-skip_if_microversion_not_supported = utils.skip_if_microversion_not_supported
-skip_if_microversion_lt = utils.skip_if_microversion_lt
-
-
 class BaseSharesTest(test.BaseTestCase):
     """Base test case class for all Manila API tests."""
 
@@ -856,26 +852,9 @@
     def add_extra_specs_to_dict(extra_specs=None):
         """Add any required extra-specs to share type dictionary"""
         dhss = six.text_type(CONF.share.multitenancy_enabled)
-        snapshot_support = six.text_type(
-            CONF.share.capability_snapshot_support)
-        create_from_snapshot_support = six.text_type(
-            CONF.share.capability_create_share_from_snapshot_support)
-
-        extra_specs_dict = {
-            "driver_handles_share_servers": dhss,
-        }
-
-        optional = {
-            "snapshot_support": snapshot_support,
-            "create_share_from_snapshot_support": create_from_snapshot_support,
-        }
-        # NOTE(gouthamr): In micro-versions < 2.24, snapshot_support is a
-        # required extra-spec
-        extra_specs_dict.update(optional)
-
+        extra_specs_dict = {"driver_handles_share_servers": dhss}
         if extra_specs:
             extra_specs_dict.update(extra_specs)
-
         return extra_specs_dict
 
     @classmethod
@@ -1115,12 +1094,14 @@
         cls.admin_shares_v2_client = cls.os_admin.share_v2.SharesV2Client()
 
     @classmethod
-    def _create_share_type(cls, is_public=True, specs=None):
+    def _create_share_type(cls, is_public=True, specs=None,
+                           cleanup_in_class=True):
         name = data_utils.rand_name("unique_st_name")
         extra_specs = cls.add_extra_specs_to_dict(specs)
         return cls.create_share_type(
             name, extra_specs=extra_specs, is_public=is_public,
-            client=cls.admin_shares_v2_client)['share_type']
+            client=cls.admin_shares_v2_client,
+            cleanup_in_class=cleanup_in_class)['share_type']
 
     @classmethod
     def _create_share_group_type(cls):
@@ -1312,12 +1293,14 @@
         return os
 
     @classmethod
-    def _create_share_type(cls, is_public=True, specs=None):
+    def _create_share_type(cls, is_public=True, specs=None,
+                           cleanup_in_class=True):
         name = data_utils.rand_name("unique_st_name")
         extra_specs = cls.add_extra_specs_to_dict(specs)
         return cls.create_share_type(
             name, extra_specs=extra_specs, is_public=is_public,
-            client=cls.admin_shares_v2_client)['share_type']
+            client=cls.admin_shares_v2_client,
+            cleanup_in_class=cleanup_in_class)['share_type']
 
     @classmethod
     def _create_share_group_type(cls):
diff --git a/manila_tempest_tests/tests/api/test_access_rules_metadata.py b/manila_tempest_tests/tests/api/test_access_rules_metadata.py
index 9913fc8..b3c6574 100644
--- a/manila_tempest_tests/tests/api/test_access_rules_metadata.py
+++ b/manila_tempest_tests/tests/api/test_access_rules_metadata.py
@@ -48,7 +48,7 @@
             cls.message = "Rule tests are disabled"
             raise cls.skipException(cls.message)
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
 
     @classmethod
diff --git a/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py b/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
index 2c11a26..3ec46ac 100644
--- a/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
+++ b/manila_tempest_tests/tests/api/test_access_rules_metadata_negative.py
@@ -49,7 +49,7 @@
             cls.message = "Rule tests are disabled"
             raise cls.skipException(cls.message)
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
 
     @classmethod
diff --git a/manila_tempest_tests/tests/api/test_quotas.py b/manila_tempest_tests/tests/api/test_quotas.py
index 1052cd5..3921e38 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):
-        utils.skip_if_microversion_not_supported(microversion)
+        utils.check_skip_if_microversion_not_supported(microversion)
         quota_args = {"tenant_id": self.tenant_id, "version": microversion, }
         keys = ['gigabytes', 'snapshot_gigabytes', 'shares',
                 'snapshots', 'share_networks']
diff --git a/manila_tempest_tests/tests/api/test_replication.py b/manila_tempest_tests/tests/api/test_replication.py
index 881262f..bf9a6e4 100644
--- a/manila_tempest_tests/tests/api/test_replication.py
+++ b/manila_tempest_tests/tests/api/test_replication.py
@@ -40,7 +40,8 @@
         if not CONF.share.run_replication_tests:
             raise cls.skipException('Replication tests are disabled.')
 
-        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            _MIN_SUPPORTED_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
@@ -380,7 +381,8 @@
         if not CONF.share.run_replication_tests:
             raise cls.skipException('Replication tests are disabled.')
 
-        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            _MIN_SUPPORTED_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
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 1b52a7a..7d1b4e7 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"""
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 eac1999..a7f1a59 100644
--- a/manila_tempest_tests/tests/api/test_replication_negative.py
+++ b/manila_tempest_tests/tests/api/test_replication_negative.py
@@ -37,7 +37,8 @@
         if not CONF.share.run_replication_tests:
             raise cls.skipException('Replication tests are disabled.')
 
-        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            _MIN_SUPPORTED_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
@@ -207,7 +208,7 @@
                           CONF.share.run_driver_assisted_migration_tests,
                           "Share migration tests are disabled.")
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("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 +227,7 @@
 
     @decorators.idempotent_id('bf01bcfc-57cb-4e56-957f-8aa9f1b9be1b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.48")
+    @utils.skip_if_microversion_not_supported("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 +243,7 @@
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
     @testtools.skipIf(
         not CONF.share.multitenancy_enabled, "Only for multitenancy.")
-    @utils.skip_if_microversion_lt("2.51")
+    @utils.skip_if_microversion_not_supported("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()
@@ -268,7 +269,8 @@
         if not CONF.share.run_replication_tests:
             raise cls.skipException('Replication tests are disabled.')
 
-        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            _MIN_SUPPORTED_MICROVERSION)
 
     @decorators.idempotent_id('72395c9b-4432-4a8b-84b4-60303e6bc962')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
diff --git a/manila_tempest_tests/tests/api/test_replication_snapshots.py b/manila_tempest_tests/tests/api/test_replication_snapshots.py
index a150419..f45425e 100644
--- a/manila_tempest_tests/tests/api/test_replication_snapshots.py
+++ b/manila_tempest_tests/tests/api/test_replication_snapshots.py
@@ -38,7 +38,8 @@
         if not CONF.share.run_snapshot_tests:
             raise cls.skipException('Snapshot tests disabled.')
 
-        utils.check_skip_if_microversion_lt(_MIN_SUPPORTED_MICROVERSION)
+        utils.check_skip_if_microversion_not_supported(
+            _MIN_SUPPORTED_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
@@ -54,7 +55,14 @@
             )
 
         # create share type
-        extra_specs = {"replication_type": cls.replication_type}
+        extra_specs = {
+            "replication_type": cls.replication_type,
+            "snapshot_support": True,
+        }
+        if CONF.share.capability_create_share_from_snapshot_support:
+            extra_specs.update({
+                "create_share_from_snapshot_support": True,
+            })
         cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         cls.sn_id = None
diff --git a/manila_tempest_tests/tests/api/test_revert_to_snapshot.py b/manila_tempest_tests/tests/api/test_revert_to_snapshot.py
index 4e7d0ca..d0be9ce 100644
--- a/manila_tempest_tests/tests/api/test_revert_to_snapshot.py
+++ b/manila_tempest_tests/tests/api/test_revert_to_snapshot.py
@@ -63,7 +63,10 @@
             raise cls.skipException(msg)
 
         cls.share_type_name = data_utils.rand_name("share-type")
-        extra_specs = {constants.REVERT_TO_SNAPSHOT_SUPPORT: True}
+        extra_specs = {
+            "snapshot_support": True,
+            constants.REVERT_TO_SNAPSHOT_SUPPORT: True,
+        }
         cls.revert_enabled_extra_specs = cls.add_extra_specs_to_dict(
             extra_specs=extra_specs)
 
@@ -86,6 +89,7 @@
                 )
             extra_specs = cls.add_extra_specs_to_dict({
                 "replication_type": cls.replication_type,
+                "snapshot_support": True,
                 constants.REVERT_TO_SNAPSHOT_SUPPORT: True,
             })
             share_type = cls.create_share_type(
diff --git a/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py b/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py
index bc01f00..d04b2e3 100644
--- a/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py
+++ b/manila_tempest_tests/tests/api/test_revert_to_snapshot_negative.py
@@ -60,7 +60,10 @@
             raise cls.skipException(msg)
 
         cls.share_type_name = data_utils.rand_name("share-type")
-        extra_specs = {constants.REVERT_TO_SNAPSHOT_SUPPORT: True}
+        extra_specs = {
+            "snapshot_support": True,
+            constants.REVERT_TO_SNAPSHOT_SUPPORT: True
+        }
         cls.revert_enabled_extra_specs = cls.add_extra_specs_to_dict(
             extra_specs=extra_specs)
 
diff --git a/manila_tempest_tests/tests/api/test_rules.py b/manila_tempest_tests/tests/api/test_rules.py
index 18e8472..2d748e2 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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 fd736a3..972cb97 100644
--- a/manila_tempest_tests/tests/api/test_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_rules_negative.py
@@ -48,7 +48,10 @@
         cls.admin_client = cls.admin_shares_v2_client
 
         # create share_type
-        cls.share_type = cls._create_share_type()
+        extra_specs = None
+        if CONF.share.run_snapshot_tests:
+            extra_specs = {'snapshot_support': True}
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(cls.protocol,
@@ -213,7 +216,10 @@
             msg = "USER rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = None
+        if CONF.share.run_snapshot_tests:
+            extra_specs = {'snapshot_support': True}
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(cls.protocol,
@@ -315,7 +321,10 @@
             msg = "CERT rule tests for %s protocol are disabled" % cls.protocol
             raise cls.skipException(msg)
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = None
+        if CONF.share.run_snapshot_tests:
+            extra_specs = {'snapshot_support': True}
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(cls.protocol,
@@ -501,7 +510,10 @@
     def resource_setup(cls):
         super(ShareRulesNegativeTest, cls).resource_setup()
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = None
+        if CONF.share.run_snapshot_tests:
+            extra_specs = {'snapshot_support': True}
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(share_type_id=cls.share_type_id)
diff --git a/manila_tempest_tests/tests/api/test_security_services.py b/manila_tempest_tests/tests/api/test_security_services.py
index 5755473..55ddfcd 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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 6b5ab8d..e72181e 100644
--- a/manila_tempest_tests/tests/api/test_share_group_actions.py
+++ b/manila_tempest_tests/tests/api/test_share_group_actions.py
@@ -18,6 +18,7 @@
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
+import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -38,7 +39,7 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @classmethod
@@ -46,7 +47,12 @@
         super(ShareGroupActionsTest, cls).resource_setup()
 
         # Create a share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        if CONF.share.capability_create_share_from_snapshot_support:
+            extra_specs.update({'create_share_from_snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
         cls.share_group_type = cls._create_share_group_type()
@@ -89,20 +95,21 @@
         ])
 
         # Create share group snapshots
-        cls.sg_snap_name = data_utils.rand_name("tempest-sg-snap-name")
-        cls.sg_snap_desc = data_utils.rand_name("tempest-sg-snap-desc")
+        if CONF.share.capability_snapshot_support:
+            cls.sg_snap_name = data_utils.rand_name("tempest-sg-snap-name")
+            cls.sg_snap_desc = data_utils.rand_name("tempest-sg-snap-desc")
 
-        cls.sg_snapshot = cls.create_share_group_snapshot_wait_for_active(
-            cls.share_group["id"],
-            name=cls.sg_snap_name,
-            description=cls.sg_snap_desc,
-        )
+            cls.sg_snapshot = cls.create_share_group_snapshot_wait_for_active(
+                cls.share_group["id"],
+                name=cls.sg_snap_name,
+                description=cls.sg_snap_desc,
+            )
 
-        cls.sg_snapshot2 = cls.create_share_group_snapshot_wait_for_active(
-            cls.share_group2['id'],
-            name=cls.sg_snap_name,
-            description=cls.sg_snap_desc,
-        )
+            cls.sg_snapshot2 = cls.create_share_group_snapshot_wait_for_active(
+                cls.share_group2['id'],
+                name=cls.sg_snap_name,
+                description=cls.sg_snap_desc,
+            )
 
     @decorators.idempotent_id('1e359389-09a7-4235-84c9-7b5c83632fff')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@@ -111,7 +118,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_get_share_group(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
 
         # Get share group
         share_group = self.shares_v2_client.get_share_group(
@@ -166,7 +173,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_list_share_groups(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
 
         # List share groups
         share_groups = self.shares_v2_client.list_share_groups(
@@ -198,7 +205,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_list_share_groups_with_detail_min(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
         params = None
         if utils.is_microversion_ge(version, '2.36'):
             params = {'name~': 'tempest', 'description~': 'tempest'}
@@ -258,8 +265,10 @@
         *utils.deduplicate([constants.MIN_SHARE_GROUP_MICROVERSION,
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
     def test_get_share_group_snapshot(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
 
         # Get share group snapshot
         sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
@@ -286,6 +295,8 @@
 
     @decorators.idempotent_id('67e8c099-f1c1-4972-9c51-bb7bfe1d7994')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
     def test_get_share_group_snapshot_members_min(self):
         sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
             self.sg_snapshot['id'],
@@ -315,9 +326,14 @@
         *utils.deduplicate([constants.MIN_SHARE_GROUP_MICROVERSION,
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
+    @testtools.skipUnless(
+        CONF.share.capability_create_share_from_snapshot_support,
+        "Tests creating shares from snapshots are disabled.")
     def test_create_share_group_from_populated_share_group_snapshot(self,
                                                                     version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
 
         sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
             self.sg_snapshot['id'],
@@ -382,7 +398,7 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @classmethod
@@ -422,7 +438,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_update_share_group(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_skip_if_microversion_not_supported(version)
 
         # Get share_group
         share_group = self.shares_v2_client.get_share_group(
@@ -463,7 +479,7 @@
                             constants.SHARE_GROUPS_GRADUATION_VERSION,
                             LATEST_MICROVERSION]))
     def test_create_update_read_share_group_with_unicode(self, version):
-        utils.skip_if_microversion_not_supported(version)
+        utils.check_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 8dc7c06..77f9db3 100644
--- a/manila_tempest_tests/tests/api/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/test_share_groups.py
@@ -17,6 +17,7 @@
 from tempest import config
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
+import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -36,14 +37,19 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
         super(ShareGroupsTest, cls).resource_setup()
         # create share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        if CONF.share.capability_create_share_from_snapshot_support:
+            extra_specs.update({'create_share_from_snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
         # create share group type
@@ -97,6 +103,8 @@
 
     @decorators.idempotent_id('cf7984af-1e1d-4eaf-bf9a-d8ddf5cebd01')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
     def test_create_delete_empty_share_group_snapshot_min(self):
         # Create base share group
         share_group = self.create_share_group(
@@ -138,6 +146,8 @@
 
     @decorators.idempotent_id('727d9c69-4c3b-4375-a91b-8b3efd349976')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
     def test_create_share_group_from_empty_share_group_snapshot_min(self):
         # Create base share group
         share_group = self.create_share_group(
@@ -196,7 +206,7 @@
             new_share_group['share_network_id'],
             msg)
 
-    @utils.skip_if_microversion_lt("2.34")
+    @utils.skip_if_microversion_not_supported("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 8f67fbe..2811637 100644
--- a/manila_tempest_tests/tests/api/test_share_groups_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_groups_negative.py
@@ -17,6 +17,7 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
+import testtools
 from testtools import testcase as tc
 
 from manila_tempest_tests.common import constants
@@ -35,14 +36,17 @@
         if not CONF.share.run_share_group_tests:
             raise cls.skipException('Share Group tests disabled.')
 
-        utils.check_skip_if_microversion_lt(
+        utils.check_skip_if_microversion_not_supported(
             constants.MIN_SHARE_GROUP_MICROVERSION)
 
     @classmethod
     def resource_setup(cls):
         super(ShareGroupsNegativeTest, cls).resource_setup()
         # Create a share type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
         # Create a share group type
@@ -69,15 +73,16 @@
             share_type_id=cls.share_type_id,
             share_group_id=cls.share_group['id'],
         )
-        # Create a share group snapshot of the share group
-        cls.sg_snap_name = data_utils.rand_name("tempest-sg-snap-name")
-        cls.sg_snap_desc = data_utils.rand_name(
-            "tempest-group-snap-description")
-        cls.sg_snapshot = cls.create_share_group_snapshot_wait_for_active(
-            cls.share_group['id'],
-            name=cls.sg_snap_name,
-            description=cls.sg_snap_desc
-        )
+        if CONF.share.run_snapshot_tests:
+            # Create a share group snapshot of the share group
+            cls.sg_snap_name = data_utils.rand_name("tempest-sg-snap-name")
+            cls.sg_snap_desc = data_utils.rand_name(
+                "tempest-group-snap-description")
+            cls.sg_snapshot = cls.create_share_group_snapshot_wait_for_active(
+                cls.share_group['id'],
+                name=cls.sg_snap_name,
+                description=cls.sg_snap_desc
+            )
 
     @decorators.idempotent_id('7ce3fb52-1bec-42b1-9b4f-671c8465764b')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@@ -206,6 +211,8 @@
 
     @decorators.idempotent_id('18fe2dee-4a07-484e-8f0f-bbc238500dc3')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
     def test_delete_sg_in_use_by_sg_snapshot_min(self):
         self.assertRaises(
             lib_exc.Conflict,
@@ -215,6 +222,8 @@
 
     @decorators.idempotent_id('d2a58f10-cc86-498d-a5e0-1468d4345852')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
+    @testtools.skipUnless(CONF.share.run_snapshot_tests,
+                          "Snapshot tests are disabled.")
     def test_delete_share_in_use_by_sg_snapshot_min(self):
         params = {'share_group_id': self.share['share_group_id']}
         self.assertRaises(
@@ -290,7 +299,7 @@
             share_type_ids=[self.share_type_id],
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
-    @utils.skip_if_microversion_lt("2.34")
+    @utils.skip_if_microversion_not_supported("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_network_subnets.py b/manila_tempest_tests/tests/api/test_share_network_subnets.py
index 8387968..f6cf348 100644
--- a/manila_tempest_tests/tests/api/test_share_network_subnets.py
+++ b/manila_tempest_tests/tests/api/test_share_network_subnets.py
@@ -31,7 +31,7 @@
     @classmethod
     def skip_checks(cls):
         super(ShareNetworkSubnetsTest, cls).skip_checks()
-        utils.check_skip_if_microversion_lt("2.51")
+        utils.check_skip_if_microversion_not_supported("2.51")
 
     @classmethod
     def resource_setup(cls):
diff --git a/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py b/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py
index 82d27ca..126cf87 100644
--- a/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_network_subnets_negative.py
@@ -35,7 +35,7 @@
     @classmethod
     def skip_checks(cls):
         super(ShareNetworkSubnetsNegativeTest, cls).skip_checks()
-        utils.check_skip_if_microversion_lt("2.51")
+        utils.check_skip_if_microversion_not_supported("2.51")
 
     @classmethod
     def resource_setup(cls):
diff --git a/manila_tempest_tests/tests/api/test_share_networks.py b/manila_tempest_tests/tests/api/test_share_networks.py
index fa486b4..31a2eb6 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)
-    @utils.skip_if_microversion_lt("2.36")
+    @utils.skip_if_microversion_not_supported("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.")
-    @utils.skip_if_microversion_lt("2.18")
+    @utils.skip_if_microversion_not_supported("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.")
-    @utils.skip_if_microversion_lt("2.20")
+    @utils.skip_if_microversion_not_supported("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 b9e57de..3e5f802 100644
--- a/manila_tempest_tests/tests/api/test_share_networks_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_networks_negative.py
@@ -156,7 +156,7 @@
 
         self.assertEqual(0, len(share_networks))
 
-    @utils.skip_if_microversion_lt("2.51")
+    @utils.skip_if_microversion_not_supported("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):
@@ -185,7 +185,7 @@
         default_subnet = share_network['share_network_subnets'][0]
         self.assertIsNone(default_subnet['availability_zone'])
 
-    @utils.skip_if_microversion_lt("2.51")
+    @utils.skip_if_microversion_not_supported("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 a7d8826..78a6c49 100644
--- a/manila_tempest_tests/tests/api/test_share_types_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_types_negative.py
@@ -80,7 +80,7 @@
                           self.st['id'],
                           self.shares_client.tenant_id)
 
-    @utils.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_not_supported("2.50")
     @decorators.idempotent_id('4a22945c-8988-43a1-88c9-eb86e6abcd8e')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     @ddt.data(
@@ -101,7 +101,7 @@
                           st_id, st_name, st_is_public, st_description,
                           version)
 
-    @utils.skip_if_microversion_lt("2.50")
+    @utils.skip_if_microversion_not_supported("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.py b/manila_tempest_tests/tests/api/test_shares.py
index 8802f4c..c6020a4 100644
--- a/manila_tempest_tests/tests/api/test_shares.py
+++ b/manila_tempest_tests/tests/api/test_shares.py
@@ -42,9 +42,6 @@
         # create share_type
         cls.share_type = cls._create_share_type()
         cls.share_type_id = cls.share_type['id']
-        # create share
-        cls.share = cls.create_share(cls.protocol,
-                                     share_type_id=cls.share_type_id)
 
     @decorators.idempotent_id('21ad41fb-04cf-493c-bc2f-66c80220898b')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
@@ -128,9 +125,15 @@
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
                           "Snapshot tests are disabled.")
     def test_create_delete_snapshot(self):
+        extra_specs = {'snapshot_support': True}
+        share_type = self._create_share_type(specs=extra_specs,
+                                             cleanup_in_class=False)
+        share = self.create_share(self.protocol,
+                                  share_type_id=share_type['id'],
+                                  cleanup_in_class=False)
 
         # create snapshot
-        snap = self.create_snapshot_wait_for_active(self.share["id"])
+        snap = self.create_snapshot_wait_for_active(share["id"])
 
         detailed_elements = {'name', 'id', 'description',
                              'created_at', 'share_proto', 'size', 'share_size',
@@ -167,14 +170,23 @@
         "Create share from snapshot tests are disabled.")
     def test_create_share_from_snapshot(self):
         # If multitenant driver used, share_network will be provided by default
+        extra_specs = {
+            'snapshot_support': True,
+            'create_share_from_snapshot_support': True,
+        }
+        share_type = self._create_share_type(specs=extra_specs,
+                                             cleanup_in_class=False)
+        share = self.create_share(self.protocol,
+                                  share_type_id=share_type['id'],
+                                  cleanup_in_class=False)
 
         # create snapshot
-        snap = self.create_snapshot_wait_for_active(
-            self.share["id"], cleanup_in_class=False)
+        snap = self.create_snapshot_wait_for_active(share["id"],
+                                                    cleanup_in_class=False)
 
         # create share from snapshot
         s2 = self.create_share(self.protocol,
-                               share_type_id=self.share_type_id,
+                               share_type_id=share_type['id'],
                                snapshot_id=snap["id"],
                                cleanup_in_class=False)
 
@@ -204,16 +216,25 @@
         # when creating share from snapshot using a driver that supports
         # multi-tenancy.
 
+        extra_specs = {
+            'snapshot_support': True,
+            'create_share_from_snapshot_support': True,
+        }
+        share_type = self._create_share_type(specs=extra_specs,
+                                             cleanup_in_class=False)
+        share = self.create_share(self.protocol,
+                                  share_type_id=share_type['id'],
+                                  cleanup_in_class=False)
+
         # get parent share
-        parent = self.shares_client.get_share(self.share["id"])
+        parent = self.shares_client.get_share(share["id"])
 
         # create snapshot
-        snap = self.create_snapshot_wait_for_active(
-            self.share["id"], cleanup_in_class=False)
+        snap = self.create_snapshot_wait_for_active(share["id"],
+                                                    cleanup_in_class=False)
 
         # create share from snapshot
         child = self.create_share(self.protocol,
-                                  share_type_id=self.share_type_id,
                                   snapshot_id=snap["id"],
                                   cleanup_in_class=False)
 
@@ -226,7 +247,7 @@
         # verify share, created from snapshot
         get = self.shares_client.get_share(child["id"])
         keys = {
-            "share": self.share["id"],
+            "share": share["id"],
             "actual_sn": get["share_network_id"],
             "expected_sn": parent["share_network_id"],
         }
diff --git a/manila_tempest_tests/tests/api/test_shares_actions.py b/manila_tempest_tests/tests/api/test_shares_actions.py
index 12af9f5..6c2bfaa 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions.py
@@ -41,7 +41,12 @@
         cls.shares = []
 
         # create share_type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        if CONF.share.capability_create_share_from_snapshot_support:
+            extra_specs.update({'create_share_from_snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
         # create share
@@ -369,7 +374,7 @@
 
     @decorators.idempotent_id('f446e8cb-5bef-45ac-8b87-f4136f44ca69')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.36")
+    @utils.skip_if_microversion_not_supported("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 +383,7 @@
 
     @decorators.idempotent_id('1276b97b-cf46-4953-973f-f995985a1ce4')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.36")
+    @utils.skip_if_microversion_not_supported("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 +433,7 @@
 
     @decorators.idempotent_id('0019afa2-fae2-417f-a7e0-2af665a966b0')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.42")
+    @utils.skip_if_microversion_not_supported("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 +451,7 @@
         if version is None:
             snapshot = self.shares_client.get_snapshot(self.snap["id"])
         else:
-            utils.skip_if_microversion_not_supported(version)
+            utils.check_skip_if_microversion_not_supported(version)
             snapshot = self.shares_v2_client.get_snapshot(
                 self.snap["id"], version=version)
 
@@ -523,7 +528,7 @@
         if version is None:
             snaps = self.shares_client.list_snapshots_with_detail()
         else:
-            utils.skip_if_microversion_not_supported(version)
+            utils.check_skip_if_microversion_not_supported(version)
             snaps = self.shares_v2_client.list_snapshots_with_detail(
                 version=version, params=params)
 
@@ -681,7 +686,10 @@
         super(SharesRenameTest, cls).resource_setup()
 
         # create share_type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
         # create share
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 f7acfda..863654f 100644
--- a/manila_tempest_tests/tests/api/test_shares_actions_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_actions_negative.py
@@ -37,7 +37,10 @@
         cls.share_name = data_utils.rand_name("tempest-share-name")
         cls.share_desc = data_utils.rand_name("tempest-share-description")
         # create share_type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
         cls.share = cls.create_share(
@@ -186,7 +189,7 @@
 
     @decorators.idempotent_id('ffc3dc76-2f92-4308-a125-1d3905ed72ba')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
-    @utils.skip_if_microversion_lt("2.35")
+    @utils.skip_if_microversion_not_supported("2.35")
     @ddt.data('path', 'id')
     def test_list_shares_with_export_location_not_exist(
             self, export_location_type):
diff --git a/manila_tempest_tests/tests/api/test_shares_from_snapshot_across_pools.py b/manila_tempest_tests/tests/api/test_shares_from_snapshot_across_pools.py
index c86c56d..9637c1b 100644
--- a/manila_tempest_tests/tests/api/test_shares_from_snapshot_across_pools.py
+++ b/manila_tempest_tests/tests/api/test_shares_from_snapshot_across_pools.py
@@ -68,7 +68,7 @@
             raise cls.skipException(
                 'Create share from snapshot in another pool or az tests are '
                 'disabled.')
-        utils.check_skip_if_microversion_lt("2.54")
+        utils.check_skip_if_microversion_not_supported("2.54")
 
     @decorators.idempotent_id('6f1fa7d0-94f2-4373-8730-b0986781cc88')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
diff --git a/manila_tempest_tests/tests/api/test_shares_negative.py b/manila_tempest_tests/tests/api/test_shares_negative.py
index ac4b3f1..1793c1c 100644
--- a/manila_tempest_tests/tests/api/test_shares_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_negative.py
@@ -21,6 +21,7 @@
 
 from manila_tempest_tests import share_exceptions
 from manila_tempest_tests.tests.api import base
+from manila_tempest_tests import utils
 
 CONF = config.CONF
 
@@ -31,7 +32,12 @@
     def resource_setup(cls):
         super(SharesNegativeTest, cls).resource_setup()
         # create share_type
-        cls.share_type = cls._create_share_type()
+        extra_specs = {}
+        if CONF.share.capability_snapshot_support:
+            extra_specs.update({'snapshot_support': True})
+        if CONF.share.capability_create_share_from_snapshot_support:
+            extra_specs.update({'create_share_from_snapshot_support': True})
+        cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
     @decorators.idempotent_id('b9bb8dee-0c7c-4e51-909c-028335b1a6a0')
@@ -60,7 +66,6 @@
         "Create share from snapshot tests are disabled.")
     def test_create_share_from_snap_with_less_size(self):
         # requires minimum 5Gb available space
-
         skip_msg = "Check disc space for this test"
 
         try:  # create share
@@ -283,7 +288,7 @@
         self.assertRaises(lib_exc.NotFound,
                           self.shares_client.delete_share, '')
 
-    @base.skip_if_microversion_lt("2.61")
+    @utils.skip_if_microversion_not_supported("2.61")
     @decorators.idempotent_id('b8097d56-067e-4d7c-8401-31bc7021fe86')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_create_share_size_greater_than_specified_in_share_type(self):
@@ -293,7 +298,7 @@
                           size=int(CONF.share.share_size) + 5,
                           share_type_id=self.share_type_min_2_max_5_id)
 
-    @base.skip_if_microversion_lt("2.61")
+    @utils.skip_if_microversion_not_supported("2.61")
     @decorators.idempotent_id('b8097d56-067e-4d7c-8401-31bc7021fe87')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
     def test_create_share_size_less_than_specified_in_share_type(self):
diff --git a/manila_tempest_tests/tests/api/test_snapshot_rules.py b/manila_tempest_tests/tests/api/test_snapshot_rules.py
index 615c68d..d9588ec 100644
--- a/manila_tempest_tests/tests/api/test_snapshot_rules.py
+++ b/manila_tempest_tests/tests/api/test_snapshot_rules.py
@@ -35,7 +35,10 @@
     def resource_setup(cls):
         super(BaseShareSnapshotRulesTest, cls).resource_setup()
         # create share_type
-        extra_specs = {'mount_snapshot_support': 'True'}
+        extra_specs = {
+            'snapshot_support': True,
+            'mount_snapshot_support': True,
+        }
         cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
 
@@ -80,7 +83,7 @@
             msg = "IP rule tests for %s protocol are disabled." % cls.protocol
             raise cls.skipException(msg)
 
-        utils.check_skip_if_microversion_lt('2.32')
+        utils.check_skip_if_microversion_not_supported('2.32')
 
     @classmethod
     def resource_setup(cls):
@@ -108,7 +111,7 @@
             msg = ("User rule tests for %s protocol are "
                    "disabled." % cls.protocol)
             raise cls.skipException(msg)
-        utils.check_skip_if_microversion_lt('2.32')
+        utils.check_skip_if_microversion_not_supported('2.32')
 
     @classmethod
     def resource_setup(cls):
diff --git a/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py b/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
index 8b3f2eb..bf1ef1a 100644
--- a/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
@@ -44,13 +44,16 @@
             msg = "IP rule tests for %s protocol are disabled." % cls.protocol
             raise cls.skipException(msg)
 
-        utils.check_skip_if_microversion_lt('2.32')
+        utils.check_skip_if_microversion_not_supported('2.32')
 
     @classmethod
     def resource_setup(cls):
         super(SnapshotIpRulesForNFSNegativeTest, cls).resource_setup()
         # create share type
-        extra_specs = {'mount_snapshot_support': 'True'}
+        extra_specs = {
+            'snapshot_support': True,
+            'mount_snapshot_support': True,
+        }
         cls.share_type = cls._create_share_type(specs=extra_specs)
         cls.share_type_id = cls.share_type['id']
         # create share
diff --git a/manila_tempest_tests/tests/scenario/manager_share.py b/manila_tempest_tests/tests/scenario/manager_share.py
index 0f55d6e..52dc7f0 100644
--- a/manila_tempest_tests/tests/scenario/manager_share.py
+++ b/manila_tempest_tests/tests/scenario/manager_share.py
@@ -268,12 +268,13 @@
     def migration_complete(self, share_id, dest_host):
         return self._migration_complete(share_id, dest_host)
 
-    def create_share(self, **kwargs):
+    def create_share(self, extra_specs=None, **kwargs):
         kwargs.update({
             'share_protocol': self.protocol,
         })
         if not ('share_type_id' in kwargs or 'snapshot_id' in kwargs):
-            default_share_type_id = self.get_share_type()['id']
+            default_share_type_id = self.get_share_type(
+                extra_specs=extra_specs)['id']
             kwargs.update({'share_type_id': default_share_type_id})
         if CONF.share.multitenancy_enabled:
             kwargs.update({'share_network_id': self.share_network['id']})
@@ -453,15 +454,17 @@
         return self.os_primary.servers_client.show_server(
             instance_id)["server"]
 
-    def get_share_type(self):
+    def get_share_type(self, extra_specs=None):
         if CONF.share.default_share_type_name:
             return self.shares_client.get_default_share_type()['share_type']
+        extra_specs_dict = {
+            'driver_handles_share_servers': CONF.share.multitenancy_enabled
+        }
+        if extra_specs:
+            extra_specs_dict.update(extra_specs)
         return self._create_share_type(
             data_utils.rand_name("share_type"),
-            extra_specs={
-                'snapshot_support': CONF.share.capability_snapshot_support,
-                'driver_handles_share_servers': CONF.share.multitenancy_enabled
-            },)['share_type']
+            extra_specs=extra_specs_dict)['share_type']
 
     def get_share_export_locations(self, share):
         if utils.is_microversion_lt(CONF.share.max_api_microversion, "2.9"):
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 9f0ec70..e9e9a14 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)
-    @utils.skip_if_microversion_lt("2.29")
+    @utils.skip_if_microversion_not_supported("2.29")
     @testtools.skipUnless(CONF.share.run_host_assisted_migration_tests or
                           CONF.share.run_driver_assisted_migration_tests,
                           "Share migration tests are disabled.")
@@ -252,7 +252,8 @@
         instance = self.boot_instance(wait_until="BUILD")
 
         # 2 - Create share S1, ok, created
-        parent_share = self.create_share()
+        extra_specs = {'snapshot_support': True}
+        parent_share = self.create_share(extra_specs=extra_specs)
         parent_share_export_location = self.get_user_export_locations(
             parent_share)[0]
 
@@ -340,7 +341,7 @@
 
     @decorators.idempotent_id('c98e6876-3a4f-40e8-8b4f-023c94c242c3')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
-    @utils.skip_if_microversion_lt("2.32")
+    @utils.skip_if_microversion_not_supported("2.32")
     @testtools.skipUnless(CONF.share.run_mount_snapshot_tests,
                           'Mountable snapshots tests are disabled.')
     @testtools.skipUnless(CONF.share.run_snapshot_tests,
@@ -350,7 +351,8 @@
         instance = self.boot_instance(wait_until="BUILD")
 
         # 2 - Create share S1, ok, created
-        parent_share = self.create_share()
+        extra_specs = {'snapshot_support': True}
+        parent_share = self.create_share(extra_specs=extra_specs)
         user_export_location = self.get_user_export_locations(parent_share)[0]
 
         # Create client User Virtual Machine
diff --git a/manila_tempest_tests/utils.py b/manila_tempest_tests/utils.py
index 650614d..7625460 100644
--- a/manila_tempest_tests/utils.py
+++ b/manila_tempest_tests/utils.py
@@ -95,23 +95,8 @@
     return lambda f: f
 
 
-def skip_if_microversion_lt(microversion):
-    """Decorator for tests that are microversion-specific."""
-    if is_microversion_lt(CONF.share.max_api_microversion, microversion):
-        reason = ("Skipped. Test requires microversion greater than or "
-                  "equal to '%s'." % microversion)
-        return testtools.skip(reason)
-    return lambda f: f
-
-
-def check_skip_if_microversion_lt(microversion):
-    if is_microversion_lt(CONF.share.max_api_microversion, microversion):
-        reason = ("Skipped. Test requires microversion greater than or "
-                  "equal to '%s'." % microversion)
-        raise testtools.TestCase.skipException(reason)
-
-
 def check_skip_if_microversion_not_supported(microversion):
+    """Callable method for tests that are microversion-specific."""
     if not is_microversion_supported(microversion):
         reason = ("Skipped. Test requires microversion '%s'." % microversion)
         raise testtools.TestCase.skipException(reason)
diff --git a/setup.cfg b/setup.cfg
index ebb8f8c..457bfc2 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,11 +1,11 @@
 [metadata]
 name = manila-tempest-plugin
 summary = Tempest plugin manila-tempest-plugin
-description-file =
+description_file =
     README.rst
 author = OpenStack
-author-email = openstack-discuss@lists.openstack.org
-home-page = https://docs.openstack.org/manila/latest/
+author_email = openstack-discuss@lists.openstack.org
+home_page = https://docs.openstack.org/manila/latest/
 classifier =
     Environment :: OpenStack
     Intended Audience :: Information Technology
diff --git a/zuul.d/manila-tempest-jobs.yaml b/zuul.d/manila-tempest-jobs.yaml
index 7d7b08e..164db72 100644
--- a/zuul.d/manila-tempest-jobs.yaml
+++ b/zuul.d/manila-tempest-jobs.yaml
@@ -28,7 +28,6 @@
         - manila-tempest-plugin
       devstack_plugins:
         manila: https://opendev.org/openstack/manila
-        manila-tempest-plugin: https://opendev.org/openstack/manila-tempest-plugin
       devstack_services:
         cinder: false
         s-account: false
@@ -88,7 +87,6 @@
         - manila-tempest-plugin
       devstack_plugins:
         manila: https://opendev.org/openstack/manila
-        manila-tempest-plugin: https://opendev.org/openstack/manila-tempest-plugin
       test_results_stage_name: test_results
       zuul_copy_output:
         '{{ devstack_base_dir }}/tempest/etc/tempest.conf': logs