blob: 192d81eb3114ed91d872f9b13f2a85b755bbe72c [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
ZhiQiang Fan39f97222013-09-20 04:49:44 +08003# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04004# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
Sean Dague1937d092013-05-17 16:36:38 -040018from tempest.api.compute import base
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053019from tempest.common.utils.data_utils import rand_name
Chris Yeoh9465b0b2013-02-09 22:19:15 +103020from tempest.test import attr
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053021
22
ivan-zhuf2b00502013-10-18 10:06:52 +080023class VolumesGetTestJSON(base.BaseV2ComputeTest):
Attila Fazekas19044d52013-02-16 07:35:06 +010024
25 _interface = 'json'
26
27 @classmethod
28 def setUpClass(cls):
29 super(VolumesGetTestJSON, cls).setUpClass()
30 cls.client = cls.volumes_extensions_client
Matthew Treinish4c412922013-07-16 15:27:42 -040031 if not cls.config.service_available.cinder:
32 skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
33 raise cls.skipException(skip_msg)
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053034
35 @attr(type='smoke')
36 def test_volume_create_get_delete(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050037 # CREATE, GET, DELETE Volume
Dan Prince9821fde2012-11-30 10:54:12 -050038 volume = None
Matthew Treinisha2a82182013-06-19 17:03:04 -040039 v_name = rand_name('Volume-%s-') % self._interface
40 metadata = {'Type': 'work'}
Attila Fazekasf7f34f92013-08-01 17:01:44 +020041 # Create volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040042 resp, volume = self.client.create_volume(size=1,
43 display_name=v_name,
44 metadata=metadata)
45 self.addCleanup(self._delete_volume, volume)
46 self.assertEqual(200, resp.status)
Attila Fazekase191cb12013-07-29 06:41:52 +020047 self.assertIn('id', volume)
48 self.assertIn('displayName', volume)
Matthew Treinisha2a82182013-06-19 17:03:04 -040049 self.assertEqual(volume['displayName'], v_name,
50 "The created volume name is not equal "
51 "to the requested name")
52 self.assertTrue(volume['id'] is not None,
53 "Field volume id is empty or not found.")
Attila Fazekasf7f34f92013-08-01 17:01:44 +020054 # Wait for Volume status to become ACTIVE
Matthew Treinisha2a82182013-06-19 17:03:04 -040055 self.client.wait_for_volume_status(volume['id'], 'available')
Attila Fazekasf7f34f92013-08-01 17:01:44 +020056 # GET Volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040057 resp, fetched_volume = self.client.get_volume(volume['id'])
58 self.assertEqual(200, resp.status)
Attila Fazekasf7f34f92013-08-01 17:01:44 +020059 # Verfication of details of fetched Volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040060 self.assertEqual(v_name,
61 fetched_volume['displayName'],
62 'The fetched Volume is different '
63 'from the created Volume')
64 self.assertEqual(volume['id'],
65 fetched_volume['id'],
66 'The fetched Volume is different '
67 'from the created Volume')
68 self.assertEqual(metadata,
69 fetched_volume['metadata'],
70 'The fetched Volume is different '
71 'from the created Volume')
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053072
Giulio Fidenteba3985a2013-05-29 01:46:36 +020073 @attr(type='gate')
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053074 def test_volume_get_metadata_none(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050075 # CREATE, GET empty metadata dict
Matthew Treinisha2a82182013-06-19 17:03:04 -040076 v_name = rand_name('Volume-')
Attila Fazekasf7f34f92013-08-01 17:01:44 +020077 # Create volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040078 resp, volume = self.client.create_volume(size=1,
79 display_name=v_name,
80 metadata={})
81 self.addCleanup(self._delete_volume, volume)
82 self.assertEqual(200, resp.status)
Attila Fazekase191cb12013-07-29 06:41:52 +020083 self.assertIn('id', volume)
84 self.assertIn('displayName', volume)
Attila Fazekasf7f34f92013-08-01 17:01:44 +020085 # Wait for Volume status to become ACTIVE
Matthew Treinisha2a82182013-06-19 17:03:04 -040086 self.client.wait_for_volume_status(volume['id'], 'available')
Attila Fazekasf7f34f92013-08-01 17:01:44 +020087 # GET Volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040088 resp, fetched_volume = self.client.get_volume(volume['id'])
89 self.assertEqual(200, resp.status)
90 self.assertEqual(fetched_volume['metadata'], {})
91
92 def _delete_volume(self, volume):
Attila Fazekasf7f34f92013-08-01 17:01:44 +020093 # Delete the Volume created in this method
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053094 try:
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053095 resp, _ = self.client.delete_volume(volume['id'])
96 self.assertEqual(202, resp.status)
Attila Fazekasf7f34f92013-08-01 17:01:44 +020097 # Checking if the deleted Volume still exists
Matthew Treinish9e1eb972012-08-17 17:53:41 -040098 self.client.wait_for_resource_deletion(volume['id'])
Matthew Treinisha2a82182013-06-19 17:03:04 -040099 except KeyError:
100 return
Matthew Treinish9e1eb972012-08-17 17:53:41 -0400101
102
Attila Fazekas19044d52013-02-16 07:35:06 +0100103class VolumesGetTestXML(VolumesGetTestJSON):
104 _interface = "xml"