blob: b5a4802395b9abd47c625a7520be1308c53e263c [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04002# 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.compute import base
Masayuki Igawa259c1132013-10-31 17:48:44 +090017from tempest.common.utils import data_utils
Chris Yeoh9465b0b2013-02-09 22:19:15 +103018from tempest.test import attr
Jerry Caic3c49ad2014-01-10 15:38:45 +080019from testtools.matchers import ContainsAll
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053020
21
ivan-zhuf2b00502013-10-18 10:06:52 +080022class VolumesGetTestJSON(base.BaseV2ComputeTest):
Attila Fazekas19044d52013-02-16 07:35:06 +010023
24 _interface = 'json'
25
26 @classmethod
27 def setUpClass(cls):
28 super(VolumesGetTestJSON, cls).setUpClass()
29 cls.client = cls.volumes_extensions_client
Matthew Treinish4c412922013-07-16 15:27:42 -040030 if not cls.config.service_available.cinder:
31 skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
32 raise cls.skipException(skip_msg)
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053033
34 @attr(type='smoke')
35 def test_volume_create_get_delete(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050036 # CREATE, GET, DELETE Volume
Dan Prince9821fde2012-11-30 10:54:12 -050037 volume = None
Masayuki Igawa259c1132013-10-31 17:48:44 +090038 v_name = data_utils.rand_name('Volume-%s-') % self._interface
Matthew Treinisha2a82182013-06-19 17:03:04 -040039 metadata = {'Type': 'work'}
Attila Fazekasf7f34f92013-08-01 17:01:44 +020040 # Create volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040041 resp, volume = self.client.create_volume(size=1,
42 display_name=v_name,
43 metadata=metadata)
44 self.addCleanup(self._delete_volume, volume)
45 self.assertEqual(200, resp.status)
Attila Fazekase191cb12013-07-29 06:41:52 +020046 self.assertIn('id', volume)
47 self.assertIn('displayName', volume)
Matthew Treinisha2a82182013-06-19 17:03:04 -040048 self.assertEqual(volume['displayName'], v_name,
49 "The created volume name is not equal "
50 "to the requested name")
51 self.assertTrue(volume['id'] is not None,
52 "Field volume id is empty or not found.")
Attila Fazekasf7f34f92013-08-01 17:01:44 +020053 # Wait for Volume status to become ACTIVE
Matthew Treinisha2a82182013-06-19 17:03:04 -040054 self.client.wait_for_volume_status(volume['id'], 'available')
Attila Fazekasf7f34f92013-08-01 17:01:44 +020055 # GET Volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040056 resp, fetched_volume = self.client.get_volume(volume['id'])
57 self.assertEqual(200, resp.status)
nayna-patelc07f77d2014-01-15 12:39:25 +000058 # Verification of details of fetched Volume
Matthew Treinisha2a82182013-06-19 17:03:04 -040059 self.assertEqual(v_name,
60 fetched_volume['displayName'],
61 'The fetched Volume is different '
62 'from the created Volume')
63 self.assertEqual(volume['id'],
64 fetched_volume['id'],
65 'The fetched Volume is different '
66 'from the created Volume')
Jerry Caic3c49ad2014-01-10 15:38:45 +080067 self.assertThat(fetched_volume['metadata'].items(),
68 ContainsAll(metadata.items()),
69 'The fetched Volume metadata misses data '
70 'from the created Volume')
Matthew Treinisha2a82182013-06-19 17:03:04 -040071
72 def _delete_volume(self, volume):
Attila Fazekasf7f34f92013-08-01 17:01:44 +020073 # Delete the Volume created in this method
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053074 try:
rajalakshmi-ganesand3b43f62012-04-03 17:39:23 +053075 resp, _ = self.client.delete_volume(volume['id'])
76 self.assertEqual(202, resp.status)
Attila Fazekasf7f34f92013-08-01 17:01:44 +020077 # Checking if the deleted Volume still exists
Matthew Treinish9e1eb972012-08-17 17:53:41 -040078 self.client.wait_for_resource_deletion(volume['id'])
Matthew Treinisha2a82182013-06-19 17:03:04 -040079 except KeyError:
80 return
Matthew Treinish9e1eb972012-08-17 17:53:41 -040081
82
Attila Fazekas19044d52013-02-16 07:35:06 +010083class VolumesGetTestXML(VolumesGetTestJSON):
84 _interface = "xml"