summaryrefslogtreecommitdiff
path: root/openstackclient/tests/functional
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/tests/functional')
-rw-r--r--openstackclient/tests/functional/base.py29
-rw-r--r--openstackclient/tests/functional/volume/v1/common.py23
-rw-r--r--openstackclient/tests/functional/volume/v2/common.py11
-rw-r--r--openstackclient/tests/functional/volume/v3/common.py11
4 files changed, 44 insertions, 30 deletions
diff --git a/openstackclient/tests/functional/base.py b/openstackclient/tests/functional/base.py
index 3542a827..0ed7dff8 100644
--- a/openstackclient/tests/functional/base.py
+++ b/openstackclient/tests/functional/base.py
@@ -68,17 +68,24 @@ class TestCase(testtools.TestCase):
)
@classmethod
- def is_service_enabled(cls, service):
- """Ask client cloud if service is available"""
- cmd = ('service show -f value -c enabled {service}'
- .format(service=service))
- try:
- return "True" in cls.openstack(cmd)
- except exceptions.CommandFailed as e:
- if "No service with a type, name or ID of" in str(e):
- return False
- else:
- raise # Unable to determine if service is enabled
+ def is_service_enabled(cls, service, version=None):
+ """Ask client cloud if service is available
+
+ :param service: The service name or type. This should be either an
+ exact match to what is in the catalog or a known official value or
+ alias from service-types-authority
+ :param version: Optional version. This should be a major version, e.g.
+ '2.0'
+ :returns: True if the service is enabled and optionally provides the
+ specified API version, else False
+ """
+ ret = cls.openstack(
+ f'versions show --service {service} -f value -c Version'
+ ).splitlines()
+ if version:
+ return version in ret
+
+ return bool(ret)
@classmethod
def is_extension_enabled(cls, alias):
diff --git a/openstackclient/tests/functional/volume/v1/common.py b/openstackclient/tests/functional/volume/v1/common.py
index 04eb1f48..75587478 100644
--- a/openstackclient/tests/functional/volume/v1/common.py
+++ b/openstackclient/tests/functional/volume/v1/common.py
@@ -20,25 +20,14 @@ class BaseVolumeTests(volume_base.BaseVolumeTests):
@classmethod
def setUpClass(cls):
- super(BaseVolumeTests, cls).setUpClass()
- # TODO(dtroyer): This needs to be updated to specifically check for
- # Volume v1 rather than just 'volume', but for now
- # that is enough until we get proper version negotiation
- cls.haz_volume_v1 = cls.is_service_enabled('volume')
+ super().setUpClass()
+ cls.haz_volume_v1 = cls.is_service_enabled('block-storage', '1.0')
def setUp(self):
- super(BaseVolumeTests, self).setUp()
-
- # This class requires Volume v1
- # if not self.haz_volume_v1:
- # self.skipTest("No Volume v1 service present")
-
- # TODO(dtroyer): We really want the above to work but right now
- # (12Sep2017) DevStack still creates a 'volume'
- # service type even though there is no service behind
- # it. Until that is fixed we need to just skip the
- # volume v1 functional tests in master.
- self.skipTest("No Volume v1 service present")
+ super().setUp()
+
+ if not self.haz_volume_v1:
+ self.skipTest("No Volume v1 service present")
ver_fixture = fixtures.EnvironmentVariable(
'OS_VOLUME_API_VERSION', '1'
diff --git a/openstackclient/tests/functional/volume/v2/common.py b/openstackclient/tests/functional/volume/v2/common.py
index 38176714..7e3a8084 100644
--- a/openstackclient/tests/functional/volume/v2/common.py
+++ b/openstackclient/tests/functional/volume/v2/common.py
@@ -18,8 +18,17 @@ from openstackclient.tests.functional.volume import base
class BaseVolumeTests(base.BaseVolumeTests):
"""Base class for Volume functional tests. """
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.haz_volume_v2 = cls.is_service_enabled('block-storage', '2.0')
+
def setUp(self):
- super(BaseVolumeTests, self).setUp()
+ super().setUp()
+
+ if not self.haz_volume_v2:
+ self.skipTest("No Volume v2 service present")
+
ver_fixture = fixtures.EnvironmentVariable(
'OS_VOLUME_API_VERSION', '2'
)
diff --git a/openstackclient/tests/functional/volume/v3/common.py b/openstackclient/tests/functional/volume/v3/common.py
index a710a683..29f769b6 100644
--- a/openstackclient/tests/functional/volume/v3/common.py
+++ b/openstackclient/tests/functional/volume/v3/common.py
@@ -18,8 +18,17 @@ from openstackclient.tests.functional.volume import base
class BaseVolumeTests(base.BaseVolumeTests):
"""Base class for Volume functional tests. """
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.haz_volume_v3 = cls.is_service_enabled('block-storage', '3.0')
+
def setUp(self):
- super(BaseVolumeTests, self).setUp()
+ super().setUp()
+
+ if not self.haz_volume_v3:
+ self.skipTest("No Volume v3 service present")
+
ver_fixture = fixtures.EnvironmentVariable(
'OS_VOLUME_API_VERSION', '3'
)