Remove duplicate test utilities
We cannot remove them fully, but we can remove a lot of them. Further cleanup is needed here to remove the references but that will be done once a version of osc_lib with fixes is included. Change-Id: Ifd200bd3d3e5c02c239a8ad0e6cee6d823e26544 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
@@ -11,7 +11,6 @@
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
"""Test module module"""
|
||||
|
||||
@@ -19,10 +18,18 @@ import sys
|
||||
from unittest import mock
|
||||
|
||||
from openstackclient.common import module as osc_module
|
||||
from openstackclient.tests.unit import fakes
|
||||
from openstackclient.tests.unit import utils
|
||||
|
||||
|
||||
class FakeModule:
|
||||
def __init__(self, name, version):
|
||||
self.name = name
|
||||
self.__version__ = version
|
||||
# Workaround for openstacksdk case
|
||||
self.version = mock.Mock()
|
||||
self.version.__version__ = version
|
||||
|
||||
|
||||
# NOTE(dtroyer): module_1 must match the version list filter (not --all)
|
||||
# currently == '*client*'
|
||||
module_name_1 = 'fakeclient'
|
||||
@@ -45,11 +52,11 @@ module_version_5 = '0.0.1'
|
||||
|
||||
MODULES = {
|
||||
'sys': sys,
|
||||
module_name_1: fakes.FakeModule(module_name_1, module_version_1),
|
||||
module_name_2: fakes.FakeModule(module_name_2, module_version_2),
|
||||
module_name_3: fakes.FakeModule(module_name_3, module_version_3),
|
||||
module_name_4: fakes.FakeModule(module_name_4, module_version_4),
|
||||
module_name_5: fakes.FakeModule(module_name_5, module_version_5),
|
||||
module_name_1: FakeModule(module_name_1, module_version_1),
|
||||
module_name_2: FakeModule(module_name_2, module_version_2),
|
||||
module_name_3: FakeModule(module_name_3, module_version_3),
|
||||
module_name_4: FakeModule(module_name_4, module_version_4),
|
||||
module_name_5: FakeModule(module_name_5, module_version_5),
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,13 +12,43 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# TODO(stephenfin): Remove the contents of this module in favour of the osc_lib
|
||||
# version once our min version is bumped to 4.3.0
|
||||
|
||||
import json
|
||||
import sys
|
||||
from unittest import mock
|
||||
|
||||
from keystoneauth1 import fixture
|
||||
from osc_lib.tests.fakes import (
|
||||
FakeApp,
|
||||
FakeClientManager as BaseFakeClientManager,
|
||||
FakeLog,
|
||||
FakeOptions,
|
||||
FakeResource as BaseFakeResource,
|
||||
FakeStdout,
|
||||
)
|
||||
import requests
|
||||
|
||||
__all__ = [
|
||||
'AUTH_TOKEN',
|
||||
'AUTH_URL',
|
||||
'INTERFACE',
|
||||
'PASSWORD',
|
||||
'PROJECT_NAME',
|
||||
'REGION_NAME',
|
||||
'TEST_RESPONSE_DICT',
|
||||
'TEST_RESPONSE_DICT_V3',
|
||||
'TEST_VERSIONS',
|
||||
'USERNAME',
|
||||
'VERSION',
|
||||
'FakeApp',
|
||||
'FakeClientManager',
|
||||
'FakeLog',
|
||||
'FakeOptions',
|
||||
'FakeResource',
|
||||
'FakeResponse',
|
||||
'FakeStdout',
|
||||
]
|
||||
|
||||
AUTH_TOKEN = "foobar"
|
||||
AUTH_URL = "http://0.0.0.0"
|
||||
@@ -47,79 +77,15 @@ TEST_RESPONSE_DICT_V3.set_project_scope()
|
||||
TEST_VERSIONS = fixture.DiscoveryList(href=AUTH_URL)
|
||||
|
||||
|
||||
class FakeStdout:
|
||||
def __init__(self):
|
||||
self.content = []
|
||||
|
||||
def write(self, text):
|
||||
self.content.append(text)
|
||||
|
||||
def make_string(self):
|
||||
result = ''
|
||||
for line in self.content:
|
||||
result = result + line
|
||||
return result
|
||||
|
||||
|
||||
class FakeLog:
|
||||
def __init__(self):
|
||||
self.messages = {}
|
||||
|
||||
def debug(self, msg):
|
||||
self.messages['debug'] = msg
|
||||
|
||||
def info(self, msg):
|
||||
self.messages['info'] = msg
|
||||
|
||||
def warning(self, msg):
|
||||
self.messages['warning'] = msg
|
||||
|
||||
def error(self, msg):
|
||||
self.messages['error'] = msg
|
||||
|
||||
def critical(self, msg):
|
||||
self.messages['critical'] = msg
|
||||
|
||||
|
||||
class FakeApp:
|
||||
def __init__(self, _stdout, _log):
|
||||
self.stdout = _stdout
|
||||
self.client_manager = None
|
||||
self.api_version = {}
|
||||
self.stdin = sys.stdin
|
||||
self.stdout = _stdout or sys.stdout
|
||||
self.stderr = sys.stderr
|
||||
self.log = _log
|
||||
|
||||
|
||||
class FakeOptions:
|
||||
def __init__(self, **kwargs):
|
||||
self.os_beta_command = False
|
||||
|
||||
|
||||
class FakeClient:
|
||||
def __init__(self, **kwargs):
|
||||
self.endpoint = kwargs['endpoint']
|
||||
self.token = kwargs['token']
|
||||
|
||||
|
||||
class FakeClientManager:
|
||||
class FakeClientManager(BaseFakeClientManager):
|
||||
_api_version = {
|
||||
'image': '2',
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.compute = None
|
||||
self.identity = None
|
||||
self.image = None
|
||||
self.object_store = None
|
||||
self.volume = None
|
||||
self.network = None
|
||||
self.sdk_connection = mock.Mock()
|
||||
super().__init__()
|
||||
|
||||
self.session = None
|
||||
self.auth_ref = None
|
||||
self.auth_plugin_name = None
|
||||
self.sdk_connection = mock.Mock()
|
||||
|
||||
self.network_endpoint_enabled = True
|
||||
self.compute_endpoint_enabled = True
|
||||
@@ -158,64 +124,7 @@ class FakeClientManager:
|
||||
return self.volume_endpoint_enabled
|
||||
|
||||
|
||||
class FakeModule:
|
||||
def __init__(self, name, version):
|
||||
self.name = name
|
||||
self.__version__ = version
|
||||
# Workaround for openstacksdk case
|
||||
self.version = mock.Mock()
|
||||
self.version.__version__ = version
|
||||
|
||||
|
||||
class FakeResource:
|
||||
def __init__(self, manager=None, info=None, loaded=False, methods=None):
|
||||
"""Set attributes and methods for a resource.
|
||||
|
||||
:param manager:
|
||||
The resource manager
|
||||
:param Dictionary info:
|
||||
A dictionary with all attributes
|
||||
:param bool loaded:
|
||||
True if the resource is loaded in memory
|
||||
:param Dictionary methods:
|
||||
A dictionary with all methods
|
||||
"""
|
||||
info = info or {}
|
||||
methods = methods or {}
|
||||
|
||||
self.__name__ = type(self).__name__
|
||||
self.manager = manager
|
||||
self._info = info
|
||||
self._add_details(info)
|
||||
self._add_methods(methods)
|
||||
self._loaded = loaded
|
||||
|
||||
def _add_details(self, info):
|
||||
for k, v in info.items():
|
||||
setattr(self, k, v)
|
||||
|
||||
def _add_methods(self, methods):
|
||||
"""Fake methods with MagicMock objects.
|
||||
|
||||
For each <@key, @value> pairs in methods, add an callable MagicMock
|
||||
object named @key as an attribute, and set the mock's return_value to
|
||||
@value. When users access the attribute with (), @value will be
|
||||
returned, which looks like a function call.
|
||||
"""
|
||||
for name, ret in methods.items():
|
||||
method = mock.Mock(return_value=ret)
|
||||
setattr(self, name, method)
|
||||
|
||||
def __repr__(self):
|
||||
reprkeys = sorted(
|
||||
k for k in self.__dict__.keys() if k[0] != '_' and k != 'manager'
|
||||
)
|
||||
info = ", ".join(f"{k}={getattr(self, k)}" for k in reprkeys)
|
||||
return f"<{self.__class__.__name__} {info}>"
|
||||
|
||||
def keys(self):
|
||||
return self._info.keys()
|
||||
|
||||
class FakeResource(BaseFakeResource):
|
||||
def to_dict(self):
|
||||
return self._info
|
||||
|
||||
@@ -247,11 +156,3 @@ class FakeResponse(requests.Response):
|
||||
self._content = json.dumps(data)
|
||||
if not isinstance(self._content, bytes):
|
||||
self._content = self._content.encode()
|
||||
|
||||
|
||||
class FakeModel(dict):
|
||||
def __getattr__(self, key):
|
||||
try:
|
||||
return self[key]
|
||||
except KeyError:
|
||||
raise AttributeError(key)
|
||||
|
||||
@@ -693,6 +693,14 @@ class TestIdentityv3(
|
||||
): ...
|
||||
|
||||
|
||||
class FakeModel(dict):
|
||||
def __getattr__(self, key):
|
||||
try:
|
||||
return self[key]
|
||||
except KeyError:
|
||||
raise AttributeError(key)
|
||||
|
||||
|
||||
# We don't use FakeClientMixin since we want a different fake legacy client
|
||||
class TestFederatedIdentity(utils.TestCommand):
|
||||
def setUp(self):
|
||||
@@ -1075,7 +1083,7 @@ class FakeEndpoint:
|
||||
# Overwrite default attributes if there are some attributes set
|
||||
endpoint_filter_info.update(attrs)
|
||||
|
||||
endpoint_filter = fakes.FakeModel(copy.deepcopy(endpoint_filter_info))
|
||||
endpoint_filter = FakeModel(copy.deepcopy(endpoint_filter_info))
|
||||
|
||||
return endpoint_filter
|
||||
|
||||
@@ -1133,7 +1141,7 @@ class FakeEndpointGroup:
|
||||
# Overwrite default attributes if there are some attributes set
|
||||
endpointgroup_filter_info.update(attrs)
|
||||
|
||||
endpointgroup_filter = fakes.FakeModel(
|
||||
endpointgroup_filter = FakeModel(
|
||||
copy.deepcopy(endpointgroup_filter_info)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user