blob: e94c7009ae51cef5c61c3010f81e072c1fef8b41 [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
26 def setUpClass(cls):
27 super(VolumeMetadataTest, cls).setUpClass()
28 # Create a volume
29 cls.volume = cls.create_volume()
30 cls.volume_id = cls.volume['id']
31
32 @classmethod
33 def tearDownClass(cls):
34 super(VolumeMetadataTest, cls).tearDownClass()
35
36 def tearDown(self):
37 # Update the metadata to {}
38 self.volumes_client.update_volume_metadata(self.volume_id, {})
39 super(VolumeMetadataTest, self).tearDown()
40
41 @test.attr(type='gate')
42 def test_create_get_delete_volume_metadata(self):
43 # Create metadata for the volume
44 metadata = {"key1": "value1",
45 "key2": "value2",
Ryan McNair9acfcf72014-01-27 21:06:48 +000046 "key3": "value3",
47 "key4": "<value&special_chars>"}
huangtianhua0ff41682013-12-16 14:49:31 +080048
49 rsp, body = self.volumes_client.create_volume_metadata(self.volume_id,
50 metadata)
51 self.assertEqual(200, rsp.status)
52 # Get the metadata of the volume
53 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
54 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090055 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080056 # Delete one item metadata of the volume
57 rsp, body = self.volumes_client.delete_volume_metadata_item(
58 self.volume_id,
59 "key1")
60 self.assertEqual(200, rsp.status)
61 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
62 self.assertNotIn("key1", body)
Ryan McNair9acfcf72014-01-27 21:06:48 +000063 del metadata["key1"]
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090064 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080065
66 @test.attr(type='gate')
67 def test_update_volume_metadata(self):
68 # Update metadata for the volume
69 metadata = {"key1": "value1",
70 "key2": "value2",
71 "key3": "value3"}
72
73 update = {"key4": "value4",
74 "key1": "value1_update"}
75
76 # Create metadata for the volume
77 resp, body = self.volumes_client.create_volume_metadata(
78 self.volume_id,
79 metadata)
80 self.assertEqual(200, resp.status)
81 # Get the metadata of the volume
82 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
83 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090084 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080085 # Update metadata
86 resp, body = self.volumes_client.update_volume_metadata(
87 self.volume_id,
88 update)
89 self.assertEqual(200, resp.status)
90 # Get the metadata of the volume
91 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
92 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +090093 self.assertThat(body.items(), matchers.ContainsAll(update.items()))
huangtianhua0ff41682013-12-16 14:49:31 +080094
95 @test.attr(type='gate')
96 def test_update_volume_metadata_item(self):
97 # Update metadata item for the volume
98 metadata = {"key1": "value1",
99 "key2": "value2",
100 "key3": "value3"}
huangtianhua0ff41682013-12-16 14:49:31 +0800101 update_item = {"key3": "value3_update"}
102 expect = {"key1": "value1",
103 "key2": "value2",
104 "key3": "value3_update"}
105 # Create metadata for the volume
106 resp, body = self.volumes_client.create_volume_metadata(
107 self.volume_id,
108 metadata)
109 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900110 self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
huangtianhua0ff41682013-12-16 14:49:31 +0800111 # Update metadata item
112 resp, body = self.volumes_client.update_volume_metadata_item(
113 self.volume_id,
114 "key3",
115 update_item)
116 self.assertEqual(200, resp.status)
117 # Get the metadata of the volume
118 resp, body = self.volumes_client.get_volume_metadata(self.volume_id)
119 self.assertEqual(200, resp.status)
Masayuki Igawaba7bcf62014-02-17 14:56:41 +0900120 self.assertThat(body.items(), matchers.ContainsAll(expect.items()))
huangtianhua0ff41682013-12-16 14:49:31 +0800121
122
123class VolumeMetadataTestXML(VolumeMetadataTest):
124 _interface = "xml"