diff --git a/manila_tempest_tests/tests/api/test_metadata.py b/manila_tempest_tests/tests/api/test_metadata.py
index 862de50..be5b1cf 100644
--- a/manila_tempest_tests/tests/api/test_metadata.py
+++ b/manila_tempest_tests/tests/api/test_metadata.py
@@ -13,11 +13,14 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from tempest import config
 from tempest.lib import decorators
 from testtools import testcase as tc
 
 from manila_tempest_tests.tests.api import base
 
+CONF = config.CONF
+
 
 class SharesMetadataTest(base.BaseSharesMixedTest):
 
@@ -263,3 +266,35 @@
         body_get = self.shares_v2_client.get_metadata(
             self.share["id"])['metadata']
         self.assertEqual(max_value, body_get["key"])
+
+
+class SharesMetadataCEPHFSTest(base.BaseSharesMixedTest):
+
+    protocol = "cephfs"
+
+    @classmethod
+    def resource_setup(cls):
+        super(SharesMetadataCEPHFSTest, cls).resource_setup()
+        # 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(share_type_id=cls.share_type_id)
+
+    @classmethod
+    def skip_checks(cls):
+        super(SharesMetadataCEPHFSTest, cls).skip_checks()
+        if not (cls.protocol in CONF.share.enable_protocols):
+            msg = (
+                "CEPHFS filesystem metadata tests are disabled "
+                "for the %s protocol." % cls.protocol)
+            raise cls.skipException(msg)
+
+    @decorators.idempotent_id('58edc9c8-8b85-49aa-80aa-209fc8f40a13')
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
+    def test_cephfs_share_contains_mount_option(self):
+        body_get = self.shares_v2_client.get_metadata(
+            self.share["id"])['metadata']
+
+        self.assertIn("__mount_options", body_get)
+        self.assertIn("fs", body_get["__mount_options"])
diff --git a/manila_tempest_tests/tests/api/test_scheduler_hints.py b/manila_tempest_tests/tests/api/test_scheduler_hints.py
index 5012f17..e5e51a5 100644
--- a/manila_tempest_tests/tests/api/test_scheduler_hints.py
+++ b/manila_tempest_tests/tests/api/test_scheduler_hints.py
@@ -72,14 +72,17 @@
         # get metadata of share
         metadata_a = self.shares_v2_client.get_metadata(
             self.share_a["id"])['metadata']
-        md_a = {"__affinity_same_host": "%s" % share_b["id"]}
+        expected_md_a = {"__affinity_same_host": "%s" % share_b["id"]}
         metadata_b = self.shares_v2_client.get_metadata(
             share_b["id"])['metadata']
-        md_b = {"__affinity_same_host": "%s" % self.share_a["id"]}
+        expected_md_b = {"__affinity_same_host": "%s" % self.share_a["id"]}
 
         # verify metadata
-        self.assertEqual(md_a, metadata_a)
-        self.assertEqual(md_b, metadata_b)
+        for key, value in expected_md_a.items():
+            self.assertEqual(value, metadata_a.get(key))
+
+        for key, value in expected_md_b.items():
+            self.assertEqual(value, metadata_b.get(key))
 
     @decorators.idempotent_id('6569e0c3-43c9-4ee2-84ff-ea7fa8da8110')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
