Merge "Fix incorrect url request for share group type extra specs"
diff --git a/manila_tempest_tests/services/share/v2/json/shares_client.py b/manila_tempest_tests/services/share/v2/json/shares_client.py
index 9aac63e..6ea0b92 100644
--- a/manila_tempest_tests/services/share/v2/json/shares_client.py
+++ b/manila_tempest_tests/services/share/v2/json/shares_client.py
@@ -1299,7 +1299,7 @@
 
     def get_share_group_type_spec(self, share_group_type_id, group_spec_key,
                                   version=LATEST_MICROVERSION):
-        uri = "group-types/%s/group_specs/%s" % (
+        uri = "share-group-types/%s/group-specs/%s" % (
             share_group_type_id, group_spec_key)
         headers, extra_headers = utils.get_extra_headers(
             version, constants.SHARE_GROUPS_GRADUATION_VERSION)
@@ -1309,9 +1309,9 @@
         body = json.loads(body)
         return rest_client.ResponseBody(resp, body)
 
-    def list_share_group_type_specs(self, share_group_type_id, params=None,
-                                    version=LATEST_MICROVERSION):
-        uri = "share-group-types/%s/group_specs" % share_group_type_id
+    def get_share_group_type_specs(self, share_group_type_id, params=None,
+                                   version=LATEST_MICROVERSION):
+        uri = "share-group-types/%s/group-specs" % share_group_type_id
         headers, extra_headers = utils.get_extra_headers(
             version, constants.SHARE_GROUPS_GRADUATION_VERSION)
         if params is not None:
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 1bc522a..771be4f 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
@@ -142,6 +142,42 @@
 
         self.assertDictMatch(group_specs, sg_type['group_specs'])
 
+    @decorators.idempotent_id('dd620bfd-197b-4675-ace6-e26f809bb26e')
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API)
+    def test_get_one_share_group_type_extra_spec(self):
+        name = data_utils.rand_name('share-group-type')
+        group_specs = {'key1': 'value1', 'key2': 'value2'}
+
+        sg_type = self.create_share_group_type(
+            name=name,
+            share_types=self.share_type['id'],
+            group_specs=group_specs,
+            cleanup_in_class=False,
+            version=constants.MIN_SHARE_GROUP_MICROVERSION)
+
+        extra_spec = self.shares_v2_client.get_share_group_type_spec(
+            sg_type['id'], 'key1')
+
+        self.assertEqual({'key1': group_specs['key1']}, extra_spec)
+
+    @decorators.idempotent_id('eef69171-9757-423c-8cd4-487cbd84ca24')
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API)
+    def test_get_all_share_group_type_extra_specs(self):
+        name = data_utils.rand_name('share-group-type')
+        group_specs = {'key': 'value'}
+
+        sg_type = self.create_share_group_type(
+            name=name,
+            share_types=self.share_type['id'],
+            group_specs=group_specs,
+            cleanup_in_class=False,
+            version=constants.MIN_SHARE_GROUP_MICROVERSION)
+
+        extra_specs = self.shares_v2_client.get_share_group_type_specs(
+            sg_type['id'])
+
+        self.assertDictMatch(group_specs, extra_specs['group_specs'])
+
     @decorators.idempotent_id('15b44580-a34d-4e0d-a77b-0e76b45d6199')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API)
     @ddt.data(
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 391a6b4..778d7a7 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
@@ -44,6 +44,7 @@
         cls.share_group_type = cls.create_share_group_type(
             data_utils.rand_name("unique_sgt_name"),
             share_types=[cls.share_type['id']],
+            group_specs={"key": "value"},
             client=cls.admin_shares_v2_client)
 
     @decorators.idempotent_id('1f8e3f98-4df7-4383-94d6-4ad058ef79c1')
@@ -163,3 +164,27 @@
             self.admin_shares_v2_client.remove_access_from_share_group_type,
             data_utils.rand_name("fake"),
             self.admin_shares_v2_client.tenant_id)
+
+    @decorators.idempotent_id('3e763f5b-6663-4620-9471-ed3050da6201')
+    @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
+    def test_try_get_share_group_type_extra_specs_with_user(self):
+        self.assertRaises(
+            lib_exc.Forbidden,
+            self.shares_v2_client.get_share_group_type_specs,
+            self.share_group_type['id'])
+
+    @decorators.idempotent_id('2264f7eb-3ff0-47e9-8ab0-54694113db3d')
+    @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
+    def test_try_get_extra_specs_from_nonexistent_share_group_type(self):
+        self.assertRaises(
+            lib_exc.NotFound,
+            self.admin_shares_v2_client.get_share_group_type_specs,
+            data_utils.rand_name('fake'))
+
+    @decorators.idempotent_id('2be79455-0ce7-4ca6-818f-40651ba79c6e')
+    @tc.attr(base.TAG_NEGATIVE, base.TAG_API)
+    def test_try_get_extra_spec_with_nonexistent_key(self):
+        self.assertRaises(
+            lib_exc.NotFound,
+            self.admin_shares_v2_client.get_share_group_type_spec,
+            self.share_group_type['id'], 'fake_key')