Skip to content

Commit 88fffea

Browse files
committed
tests: Add ability to configure fake server API version
This beats the horrible mess of mocks we have created for ourselves. Change-Id: I8af3ce0a0b10f52e2124ec86f306327ff3474982 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent 3f62429 commit 88fffea

5 files changed

Lines changed: 69 additions & 5 deletions

File tree

openstackclient/tests/unit/compute/v2/fakes.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515

1616
import copy
1717
import random
18+
import re
1819
from unittest import mock
1920
import uuid
2021

22+
from keystoneauth1 import discover
2123
from novaclient import api_versions
2224
from openstack.compute.v2 import _proxy
2325
from openstack.compute.v2 import aggregate as _aggregate
@@ -143,8 +145,6 @@ def __init__(self, **kwargs):
143145

144146
self.management_url = kwargs['endpoint']
145147

146-
self.api_version = api_versions.APIVersion('2.1')
147-
148148

149149
class FakeClientMixin:
150150
def setUp(self):
@@ -169,6 +169,26 @@ def setUp(self):
169169
self.compute_sdk_client = (
170170
self.app.client_manager.sdk_connection.compute
171171
)
172+
self.set_compute_api_version() # default to the lowest
173+
174+
def set_compute_api_version(self, version: str = '2.1'):
175+
"""Set a fake server version.
176+
177+
:param version: The fake microversion to "support". This should be a
178+
string of format '2.xx'.
179+
:returns: None
180+
"""
181+
assert re.match(r'2.\d+', version)
182+
183+
self.compute_client.api_version = api_versions.APIVersion(version)
184+
185+
self.compute_sdk_client.default_microversion = version
186+
self.compute_sdk_client.get_endpoint_data.return_value = (
187+
discover.EndpointData(
188+
min_microversion='2.1', # nova has not bumped this yet
189+
max_microversion=version,
190+
)
191+
)
172192

173193

174194
class TestComputev2(

openstackclient/tests/unit/volume/v2/fakes.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414

1515
import copy
1616
import random
17+
import typing as ty
1718
from unittest import mock
1819
import uuid
1920

2021
# FIXME(stephenfin): We are using v3 resource versions despite being v2 fakes
2122
from cinderclient import api_versions
23+
from keystoneauth1 import discover
2224
from openstack.block_storage.v2 import _proxy as block_storage_v2_proxy
2325
from openstack.block_storage.v2 import backup as _backup
2426
from openstack.block_storage.v3 import capabilities as _capabilities
@@ -105,6 +107,26 @@ def setUp(self):
105107
spec=block_storage_v2_proxy.Proxy,
106108
)
107109
self.volume_sdk_client = self.app.client_manager.sdk_connection.volume
110+
self.set_volume_api_version() # default to the lowest
111+
112+
def set_volume_api_version(self, version: ty.Optional[str] = None):
113+
"""Set a fake block storage API version.
114+
115+
:param version: The fake microversion to "support". This must be None
116+
since cinder v2 didn't support microversions.
117+
:returns: None
118+
"""
119+
assert version is None
120+
121+
self.volume_client.api_version = None
122+
123+
self.volume_sdk_client.default_microversion = None
124+
self.volume_sdk_client.get_endpoint_data.return_value = (
125+
discover.EndpointData(
126+
min_microversion=None,
127+
max_microversion=None,
128+
)
129+
)
108130

109131

110132
class TestVolume(

openstackclient/tests/unit/volume/v3/fakes.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212

1313
import copy
1414
import random
15+
import re
1516
from unittest import mock
1617
import uuid
1718

1819
from cinderclient import api_versions
20+
from keystoneauth1 import discover
1921
from openstack.block_storage.v3 import _proxy
2022
from openstack.block_storage.v3 import availability_zone as _availability_zone
2123
from openstack.block_storage.v3 import backup as _backup
@@ -97,6 +99,26 @@ def setUp(self):
9799
spec=_proxy.Proxy,
98100
)
99101
self.volume_sdk_client = self.app.client_manager.sdk_connection.volume
102+
self.set_volume_api_version() # default to the lowest
103+
104+
def set_volume_api_version(self, version: str = '3.0'):
105+
"""Set a fake block storage API version.
106+
107+
:param version: The fake microversion to "support". This should be a
108+
string of format '3.xx'.
109+
:returns: None
110+
"""
111+
assert re.match(r'3.\d+', version)
112+
113+
self.volume_client.api_version = api_versions.APIVersion(version)
114+
115+
self.volume_sdk_client.default_microversion = version
116+
self.volume_sdk_client.get_endpoint_data.return_value = (
117+
discover.EndpointData(
118+
min_microversion='3.0', # cinder has not bumped this yet
119+
max_microversion=version,
120+
)
121+
)
100122

101123

102124
class TestVolume(
@@ -126,6 +148,7 @@ def setUp(self):
126148

127149
# TODO(stephenfin): Check if the responses are actually the same
128150
create_one_snapshot = volume_v2_fakes.create_one_snapshot
151+
create_one_service = volume_v2_fakes.create_one_service
129152

130153

131154
def create_one_availability_zone(attrs=None):

openstackclient/tests/unit/volume/v3/test_block_storage_manage.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616
from osc_lib import exceptions
1717

1818
from openstackclient.tests.unit import utils as tests_utils
19-
from openstackclient.tests.unit.volume.v2 import fakes as v2_volume_fakes
2019
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
2120
from openstackclient.volume.v3 import block_storage_manage
2221

2322

24-
class TestBlockStorageManage(v2_volume_fakes.TestVolume):
23+
class TestBlockStorageManage(volume_fakes.TestVolume):
2524
def setUp(self):
2625
super().setUp()
2726

openstackclient/tests/unit/volume/v3/test_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from cinderclient import api_versions
1616

17-
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
17+
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
1818
from openstackclient.volume.v3 import service
1919

2020

0 commit comments

Comments
 (0)