blob: 0505f1996d115c07f0ccfb431f81c47f829453ed [file] [log] [blame]
huangtianhua0ff41682013-12-16 14:49:31 +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
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090016from testtools import matchers
Giulio Fidente5ed48ce2014-01-09 18:28:28 +010017
Zhi Kun Liu02a99062014-01-02 19:00:08 +080018from tempest.api.volume import base
huangtianhua0ff41682013-12-16 14:49:31 +080019from tempest import test
20
21
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +080022class VolumesV2MetadataTest(base.BaseVolumeTest):
huangtianhua0ff41682013-12-16 14:49:31 +080023
24 @classmethod
Zhi Kun Liu43f9af12014-03-19 21:01:35 +080025 @test.safe_setup
huangtianhua0ff41682013-12-16 14:49:31 +080026 def setUpClass(cls):
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +080027 super(VolumesV2MetadataTest, cls).setUpClass()
huangtianhua0ff41682013-12-16 14:49:31 +080028 # Create a volume
29 cls.volume = cls.create_volume()
30 cls.volume_id = cls.volume['id']
31
huangtianhua0ff41682013-12-16 14:49:31 +080032 def tearDown(self):
33 # Update the metadata to {}
34 self.volumes_client.update_volume_metadata(self.volume_id, {})
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +080035 super(VolumesV2MetadataTest, self).tearDown()
huangtianhua0ff41682013-12-16 14:49:31 +080036
37 @test.attr(type='gate')
38 def test_create_get_delete_volume_metadata(self):
39 # Create metadata for the volume
40 metadata = {"key1": "value1",
41 "key2": "value2",
Ryan McNair9acfcf72014-01-27 21:06:48 +000042 "key3": "value3",
43 "key4": "<value&special_chars>"}
huangtianhua0ff41682013-12-16 14:49:31 +080044
45 rsp, body = self.volumes_client.create_volume_metadata(self.volume_id,
46 metadata)
47 self.assertEqual(200, rsp.status)
48 # Get the metadata of the volume
49 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
50 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090051 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080052 # Delete one item metadata of the volume
53 rsp, body = self.volumes_client.delete_volume_metadata_item(
54 self.volume_id,
55 "key1")
56 self.assertEqual(200, rsp.status)
57 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
58 self.assertNotIn("key1", body)
Ryan McNair9acfcf72014-01-27 21:06:48 +000059 del metadata["key1"]
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090060 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080061
62 @test.attr(type='gate')
63 def test_update_volume_metadata(self):
64 # Update metadata for the volume
65 metadata = {"key1": "value1",
66 "key2": "value2",
67 "key3": "value3"}
68
69 update = {"key4": "value4",
70 "key1": "value1_update"}
71
72 # Create metadata for the volume
73 resp, body = self.volumes_client.create_volume_metadata(
74 self.volume_id,
75 metadata)
76 self.assertEqual(200, resp.status)
77 # Get the metadata of the volume
78 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
79 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090080 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080081 # Update metadata
82 resp, body = self.volumes_client.update_volume_metadata(
83 self.volume_id,
84 update)
85 self.assertEqual(200, resp.status)
86 # Get the metadata of the volume
87 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
88 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090089 self.assertThat(body.items(), matchers.ContainsAll(update.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080090
91 @test.attr(type='gate')
92 def test_update_volume_metadata_item(self):
93 # Update metadata item for the volume
94 metadata = {"key1": "value1",
95 "key2": "value2",
96 "key3": "value3"}
huangtianhua0ff41682013-12-16 14:49:31 +080097 update_item = {"key3": "value3_update"}
98 expect = {"key1": "value1",
99 "key2": "value2",
100 "key3": "value3_update"}
101 # Create metadata for the volume
102 resp, body = self.volumes_client.create_volume_metadata(
103 self.volume_id,
104 metadata)
105 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900106 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +0800107 # Update metadata item
108 resp, body = self.volumes_client.update_volume_metadata_item(
109 self.volume_id,
110 "key3",
111 update_item)
112 self.assertEqual(200, resp.status)
113 # Get the metadata of the volume
114 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
115 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900116 self.assertThat(body.items(), matchers.ContainsAll(expect.items()))
huangtianhua0ff41682013-12-16 14:49:31 +0800117
118
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +0800119class VolumesV2MetadataTestXML(VolumesV2MetadataTest):
120 _interface = "xml"
121
122
123class VolumesV1MetadataTest(VolumesV2MetadataTest):
124 _api_version = 1
125
126
127class VolumesV1MetadataTestXML(VolumesV1MetadataTest):
huangtianhua0ff41682013-12-16 14:49:31 +0800128 _interface = "xml"