blob: 79a4365ae70d74373d40bf704765e7f4afaa4d6e [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
Sean Dague1937d092013-05-17 16:36:38 -040016from tempest.api.volume import base
Masayuki Igawa259c1132013-10-31 17:48:44 +090017from tempest.common.utils import data_utils
Chris Yeoh01cb2792013-02-09 22:25:37 +103018from tempest.test import attr
Matthew Treinish660a4c12013-09-09 20:06:12 +000019from tempest.test import services
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070020
21
Zhi Kun Liubb363a22013-11-28 18:47:39 +080022class VolumesGetTest(base.BaseVolumeV1Test):
Attila Fazekas3dcdae12013-02-14 12:50:04 +010023 _interface = "json"
24
25 @classmethod
26 def setUpClass(cls):
27 super(VolumesGetTest, cls).setUpClass()
28 cls.client = cls.volumes_client
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070029
Matt Riedemannbc8dbd32013-08-02 14:02:12 -070030 def _delete_volume(self, volume_id):
31 resp, _ = self.client.delete_volume(volume_id)
32 self.assertEqual(202, resp.status)
33 self.client.wait_for_resource_deletion(volume_id)
34
John Griffithd1fefd52013-09-23 20:40:37 +000035 def _is_true(self, val):
36 # NOTE(jdg): Temporary conversion method to get cinder patch
37 # merged. Then we'll make this strict again and
38 #specifically check "true" or "false"
39 if val in ['true', 'True', True]:
40 return True
41 else:
42 return False
43
QingXin Meng611768a2013-09-18 00:51:33 -070044 def _volume_create_get_update_delete(self, **kwargs):
Sean Dague72a00382013-01-03 17:53:38 -050045 # Create a volume, Get it's details and Delete the volume
Matt Riedemannbc8dbd32013-08-02 14:02:12 -070046 volume = {}
Masayuki Igawa259c1132013-10-31 17:48:44 +090047 v_name = data_utils.rand_name('Volume')
Matt Riedemannbc8dbd32013-08-02 14:02:12 -070048 metadata = {'Type': 'Test'}
49 # Create a volume
50 resp, volume = self.client.create_volume(size=1,
51 display_name=v_name,
52 metadata=metadata,
53 **kwargs)
54 self.assertEqual(200, resp.status)
55 self.assertIn('id', volume)
56 self.addCleanup(self._delete_volume, volume['id'])
57 self.assertIn('display_name', volume)
58 self.assertEqual(volume['display_name'], v_name,
59 "The created volume name is not equal "
60 "to the requested name")
61 self.assertTrue(volume['id'] is not None,
62 "Field volume id is empty or not found.")
63 self.client.wait_for_volume_status(volume['id'], 'available')
64 # Get Volume information
65 resp, fetched_volume = self.client.get_volume(volume['id'])
66 self.assertEqual(200, resp.status)
67 self.assertEqual(v_name,
68 fetched_volume['display_name'],
69 'The fetched Volume is different '
70 'from the created Volume')
71 self.assertEqual(volume['id'],
72 fetched_volume['id'],
73 'The fetched Volume is different '
74 'from the created Volume')
75 self.assertEqual(metadata,
76 fetched_volume['metadata'],
77 'The fetched Volume is different '
78 'from the created Volume')
John Griffithd1fefd52013-09-23 20:40:37 +000079
80 # NOTE(jdg): Revert back to strict true/false checking
81 # after fix for bug #1227837 merges
82 boot_flag = self._is_true(fetched_volume['bootable'])
Nayna Patel5e76be12013-08-19 12:10:16 +000083 if 'imageRef' in kwargs:
John Griffithd1fefd52013-09-23 20:40:37 +000084 self.assertEqual(boot_flag, True)
Nayna Patel5e76be12013-08-19 12:10:16 +000085 if 'imageRef' not in kwargs:
John Griffithd1fefd52013-09-23 20:40:37 +000086 self.assertEqual(boot_flag, False)
Rohit Karajgidd47d7e2012-07-31 04:11:01 -070087
QingXin Meng611768a2013-09-18 00:51:33 -070088 # Update Volume
Masayuki Igawa259c1132013-10-31 17:48:44 +090089 new_v_name = data_utils.rand_name('new-Volume')
QingXin Meng611768a2013-09-18 00:51:33 -070090 new_desc = 'This is the new description of volume'
91 resp, update_volume = \
92 self.client.update_volume(volume['id'],
93 display_name=new_v_name,
94 display_description=new_desc)
95 # Assert response body for update_volume method
96 self.assertEqual(200, resp.status)
97 self.assertEqual(new_v_name, update_volume['display_name'])
98 self.assertEqual(new_desc, update_volume['display_description'])
99 # Assert response body for get_volume method
100 resp, updated_volume = self.client.get_volume(volume['id'])
101 self.assertEqual(200, resp.status)
102 self.assertEqual(volume['id'], updated_volume['id'])
103 self.assertEqual(new_v_name, updated_volume['display_name'])
104 self.assertEqual(new_desc, updated_volume['display_description'])
105 self.assertEqual(metadata, updated_volume['metadata'])
John Griffithd1fefd52013-09-23 20:40:37 +0000106
107 # NOTE(jdg): Revert back to strict true/false checking
108 # after fix for bug #1227837 merges
109 boot_flag = self._is_true(updated_volume['bootable'])
QingXin Meng611768a2013-09-18 00:51:33 -0700110 if 'imageRef' in kwargs:
John Griffithd1fefd52013-09-23 20:40:37 +0000111 self.assertEqual(boot_flag, True)
QingXin Meng611768a2013-09-18 00:51:33 -0700112 if 'imageRef' not in kwargs:
John Griffithd1fefd52013-09-23 20:40:37 +0000113 self.assertEqual(boot_flag, False)
QingXin Meng611768a2013-09-18 00:51:33 -0700114
Giulio Fidente8b311902013-05-12 15:40:31 +0200115 @attr(type='gate')
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700116 def test_volume_get_metadata_none(self):
Sean Dague72a00382013-01-03 17:53:38 -0500117 # Create a volume without passing metadata, get details, and delete
Ken'ichi Ohmichi5687d552013-12-26 19:00:12 +0900118
Matt Riedemannbc8dbd32013-08-02 14:02:12 -0700119 # Create a volume without metadata
Ken'ichi Ohmichi5687d552013-12-26 19:00:12 +0900120 volume = self.create_volume(metadata={})
121
Matt Riedemannbc8dbd32013-08-02 14:02:12 -0700122 # GET Volume
123 resp, fetched_volume = self.client.get_volume(volume['id'])
124 self.assertEqual(200, resp.status)
125 self.assertEqual(fetched_volume['metadata'], {})
Matthew Treinish9854d5b2012-09-20 10:22:13 -0400126
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200127 @attr(type='smoke')
QingXin Meng611768a2013-09-18 00:51:33 -0700128 def test_volume_create_get_update_delete(self):
129 self._volume_create_get_update_delete()
Giulio Fidente36836c42013-04-05 15:43:51 +0200130
Giulio Fidenteba3985a2013-05-29 01:46:36 +0200131 @attr(type='smoke')
Matthew Treinish660a4c12013-09-09 20:06:12 +0000132 @services('image')
QingXin Meng611768a2013-09-18 00:51:33 -0700133 def test_volume_create_get_update_delete_from_image(self):
134 self._volume_create_get_update_delete(imageRef=self.
135 config.compute.image_ref)
Giulio Fidente02f42982013-06-17 16:25:56 +0200136
137 @attr(type='gate')
QingXin Meng611768a2013-09-18 00:51:33 -0700138 def test_volume_create_get_update_delete_as_clone(self):
Ken'ichi Ohmichi5687d552013-12-26 19:00:12 +0900139 origin = self.create_volume()
QingXin Meng611768a2013-09-18 00:51:33 -0700140 self._volume_create_get_update_delete(source_volid=origin['id'])
Giulio Fidente36836c42013-04-05 15:43:51 +0200141
Matthew Treinish9854d5b2012-09-20 10:22:13 -0400142
Attila Fazekas3dcdae12013-02-14 12:50:04 +0100143class VolumesGetTestXML(VolumesGetTest):
144 _interface = "xml"