Merge "Sync in latest version of oslo"
diff --git a/tempest/clients.py b/tempest/clients.py
index aa9b558..7eb17f3 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -56,6 +56,10 @@
from tempest.services.object_storage.account_client import AccountClient
from tempest.services.object_storage.container_client import ContainerClient
from tempest.services.object_storage.object_client import ObjectClient
+from tempest.services.volume.json.admin.volume_types_client import \
+ VolumeTypesClientJSON
+from tempest.services.volume.xml.admin.volume_types_client import \
+ VolumeTypesClientXML
from tempest.services.volume.json.snapshots_client import SnapshotsClientJSON
from tempest.services.volume.json.volumes_client import VolumesClientJSON
from tempest.services.volume.xml.snapshots_client import SnapshotsClientXML
@@ -122,6 +126,11 @@
"xml": VolumesClientXML,
}
+VOLUME_TYPES_CLIENTS = {
+ "json": VolumeTypesClientJSON,
+ "xml": VolumeTypesClientXML,
+}
+
IDENTITY_CLIENT = {
"json": IdentityClientJSON,
"xml": IdentityClientXML,
@@ -192,6 +201,8 @@
self.floating_ips_client = FLOAT_CLIENTS[interface](*client_args)
self.snapshots_client = SNAPSHOTS_CLIENTS[interface](*client_args)
self.volumes_client = VOLUMES_CLIENTS[interface](*client_args)
+ self.volume_types_client = \
+ VOLUME_TYPES_CLIENTS[interface](*client_args)
self.identity_client = IDENTITY_CLIENT[interface](*client_args)
self.token_client = TOKEN_CLIENT[interface](self.config)
self.security_groups_client = \
diff --git a/tempest/tests/compute/servers/test_server_actions.py b/tempest/tests/compute/servers/test_server_actions.py
index c30538f..06e441a 100644
--- a/tempest/tests/compute/servers/test_server_actions.py
+++ b/tempest/tests/compute/servers/test_server_actions.py
@@ -206,6 +206,18 @@
self.fail('The server rebuild for a non existing server should not'
' be allowed')
+ @classmethod
+ def rebuild_servers(cls):
+ # Destroy any existing server and creates a new one
+ cls.clear_servers()
+ cls.name = rand_name('server')
+ resp, server = cls.create_server_with_extras(cls.name,
+ cls.image_ref,
+ cls.flavor_ref)
+ cls.server_id = server['id']
+ cls.password = server['adminPass']
+ cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
+
class ServerActionsTestXML(base.BaseComputeTestXML,
ServerActionsTestBase):
@@ -216,30 +228,13 @@
self.client.wait_for_server_status(self.server_id, 'ACTIVE')
except exceptions:
# Rebuild server if something happened to it during a test
- self.clear_servers()
- resp, server = self.create_server_with_extras(self.name,
- self.image_ref,
- self.flavor_ref)
- self.server_id = server['id']
- self.password = server['adminPass']
- self.client.wait_for_server_status(self.server_id, 'ACTIVE')
+ self.rebuild_servers()
@classmethod
def setUpClass(cls):
super(ServerActionsTestXML, cls).setUpClass()
cls.client = cls.servers_client
- cls.name = rand_name('server')
- resp, server = cls.create_server_with_extras(cls.name,
- cls.image_ref,
- cls.flavor_ref)
- cls.server_id = server['id']
- cls.password = server['adminPass']
- cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
-
- @classmethod
- def tearDownClass(cls):
- cls.clear_servers()
- super(ServerActionsTestXML, cls).tearDownClass()
+ cls.rebuild_servers()
class ServerActionsTestJSON(base.BaseComputeTestJSON,
@@ -251,27 +246,10 @@
self.client.wait_for_server_status(self.server_id, 'ACTIVE')
except exceptions:
# Rebuild server if something happened to it during a test
- self.clear_servers()
- resp, server = self.create_server_with_extras(self.name,
- self.image_ref,
- self.flavor_ref)
- self.server_id = server['id']
- self.password = server['adminPass']
- self.client.wait_for_server_status(self.server_id, 'ACTIVE')
+ self.rebuild_servers()
@classmethod
def setUpClass(cls):
super(ServerActionsTestJSON, cls).setUpClass()
cls.client = cls.servers_client
- cls.name = rand_name('server')
- resp, server = cls.create_server_with_extras(cls.name,
- cls.image_ref,
- cls.flavor_ref)
- cls.server_id = server['id']
- cls.password = server['adminPass']
- cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
-
- @classmethod
- def tearDownClass(cls):
- cls.clear_servers()
- super(ServerActionsTestJSON, cls).tearDownClass()
+ cls.rebuild_servers()
diff --git a/tempest/tests/compute/servers/test_servers.py b/tempest/tests/compute/servers/test_servers.py
index fbcfe85..caf0679 100644
--- a/tempest/tests/compute/servers/test_servers.py
+++ b/tempest/tests/compute/servers/test_servers.py
@@ -161,25 +161,9 @@
super(ServersTestJSON, cls).setUpClass()
cls.client = cls.servers_client
- def tearDown(self):
- # clean up any remaining servers and wait for them to fully
- # delete. This is done because delete calls are async, and if
- # deletes are running slow we could very well overrun system
- # memory
- self.clear_servers()
- super(ServersTestJSON, self).tearDown()
-
class ServersTestXML(base.BaseComputeTestXML, ServersTestBase):
@classmethod
def setUpClass(cls):
super(ServersTestXML, cls).setUpClass()
cls.client = cls.servers_client
-
- def tearDown(self):
- # clean up any remaining servers and wait for them to fully
- # delete. This is done because delete calls are async, and if
- # deletes are running slow we could very well overrun system
- # memory
- self.clear_servers()
- super(ServersTestXML, self).tearDown()
diff --git a/tempest/tests/volume/admin/base.py b/tempest/tests/volume/admin/base.py
deleted file mode 100644
index 21425be..0000000
--- a/tempest/tests/volume/admin/base.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# 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.
-
-
-from tempest import config
-import tempest.services.volume.json.admin.volume_types_client \
- as volume_types_json_client
-import tempest.services.volume.xml.admin.volume_types_client \
- as volume_types_xml_client
-from tempest.tests.volume.base import BaseVolumeTest
-
-
-class BaseVolumeAdminTest(BaseVolumeTest):
- """Base test case class for all Volume Admin API tests."""
- @classmethod
- def setUpClass(cls):
- super(BaseVolumeAdminTest, cls).setUpClass()
- cls.config = config.TempestConfig()
- cls.adm_user = cls.config.identity.admin_username
- cls.adm_pass = cls.config.identity.admin_password
- cls.adm_tenant = cls.config.identity.admin_tenant_name
- cls.auth_url = cls.config.identity.uri
-
- if not cls.adm_user and cls.adm_pass and cls.adm_tenant:
- msg = ("Missing Volume Admin API credentials "
- "in configuration.")
- raise cls.skipException(msg)
-
- @classmethod
- def tearDownClass(cls):
- super(BaseVolumeAdminTest, cls).tearDownClass()
-
-
-class BaseVolumeAdminTestJSON(BaseVolumeAdminTest):
- @classmethod
- def setUpClass(cls):
- cls._interface = "json"
- super(BaseVolumeAdminTestJSON, cls).setUpClass()
- cls.client = volume_types_json_client.\
- VolumeTypesClientJSON(cls.config, cls.adm_user, cls.adm_pass,
- cls.auth_url, cls.adm_tenant)
-
-
-class BaseVolumeAdminTestXML(BaseVolumeAdminTest):
- @classmethod
- def setUpClass(cls):
- cls._interface = "xml"
- super(BaseVolumeAdminTestXML, cls).setUpClass()
- cls.client = volume_types_xml_client.\
- VolumeTypesClientXML(cls.config, cls.adm_user, cls.adm_pass,
- cls.auth_url, cls.adm_tenant)
diff --git a/tempest/tests/volume/admin/test_volume_types_extra_specs.py b/tempest/tests/volume/admin/test_volume_types_extra_specs.py
index c743567..31e2879 100644
--- a/tempest/tests/volume/admin/test_volume_types_extra_specs.py
+++ b/tempest/tests/volume/admin/test_volume_types_extra_specs.py
@@ -16,30 +16,16 @@
# under the License.
from tempest.common.utils.data_utils import rand_name
-from tempest.services.volume.json.admin import volume_types_client
-from tempest.tests.volume.base import BaseVolumeTest
+from tempest.tests.volume import base
-class VolumeTypesExtraSpecsTest(BaseVolumeTest):
+class VolumeTypesExtraSpecsTest(base.BaseVolumeAdminTest):
_interface = "json"
@classmethod
def setUpClass(cls):
super(VolumeTypesExtraSpecsTest, cls).setUpClass()
-
- adm_user = cls.config.identity.admin_username
- adm_pass = cls.config.identity.admin_password
- adm_tenant = cls.config.identity.admin_tenant_name
- auth_url = cls.config.identity.uri
-
- cls.client = volume_types_client.VolumeTypesClientJSON(cls.config,
- adm_user,
- adm_pass,
- auth_url,
- adm_tenant)
-
vol_type_name = rand_name('Volume-type-')
- cls.extra_spec = {"spec1": "val1"}
resp, cls.volume_type = cls.client.create_volume_type(vol_type_name)
@classmethod
@@ -50,6 +36,12 @@
def test_volume_type_extra_specs_list(self):
# List Volume types extra specs.
try:
+ extra_specs = {"spec1": "val1"}
+ resp, body = self.client.\
+ create_volume_type_extra_specs(self.volume_type['id'], extra_specs)
+ self.assertEqual(200, resp.status)
+ self.assertEqual(extra_specs, body,
+ "Volume type extra spec incorrectly created")
resp, body = self.client.\
list_volume_types_extra_specs(self.volume_type['id'])
self.assertEqual(200, resp.status)
@@ -62,49 +54,46 @@
def test_volume_type_extra_specs_update(self):
# Update volume type extra specs
try:
- extra_spec = {"spec1": "val2"}
- resp, body = self.client.\
- update_volume_type_extra_specs(self.volume_type['id'],
- extra_spec.keys()[0],
- extra_spec)
- self.assertEqual(200, resp.status)
- self.assertTrue('spec1' in body,
- "Volume type extra spec incorrectly updated")
- self.assertEqual(extra_spec['spec1'], body['spec1'],
- "Volume type extra spec incorrectly updated")
- except Exception:
- self.fail("Couldnt update volume type extra spec")
-
- def test_volume_type_extra_spec_create_delete(self):
- # Create/Delete volume type extra spec.
- try:
extra_specs = {"spec2": "val1"}
resp, body = self.client.\
create_volume_type_extra_specs(self.volume_type['id'], extra_specs)
self.assertEqual(200, resp.status)
self.assertEqual(extra_specs, body,
"Volume type extra spec incorrectly created")
- resp, _ = self.client.\
- delete_volume_type_extra_specs(self.volume_type['id'],
- extra_specs.keys()[0])
- self.assertEqual(202, resp.status)
- except Exception:
- self.fail("Could not create a volume_type extra spec")
- def test_volume_type_extra_spec_create_get(self):
- # Create/get volume type extra spec
+ extra_spec = {"spec2": "val2"}
+ resp, body = self.client.\
+ update_volume_type_extra_specs(self.volume_type['id'],
+ extra_spec.keys()[0],
+ extra_spec)
+ self.assertEqual(200, resp.status)
+ self.assertTrue('spec2' in body,
+ "Volume type extra spec incorrectly updated")
+ self.assertEqual(extra_spec['spec2'], body['spec2'],
+ "Volume type extra spec incorrectly updated")
+ except Exception:
+ self.fail("Couldnt update volume type extra spec")
+
+ def test_volume_type_extra_spec_create_get_delete(self):
+ # Create/Get/Delete volume type extra spec.
try:
- extra_specs = {"spec1": "val1"}
+ extra_specs = {"spec3": "val1"}
resp, body = self.client.\
create_volume_type_extra_specs(self.volume_type['id'], extra_specs)
self.assertEqual(200, resp.status)
self.assertEqual(extra_specs, body,
"Volume type extra spec incorrectly created")
+
resp, fetched_vol_type_extra_spec = self.client.\
get_volume_type_extra_specs(self.volume_type['id'],
extra_specs.keys()[0])
self.assertEqual(200, resp.status)
self.assertEqual(extra_specs, body,
"Volume type extra spec incorrectly fetched")
+
+ resp, _ = self.client.\
+ delete_volume_type_extra_specs(self.volume_type['id'],
+ extra_specs.keys()[0])
+ self.assertEqual(202, resp.status)
except Exception:
self.fail("Could not create a volume_type extra spec")
diff --git a/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py b/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py
index 9aa8409..e201853 100644
--- a/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py
+++ b/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py
@@ -20,23 +20,24 @@
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestJSON
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestXML
+from tempest.tests.volume import base
-class ExtraSpecsNegativeTestBase():
+class ExtraSpecsNegativeTest(base.BaseVolumeAdminTest):
+ _interface = 'json'
- @staticmethod
+ @classmethod
def setUpClass(cls):
- cls.client = cls.client
+ super(ExtraSpecsNegativeTest, cls).setUpClass()
vol_type_name = rand_name('Volume-type-')
cls.extra_specs = {"spec1": "val1"}
resp, cls.volume_type = cls.client.create_volume_type(vol_type_name,
extra_specs=
cls.extra_specs)
- @staticmethod
+ @classmethod
def tearDownClass(cls):
+ super(ExtraSpecsNegativeTest, cls).tearDownClass()
cls.client.delete_volume_type(cls.volume_type['id'])
@testtools.skip('Until bug 1090320 is fixed')
@@ -122,29 +123,5 @@
self.volume_type['id'], str(uuid.uuid4()))
-class ExtraSpecsNegativeTestXML(BaseVolumeAdminTestXML,
- ExtraSpecsNegativeTestBase):
-
- @classmethod
- def setUpClass(cls):
- super(ExtraSpecsNegativeTestXML, cls).setUpClass()
- ExtraSpecsNegativeTestBase.setUpClass(cls)
-
- @classmethod
- def tearDownClass(cls):
- super(ExtraSpecsNegativeTestXML, cls).tearDownClass()
- ExtraSpecsNegativeTestBase.tearDownClass(cls)
-
-
-class ExtraSpecsNegativeTestJSON(BaseVolumeAdminTestJSON,
- ExtraSpecsNegativeTestBase):
-
- @classmethod
- def setUpClass(cls):
- super(ExtraSpecsNegativeTestJSON, cls).setUpClass()
- ExtraSpecsNegativeTestBase.setUpClass(cls)
-
- @classmethod
- def tearDownClass(cls):
- super(ExtraSpecsNegativeTestJSON, cls).tearDownClass()
- ExtraSpecsNegativeTestBase.tearDownClass(cls)
+class ExtraSpecsNegativeTestXML(ExtraSpecsNegativeTest):
+ _interface = 'xml'
diff --git a/tempest/tests/volume/admin/test_volume_types_negative.py b/tempest/tests/volume/admin/test_volume_types_negative.py
index 8e7fa23..c706f3d 100644
--- a/tempest/tests/volume/admin/test_volume_types_negative.py
+++ b/tempest/tests/volume/admin/test_volume_types_negative.py
@@ -19,15 +19,11 @@
import uuid
from tempest import exceptions
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestJSON
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestXML
+from tempest.tests.volume import base
-class VolumeTypesNegativeTestBase():
-
- @staticmethod
- def setUpClass(cls):
- cls.client = cls.client
+class VolumeTypesNegativeTest(base.BaseVolumeAdminTest):
+ _interface = 'json'
def test_create_with_nonexistent_volume_type(self):
# Should not be able to create volume with nonexistent volume_type.
@@ -53,17 +49,5 @@
str(uuid.uuid4()))
-class VolumesTypesNegativeTestXML(BaseVolumeAdminTestXML,
- VolumeTypesNegativeTestBase):
- @classmethod
- def setUpClass(cls):
- super(VolumesTypesNegativeTestXML, cls).setUpClass()
- VolumeTypesNegativeTestBase.setUpClass(cls)
-
-
-class VolumesTypesNegativeTestJSON(BaseVolumeAdminTestJSON,
- VolumeTypesNegativeTestBase):
- @classmethod
- def setUpClass(cls):
- super(VolumesTypesNegativeTestJSON, cls).setUpClass()
- VolumeTypesNegativeTestBase.setUpClass(cls)
+class VolumesTypesNegativeTestXML(VolumeTypesNegativeTest):
+ _interface = 'xml'
diff --git a/tempest/tests/volume/base.py b/tempest/tests/volume/base.py
index c91244f..4ddd670 100644
--- a/tempest/tests/volume/base.py
+++ b/tempest/tests/volume/base.py
@@ -193,15 +193,18 @@
time.sleep(self.build_interval)
-class BaseVolumeTestJSON(BaseVolumeTest):
+class BaseVolumeAdminTest(BaseVolumeTest):
+ """Base test case class for all Volume Admin API tests."""
@classmethod
def setUpClass(cls):
- cls._interface = "json"
- super(BaseVolumeTestJSON, cls).setUpClass()
+ super(BaseVolumeAdminTest, cls).setUpClass()
+ cls.adm_user = cls.config.identity.admin_username
+ cls.adm_pass = cls.config.identity.admin_password
+ cls.adm_tenant = cls.config.identity.admin_tenant_name
+ if not all((cls.adm_user, cls.adm_pass, cls.adm_tenant)):
+ msg = ("Missing Volume Admin API credentials "
+ "in configuration.")
+ raise cls.skipException(msg)
-
-class BaseVolumeTestXML(BaseVolumeTest):
- @classmethod
- def setUpClass(cls):
- cls._interface = "xml"
- super(BaseVolumeTestXML, cls).setUpClass()
+ cls.os_adm = clients.AdminManager(interface=cls._interface)
+ cls.client = cls.os_adm.volume_types_client
diff --git a/tempest/tests/volume/test_volumes_get.py b/tempest/tests/volume/test_volumes_get.py
index bd271ed..a246afe 100644
--- a/tempest/tests/volume/test_volumes_get.py
+++ b/tempest/tests/volume/test_volumes_get.py
@@ -20,7 +20,14 @@
from tempest.tests.volume import base
-class VolumesGetTestBase(object):
+class VolumesGetTest(base.BaseVolumeTest):
+
+ _interface = "json"
+
+ @classmethod
+ def setUpClass(cls):
+ super(VolumesGetTest, cls).setUpClass()
+ cls.client = cls.volumes_client
@attr(type='smoke')
def test_volume_create_get_delete(self):
@@ -94,17 +101,5 @@
self.client.wait_for_resource_deletion(volume['id'])
-class VolumesGetTestXML(base.BaseVolumeTestXML, VolumesGetTestBase):
- @classmethod
- def setUpClass(cls):
- cls._interface = "xml"
- super(VolumesGetTestXML, cls).setUpClass()
- cls.client = cls.volumes_client
-
-
-class VolumesGetTestJSON(base.BaseVolumeTestJSON, VolumesGetTestBase):
- @classmethod
- def setUpClass(cls):
- cls._interface = "json"
- super(VolumesGetTestJSON, cls).setUpClass()
- cls.client = cls.volumes_client
+class VolumesGetTestXML(VolumesGetTest):
+ _interface = "xml"
diff --git a/tempest/tests/volume/test_volumes_list.py b/tempest/tests/volume/test_volumes_list.py
index 64691d4..a8fedb9 100644
--- a/tempest/tests/volume/test_volumes_list.py
+++ b/tempest/tests/volume/test_volumes_list.py
@@ -20,7 +20,7 @@
from tempest.tests.volume import base
-class VolumesListTestBase(object):
+class VolumesListTest(base.BaseVolumeTest):
"""
This test creates a number of 1G volumes. To run successfully,
@@ -30,6 +30,52 @@
VOLUME_BACKING_FILE_SIZE is atleast 4G in your localrc
"""
+ _interface = 'json'
+
+ @classmethod
+ def setUpClass(cls):
+ super(VolumesListTest, cls).setUpClass()
+ cls.client = cls.volumes_client
+
+ # Create 3 test volumes
+ cls.volume_list = []
+ cls.volume_id_list = []
+ for i in range(3):
+ v_name = rand_name('volume')
+ metadata = {'Type': 'work'}
+ 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 Exception:
+ 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 volid in cls.volume_id_list:
+ cls.client.delete_volume(volid)
+ cls.client.wait_for_resource_deletion(volid)
+ 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 cls.skipException(msg)
+ raise
+
+ @classmethod
+ def tearDownClass(cls):
+ # Delete the created volumes
+ for volid in cls.volume_id_list:
+ resp, _ = cls.client.delete_volume(volid)
+ cls.client.wait_for_resource_deletion(volid)
+ super(VolumesListTest, cls).tearDownClass()
+
@attr(type='smoke')
def test_volume_list(self):
# Get a list of Volumes
@@ -57,95 +103,5 @@
for m_vol in missing_vols))
-class VolumeListTestXML(base.BaseVolumeTestXML, VolumesListTestBase):
- @classmethod
- def setUpClass(cls):
- cls._interface = 'xml'
- super(VolumeListTestXML, cls).setUpClass()
- cls.client = cls.volumes_client
-
- # Create 3 test volumes
- cls.volume_list = []
- cls.volume_id_list = []
- for i in range(3):
- v_name = rand_name('volume')
- metadata = {'Type': 'work'}
- 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 Exception:
- 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 volid in cls.volume_id_list:
- cls.client.delete_volume(volid)
- cls.client.wait_for_resource_deletion(volid)
- 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 cls.skipException(msg)
- raise
-
- @classmethod
- def tearDownClass(cls):
- # Delete the created volumes
- for volid in cls.volume_id_list:
- resp, _ = cls.client.delete_volume(volid)
- cls.client.wait_for_resource_deletion(volid)
- super(VolumeListTestXML, cls).tearDownClass()
-
-
-class VolumeListTestJSON(base.BaseVolumeTestJSON, VolumesListTestBase):
- @classmethod
- def setUpClass(cls):
- cls._interface = 'json'
- super(VolumeListTestJSON, cls).setUpClass()
- cls.client = cls.volumes_client
-
- # Create 3 test volumes
- cls.volume_list = []
- cls.volume_id_list = []
- for i in range(3):
- v_name = rand_name('volume')
- metadata = {'Type': 'work'}
- 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 Exception:
- 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 volid in cls.volume_id_list:
- cls.client.delete_volume(volid)
- cls.client.wait_for_resource_deletion(volid)
- 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 cls.skipException(msg)
- raise
-
- @classmethod
- def tearDownClass(cls):
- # Delete the created volumes
- for volid in cls.volume_id_list:
- resp, _ = cls.client.delete_volume(volid)
- cls.client.wait_for_resource_deletion(volid)
- super(VolumeListTestJSON, cls).tearDownClass()
+class VolumeListTestXML(VolumesListTest):
+ _interface = 'xml'
diff --git a/tempest/tests/volume/test_volumes_negative.py b/tempest/tests/volume/test_volumes_negative.py
index dc1fad0..c7d4374 100644
--- a/tempest/tests/volume/test_volumes_negative.py
+++ b/tempest/tests/volume/test_volumes_negative.py
@@ -20,7 +20,13 @@
from tempest.tests.volume import base
-class VolumesNegativeTestBase(object):
+class VolumesNegativeTest(base.BaseVolumeTest):
+ _interface = 'json'
+
+ @classmethod
+ def setUpClass(cls):
+ super(VolumesNegativeTest, cls).setUpClass()
+ cls.client = cls.volumes_client
def test_volume_get_nonexistant_volume_id(self):
# Should not be able to get a nonexistant volume
@@ -94,16 +100,5 @@
self.assertRaises(exceptions.NotFound, self.client.delete_volume, '')
-class VolumesNegativeTestXML(base.BaseVolumeTestXML, VolumesNegativeTestBase):
- @classmethod
- def setUpClass(cls):
- super(VolumesNegativeTestXML, cls).setUpClass()
- cls.client = cls.volumes_client
-
-
-class VolumesNegativeTestJSON(base.BaseVolumeTestJSON,
- VolumesNegativeTestBase):
- @classmethod
- def setUpClass(cls):
- super(VolumesNegativeTestJSON, cls).setUpClass()
- cls.client = cls.volumes_client
+class VolumesNegativeTestXML(VolumesNegativeTest):
+ _interface = 'xml'
diff --git a/tempest/tests/volume/test_volumes_snapshots.py b/tempest/tests/volume/test_volumes_snapshots.py
index 3acc5f6..e7fa97d 100644
--- a/tempest/tests/volume/test_volumes_snapshots.py
+++ b/tempest/tests/volume/test_volumes_snapshots.py
@@ -15,7 +15,8 @@
from tempest.tests.volume import base
-class VolumesSnapshotTestBase(object):
+class VolumesSnapshotTest(base.BaseVolumeTest):
+ _interface = "json"
def test_volume_from_snapshot(self):
volume_origin = self.create_volume(size=1)
@@ -24,29 +25,15 @@
snapshot_id=
snapshot['id'])
self.snapshots_client.delete_snapshot(snapshot['id'])
- self.client.delete_volume(volume_snap['id'])
+ self.volumes_client.delete_volume(volume_snap['id'])
self.snapshots_client.wait_for_resource_deletion(snapshot['id'])
self.snapshots.remove(snapshot)
- self.client.delete_volume(volume_origin['id'])
- self.client.wait_for_resource_deletion(volume_snap['id'])
+ self.volumes_client.delete_volume(volume_origin['id'])
+ self.volumes_client.wait_for_resource_deletion(volume_snap['id'])
self.volumes.remove(volume_snap)
- self.client.wait_for_resource_deletion(volume_origin['id'])
+ self.volumes_client.wait_for_resource_deletion(volume_origin['id'])
self.volumes.remove(volume_origin)
-class VolumesSnapshotTestXML(base.BaseVolumeTestXML,
- VolumesSnapshotTestBase):
- @classmethod
- def setUpClass(cls):
- cls._interface = "xml"
- super(VolumesSnapshotTestXML, cls).setUpClass()
- cls.client = cls.volumes_client
-
-
-class VolumesSnapshotTestJSON(base.BaseVolumeTestJSON,
- VolumesSnapshotTestBase):
- @classmethod
- def setUpClass(cls):
- cls._interface = "json"
- super(VolumesSnapshotTestJSON, cls).setUpClass()
- cls.client = cls.volumes_client
+class VolumesSnapshotTestXML(VolumesSnapshotTest):
+ _interface = "xml"