Merge "Added test test_create_snapshot_over_quota_limit"
diff --git a/manila_tempest_tests/tests/api/test_metadata.py b/manila_tempest_tests/tests/api/test_metadata.py
index 5ca4e83..c8529a3 100644
--- a/manila_tempest_tests/tests/api/test_metadata.py
+++ b/manila_tempest_tests/tests/api/test_metadata.py
@@ -31,6 +31,19 @@
         # create share
         cls.share = cls.create_share(share_type_id=cls.share_type_id)
 
+    def _verify_share_metadata(self, share, md):
+
+        # get metadata of share
+        metadata = self.shares_client.get_metadata(share["id"])['metadata']
+
+        # verify metadata
+        self.assertEqual(md, metadata)
+
+        # verify metadata items
+        for key in md:
+            get_value = self.shares_client.get_metadata_item(share["id"], key)
+            self.assertEqual(md[key], get_value[key])
+
     @decorators.idempotent_id('9070249f-6e94-4a38-a036-08debee547c3')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
     def test_set_metadata_in_share_creation(self):
@@ -42,11 +55,8 @@
                                   metadata=md,
                                   cleanup_in_class=False)
 
-        # get metadata of share
-        metadata = self.shares_client.get_metadata(share["id"])['metadata']
-
         # verify metadata
-        self.assertEqual(md, metadata)
+        self._verify_share_metadata(share, md)
 
     @decorators.idempotent_id('2725ab8e-cc04-4032-9393-74726ba43eb7')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@@ -61,16 +71,8 @@
         # set metadata
         self.shares_client.set_metadata(share["id"], md)
 
-        # read metadata
-        get_md = self.shares_client.get_metadata(share["id"])['metadata']
-
         # verify metadata
-        self.assertEqual(md, get_md)
-
-        # verify metadata items
-        for key in md:
-            get_value = self.shares_client.get_metadata_item(share["id"], key)
-            self.assertEqual(md[key], get_value[key])
+        self._verify_share_metadata(share, md)
 
         # delete metadata
         for key in md.keys():
@@ -78,7 +80,73 @@
 
         # verify deletion of metadata
         get_metadata = self.shares_client.get_metadata(share["id"])['metadata']
-        self.assertEqual({}, get_metadata)
+        self.assertEmpty(get_metadata)
+
+    @decorators.idempotent_id('4e5f8159-62b6-4d5c-f729-d8b1f029d7de')
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
+    def test_set_metadata_not_delete_pre_metadata(self):
+        md1 = {u"key9": u"value9", u"key10": u"value10", }
+        md2 = {u"key11": u"value11", u"key12": u"value12", }
+
+        # create share
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
+
+        # set metadata
+        self.shares_client.set_metadata(share["id"], md1)
+
+        # verify metadata
+        self._verify_share_metadata(share, md1)
+
+        # set metadata again
+        self.shares_client.set_metadata(share["id"], md2)
+
+        # verify metadata
+        md1.update(md2)
+        md = md1
+
+        # verify metadata
+        self._verify_share_metadata(share, md)
+
+        # delete metadata
+        for key in md.keys():
+            self.shares_client.delete_metadata(share["id"], key)
+
+        # verify deletion of metadata
+        get_metadata = self.shares_client.get_metadata(share["id"])['metadata']
+        self.assertEmpty(get_metadata)
+
+    @decorators.idempotent_id('2ec70ba5-050b-3b17-c862-c149e53543c0')
+    @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
+    def test_set_metadata_key_already_exist(self):
+        md1 = {u"key9": u"value9", u"key10": u"value10", }
+        md2 = {u"key9": u"value13", u"key11": u"value11", }
+
+        # create share
+        share = self.create_share(share_type_id=self.share_type_id,
+                                  cleanup_in_class=False)
+
+        # set metadata
+        self.shares_client.set_metadata(share["id"], md1)
+
+        # verify metadata
+        self._verify_share_metadata(share, md1)
+
+        # set metadata again
+        self.shares_client.set_metadata(share["id"], md2)
+
+        # verify metadata
+        md = {u"key9": u"value13", u"key10": u"value10",
+              u"key11": u"value11"}
+        self._verify_share_metadata(share, md)
+
+        # delete metadata
+        for key in md.keys():
+            self.shares_client.delete_metadata(share["id"], key)
+
+        # verify deletion of metadata
+        get_metadata = self.shares_client.get_metadata(share["id"])['metadata']
+        self.assertEmpty(get_metadata)
 
     @decorators.idempotent_id('c94851f4-2559-4712-9297-9912db1da7ff')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@@ -97,11 +165,8 @@
         # update metadata
         self.shares_client.update_all_metadata(share["id"], md2)
 
-        # get metadata
-        get_md = self.shares_client.get_metadata(share["id"])['metadata']
-
         # verify metadata
-        self.assertEqual(md2, get_md)
+        self._verify_share_metadata(share, md2)
 
     @decorators.idempotent_id('698ba406-493f-4c69-a093-273676fed438')
     @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)