Sharing codes for cinder v1 and v2 tests
Tempest doesn't have enough Cinder v2 api tests. We need to add more
tests for it. Cinder v2 api only has some small updates, so v1 and v2
tests could share service client and test code.
This patch makes the follwoing initial chanages to support sharing
codes between v1 and v2:
1. Rename volumes v1 client to a base client, then create v1 and v2
clients inheriting base client.
2. Create common base test class instead of
BaseVolumeV1Test/BaseVolumeV2Test. They will be remove after all
test classes using sharing codes.
Partially implements: blueprint cinder-v2-api-tests
Change-Id: I2c0139d82663563996fae702f8e5f29f7ae0a7a9
diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py
index 67d0203..2a9b407 100644
--- a/tempest/api/volume/base.py
+++ b/tempest/api/volume/base.py
@@ -16,6 +16,7 @@
from tempest import clients
from tempest.common.utils import data_utils
from tempest import config
+from tempest import exceptions
from tempest.openstack.common import log as logging
import tempest.test
@@ -25,9 +26,11 @@
class BaseVolumeTest(tempest.test.BaseTestCase):
-
"""Base test case class for all Cinder API tests."""
+ _api_version = 2
+ _interface = 'json'
+
@classmethod
def setUpClass(cls):
cls.set_network_resources()
@@ -47,6 +50,28 @@
cls.snapshots = []
cls.volumes = []
+ if cls._api_version == 1:
+ if not CONF.volume_feature_enabled.api_v1:
+ msg = "Volume API v1 is disabled"
+ raise cls.skipException(msg)
+ cls.snapshots_client = cls.os.snapshots_client
+ cls.volumes_client = cls.os.volumes_client
+ cls.backups_client = cls.os.backups_client
+ cls.volume_services_client = cls.os.volume_services_client
+ cls.volumes_extension_client = cls.os.volumes_extension_client
+ cls.availability_zone_client = (
+ cls.os.volume_availability_zone_client)
+
+ elif cls._api_version == 2:
+ if not CONF.volume_feature_enabled.api_v2:
+ msg = "Volume API v2 is disabled"
+ raise cls.skipException(msg)
+ cls.volumes_client = cls.os.volumes_v2_client
+
+ else:
+ msg = ("Invalid Cinder API version (%s)" % cls._api_version)
+ raise exceptions.InvalidConfiguration(message=msg)
+
@classmethod
def tearDownClass(cls):
cls.clear_snapshots()
@@ -55,6 +80,22 @@
super(BaseVolumeTest, cls).tearDownClass()
@classmethod
+ def create_volume(cls, size=1, **kwargs):
+ """Wrapper utility that returns a test volume."""
+ vol_name = data_utils.rand_name('Volume')
+ if cls._api_version == 1:
+ resp, volume = cls.volumes_client.create_volume(
+ size, display_name=vol_name, **kwargs)
+ assert 200 == resp.status
+ elif cls._api_version == 2:
+ resp, volume = cls.volumes_client.create_volume(
+ size, name=vol_name, **kwargs)
+ assert 202 == resp.status
+ cls.volumes.append(volume)
+ cls.volumes_client.wait_for_volume_status(volume['id'], 'available')
+ return volume
+
+ @classmethod
def create_snapshot(cls, volume_id=1, **kwargs):
"""Wrapper utility that returns a test snapshot."""
resp, snapshot = cls.snapshots_client.create_snapshot(volume_id,
@@ -98,30 +139,11 @@
class BaseVolumeV1Test(BaseVolumeTest):
- @classmethod
- def setUpClass(cls):
- if not CONF.volume_feature_enabled.api_v1:
- msg = "Volume API v1 not supported"
- raise cls.skipException(msg)
- super(BaseVolumeV1Test, cls).setUpClass()
- cls.snapshots_client = cls.os.snapshots_client
- cls.volumes_client = cls.os.volumes_client
- cls.backups_client = cls.os.backups_client
- cls.volume_services_client = cls.os.volume_services_client
- cls.volumes_extension_client = cls.os.volumes_extension_client
- cls.availability_zone_client = cls.os.volume_availability_zone_client
+ _api_version = 1
- @classmethod
- def create_volume(cls, size=1, **kwargs):
- """Wrapper utility that returns a test volume."""
- vol_name = data_utils.rand_name('Volume')
- resp, volume = cls.volumes_client.create_volume(size,
- display_name=vol_name,
- **kwargs)
- assert 200 == resp.status
- cls.volumes.append(volume)
- cls.volumes_client.wait_for_volume_status(volume['id'], 'available')
- return volume
+
+class BaseVolumeV2Test(BaseVolumeTest):
+ _api_version = 2
class BaseVolumeV1AdminTest(BaseVolumeV1Test):
@@ -144,25 +166,3 @@
cls.client = cls.os_adm.volume_types_client
cls.hosts_client = cls.os_adm.volume_hosts_client
cls.quotas_client = cls.os_adm.volume_quotas_client
-
-
-class BaseVolumeV2Test(BaseVolumeTest):
- @classmethod
- def setUpClass(cls):
- if not CONF.volume_feature_enabled.api_v2:
- msg = "Volume API v2 not supported"
- raise cls.skipException(msg)
- super(BaseVolumeV2Test, cls).setUpClass()
- cls.volumes_client = cls.os.volumes_v2_client
-
- @classmethod
- def create_volume(cls, size=1, **kwargs):
- """Wrapper utility that returns a test volume."""
- vol_name = data_utils.rand_name('Volume')
- resp, volume = cls.volumes_client.create_volume(size,
- name=vol_name,
- **kwargs)
- assert 202 == resp.status
- cls.volumes.append(volume)
- cls.volumes_client.wait_for_volume_status(volume['id'], 'available')
- return volume