Setup snapshot extra specs only if required

For legacy reasons we always included snapshot_support
and create_share_from_snapshot_support in all the
share types the tests created. These extra-specs are
no different from any other optional extra-specs in
manila, atleast since API version 2.24 (snapshot_support
was "implied"/"required" until API version 2.23). 2.24
is a really old version to support for tempest testing.

Since we always use the latest API version to create the
share types necessary, we only ever need 1 required
extra spec (driver_handles_share_servers) - lets supply
the rest only within tests that need to test snapshots
and shares from snapshots.

This patch also adds missing skip decorators for share
group tests that were testing snapshots.

Change-Id: Ifaceab574e3242e44a9cf1bea77a4be9e505d8b8
Related-Bug: #1922784
Signed-off-by: Goutham Pacha Ravi <gouthampravi@gmail.com>
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 e364206..d2c2c2d 100644
--- a/manila_tempest_tests/tests/api/admin/test_admin_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_admin_actions.py
@@ -36,10 +36,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 +55,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 +81,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(
@@ -133,7 +136,7 @@
     @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(
@@ -152,9 +155,10 @@
     @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 +167,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 4ec0e6c..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,7 +145,7 @@
         # 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)
@@ -148,7 +153,7 @@
     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
diff --git a/manila_tempest_tests/tests/api/admin/test_migration.py b/manila_tempest_tests/tests/api/admin/test_migration.py
index 952b788..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
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 922a4db..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
diff --git a/manila_tempest_tests/tests/api/admin/test_quotas.py b/manila_tempest_tests/tests/api/admin/test_quotas.py
index 073b089..fc035a2 100644
--- a/manila_tempest_tests/tests/api/admin/test_quotas.py
+++ b/manila_tempest_tests/tests/api/admin/test_quotas.py
@@ -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()
@@ -901,6 +906,11 @@
     @testtools.skipUnless(
         CONF.share.run_share_group_tests, 'Share Group tests disabled.')
     @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_replication_actions.py b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
index 1c9b421..1c879b2 100644
--- a/manila_tempest_tests/tests/api/admin/test_replication_actions.py
+++ b/manila_tempest_tests/tests/api/admin/test_replication_actions.py
@@ -56,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_groups.py b/manila_tempest_tests/tests/api/admin/test_share_groups.py
index 80937a3..216409f 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups.py
@@ -45,10 +45,12 @@
     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
@@ -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 7e10806..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
@@ -41,16 +41,13 @@
     @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_servers_migration.py b/manila_tempest_tests/tests/api/admin/test_share_servers_migration.py
index b9e128c..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
@@ -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 dff105c..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
@@ -40,7 +40,8 @@
     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 6efb117..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
@@ -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,
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 c00df5d..1bfb3c8 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types.py
@@ -93,9 +93,17 @@
 
         # 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)
 
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 aaef4f9..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):
+        """Is snapshot_support really an optional extra-spec if API > v2.24?"""
         utils.check_skip_if_microversion_not_supported(version)
-        # Delete one extra spec for share type
+
+        # 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_shares_actions.py b/manila_tempest_tests/tests/api/admin/test_shares_actions.py
index 0c5e500..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']
 
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 9106987..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
@@ -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 d5afd0c..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
@@ -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,
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 54ea78d..73ad104 100755
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -852,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
@@ -1111,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):
@@ -1308,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_replication_snapshots.py b/manila_tempest_tests/tests/api/test_replication_snapshots.py
index 02ffe6c..f45425e 100644
--- a/manila_tempest_tests/tests/api/test_replication_snapshots.py
+++ b/manila_tempest_tests/tests/api/test_replication_snapshots.py
@@ -55,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_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_share_group_actions.py b/manila_tempest_tests/tests/api/test_share_group_actions.py
index 3940c29..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
@@ -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)
@@ -258,6 +265,8 @@
         *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.check_skip_if_microversion_not_supported(version)
 
@@ -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,6 +326,11 @@
         *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.check_skip_if_microversion_not_supported(version)
diff --git a/manila_tempest_tests/tests/api/test_share_groups.py b/manila_tempest_tests/tests/api/test_share_groups.py
index a7908ae..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
@@ -43,7 +44,12 @@
     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(
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 b92cc0b..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
@@ -42,7 +43,10 @@
     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(
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 123e053..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
@@ -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 dd94900..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(
diff --git a/manila_tempest_tests/tests/api/test_shares_negative.py b/manila_tempest_tests/tests/api/test_shares_negative.py
index 20c42fc..1793c1c 100644
--- a/manila_tempest_tests/tests/api/test_shares_negative.py
+++ b/manila_tempest_tests/tests/api/test_shares_negative.py
@@ -32,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')
@@ -61,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
diff --git a/manila_tempest_tests/tests/api/test_snapshot_rules.py b/manila_tempest_tests/tests/api/test_snapshot_rules.py
index 099ec75..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']
 
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 c8f2ce6..bf1ef1a 100644
--- a/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
+++ b/manila_tempest_tests/tests/api/test_snapshot_rules_negative.py
@@ -50,7 +50,10 @@
     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 edf4779..e9e9a14 100644
--- a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
+++ b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
@@ -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]
 
@@ -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