blob: 0d57d47428a8ea408e1772b2946655d5eee52b37 [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 Liu02a99062014-01-02 19:00:08 +080022class VolumeMetadataTest(base.BaseVolumeV1Test):
huangtianhua0ff41682013-12-16 14:49:31 +080023 _interface = "json"
24
25 @classmethod
Zhi Kun Liu43f9af12014-03-19 21:01:35 +080026 @test.safe_setup
huangtianhua0ff41682013-12-16 14:49:31 +080027 def setUpClass(cls):
28 super(VolumeMetadataTest, cls).setUpClass()
29 # Create a volume
30 cls.volume = cls.create_volume()
31 cls.volume_id = cls.volume['id']
32
huangtianhua0ff41682013-12-16 14:49:31 +080033 def tearDown(self):
34 # Update the metadata to {}
35 self.volumes_client.update_volume_metadata(self.volume_id, {})
36 super(VolumeMetadataTest, self).tearDown()
37
38 @test.attr(type='gate')
39 def test_create_get_delete_volume_metadata(self):
40 # Create metadata for the volume
41 metadata = {"key1": "value1",
42 "key2": "value2",
Ryan McNair9acfcf72014-01-27 21:06:48 +000043 "key3": "value3",
44 "key4": "<value&special_chars>"}
huangtianhua0ff41682013-12-16 14:49:31 +080045
46 rsp, body = self.volumes_client.create_volume_metadata(self.volume_id,
47 metadata)
48 self.assertEqual(200, rsp.status)
49 # Get the metadata of the volume
50 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
51 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090052 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080053 # Delete one item metadata of the volume
54 rsp, body = self.volumes_client.delete_volume_metadata_item(
55 self.volume_id,
56 "key1")
57 self.assertEqual(200, rsp.status)
58 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
59 self.assertNotIn("key1", body)
Ryan McNair9acfcf72014-01-27 21:06:48 +000060 del metadata["key1"]
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090061 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080062
63 @test.attr(type='gate')
64 def test_update_volume_metadata(self):
65 # Update metadata for the volume
66 metadata = {"key1": "value1",
67 "key2": "value2",
68 "key3": "value3"}
69
70 update = {"key4": "value4",
71 "key1": "value1_update"}
72
73 # Create metadata for the volume
74 resp, body = self.volumes_client.create_volume_metadata(
75 self.volume_id,
76 metadata)
77 self.assertEqual(200, resp.status)
78 # Get the metadata of the volume
79 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
80 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090081 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080082 # Update metadata
83 resp, body = self.volumes_client.update_volume_metadata(
84 self.volume_id,
85 update)
86 self.assertEqual(200, resp.status)
87 # Get the metadata of the volume
88 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
89 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090090 self.assertThat(body.items(), matchers.ContainsAll(update.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080091
92 @test.attr(type='gate')
93 def test_update_volume_metadata_item(self):
94 # Update metadata item for the volume
95 metadata = {"key1": "value1",
96 "key2": "value2",
97 "key3": "value3"}
huangtianhua0ff41682013-12-16 14:49:31 +080098 update_item = {"key3": "value3_update"}
99 expect = {"key1": "value1",
100 "key2": "value2",
101 "key3": "value3_update"}
102 # Create metadata for the volume
103 resp, body = self.volumes_client.create_volume_metadata(
104 self.volume_id,
105 metadata)
106 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900107 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +0800108 # Update metadata item
109 resp, body = self.volumes_client.update_volume_metadata_item(
110 self.volume_id,
111 "key3",
112 update_item)
113 self.assertEqual(200, resp.status)
114 # Get the metadata of the volume
115 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
116 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900117 self.assertThat(body.items(), matchers.ContainsAll(expect.items()))
huangtianhua0ff41682013-12-16 14:49:31 +0800118
119
120class VolumeMetadataTestXML(VolumeMetadataTest):
121 _interface = "xml"