blob: ee1b5e5b3b082c55cc049cc4b51722a299b5b0c0 [file] [log] [blame]
huangtianhua1346d702013-12-09 18:42:35 +08001# Copyright 2013 Huawei Technologies Co.,LTD
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Earle F. Philhower, III568865f2015-05-18 14:36:55 -070016from testtools import matchers
17
huangtianhua1346d702013-12-09 18:42:35 +080018from tempest.api.volume import base
Takeaki Matsumotoa08e2e52015-09-02 13:52:26 +090019from tempest import config
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080020from tempest.lib import decorators
huangtianhua1346d702013-12-09 18:42:35 +080021
Takeaki Matsumotoa08e2e52015-09-02 13:52:26 +090022CONF = config.CONF
23
huangtianhua1346d702013-12-09 18:42:35 +080024
Ken'ichi Ohmichie8afb8c2017-03-27 11:25:37 -070025class SnapshotMetadataTestJSON(base.BaseVolumeTest):
zhufla5682372020-08-14 14:56:57 +080026 """Test snapshot metadata"""
27
Takeaki Matsumotoa08e2e52015-09-02 13:52:26 +090028 @classmethod
29 def skip_checks(cls):
Ken'ichi Ohmichie8afb8c2017-03-27 11:25:37 -070030 super(SnapshotMetadataTestJSON, cls).skip_checks()
Takeaki Matsumotoa08e2e52015-09-02 13:52:26 +090031 if not CONF.volume_feature_enabled.snapshot:
32 raise cls.skipException("Cinder snapshot feature disabled")
huangtianhua1346d702013-12-09 18:42:35 +080033
34 @classmethod
Andrea Frittoli61a12e22014-09-15 13:14:54 +010035 def resource_setup(cls):
Ken'ichi Ohmichie8afb8c2017-03-27 11:25:37 -070036 super(SnapshotMetadataTestJSON, cls).resource_setup()
huangtianhua1346d702013-12-09 18:42:35 +080037 # Create a volume
38 cls.volume = cls.create_volume()
39 # Create a snapshot
40 cls.snapshot = cls.create_snapshot(volume_id=cls.volume['id'])
huangtianhua1346d702013-12-09 18:42:35 +080041
42 def tearDown(self):
43 # Update the metadata to {}
lkuchlanb21fc572016-11-28 12:25:22 +020044 self.snapshots_client.update_snapshot_metadata(
guo yunxian07322542016-11-10 19:55:37 +080045 self.snapshot['id'], metadata={})
Ken'ichi Ohmichie8afb8c2017-03-27 11:25:37 -070046 super(SnapshotMetadataTestJSON, self).tearDown()
huangtianhua1346d702013-12-09 18:42:35 +080047
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080048 @decorators.idempotent_id('a2f20f99-e363-4584-be97-bc33afb1a56c')
guo yunxian07322542016-11-10 19:55:37 +080049 def test_crud_snapshot_metadata(self):
zhufla5682372020-08-14 14:56:57 +080050 """Test create/get/update/delete snapshot metadata"""
huangtianhua1346d702013-12-09 18:42:35 +080051 # Create metadata for the snapshot
52 metadata = {"key1": "value1",
53 "key2": "value2",
54 "key3": "value3"}
huangtianhua1346d702013-12-09 18:42:35 +080055 update = {"key3": "value3_update",
56 "key4": "value4"}
guo yunxian07322542016-11-10 19:55:37 +080057 expect = {"key4": "value4"}
58 # Create metadata
lkuchlanb21fc572016-11-28 12:25:22 +020059 body = self.snapshots_client.create_snapshot_metadata(
guo yunxian07322542016-11-10 19:55:37 +080060 self.snapshot['id'], metadata)['metadata']
jeremy.zhange280f662017-06-30 17:38:58 +080061 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
Earle F. Philhower, III568865f2015-05-18 14:36:55 -070062
huangtianhua1346d702013-12-09 18:42:35 +080063 # Get the metadata of the snapshot
lkuchlanb21fc572016-11-28 12:25:22 +020064 body = self.snapshots_client.show_snapshot_metadata(
guo yunxian07322542016-11-10 19:55:37 +080065 self.snapshot['id'])['metadata']
66 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()),
67 'Create snapshot metadata failed')
68
69 # Update metadata
70 body = self.snapshots_client.update_snapshot_metadata(
71 self.snapshot['id'], metadata=update)['metadata']
jeremy.zhange280f662017-06-30 17:38:58 +080072 self.assertEqual(update, body)
guo yunxian07322542016-11-10 19:55:37 +080073 body = self.snapshots_client.show_snapshot_metadata(
74 self.snapshot['id'])['metadata']
75 self.assertEqual(update, body, 'Update snapshot metadata failed')
76
77 # Delete one item metadata of the snapshot
78 self.snapshots_client.delete_snapshot_metadata_item(
79 self.snapshot['id'], "key3")
80 body = self.snapshots_client.show_snapshot_metadata(
81 self.snapshot['id'])['metadata']
82 self.assertThat(body.items(), matchers.ContainsAll(expect.items()),
83 'Delete one item metadata of the snapshot failed')
84 self.assertNotIn("key3", body)
huangtianhua1346d702013-12-09 18:42:35 +080085
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080086 @decorators.idempotent_id('e8ff85c5-8f97-477f-806a-3ac364a949ed')
jeremy.zhang69719072017-07-04 13:12:35 +080087 def test_update_show_snapshot_metadata_item(self):
zhufla5682372020-08-14 14:56:57 +080088 """Test update/show snapshot metadata item"""
huangtianhua1346d702013-12-09 18:42:35 +080089 metadata = {"key1": "value1",
90 "key2": "value2",
91 "key3": "value3"}
92 update_item = {"key3": "value3_update"}
93 expect = {"key1": "value1",
94 "key2": "value2",
95 "key3": "value3_update"}
96 # Create metadata for the snapshot
jeremy.zhange280f662017-06-30 17:38:58 +080097 self.snapshots_client.create_snapshot_metadata(
98 self.snapshot['id'], metadata)
huangtianhua1346d702013-12-09 18:42:35 +080099 # Get the metadata of the snapshot
lkuchlanb21fc572016-11-28 12:25:22 +0200100 body = self.snapshots_client.show_snapshot_metadata(
guo yunxian07322542016-11-10 19:55:37 +0800101 self.snapshot['id'])['metadata']
Earle F. Philhower, III568865f2015-05-18 14:36:55 -0700102 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua1346d702013-12-09 18:42:35 +0800103 # Update metadata item
lkuchlanb21fc572016-11-28 12:25:22 +0200104 body = self.snapshots_client.update_snapshot_metadata_item(
guo yunxian07322542016-11-10 19:55:37 +0800105 self.snapshot['id'], "key3", meta=update_item)['meta']
jeremy.zhange280f662017-06-30 17:38:58 +0800106 self.assertEqual(update_item, body)
jeremy.zhang69719072017-07-04 13:12:35 +0800107
108 # Get a specific metadata item of the snapshot
109 body = self.snapshots_client.show_snapshot_metadata_item(
110 self.snapshot['id'], "key3")['meta']
111 self.assertEqual({"key3": expect['key3']}, body)
112
huangtianhua1346d702013-12-09 18:42:35 +0800113 # Get the metadata of the snapshot
lkuchlanb21fc572016-11-28 12:25:22 +0200114 body = self.snapshots_client.show_snapshot_metadata(
guo yunxian07322542016-11-10 19:55:37 +0800115 self.snapshot['id'])['metadata']
Earle F. Philhower, III568865f2015-05-18 14:36:55 -0700116 self.assertThat(body.items(), matchers.ContainsAll(expect.items()))