Split up XML and JSON testing.

This adds a new boolean config option to compute, 'use_xml'. If
enabled tests will run with XML where applicable. Otherwise the
tests will only run with JSON.

Implements bp split-xml-json-tests

Change-Id: I139dac23194b3abdf26a0d3622461942478facb5
This commit is contained in:
Matthew Treinish
2013-01-17 16:25:49 -05:00
parent e3644e54e6
commit 58dec9d453
50 changed files with 189 additions and 694 deletions

View File

@@ -310,3 +310,10 @@ build_timeout = 120
# Status change wait interval
build_interval = 1
[general]
#This section contains configuration options that are used for all of tempest
#that are not specific to a single project or API
#Use xml containe for tests that support both JSON and XML?
use_xml = False

View File

@@ -141,8 +141,7 @@ class Manager(object):
Top level manager for OpenStack Compute clients
"""
def __init__(self, username=None, password=None, tenant_name=None,
interface='json'):
def __init__(self, username=None, password=None, tenant_name=None):
"""
We allow overriding of the credentials used within the various
client classes managed by the Manager object. Left as None, the
@@ -159,6 +158,10 @@ class Manager(object):
self.username = username or self.config.compute.username
self.password = password or self.config.compute.password
self.tenant_name = tenant_name or self.config.compute.tenant_name
if self.config.general.use_xml:
interface = 'xml'
else:
interface = 'json'
if None in (self.username, self.password, self.tenant_name):
msg = ("Missing required credentials. "
@@ -229,12 +232,11 @@ class AdminManager(Manager):
managed client objects
"""
def __init__(self, interface='json'):
def __init__(self):
conf = config.TempestConfig()
super(AdminManager, self).__init__(conf.compute_admin.username,
conf.compute_admin.password,
conf.compute_admin.tenant_name,
interface=interface)
conf.compute_admin.tenant_name)
class ServiceManager(object):
@@ -257,12 +259,11 @@ class IdentityManager(Manager):
managed client objects
"""
def __init__(self, interface='json'):
def __init__(self):
conf = config.TempestConfig()
super(IdentityManager, self).__init__(conf.identity_admin.username,
conf.identity_admin.password,
conf.identity_admin.tenant_name,
interface)
conf.identity_admin.tenant_name)
class IdentityNaManager(Manager):
@@ -272,9 +273,8 @@ class IdentityNaManager(Manager):
managed client objects
"""
def __init__(self, interface='json'):
def __init__(self):
conf = config.TempestConfig()
super(IdentityNaManager, self).__init__(conf.compute.username,
conf.compute.password,
conf.compute.tenant_name,
interface)
conf.compute.tenant_name)

View File

@@ -461,6 +461,20 @@ def register_boto_opts(conf):
for opt in BotoConfig:
conf.register_opt(opt, group='boto')
general_group = cfg.OptGroup(name='general', title='General Tempest Options')
GeneralOpts = [
cfg.BoolOpt('use_xml',
default=False,
help="Use xml for the container format"),
]
def register_general_opts(conf):
conf.register_group(general_group)
for opt in GeneralOpts:
conf.register_opt(opt, group='general')
# TODO(jaypipes): Move this to a common utils (not data_utils...)
def singleton(cls):
@@ -518,6 +532,7 @@ class TempestConfig:
register_volume_opts(cfg.CONF)
register_object_storage_opts(cfg.CONF)
register_boto_opts(cfg.CONF)
register_general_opts(cfg.CONF)
self.compute = cfg.CONF.compute
self.compute_admin = cfg.CONF['compute-admin']
self.identity = cfg.CONF.identity
@@ -528,3 +543,4 @@ class TempestConfig:
self.volume = cfg.CONF.volume
self.object_storage = cfg.CONF['object-storage']
self.boto = cfg.CONF.boto
self.general = cfg.CONF.general

View File

@@ -19,9 +19,12 @@ import nose
from nose.plugins.attrib import attr
import unittest2 as unittest
from tempest import config
from tempest.tests import compute
from tempest.tests.compute import base
CONF = config.TempestConfig()
class FlavorsAdminTestBase(object):
@@ -68,12 +71,12 @@ class FlavorsAdminTestBase(object):
self.assertEqual(flavor['rxtx_factor'], self.rxtx)
self.assertEqual(flavor['OS-FLV-EXT-DATA:ephemeral'],
self.ephemeral)
if self._interface == "xml":
if CONF.general.use_xml:
XMLNS_OS_FLV_ACCESS = "http://docs.openstack.org/compute/ext/"\
"flavor_access/api/v2"
key = "{" + XMLNS_OS_FLV_ACCESS + "}is_public"
self.assertEqual(flavor[key], "True")
if self._interface == "json":
else:
self.assertEqual(flavor['os-flavor-access:is_public'], True)
#Verify flavor is retrieved
@@ -164,12 +167,12 @@ class FlavorsAdminTestBase(object):
self.assertEqual(flavor['swap'], '')
self.assertEqual(int(flavor['rxtx_factor']), 1)
self.assertEqual(int(flavor['OS-FLV-EXT-DATA:ephemeral']), 0)
if self._interface == "xml":
if CONF.general.use_xml:
XMLNS_OS_FLV_ACCESS = "http://docs.openstack.org/compute/ext/"\
"flavor_access/api/v2"
key = "{" + XMLNS_OS_FLV_ACCESS + "}is_public"
self.assertEqual(flavor[key], "True")
if self._interface == "json":
else:
self.assertEqual(flavor['os-flavor-access:is_public'], True)
#Verify flavor is retrieved
@@ -241,23 +244,11 @@ class FlavorsAdminTestBase(object):
self.client.wait_for_resource_deletion(self.new_flavor_id)
class FlavorsAdminTestXML(base.BaseComputeAdminTestXML,
base.BaseComputeTestXML,
FlavorsAdminTestBase):
class FlavorsAdminTest(base.BaseComputeAdminTest, base.BaseCompTest,
FlavorsAdminTestBase):
@classmethod
def setUpClass(cls):
super(FlavorsAdminTestXML, cls).setUpClass()
base.BaseComputeTestXML.setUpClass()
FlavorsAdminTestBase.setUpClass(cls)
class FlavorsAdminTestJSON(base.BaseComputeAdminTestJSON,
base.BaseComputeTestJSON,
FlavorsAdminTestBase):
@classmethod
def setUpClass(cls):
super(FlavorsAdminTestJSON, cls).setUpClass()
base.BaseComputeTestJSON.setUpClass()
super(FlavorsAdminTest, cls).setUpClass()
base.BaseCompTest.setUpClass()
FlavorsAdminTestBase.setUpClass(cls)

View File

@@ -19,10 +19,10 @@ from nose.plugins.attrib import attr
from tempest import exceptions
from tempest.services.compute.admin.json import quotas_client as adm_quotas
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class QuotasTest(BaseComputeTest):
class QuotasTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -26,8 +26,7 @@ from tempest.common.utils.data_utils import rand_name
from tempest import config
from tempest import exceptions
__all__ = ['BaseComputeTest', 'BaseComputeTestJSON', 'BaseComputeTestXML',
'BaseComputeAdminTestJSON', 'BaseComputeAdminTestXML']
__all__ = ['BaseCompTest', 'BaseComputeAdminTest']
LOG = logging.getLogger(__name__)
@@ -46,10 +45,9 @@ class BaseCompTest(unittest.TestCase):
username, tenant_name, password = creds
os = clients.Manager(username=username,
password=password,
tenant_name=tenant_name,
interface=cls._interface)
tenant_name=tenant_name)
else:
os = clients.Manager(interface=cls._interface)
os = clients.Manager()
cls.os = os
cls.servers_client = os.servers_client
@@ -78,7 +76,7 @@ class BaseCompTest(unittest.TestCase):
"""
Returns an instance of the Identity Admin API client
"""
os = clients.IdentityManager(interface=cls._interface)
os = clients.IdentityManager()
admin_client = os.admin_client
return admin_client
@@ -227,23 +225,6 @@ class BaseCompTest(unittest.TestCase):
time.sleep(self.build_interval)
class BaseComputeTestJSON(BaseCompTest):
@classmethod
def setUpClass(cls):
cls._interface = "json"
super(BaseComputeTestJSON, cls).setUpClass()
# NOTE(danms): For transition, keep the old name active as JSON
BaseComputeTest = BaseComputeTestJSON
class BaseComputeTestXML(BaseCompTest):
@classmethod
def setUpClass(cls):
cls._interface = "xml"
super(BaseComputeTestXML, cls).setUpClass()
class BaseComputeAdminTest(unittest.TestCase):
"""Base test case class for all Compute Admin API tests."""
@@ -260,18 +241,4 @@ class BaseComputeAdminTest(unittest.TestCase):
"in configuration.")
raise nose.SkipTest(msg)
cls.os = clients.AdminManager(interface=cls._interface)
class BaseComputeAdminTestJSON(BaseComputeAdminTest):
@classmethod
def setUpClass(cls):
cls._interface = "json"
super(BaseComputeAdminTestJSON, cls).setUpClass()
class BaseComputeAdminTestXML(BaseComputeAdminTest):
@classmethod
def setUpClass(cls):
cls._interface = "xml"
super(BaseComputeAdminTestXML, cls).setUpClass()
cls.os = clients.AdminManager()

View File

@@ -137,19 +137,9 @@ class FlavorsTestBase(object):
9999)
class FlavorsTestXML(base.BaseComputeTestXML,
FlavorsTestBase):
class FlavorsTest(base.BaseCompTest, FlavorsTestBase):
@classmethod
def setUpClass(cls):
super(FlavorsTestXML, cls).setUpClass()
cls.client = cls.flavors_client
class FlavorsTestJSON(base.BaseComputeTestJSON,
FlavorsTestBase):
@classmethod
def setUpClass(cls):
super(FlavorsTestJSON, cls).setUpClass()
super(FlavorsTest, cls).setUpClass()
cls.client = cls.flavors_client

View File

@@ -205,25 +205,13 @@ class FloatingIPsTestBase(object):
' with out passing floating IP should raise BadRequest')
class FloatingIPsTestJSON(base.BaseComputeTestJSON, FloatingIPsTestBase):
class FloatingIPsTest(base.BaseCompTest, FloatingIPsTestBase):
@classmethod
def setUpClass(cls):
super(FloatingIPsTestJSON, cls).setUpClass()
super(FloatingIPsTest, cls).setUpClass()
FloatingIPsTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
FloatingIPsTestBase.tearDownClass(cls)
super(FloatingIPsTestJSON, cls).tearDownClass()
class FloatingIPsTestXML(base.BaseComputeTestXML, FloatingIPsTestBase):
@classmethod
def setUpClass(cls):
super(FloatingIPsTestXML, cls).setUpClass()
FloatingIPsTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
FloatingIPsTestBase.tearDownClass(cls)
super(FloatingIPsTestXML, cls).tearDownClass()
super(FloatingIPsTest, cls).tearDownClass()

View File

@@ -99,27 +99,13 @@ class FloatingIPDetailsTestBase(object):
'nonexistant floating IP')
class FloatingIPDetailsTestJSON(base.BaseComputeTestJSON,
FloatingIPDetailsTestBase):
class FloatingIPDetailsTest(base.BaseCompTest, FloatingIPDetailsTestBase):
@classmethod
def setUpClass(cls):
super(FloatingIPDetailsTestJSON, cls).setUpClass()
super(FloatingIPDetailsTest, cls).setUpClass()
FloatingIPDetailsTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
FloatingIPDetailsTestBase.tearDownClass(cls)
super(FloatingIPDetailsTestJSON, cls).tearDownClass()
class FloatingIPDetailsTestXML(base.BaseComputeTestXML,
FloatingIPDetailsTestBase):
@classmethod
def setUpClass(cls):
super(FloatingIPDetailsTestXML, cls).setUpClass()
FloatingIPDetailsTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
FloatingIPDetailsTestBase.tearDownClass(cls)
super(FloatingIPDetailsTestXML, cls).tearDownClass()
super(FloatingIPDetailsTest, cls).tearDownClass()

View File

@@ -19,10 +19,10 @@ from nose.plugins.attrib import attr
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class ImagesMetadataTest(BaseComputeTest):
class ImagesMetadataTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -213,40 +213,13 @@ class ImagesTestBase(object):
"exceeds 35 character ID length limit")
class ImagesTestJSON(base.BaseComputeTestJSON,
ImagesTestBase):
class ImagesTest(base.BaseCompTest, ImagesTestBase):
def tearDown(self):
ImagesTestBase.tearDown(self)
@classmethod
def setUpClass(cls):
super(ImagesTestJSON, cls).setUpClass()
cls.client = cls.images_client
cls.servers_client = cls.servers_client
cls.image_ids = []
if compute.MULTI_USER:
if cls.config.compute.allow_tenant_isolation:
creds = cls._get_isolated_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
password=password,
tenant_name=tenant_name)
else:
# Use the alt_XXX credentials in the config file
cls.alt_manager = clients.AltManager()
cls.alt_client = cls.alt_manager.images_client
class ImagesTestXML(base.BaseComputeTestXML,
ImagesTestBase):
def tearDown(self):
ImagesTestBase.tearDown(self)
@classmethod
def setUpClass(cls):
super(ImagesTestXML, cls).setUpClass()
super(ImagesTest, cls).setUpClass()
cls.client = cls.images_client
cls.servers_client = cls.servers_client

View File

@@ -187,43 +187,14 @@ class ImagesOneServerTestBase(object):
self.assertRaises(exceptions.NotFound, self.client.get_image, image_id)
class ImagesOneServerTestJSON(base.BaseComputeTestJSON,
ImagesOneServerTestBase):
class ImagesOneServerTest(base.BaseCompTest, ImagesOneServerTestBase):
def tearDown(self):
ImagesOneServerTestBase.tearDown(self)
@classmethod
def setUpClass(cls):
super(ImagesOneServerTestJSON, cls).setUpClass()
cls.client = cls.images_client
cls.servers_client = cls.servers_client
cls.server = cls.create_server()
cls.image_ids = []
if compute.MULTI_USER:
if cls.config.compute.allow_tenant_isolation:
creds = cls._get_isolated_creds()
username, tenant_name, password = creds
cls.alt_manager = clients.Manager(username=username,
password=password,
tenant_name=tenant_name)
else:
# Use the alt_XXX credentials in the config file
cls.alt_manager = clients.AltManager()
cls.alt_client = cls.alt_manager.images_client
class ImagesOneServerTestXML(base.BaseComputeTestXML,
ImagesOneServerTestBase):
def tearDown(self):
ImagesOneServerTestBase.tearDown(self)
@classmethod
def setUpClass(cls):
super(ImagesOneServerTestXML, cls).setUpClass()
super(ImagesOneServerTest, cls).setUpClass()
cls.client = cls.images_client
cls.servers_client = cls.servers_client
cls.server = cls.create_server()

View File

@@ -24,7 +24,7 @@ from tempest import whitebox
@attr(type='whitebox')
class ImagesWhiteboxTest(whitebox.ComputeWhiteboxTest, base.BaseComputeTest):
class ImagesWhiteboxTest(whitebox.ComputeWhiteboxTest, base.BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -20,10 +20,10 @@ from nose.plugins.attrib import attr
from tempest.common.utils.data_utils import parse_image_id
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class ListImageFiltersTest(BaseComputeTest):
class ListImageFiltersTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -20,10 +20,10 @@ from nose.plugins.attrib import attr
from tempest.common.utils.data_utils import parse_image_id
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class ListImagesTest(BaseComputeTest):
class ListImagesTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -20,8 +20,7 @@ import unittest2 as unittest
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests.compute.base import BaseComputeTestJSON
from tempest.tests.compute.base import BaseComputeTestXML
from tempest.tests.compute.base import BaseCompTest
class KeyPairsTestBase(object):
@@ -222,15 +221,8 @@ class KeyPairsTestBase(object):
self.fail('invalid name')
class KeyPairsTestXML(BaseComputeTestXML, KeyPairsTestBase):
class KeyPairsTest(BaseCompTest, KeyPairsTestBase):
@classmethod
def setUpClass(cls):
super(KeyPairsTestXML, cls).setUpClass()
cls.client = cls.keypairs_client
class KeyPairsTestJSON(BaseComputeTestJSON, KeyPairsTestBase):
@classmethod
def setUpClass(cls):
super(KeyPairsTestJSON, cls).setUpClass()
super(KeyPairsTest, cls).setUpClass()
cls.client = cls.keypairs_client

View File

@@ -20,7 +20,7 @@ import unittest2 as unittest
from tempest.tests.compute import base
class AbsoluteLimitsTest(object):
class AbsoluteLimitsTestBase(object):
@staticmethod
def setUpClass(cls):
@@ -50,17 +50,8 @@ class AbsoluteLimitsTest(object):
% ', '.join(ele for ele in missing_elements))
class AbsoluteLimitsTestJSON(base.BaseComputeTestJSON,
AbsoluteLimitsTest):
class AbsoluteLimitsTest(base.BaseCompTest, AbsoluteLimitsTestBase):
@classmethod
def setUpClass(cls):
super(AbsoluteLimitsTestJSON, cls).setUpClass()
AbsoluteLimitsTest.setUpClass(cls)
class AbsoluteLimitsTestXML(base.BaseComputeTestXML,
AbsoluteLimitsTest):
@classmethod
def setUpClass(cls):
super(AbsoluteLimitsTestXML, cls).setUpClass()
AbsoluteLimitsTest.setUpClass(cls)
super(AbsoluteLimitsTest, cls).setUpClass()
AbsoluteLimitsTestBase.setUpClass(cls)

View File

@@ -22,7 +22,7 @@ from tempest import exceptions
from tempest.tests.compute import base
class SecurityGroupRulesTest(object):
class SecurityGroupRulesTestBase(object):
@staticmethod
def setUpClass(cls):
@@ -244,17 +244,8 @@ class SecurityGroupRulesTest(object):
'with nonexistant rule id')
class SecurityGroupRulesTestJSON(base.BaseComputeTestJSON,
SecurityGroupRulesTest):
class SecurityGroupRulesTest(base.BaseCompTest, SecurityGroupRulesTestBase):
@classmethod
def setUpClass(cls):
super(SecurityGroupRulesTestJSON, cls).setUpClass()
SecurityGroupRulesTest.setUpClass(cls)
class SecurityGroupRulesTestXML(base.BaseComputeTestXML,
SecurityGroupRulesTest):
@classmethod
def setUpClass(cls):
super(SecurityGroupRulesTestXML, cls).setUpClass()
SecurityGroupRulesTest.setUpClass(cls)
super(SecurityGroupRulesTest, cls).setUpClass()
SecurityGroupRulesTestBase.setUpClass(cls)

View File

@@ -22,7 +22,7 @@ from tempest import exceptions
from tempest.tests.compute import base
class SecurityGroupsTest(object):
class SecurityGroupsTestBase(object):
@staticmethod
def setUpClass(cls):
@@ -298,17 +298,8 @@ class SecurityGroupsTest(object):
self.assertEqual(202, resp.status)
class SecurityGroupsTestJSON(base.BaseComputeTestJSON,
SecurityGroupsTest):
class SecurityGroupsTest(base.BaseCompTest, SecurityGroupsTestBase):
@classmethod
def setUpClass(cls):
super(SecurityGroupsTestJSON, cls).setUpClass()
SecurityGroupsTest.setUpClass(cls)
class SecurityGroupsTestXML(base.BaseComputeTestXML,
SecurityGroupsTest):
@classmethod
def setUpClass(cls):
super(SecurityGroupsTestXML, cls).setUpClass()
SecurityGroupsTest.setUpClass(cls)
super(SecurityGroupsTest, cls).setUpClass()
SecurityGroupsTestBase.setUpClass(cls)

View File

@@ -23,7 +23,7 @@ from tempest import exceptions
from tempest.tests.compute import base
class ConsoleOutputTest(object):
class ConsoleOutputTestBase(object):
@classmethod
def setUpClass(self, cls):
@@ -87,28 +87,13 @@ class ConsoleOutputTest(object):
@attr(type='smoke')
class ConsoleOutputTestJSON(base.BaseComputeTestJSON,
ConsoleOutputTest):
class ConsoleOutputTest(base.BaseCompTest, ConsoleOutputTestBase):
@classmethod
def setUpClass(cls):
super(ConsoleOutputTestJSON, cls).setUpClass()
ConsoleOutputTest.setUpClass(cls)
super(ConsoleOutputTest, cls).setUpClass()
ConsoleOutputTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
ConsoleOutputTest.tearDownClass(cls)
super(ConsoleOutputTestJSON, cls).tearDownClass()
@attr(type='smoke')
class ConsoleOutputTestXML(base.BaseComputeTestXML,
ConsoleOutputTest):
@classmethod
def setUpClass(cls):
super(ConsoleOutputTestXML, cls).setUpClass()
ConsoleOutputTest.setUpClass(cls)
@classmethod
def tearDownClass(cls):
ConsoleOutputTest.tearDownClass(cls)
super(ConsoleOutputTestXML, cls).tearDownClass()
ConsoleOutputTestBase.tearDownClass(cls)
super(ConsoleOutputTest, cls).tearDownClass()

View File

@@ -29,7 +29,7 @@ from tempest.tests import compute
from tempest.tests.compute import base
class ServersTest(object):
class ServersTestBase(object):
run_ssh = tempest.config.TempestConfig().compute.run_ssh
@@ -122,8 +122,7 @@ class ServersTest(object):
@attr(type='positive')
class ServersTestAutoDisk(base.BaseComputeTestJSON,
ServersTest):
class ServersTestAutoDisk(base.BaseCompTest, ServersTestBase):
@classmethod
def setUpClass(cls):
if not compute.DISK_CONFIG_ENABLED:
@@ -131,17 +130,16 @@ class ServersTestAutoDisk(base.BaseComputeTestJSON,
raise nose.SkipTest(msg)
super(ServersTestAutoDisk, cls).setUpClass()
cls.disk_config = 'AUTO'
ServersTest.setUpClass(cls)
ServersTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
ServersTest.tearDownClass(cls)
ServersTestBase.tearDownClass(cls)
super(ServersTestAutoDisk, cls).tearDownClass()
@attr(type='positive')
class ServersTestManualDisk(base.BaseComputeTestJSON,
ServersTest):
class ServersTestManualDisk(base.BaseCompTest, ServersTestBase):
@classmethod
def setUpClass(cls):
if not compute.DISK_CONFIG_ENABLED:
@@ -149,39 +147,23 @@ class ServersTestManualDisk(base.BaseComputeTestJSON,
raise nose.SkipTest(msg)
super(ServersTestManualDisk, cls).setUpClass()
cls.disk_config = 'MANUAL'
ServersTest.setUpClass(cls)
ServersTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
ServersTest.tearDownClass(cls)
ServersTestBase.tearDownClass(cls)
super(ServersTestManualDisk, cls).tearDownClass()
@attr(type='smoke')
class ServersTestJSON(base.BaseComputeTestJSON,
ServersTest):
class ServersTest(base.BaseCompTest, ServersTestBase):
@classmethod
def setUpClass(cls):
super(ServersTestJSON, cls).setUpClass()
super(ServersTest, cls).setUpClass()
cls.disk_config = None
ServersTest.setUpClass(cls)
ServersTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
ServersTest.tearDownClass(cls)
super(ServersTestJSON, cls).tearDownClass()
@attr(type='smoke')
class ServersTestXML(base.BaseComputeTestXML,
ServersTest):
@classmethod
def setUpClass(cls):
super(ServersTestXML, cls).setUpClass()
cls.disk_config = None
ServersTest.setUpClass(cls)
@classmethod
def tearDownClass(cls):
ServersTest.tearDownClass(cls)
super(ServersTestXML, cls).tearDownClass()
ServersTestBase.tearDownClass(cls)
super(ServersTest, cls).tearDownClass()

View File

@@ -22,10 +22,10 @@ import unittest2 as unittest
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests import compute
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class TestServerDiskConfig(BaseComputeTest):
class TestServerDiskConfig(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -27,7 +27,7 @@ from tempest.tests.compute import base
from tempest.tests import utils
class ListServerFiltersTest(object):
class ListServerFiltersTestBase(object):
@staticmethod
def setUpClass(cls):
@@ -204,27 +204,13 @@ class ListServerFiltersTest(object):
return min_detail
class ListServerFiltersTestJSON(base.BaseComputeTestJSON,
ListServerFiltersTest):
class ListServerFiltersTest(base.BaseCompTest, ListServerFiltersTestBase):
@classmethod
def setUpClass(cls):
super(ListServerFiltersTestJSON, cls).setUpClass()
ListServerFiltersTest.setUpClass(cls)
super(ListServerFiltersTest, cls).setUpClass()
ListServerFiltersTestBase.setUpClass(cls)
@classmethod
def tearDownClass(cls):
super(ListServerFiltersTestJSON, cls).tearDownClass()
ListServerFiltersTest.tearDownClass(cls)
class ListServerFiltersTestXML(base.BaseComputeTestXML,
ListServerFiltersTest):
@classmethod
def setUpClass(cls):
super(ListServerFiltersTestXML, cls).setUpClass()
ListServerFiltersTest.setUpClass(cls)
@classmethod
def tearDownClass(cls):
super(ListServerFiltersTestXML, cls).tearDownClass()
ListServerFiltersTest.tearDownClass(cls)
super(ListServerFiltersTest, cls).tearDownClass()
ListServerFiltersTestBase.tearDownClass(cls)

View File

@@ -25,10 +25,10 @@ from tempest import clients
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests import compute
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class ListServersNegativeTest(BaseComputeTest):
class ListServersNegativeTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -193,10 +193,9 @@ class ServerActionsTestBase(object):
' be allowed')
class ServerActionsTestXML(base.BaseComputeTestXML,
ServerActionsTestBase):
class ServerActionsTest(base.BaseCompTest, ServerActionsTestBase):
def setUp(self):
super(ServerActionsTestXML, self).setUp()
super(ServerActionsTest, self).setUp()
# Check if the server is in a clean state after test
try:
self.client.wait_for_server_status(self.server_id, 'ACTIVE')
@@ -212,7 +211,7 @@ class ServerActionsTestXML(base.BaseComputeTestXML,
@classmethod
def setUpClass(cls):
super(ServerActionsTestXML, cls).setUpClass()
super(ServerActionsTest, cls).setUpClass()
cls.client = cls.servers_client
cls.name = rand_name('server')
resp, server = cls.create_server_with_extras(cls.name,
@@ -225,39 +224,4 @@ class ServerActionsTestXML(base.BaseComputeTestXML,
@classmethod
def tearDownClass(cls):
cls.clear_servers()
super(ServerActionsTestXML, cls).tearDownClass()
class ServerActionsTestJSON(base.BaseComputeTestJSON,
ServerActionsTestBase):
def setUp(self):
super(ServerActionsTestJSON, self).setUp()
# Check if the server is in a clean state after test
try:
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')
@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()
super(ServerActionsTest, cls).tearDownClass()

View File

@@ -19,10 +19,10 @@ from nose.plugins.attrib import attr
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class ServerAddressesTest(BaseComputeTest):
class ServerAddressesTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -19,10 +19,10 @@ from nose.plugins.attrib import attr
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class ServerMetadataTest(BaseComputeTest):
class ServerMetadataTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -78,21 +78,9 @@ class ServerPersonalityTestBase(object):
self.client.delete_server(server['id'])
class ServerPersonalityTestXML(base.BaseComputeTestXML,
ServerPersonalityTestBase):
class ServerPersonalityTest(base.BaseCompTest, ServerPersonalityTestBase):
@classmethod
def setUpClass(cls):
cls._interface = "xml"
super(ServerPersonalityTestXML, cls).setUpClass()
cls.client = cls.servers_client
cls.user_client = cls.limits_client
class ServerPersonalityTestJSON(base.BaseComputeTestJSON,
ServerPersonalityTestBase):
@classmethod
def setUpClass(cls):
cls._interface = "json"
super(ServerPersonalityTestJSON, cls).setUpClass()
super(ServerPersonalityTest, cls).setUpClass()
cls.client = cls.servers_client
cls.user_client = cls.limits_client

View File

@@ -156,10 +156,10 @@ class ServersTestBase(object):
self.assertEqual('204', resp['status'])
class ServersTestJSON(base.BaseComputeTestJSON, ServersTestBase):
class ServersTest(base.BaseCompTest, ServersTestBase):
@classmethod
def setUpClass(cls):
super(ServersTestJSON, cls).setUpClass()
super(ServersTest, cls).setUpClass()
cls.client = cls.servers_client
def tearDown(self):
@@ -169,20 +169,4 @@ class ServersTestJSON(base.BaseComputeTestJSON, ServersTestBase):
# 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()
super(ServersTest, self).tearDown()

View File

@@ -24,10 +24,10 @@ import unittest2 as unittest
from tempest import clients
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class ServersNegativeTest(BaseComputeTest):
class ServersNegativeTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -25,10 +25,10 @@ from tempest.common.utils.data_utils import parse_image_id
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.tests import compute
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class AuthorizationTest(BaseComputeTest):
class AuthorizationTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -30,17 +30,9 @@ class ExtensionsTestBase(object):
self.assertEqual(200, resp.status)
class ExtensionsTestJSON(base.BaseComputeTest, ExtensionsTestBase):
class ExtensionsTest(base.BaseCompTest):
@classmethod
def setUpClass(cls):
super(ExtensionsTestJSON, cls).setUpClass()
cls.client = cls.extensions_client
class ExtensionsTestXML(base.BaseComputeTestXML, ExtensionsTestBase):
@classmethod
def setUpClass(cls):
super(ExtensionsTestXML, cls).setUpClass()
super(ExtensionsTest, cls).setUpClass()
cls.client = cls.extensions_client

View File

@@ -31,7 +31,7 @@ from tempest.tests.compute import base
@attr(category='live-migration')
class LiveBlockMigrationTest(base.BaseComputeTest):
class LiveBlockMigrationTest(base.BaseCompTest):
live_migration_available = (
config.TempestConfig().compute.live_migration_available)

View File

@@ -17,10 +17,10 @@
from nose.plugins.attrib import attr
from tempest.tests.compute.base import BaseComputeTest
from tempest.tests.compute.base import BaseCompTest
class QuotasTest(BaseComputeTest):
class QuotasTest(BaseCompTest):
@classmethod
def setUpClass(cls):

View File

@@ -107,17 +107,8 @@ class AttachVolumeTest(object):
self._delete(server['id'], volume['id'])
class TestAttachVolumeJSON(base.BaseComputeTestJSON,
AttachVolumeTest):
class TestAttachVolume(base.BaseCompTest, AttachVolumeTest):
@classmethod
def setUpClass(cls):
super(TestAttachVolumeJSON, cls).setUpClass()
AttachVolumeTest.setUpClass(cls)
class TestAttachVolumeXML(base.BaseComputeTestXML,
AttachVolumeTest):
@classmethod
def setUpClass(cls):
super(TestAttachVolumeXML, cls).setUpClass()
super(TestAttachVolume, cls).setUpClass()
AttachVolumeTest.setUpClass(cls)

View File

@@ -28,7 +28,7 @@ class VolumesGetTestBase(object):
# CREATE, GET, DELETE Volume
volume = None
try:
v_name = rand_name('Volume-%s-') % self._interface
v_name = rand_name('Volume-')
metadata = {'Type': 'work'}
#Create volume
resp, volume = self.client.create_volume(size=1,
@@ -95,17 +95,8 @@ class VolumesGetTestBase(object):
self.client.wait_for_resource_deletion(volume['id'])
class VolumesGetTestXML(base.BaseComputeTestXML, VolumesGetTestBase):
class VolumesGetTest(base.BaseCompTest, VolumesGetTestBase):
@classmethod
def setUpClass(cls):
cls._interface = "xml"
super(VolumesGetTestXML, cls).setUpClass()
cls.client = cls.volumes_extensions_client
class VolumesGetTestJSON(base.BaseComputeTestJSON, VolumesGetTestBase):
@classmethod
def setUpClass(cls):
cls._interface = "json"
super(VolumesGetTestJSON, cls).setUpClass()
super(VolumesGetTest, cls).setUpClass()
cls.client = cls.volumes_extensions_client

View File

@@ -62,57 +62,10 @@ class VolumesTestBase(object):
for m_vol in missing_volumes))
class VolumesTestXML(base.BaseComputeTestXML, VolumesTestBase):
class VolumesTest(base.BaseCompTest, VolumesTestBase):
@classmethod
def setUpClass(cls):
cls._interface = 'xml'
super(VolumesTestXML, cls).setUpClass()
cls.client = cls.volumes_extensions_client
# Create 3 Volumes
cls.volume_list = list()
cls.volume_id_list = list()
for i in range(3):
v_name = rand_name('volume')
metadata = {'Type': 'work'}
v_name += cls._interface
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 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 volume in cls.volume_list:
resp, _ = cls.client.delete_volume(volume['id'])
cls.client.wait_for_resource_deletion(volume['id'])
super(VolumesTestXML, cls).tearDownClass()
class VolumesTestJSON(base.BaseComputeTestJSON, VolumesTestBase):
@classmethod
def setUpClass(cls):
cls._interface = 'json'
super(VolumesTestJSON, cls).setUpClass()
super(VolumesTest, cls).setUpClass()
cls.client = cls.volumes_extensions_client
# Create 3 Volumes
cls.volume_list = []
@@ -120,7 +73,6 @@ class VolumesTestJSON(base.BaseComputeTestJSON, VolumesTestBase):
for i in range(3):
v_name = rand_name('volume-%s')
metadata = {'Type': 'work'}
v_name += cls._interface
try:
resp, volume = cls.client.create_volume(size=1,
display_name=v_name,
@@ -151,4 +103,4 @@ class VolumesTestJSON(base.BaseComputeTestJSON, VolumesTestBase):
for volume in cls.volume_list:
resp, _ = cls.client.delete_volume(volume['id'])
cls.client.wait_for_resource_deletion(volume['id'])
super(VolumesTestJSON, cls).tearDownClass()
super(VolumesTest, cls).tearDownClass()

View File

@@ -124,19 +124,8 @@ class VolumesNegativeTestBase(object):
resp, volume = self.client.delete_volume('')
class VolumesNegativeTestXML(base.BaseComputeTestXML,
VolumesNegativeTestBase):
class VolumesNegativeTest(base.BaseCompTest, VolumesNegativeTestBase):
@classmethod
def setUpClass(cls):
cls._interface = "xml"
super(VolumesNegativeTestXML, cls).setUpClass()
cls.client = cls.volumes_extensions_client
class VolumesNegativeTestJSON(base.BaseComputeTestJSON,
VolumesNegativeTestBase):
@classmethod
def setUpClass(cls):
cls._interface = "json"
super(VolumesNegativeTestJSON, cls).setUpClass()
super(VolumesNegativeTest, cls).setUpClass()
cls.client = cls.volumes_extensions_client

View File

@@ -100,21 +100,10 @@ class RolesTestBase(object):
self.client.delete_role(role1_id)
class RolesTestJSON(base.BaseIdentityAdminTestJSON,
RolesTestBase):
class RolesTest(base.BaseIdentityAdminTest, RolesTestBase):
@classmethod
def setUpClass(cls):
super(RolesTestJSON, cls).setUpClass()
RolesTestBase.setUpClass(cls)
class RolesTestXML(base.BaseIdentityAdminTestXML,
RolesTestBase):
@classmethod
def setUpClass(cls):
super(RolesTestXML, cls).setUpClass()
super(RolesTest, cls).setUpClass()
RolesTestBase.setUpClass(cls)
@@ -264,17 +253,8 @@ class UserRolesTestBase(RolesTestBase):
tenant['id'], 'junk-role-aabbcc11')
class UserRolesTestJSON(RolesTestJSON,
UserRolesTestBase):
class UserRolesTest(RolesTest, UserRolesTestBase):
@classmethod
def setUpClass(cls):
super(UserRolesTestJSON, cls).setUpClass()
class UserRolesTestXML(RolesTestXML,
UserRolesTestBase):
@classmethod
def setUpClass(cls):
super(UserRolesTestXML, cls).setUpClass()
super(UserRolesTest, cls).setUpClass()

View File

@@ -18,9 +18,12 @@
import nose
from tempest.common.utils.data_utils import rand_name
from tempest import config
from tempest import exceptions
from tempest.tests.identity import base
CONF = config.TempestConfig()
class ServicesTestBase(object):
@@ -65,15 +68,9 @@ class ServicesTestBase(object):
service_data['id'])
class ServicesTestJSON(base.BaseIdentityAdminTestJSON, ServicesTestBase):
class ServicesTest(base.BaseIdentityAdminTest, ServicesTestBase):
@classmethod
def setUpClass(cls):
super(ServicesTestJSON, cls).setUpClass()
class ServicesTestXML(base.BaseIdentityAdminTestXML,
ServicesTestBase):
@classmethod
def setUpClass(cls):
super(ServicesTestXML, cls).setUpClass()
raise nose.SkipTest("Skipping until Bug #1061738 resolved")
super(ServicesTest, cls).setUpClass()
if CONF.general.use_xml:
raise nose.SkipTest("Skipping until Bug #1061738 resolved")

View File

@@ -274,16 +274,8 @@ class TenantsTestBase(object):
self.data.tenants.remove(tenant)
class TenantsTestJSON(base.BaseIdentityAdminTestJSON,
TenantsTestBase):
class TenantsTest(base.BaseIdentityAdminTest, TenantsTestBase):
@classmethod
def setUpClass(cls):
super(TenantsTestJSON, cls).setUpClass()
class TenantsTestXML(base.BaseIdentityAdminTestXML, TenantsTestBase):
@classmethod
def setUpClass(cls):
super(TenantsTestXML, cls).setUpClass()
super(TenantsTest, cls).setUpClass()

View File

@@ -329,14 +329,7 @@ class UsersTestBase(object):
'tenant ids %s' % fail)
class UsersTestJSON(base.BaseIdentityAdminTestJSON,
UsersTestBase):
class UsersTest(base.BaseIdentityAdminTest, UsersTestBase):
@classmethod
def setUpClass(cls):
super(UsersTestJSON, cls).setUpClass()
class UsersTestXML(base.BaseIdentityAdminTestXML, UsersTestBase):
@classmethod
def setUpClass(cls):
super(UsersTestXML, cls).setUpClass()
super(UsersTest, cls).setUpClass()

View File

@@ -26,7 +26,7 @@ class BaseIdAdminTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
os = clients.IdentityManager(interface=cls._interface)
os = clients.IdentityManager()
cls.client = os.admin_client
cls.token_client = os.token_client
@@ -35,7 +35,7 @@ class BaseIdAdminTest(unittest.TestCase):
cls.data = DataGenerator(cls.client)
os = clients.IdentityNaManager(interface=cls._interface)
os = clients.IdentityNaManager()
cls.non_admin_client = os.admin_client
@classmethod
@@ -69,20 +69,10 @@ class BaseIdAdminTest(unittest.TestCase):
return role[0]
class BaseIdentityAdminTestJSON(BaseIdAdminTest):
class BaseIdentityAdminTest(BaseIdAdminTest):
@classmethod
def setUpClass(cls):
cls._interface = "json"
super(BaseIdentityAdminTestJSON, cls).setUpClass()
BaseIdentityAdminTest = BaseIdentityAdminTestJSON
class BaseIdentityAdminTestXML(BaseIdAdminTest):
@classmethod
def setUpClass(cls):
cls._interface = "xml"
super(BaseIdentityAdminTestXML, cls).setUpClass()
super(BaseIdentityAdminTest, cls).setUpClass()
class DataGenerator(object):

View File

@@ -42,26 +42,15 @@ class BaseVolumeAdminTest(BaseVolumeTest):
"in configuration.")
raise nose.SkipTest(msg)
if cls.config.general.use_xml:
cls.client = volumes_types_xml_client.\
VolumeTypesClient(cls.config, cls.adm_user, cls.adm_pass,
cls.auth_url, cls.adm_tenant)
else:
cls.client = volume_types_json_client.\
VolumeTypesClientJSON(cls.config, cls.adm_user, cls.adm_pass,
cls.auth_url, cls.adm_tenant)
@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)

View File

@@ -23,8 +23,7 @@ from nose.tools import raises
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.admin.base import BaseVolumeAdminTest
class ExtraSpecsNegativeTestBase():
@@ -136,29 +135,14 @@ class ExtraSpecsNegativeTestBase():
str(uuid.uuid4()))
class ExtraSpecsNegativeTestXML(BaseVolumeAdminTestXML,
ExtraSpecsNegativeTestBase):
class ExtraSpecsNegativeTest(BaseVolumeAdminTest, ExtraSpecsNegativeTestBase):
@classmethod
def setUpClass(cls):
super(ExtraSpecsNegativeTestXML, cls).setUpClass()
super(ExtraSpecsNegativeTest, 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()
super(ExtraSpecsNegativeTest, cls).tearDownClass()
ExtraSpecsNegativeTestBase.tearDownClass(cls)

View File

@@ -22,8 +22,7 @@ from nose.plugins.attrib import attr
from nose.tools import raises
from tempest import exceptions
from tempest.tests.volume.admin.base import BaseVolumeAdminTestJSON
from tempest.tests.volume.admin.base import BaseVolumeAdminTestXML
from tempest.tests.volume.admin.base import BaseVolumeAdminTest
class VolumeTypesNegativeTestBase():
@@ -60,17 +59,9 @@ class VolumeTypesNegativeTestBase():
self.client.delete_volume_type(str(uuid.uuid4()))
class VolumesTypesNegativeTestXML(BaseVolumeAdminTestXML,
VolumeTypesNegativeTestBase):
class VolumesTypesNegativeTest(BaseVolumeAdminTest,
VolumeTypesNegativeTestBase):
@classmethod
def setUpClass(cls):
super(VolumesTypesNegativeTestXML, cls).setUpClass()
VolumeTypesNegativeTestBase.setUpClass(cls)
class VolumesTypesNegativeTestJSON(BaseVolumeAdminTestJSON,
VolumeTypesNegativeTestBase):
@classmethod
def setUpClass(cls):
super(VolumesTypesNegativeTestJSON, cls).setUpClass()
super(VolumesTypesNegativeTest, cls).setUpClass()
VolumeTypesNegativeTestBase.setUpClass(cls)

View File

@@ -146,17 +146,3 @@ class BaseVolumeTest(unittest.TestCase):
condition()
return
time.sleep(self.build_interval)
class BaseVolumeTestJSON(BaseVolumeTest):
@classmethod
def setUpClass(cls):
cls._interface = "json"
super(BaseVolumeTestJSON, cls).setUpClass()
class BaseVolumeTestXML(BaseVolumeTest):
@classmethod
def setUpClass(cls):
cls._interface = "xml"
super(BaseVolumeTestXML, cls).setUpClass()

View File

@@ -95,17 +95,8 @@ class VolumesGetTestBase(object):
self.client.wait_for_resource_deletion(volume['id'])
class VolumesGetTestXML(base.BaseVolumeTestXML, VolumesGetTestBase):
class VolumesGetTest(base.BaseVolumeTest, 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()
super(VolumesGetTest, cls).setUpClass()
cls.client = cls.volumes_client

View File

@@ -59,11 +59,10 @@ class VolumesListTestBase(object):
for m_vol in missing_vols))
class VolumeListTestXML(base.BaseVolumeTestXML, VolumesListTestBase):
class VolumeListTest(base.BaseVolumeTest, VolumesListTestBase):
@classmethod
def setUpClass(cls):
cls._interface = 'xml'
super(VolumeListTestXML, cls).setUpClass()
super(VolumeListTest, cls).setUpClass()
cls.client = cls.volumes_client
# Create 3 test volumes
@@ -103,51 +102,4 @@ class VolumeListTestXML(base.BaseVolumeTestXML, VolumesListTestBase):
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 nose.SkipTest(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()
super(VolumeListTest, cls).tearDownClass()

View File

@@ -114,16 +114,8 @@ class VolumesNegativeTestBase(object):
resp, volume = self.client.delete_volume('')
class VolumesNegativeTestXML(base.BaseVolumeTestXML, VolumesNegativeTestBase):
class VolumesNegativeTest(base.BaseVolumeTest, 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()
super(VolumesNegativeTest, cls).setUpClass()
cls.client = cls.volumes_client