Merge "Fixes LP #992640 - Volumes sometimes not cleaned"
diff --git a/tempest/tests/test_volumes_list.py b/tempest/tests/test_volumes_list.py
index 01ce394..0a2e4e6 100644
--- a/tempest/tests/test_volumes_list.py
+++ b/tempest/tests/test_volumes_list.py
@@ -1,43 +1,87 @@
-from nose.plugins.attrib import attr
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack, LLC
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
import unittest2 as unittest
+
+import nose
+
from tempest import openstack
from tempest.common.utils.data_utils import rand_name
class VolumesTest(unittest.TestCase):
+ """
+ This test creates a number of 1G volumes. To run successfully,
+ ensure that the backing file for the volume group that Nova uses
+ has space for at least 3 1G volumes! Devstack, by default, creates
+ a 2G volume backing file, which causes this test to fail because
+ the third volume gets created in ERROR state (out of disk space in
+ volume group...). If you are running a Devstack environment, set
+ VOLUME_BACKING_FILE_SIZE=4G in your localrc
+ """
+
@classmethod
def setUpClass(cls):
cls.os = openstack.Manager()
cls.client = cls.os.volumes_client
- #Create 3 Volumes
+ # Create 3 Volumes
cls.volume_list = list()
cls.volume_id_list = list()
for i in range(3):
- v_name = rand_name('Name-')
+ v_name = rand_name('volume')
metadata = {'Type': 'work'}
- resp, volume = cls.client.create_volume(size=1,
- display_name=v_name,
- metadata=metadata)
- cls.client.wait_for_volume_status(volume['id'],
- 'available')
- resp, volume = cls.client.get_volume(volume['id'])
- cls.volume_list.append(volume)
- cls.volume_id_list.append(volume['id'])
+ try:
+ resp, volume = cls.client.create_volume(size=1,
+ display_name=v_name,
+ metadata=metadata)
+ cls.client.wait_for_volume_status(volume['id'],
+ 'available')
+ resp, volume = cls.client.get_volume(volume['id'])
+ cls.volume_list.append(volume)
+ cls.volume_id_list.append(volume['id'])
+ except:
+ if cls.volume_list:
+ # We could not create all the volumes, though we were able
+ # to create *some* of the volumes. This is typically
+ # because the backing file size of the volume group is
+ # too small. So, here, we clean up whatever we did manage
+ # to create and raise a SkipTest
+ for volume in cls.volume_list:
+ cls.client.delete_volume(volume)
+ msg = ("Failed to create ALL necessary volumes to run "
+ "test. This typically means that the backing file "
+ "size of the nova-volumes group is too small to "
+ "create the 3 volumes needed by this test case")
+ raise nose.SkipTest(msg)
+ raise
@classmethod
def tearDownClass(cls):
- #Delete the created Volumes
- for i in range(3):
- resp, _ = cls.client.delete_volume(cls.volume_id_list[i])
+ # Delete the created Volumes
+ for volume in cls.volume_list:
+ resp, _ = cls.client.delete_volume(volume['id'])
- @attr(type='smoke')
def test_volume_list(self):
"""Should return the list of Volumes"""
- #Fetch all Volumes
+ # Fetch all Volumes
resp, fetched_list = self.client.list_volumes()
self.assertEqual(200, resp.status)
- #Now check if all the Volumes created in setup are in fetched list
+ # Now check if all the Volumes created in setup are in fetched list
missing_volumes =\
[v for v in self.volume_list if v not in fetched_list]
self.assertFalse(missing_volumes,
@@ -45,7 +89,6 @@
% ', '.join(m_vol['displayName']
for m_vol in missing_volumes))
- @attr(type='smoke')
def test_volume_list_with_details(self):
"""Should return the list of Volumes with details"""
#Fetch all Volumes