Skip to content

Commit c120960

Browse files
committed
tests: Handle removal of block-storage v2 API
Cinder recently removed their v2 API [1] which is causing the functional tests to fail. Improve our 'is_service_enabled' test helper to use the 'versions show' command, which queries the service catalog and can give us information about the service version as well as answer the more general "is this service available" question. We also resolve a long-standing TODO in the process. [1] https://review.opendev.org/c/openstack/cinder/+/792299 Change-Id: I381069357aa008344e15327adf3a863c0c2e1f04 Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
1 parent 4891bb3 commit c120960

4 files changed

Lines changed: 44 additions & 30 deletions

File tree

openstackclient/tests/functional/base.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,24 @@ def openstack(cls, cmd, cloud=ADMIN_CLOUD, fail_ok=False):
6868
)
6969

7070
@classmethod
71-
def is_service_enabled(cls, service):
72-
"""Ask client cloud if service is available"""
73-
cmd = ('service show -f value -c enabled {service}'
74-
.format(service=service))
75-
try:
76-
return "True" in cls.openstack(cmd)
77-
except exceptions.CommandFailed as e:
78-
if "No service with a type, name or ID of" in str(e):
79-
return False
80-
else:
81-
raise # Unable to determine if service is enabled
71+
def is_service_enabled(cls, service, version=None):
72+
"""Ask client cloud if service is available
73+
74+
:param service: The service name or type. This should be either an
75+
exact match to what is in the catalog or a known official value or
76+
alias from service-types-authority
77+
:param version: Optional version. This should be a major version, e.g.
78+
'2.0'
79+
:returns: True if the service is enabled and optionally provides the
80+
specified API version, else False
81+
"""
82+
ret = cls.openstack(
83+
f'versions show --service {service} -f value -c Version'
84+
).splitlines()
85+
if version:
86+
return version in ret
87+
88+
return bool(ret)
8289

8390
@classmethod
8491
def is_extension_enabled(cls, alias):

openstackclient/tests/functional/volume/v1/common.py

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,14 @@ class BaseVolumeTests(volume_base.BaseVolumeTests):
2020

2121
@classmethod
2222
def setUpClass(cls):
23-
super(BaseVolumeTests, cls).setUpClass()
24-
# TODO(dtroyer): This needs to be updated to specifically check for
25-
# Volume v1 rather than just 'volume', but for now
26-
# that is enough until we get proper version negotiation
27-
cls.haz_volume_v1 = cls.is_service_enabled('volume')
23+
super().setUpClass()
24+
cls.haz_volume_v1 = cls.is_service_enabled('block-storage', '1.0')
2825

2926
def setUp(self):
30-
super(BaseVolumeTests, self).setUp()
31-
32-
# This class requires Volume v1
33-
# if not self.haz_volume_v1:
34-
# self.skipTest("No Volume v1 service present")
35-
36-
# TODO(dtroyer): We really want the above to work but right now
37-
# (12Sep2017) DevStack still creates a 'volume'
38-
# service type even though there is no service behind
39-
# it. Until that is fixed we need to just skip the
40-
# volume v1 functional tests in master.
41-
self.skipTest("No Volume v1 service present")
27+
super().setUp()
28+
29+
if not self.haz_volume_v1:
30+
self.skipTest("No Volume v1 service present")
4231

4332
ver_fixture = fixtures.EnvironmentVariable(
4433
'OS_VOLUME_API_VERSION', '1'

openstackclient/tests/functional/volume/v2/common.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,17 @@
1818
class BaseVolumeTests(base.BaseVolumeTests):
1919
"""Base class for Volume functional tests. """
2020

21+
@classmethod
22+
def setUpClass(cls):
23+
super().setUpClass()
24+
cls.haz_volume_v2 = cls.is_service_enabled('block-storage', '2.0')
25+
2126
def setUp(self):
22-
super(BaseVolumeTests, self).setUp()
27+
super().setUp()
28+
29+
if not self.haz_volume_v2:
30+
self.skipTest("No Volume v2 service present")
31+
2332
ver_fixture = fixtures.EnvironmentVariable(
2433
'OS_VOLUME_API_VERSION', '2'
2534
)

openstackclient/tests/functional/volume/v3/common.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,17 @@
1818
class BaseVolumeTests(base.BaseVolumeTests):
1919
"""Base class for Volume functional tests. """
2020

21+
@classmethod
22+
def setUpClass(cls):
23+
super().setUpClass()
24+
cls.haz_volume_v3 = cls.is_service_enabled('block-storage', '3.0')
25+
2126
def setUp(self):
22-
super(BaseVolumeTests, self).setUp()
27+
super().setUp()
28+
29+
if not self.haz_volume_v3:
30+
self.skipTest("No Volume v3 service present")
31+
2332
ver_fixture = fixtures.EnvironmentVariable(
2433
'OS_VOLUME_API_VERSION', '3'
2534
)

0 commit comments

Comments
 (0)