blob: 39aba01ba102e604c231ff02a7a5cb1523351cac [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Rohit Karajgidd47d7e2012-07-31 04:11:01 -07002# 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
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +080016import uuid
17
Masayuki Igawabfa07602015-01-20 18:47:17 +090018from tempest_lib import exceptions as lib_exc
19
Sean Dague1937d092013-05-17 16:36:38 -040020from tempest.api.volume import base
Masayuki Igawa259c1132013-10-31 17:48:44 +090021from tempest.common.utils import data_utils
Matthew Treinisha83a16e2012-12-07 13:44:02 -050022from tempest import exceptions
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090023from tempest import test
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070024
25
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +080026class VolumesV2NegativeTest(base.BaseVolumeTest):
Attila Fazekas3dcdae12013-02-14 12:50:04 +010027
28 @classmethod
Andrea Frittoli61a12e22014-09-15 13:14:54 +010029 def resource_setup(cls):
30 super(VolumesV2NegativeTest, cls).resource_setup()
Attila Fazekas3dcdae12013-02-14 12:50:04 +010031 cls.client = cls.volumes_client
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070032
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +080033 cls.name_field = cls.special_fields['name_field']
34
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +080035 # Create a test shared instance and volume for attach/detach tests
Ken'ichi Ohmichi5687d552013-12-26 19:00:12 +090036 cls.volume = cls.create_volume()
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +080037 cls.mountpoint = "/dev/vdc"
38
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090039 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +000040 def test_volume_get_nonexistent_volume_id(self):
41 # Should not be able to get a non-existent volume
Masayuki Igawabfa07602015-01-20 18:47:17 +090042 self.assertRaises(lib_exc.NotFound, self.client.get_volume,
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +080043 str(uuid.uuid4()))
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070044
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090045 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +000046 def test_volume_delete_nonexistent_volume_id(self):
47 # Should not be able to delete a non-existent Volume
Masayuki Igawabfa07602015-01-20 18:47:17 +090048 self.assertRaises(lib_exc.NotFound, self.client.delete_volume,
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +080049 str(uuid.uuid4()))
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070050
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090051 @test.attr(type=['negative', 'gate'])
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070052 def test_create_volume_with_invalid_size(self):
Sean Dague72a00382013-01-03 17:53:38 -050053 # Should not be able to create volume with invalid size
54 # in request
Masayuki Igawa259c1132013-10-31 17:48:44 +090055 v_name = data_utils.rand_name('Volume-')
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070056 metadata = {'Type': 'work'}
Chris Yeoh8b4eaa52013-02-06 18:03:10 +103057 self.assertRaises(exceptions.BadRequest, self.client.create_volume,
58 size='#$%', display_name=v_name, metadata=metadata)
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070059
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090060 @test.attr(type=['negative', 'gate'])
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070061 def test_create_volume_with_out_passing_size(self):
Sean Dague72a00382013-01-03 17:53:38 -050062 # Should not be able to create volume without passing size
63 # in request
Masayuki Igawa259c1132013-10-31 17:48:44 +090064 v_name = data_utils.rand_name('Volume-')
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070065 metadata = {'Type': 'work'}
Chris Yeoh8b4eaa52013-02-06 18:03:10 +103066 self.assertRaises(exceptions.BadRequest, self.client.create_volume,
67 size='', display_name=v_name, metadata=metadata)
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070068
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090069 @test.attr(type=['negative', 'gate'])
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070070 def test_create_volume_with_size_zero(self):
Sean Dague72a00382013-01-03 17:53:38 -050071 # Should not be able to create volume with size zero
Masayuki Igawa259c1132013-10-31 17:48:44 +090072 v_name = data_utils.rand_name('Volume-')
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070073 metadata = {'Type': 'work'}
Chris Yeoh8b4eaa52013-02-06 18:03:10 +103074 self.assertRaises(exceptions.BadRequest, self.client.create_volume,
75 size='0', display_name=v_name, metadata=metadata)
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070076
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090077 @test.attr(type=['negative', 'gate'])
wanghaoc2abb6c2013-09-29 19:14:09 +080078 def test_create_volume_with_size_negative(self):
79 # Should not be able to create volume with size negative
Masayuki Igawa259c1132013-10-31 17:48:44 +090080 v_name = data_utils.rand_name('Volume-')
wanghaoc2abb6c2013-09-29 19:14:09 +080081 metadata = {'Type': 'work'}
82 self.assertRaises(exceptions.BadRequest, self.client.create_volume,
83 size='-1', display_name=v_name, metadata=metadata)
84
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090085 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +000086 def test_create_volume_with_nonexistent_volume_type(self):
87 # Should not be able to create volume with non-existent volume type
Masayuki Igawa259c1132013-10-31 17:48:44 +090088 v_name = data_utils.rand_name('Volume-')
zhangyanzib866f052013-10-12 11:41:32 +080089 metadata = {'Type': 'work'}
Masayuki Igawabfa07602015-01-20 18:47:17 +090090 self.assertRaises(lib_exc.NotFound, self.client.create_volume,
zhangyanzib866f052013-10-12 11:41:32 +080091 size='1', volume_type=str(uuid.uuid4()),
92 display_name=v_name, metadata=metadata)
93
Masayuki Igawa1edf94f2014-03-04 18:34:16 +090094 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +000095 def test_create_volume_with_nonexistent_snapshot_id(self):
96 # Should not be able to create volume with non-existent snapshot
Masayuki Igawa259c1132013-10-31 17:48:44 +090097 v_name = data_utils.rand_name('Volume-')
zhangyanzib866f052013-10-12 11:41:32 +080098 metadata = {'Type': 'work'}
Masayuki Igawabfa07602015-01-20 18:47:17 +090099 self.assertRaises(lib_exc.NotFound, self.client.create_volume,
zhangyanzib866f052013-10-12 11:41:32 +0800100 size='1', snapshot_id=str(uuid.uuid4()),
101 display_name=v_name, metadata=metadata)
102
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900103 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +0000104 def test_create_volume_with_nonexistent_source_volid(self):
105 # Should not be able to create volume with non-existent source volume
Masayuki Igawa259c1132013-10-31 17:48:44 +0900106 v_name = data_utils.rand_name('Volume-')
zhangyanzib866f052013-10-12 11:41:32 +0800107 metadata = {'Type': 'work'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900108 self.assertRaises(lib_exc.NotFound, self.client.create_volume,
zhangyanzib866f052013-10-12 11:41:32 +0800109 size='1', source_volid=str(uuid.uuid4()),
110 display_name=v_name, metadata=metadata)
111
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900112 @test.attr(type=['negative', 'gate'])
nayna-patel179077c2014-01-15 12:27:16 +0000113 def test_update_volume_with_nonexistent_volume_id(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900114 v_name = data_utils.rand_name('Volume-')
wanghaoc2abb6c2013-09-29 19:14:09 +0800115 metadata = {'Type': 'work'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900116 self.assertRaises(lib_exc.NotFound, self.client.update_volume,
wanghaoc2abb6c2013-09-29 19:14:09 +0800117 volume_id=str(uuid.uuid4()), display_name=v_name,
118 metadata=metadata)
119
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900120 @test.attr(type=['negative', 'gate'])
wanghaoc2abb6c2013-09-29 19:14:09 +0800121 def test_update_volume_with_invalid_volume_id(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900122 v_name = data_utils.rand_name('Volume-')
wanghaoc2abb6c2013-09-29 19:14:09 +0800123 metadata = {'Type': 'work'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900124 self.assertRaises(lib_exc.NotFound, self.client.update_volume,
wanghaoc2abb6c2013-09-29 19:14:09 +0800125 volume_id='#$%%&^&^', display_name=v_name,
126 metadata=metadata)
127
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900128 @test.attr(type=['negative', 'gate'])
wanghaoc2abb6c2013-09-29 19:14:09 +0800129 def test_update_volume_with_empty_volume_id(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900130 v_name = data_utils.rand_name('Volume-')
wanghaoc2abb6c2013-09-29 19:14:09 +0800131 metadata = {'Type': 'work'}
Masayuki Igawabfa07602015-01-20 18:47:17 +0900132 self.assertRaises(lib_exc.NotFound, self.client.update_volume,
wanghaoc2abb6c2013-09-29 19:14:09 +0800133 volume_id='', display_name=v_name,
134 metadata=metadata)
135
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900136 @test.attr(type=['negative', 'gate'])
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700137 def test_get_invalid_volume_id(self):
Sean Dague72a00382013-01-03 17:53:38 -0500138 # Should not be able to get volume with invalid id
Masayuki Igawabfa07602015-01-20 18:47:17 +0900139 self.assertRaises(lib_exc.NotFound, self.client.get_volume,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030140 '#$%%&^&^')
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700141
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900142 @test.attr(type=['negative', 'gate'])
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700143 def test_get_volume_without_passing_volume_id(self):
Sean Dague72a00382013-01-03 17:53:38 -0500144 # Should not be able to get volume when empty ID is passed
Masayuki Igawabfa07602015-01-20 18:47:17 +0900145 self.assertRaises(lib_exc.NotFound, self.client.get_volume, '')
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700146
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900147 @test.attr(type=['negative', 'gate'])
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700148 def test_delete_invalid_volume_id(self):
Sean Dague72a00382013-01-03 17:53:38 -0500149 # Should not be able to delete volume when invalid ID is passed
Masayuki Igawabfa07602015-01-20 18:47:17 +0900150 self.assertRaises(lib_exc.NotFound, self.client.delete_volume,
Chris Yeoh8b4eaa52013-02-06 18:03:10 +1030151 '!@#$%^&*()')
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700152
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900153 @test.attr(type=['negative', 'gate'])
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700154 def test_delete_volume_without_passing_volume_id(self):
Sean Dague72a00382013-01-03 17:53:38 -0500155 # Should not be able to delete volume when empty ID is passed
Masayuki Igawabfa07602015-01-20 18:47:17 +0900156 self.assertRaises(lib_exc.NotFound, self.client.delete_volume, '')
Matthew Treinish9854d5b2012-09-20 10:22:13 -0400157
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900158 @test.attr(type=['negative', 'gate'])
Matthew Treinish7ea69e62014-06-03 17:23:50 -0400159 @test.services('compute')
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +0800160 def test_attach_volumes_with_nonexistent_volume_id(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900161 srv_name = data_utils.rand_name('Instance-')
David Kranz0fb14292015-02-11 15:55:20 -0500162 server = self.servers_client.create_server(srv_name,
163 self.image_ref,
164 self.flavor_ref)
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +0800165 self.addCleanup(self.servers_client.delete_server, server['id'])
166 self.servers_client.wait_for_server_status(server['id'], 'ACTIVE')
Masayuki Igawabfa07602015-01-20 18:47:17 +0900167 self.assertRaises(lib_exc.NotFound,
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +0800168 self.client.attach_volume,
169 str(uuid.uuid4()),
170 server['id'],
171 self.mountpoint)
172
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900173 @test.attr(type=['negative', 'gate'])
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +0800174 def test_detach_volumes_with_invalid_volume_id(self):
Masayuki Igawabfa07602015-01-20 18:47:17 +0900175 self.assertRaises(lib_exc.NotFound,
Zhi Kun Liu3bdfe092013-09-02 01:31:58 +0800176 self.client.detach_volume,
177 'xxx')
178
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900179 @test.attr(type=['negative', 'gate'])
wanghao5b981752013-10-22 11:41:41 +0800180 def test_volume_extend_with_size_smaller_than_original_size(self):
181 # Extend volume with smaller size than original size.
182 extend_size = 0
183 self.assertRaises(exceptions.BadRequest, self.client.extend_volume,
184 self.volume['id'], extend_size)
185
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900186 @test.attr(type=['negative', 'gate'])
wanghao5b981752013-10-22 11:41:41 +0800187 def test_volume_extend_with_non_number_size(self):
188 # Extend volume when size is non number.
189 extend_size = 'abc'
190 self.assertRaises(exceptions.BadRequest, self.client.extend_volume,
191 self.volume['id'], extend_size)
192
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900193 @test.attr(type=['negative', 'gate'])
wanghao5b981752013-10-22 11:41:41 +0800194 def test_volume_extend_with_None_size(self):
195 # Extend volume with None size.
196 extend_size = None
197 self.assertRaises(exceptions.BadRequest, self.client.extend_volume,
198 self.volume['id'], extend_size)
199
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900200 @test.attr(type=['negative', 'gate'])
wanghao5b981752013-10-22 11:41:41 +0800201 def test_volume_extend_with_nonexistent_volume_id(self):
202 # Extend volume size when volume is nonexistent.
203 extend_size = int(self.volume['size']) + 1
Masayuki Igawabfa07602015-01-20 18:47:17 +0900204 self.assertRaises(lib_exc.NotFound, self.client.extend_volume,
wanghao5b981752013-10-22 11:41:41 +0800205 str(uuid.uuid4()), extend_size)
206
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900207 @test.attr(type=['negative', 'gate'])
wanghao5b981752013-10-22 11:41:41 +0800208 def test_volume_extend_without_passing_volume_id(self):
209 # Extend volume size when passing volume id is None.
210 extend_size = int(self.volume['size']) + 1
Masayuki Igawabfa07602015-01-20 18:47:17 +0900211 self.assertRaises(lib_exc.NotFound, self.client.extend_volume,
wanghao5b981752013-10-22 11:41:41 +0800212 None, extend_size)
213
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900214 @test.attr(type=['negative', 'gate'])
zhangyanzi6b632432013-10-24 19:08:50 +0800215 def test_reserve_volume_with_nonexistent_volume_id(self):
Masayuki Igawabfa07602015-01-20 18:47:17 +0900216 self.assertRaises(lib_exc.NotFound,
zhangyanzi6b632432013-10-24 19:08:50 +0800217 self.client.reserve_volume,
218 str(uuid.uuid4()))
219
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900220 @test.attr(type=['negative', 'gate'])
zhangyanzi6b632432013-10-24 19:08:50 +0800221 def test_unreserve_volume_with_nonexistent_volume_id(self):
Masayuki Igawabfa07602015-01-20 18:47:17 +0900222 self.assertRaises(lib_exc.NotFound,
zhangyanzi6b632432013-10-24 19:08:50 +0800223 self.client.unreserve_volume,
224 str(uuid.uuid4()))
225
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900226 @test.attr(type=['negative', 'gate'])
zhangyanzi6b632432013-10-24 19:08:50 +0800227 def test_reserve_volume_with_negative_volume_status(self):
228 # Mark volume as reserved.
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000229 self.client.reserve_volume(self.volume['id'])
zhangyanzi6b632432013-10-24 19:08:50 +0800230 # Mark volume which is marked as reserved before
231 self.assertRaises(exceptions.BadRequest,
232 self.client.reserve_volume,
233 self.volume['id'])
234 # Unmark volume as reserved.
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000235 self.client.unreserve_volume(self.volume['id'])
zhangyanzi6b632432013-10-24 19:08:50 +0800236
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900237 @test.attr(type=['negative', 'gate'])
Zhi Kun Liu42403182013-10-11 18:05:08 +0800238 def test_list_volumes_with_nonexistent_name(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900239 v_name = data_utils.rand_name('Volume-')
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +0800240 params = {self.name_field: v_name}
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000241 fetched_volume = self.client.list_volumes(params)
Zhi Kun Liu42403182013-10-11 18:05:08 +0800242 self.assertEqual(0, len(fetched_volume))
243
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900244 @test.attr(type=['negative', 'gate'])
Zhi Kun Liu42403182013-10-11 18:05:08 +0800245 def test_list_volumes_detail_with_nonexistent_name(self):
Masayuki Igawa259c1132013-10-31 17:48:44 +0900246 v_name = data_utils.rand_name('Volume-')
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +0800247 params = {self.name_field: v_name}
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000248 fetched_volume = \
249 self.client.list_volumes_with_detail(params)
Zhi Kun Liu42403182013-10-11 18:05:08 +0800250 self.assertEqual(0, len(fetched_volume))
251
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900252 @test.attr(type=['negative', 'gate'])
Zhi Kun Liu42403182013-10-11 18:05:08 +0800253 def test_list_volumes_with_invalid_status(self):
254 params = {'status': 'null'}
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000255 fetched_volume = self.client.list_volumes(params)
Zhi Kun Liu42403182013-10-11 18:05:08 +0800256 self.assertEqual(0, len(fetched_volume))
257
Masayuki Igawa1edf94f2014-03-04 18:34:16 +0900258 @test.attr(type=['negative', 'gate'])
Zhi Kun Liu42403182013-10-11 18:05:08 +0800259 def test_list_volumes_detail_with_invalid_status(self):
260 params = {'status': 'null'}
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000261 fetched_volume = \
262 self.client.list_volumes_with_detail(params)
Zhi Kun Liu42403182013-10-11 18:05:08 +0800263 self.assertEqual(0, len(fetched_volume))
264
Matthew Treinish9854d5b2012-09-20 10:22:13 -0400265
Zhi Kun Liu3d6d9862014-06-16 16:43:59 +0800266class VolumesV1NegativeTest(VolumesV2NegativeTest):
267 _api_version = 1
268 _name = 'display_name'