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 532e773..189ab34 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
@@ -136,13 +136,16 @@
 
         self.assertDictMatch(group_specs, sg_type['group_specs'])
 
-        group_specs = {'key1': 'value3', 'key2': 'value2'}
+        group_specs = {'key1': 'value1', 'key2': 'value2'}
 
         self.shares_v2_client.update_share_group_type_spec(
             sg_type['id'], 'key1', 'value3')
         sg_type = self.shares_v2_client.get_share_group_type(sg_type['id'])
 
-        self.assertDictMatch(group_specs, sg_type['group_specs'])
+        self.assertIn('key1', sg_type['group_specs'])
+        self.assertIn('key2', sg_type['group_specs'])
+        self.assertEqual('value3', sg_type['group_specs']['key1'])
+        self.assertEqual(group_specs['key2'], sg_type['group_specs']['key2'])
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     def test_update_all_share_group_type_specs_min(self):
@@ -164,7 +167,9 @@
             sg_type['id'], group_specs)
         sg_type = self.shares_v2_client.get_share_group_type(sg_type['id'])
 
-        self.assertDictMatch(group_specs, sg_type['group_specs'])
+        for k, v in group_specs.items():
+            self.assertIn(k, sg_type['group_specs'])
+            self.assertEqual(v, sg_type['group_specs'][k])
 
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     def test_delete_single_share_group_type_spec_min(self):
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 e289005..dc1f2ae 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_groups.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups.py
@@ -48,7 +48,7 @@
             cleanup_in_class=True,
             version=constants.MIN_SHARE_GROUP_MICROVERSION)
 
-    @tc.attr(base.TAG_POSITIVE, base.TAG_API)
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_create_share_group_with_single_share_type_min(self):
         share_group = self.create_share_group(
             share_group_type_id=self.sg_type['id'],
@@ -81,7 +81,7 @@
             'Expected %s, got %s' % (
                 share_group['id'], expected_share_types, actual_share_types))
 
-    @tc.attr(base.TAG_POSITIVE, base.TAG_API)
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_create_share_group_with_multiple_share_types_min(self):
         share_group = self.create_share_group(
             share_group_type_id=self.sg_type['id'],
@@ -114,7 +114,7 @@
             'Expected %s, got %s' % (
                 share_group['id'], expected_share_types, actual_share_types))
 
-    @tc.attr(base.TAG_POSITIVE, base.TAG_API)
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_default_share_group_type_applied(self):
         default_type = self.shares_v2_client.get_default_share_group_type()
         default_share_types = default_type['share_types']
@@ -142,7 +142,7 @@
 
     @testtools.skipUnless(
         CONF.share.multitenancy_enabled, "Only for multitenancy.")
-    @tc.attr(base.TAG_POSITIVE, base.TAG_API)
+    @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
         orig_sg = self.create_share_group(
@@ -173,3 +173,19 @@
             orig_sg['share_network_id'], new_sg['share_network_id'])
         self.assertEqual(
             orig_sg['share_server_id'], new_sg['share_server_id'])
+
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
+    def test_create_sg_with_sg_type_but_without_any_group_specs(self):
+        # Create share group type not specifying any group specs
+        sg_type = self.create_share_group_type(
+            name=data_utils.rand_name("tempest-manila"),
+            share_types=[self.share_type['id']],
+            group_specs={},
+            cleanup_in_class=False)
+
+        # Create share group, it should be created always, because we do not
+        # restrict choice anyhow.
+        self.create_share_group(
+            share_type_ids=[self.share_type['id']],
+            share_group_type_id=sg_type['id'],
+            cleanup_in_class=False)
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
new file mode 100644
index 0000000..979e6a4
--- /dev/null
+++ b/manila_tempest_tests/tests/api/admin/test_share_groups_negative.py
@@ -0,0 +1,56 @@
+# Copyright 2017 Mirantis Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+import testtools
+from testtools import testcase as tc
+
+from manila_tempest_tests.common import constants
+from manila_tempest_tests import share_exceptions
+from manila_tempest_tests.tests.api import base
+
+CONF = config.CONF
+
+
+@testtools.skipUnless(
+    CONF.share.run_share_group_tests, 'Share Group tests disabled.')
+@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
+class ShareGroupsNegativeTest(base.BaseSharesAdminTest):
+
+    @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
+
+        # 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,
+            share_types=[share_type['id']],
+            group_specs={"consistent_snapshot_support": "fake"},
+            cleanup_in_class=False)
+
+        # Try create share group
+        self.assertRaises(
+            share_exceptions.ShareGroupBuildErrorException,
+            self.create_share_group,
+            share_type_ids=[share_type['id']],
+            share_group_type_id=sg_type['id'],
+            cleanup_in_class=False)
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index de298da..236351d 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -595,6 +595,11 @@
                                 group_specs=None, client=None,
                                 cleanup_in_class=True, **kwargs):
         client = client or cls.shares_v2_client
+        if group_specs is None:
+            group_specs = {
+                'consistent_snapshot_support': (
+                    CONF.share.capability_sg_consistent_snapshot_support),
+            }
         share_group_type = client.create_share_group_type(
             name=name,
             share_types=share_types,
