|
12 | 12 | # License for the specific language governing permissions and limitations |
13 | 13 | # under the License. |
14 | 14 |
|
| 15 | +# TODO(stephenfin): Remove the contents of this module in favour of the osc_lib |
| 16 | +# version once our min version is bumped to 4.3.0 |
| 17 | + |
15 | 18 | import json |
16 | | -import sys |
17 | 19 | from unittest import mock |
18 | 20 |
|
19 | 21 | from keystoneauth1 import fixture |
| 22 | +from osc_lib.tests.fakes import ( |
| 23 | + FakeApp, |
| 24 | + FakeClientManager as BaseFakeClientManager, |
| 25 | + FakeLog, |
| 26 | + FakeOptions, |
| 27 | + FakeResource as BaseFakeResource, |
| 28 | + FakeStdout, |
| 29 | +) |
20 | 30 | import requests |
21 | 31 |
|
| 32 | +__all__ = [ |
| 33 | + 'AUTH_TOKEN', |
| 34 | + 'AUTH_URL', |
| 35 | + 'INTERFACE', |
| 36 | + 'PASSWORD', |
| 37 | + 'PROJECT_NAME', |
| 38 | + 'REGION_NAME', |
| 39 | + 'TEST_RESPONSE_DICT', |
| 40 | + 'TEST_RESPONSE_DICT_V3', |
| 41 | + 'TEST_VERSIONS', |
| 42 | + 'USERNAME', |
| 43 | + 'VERSION', |
| 44 | + 'FakeApp', |
| 45 | + 'FakeClientManager', |
| 46 | + 'FakeLog', |
| 47 | + 'FakeOptions', |
| 48 | + 'FakeResource', |
| 49 | + 'FakeResponse', |
| 50 | + 'FakeStdout', |
| 51 | +] |
22 | 52 |
|
23 | 53 | AUTH_TOKEN = "foobar" |
24 | 54 | AUTH_URL = "http://0.0.0.0" |
|
47 | 77 | TEST_VERSIONS = fixture.DiscoveryList(href=AUTH_URL) |
48 | 78 |
|
49 | 79 |
|
50 | | -class FakeStdout: |
51 | | - def __init__(self): |
52 | | - self.content = [] |
53 | | - |
54 | | - def write(self, text): |
55 | | - self.content.append(text) |
56 | | - |
57 | | - def make_string(self): |
58 | | - result = '' |
59 | | - for line in self.content: |
60 | | - result = result + line |
61 | | - return result |
62 | | - |
63 | | - |
64 | | -class FakeLog: |
65 | | - def __init__(self): |
66 | | - self.messages = {} |
67 | | - |
68 | | - def debug(self, msg): |
69 | | - self.messages['debug'] = msg |
70 | | - |
71 | | - def info(self, msg): |
72 | | - self.messages['info'] = msg |
73 | | - |
74 | | - def warning(self, msg): |
75 | | - self.messages['warning'] = msg |
76 | | - |
77 | | - def error(self, msg): |
78 | | - self.messages['error'] = msg |
79 | | - |
80 | | - def critical(self, msg): |
81 | | - self.messages['critical'] = msg |
82 | | - |
83 | | - |
84 | | -class FakeApp: |
85 | | - def __init__(self, _stdout, _log): |
86 | | - self.stdout = _stdout |
87 | | - self.client_manager = None |
88 | | - self.api_version = {} |
89 | | - self.stdin = sys.stdin |
90 | | - self.stdout = _stdout or sys.stdout |
91 | | - self.stderr = sys.stderr |
92 | | - self.log = _log |
93 | | - |
94 | | - |
95 | | -class FakeOptions: |
96 | | - def __init__(self, **kwargs): |
97 | | - self.os_beta_command = False |
98 | | - |
99 | | - |
100 | | -class FakeClient: |
101 | | - def __init__(self, **kwargs): |
102 | | - self.endpoint = kwargs['endpoint'] |
103 | | - self.token = kwargs['token'] |
104 | | - |
105 | | - |
106 | | -class FakeClientManager: |
| 80 | +class FakeClientManager(BaseFakeClientManager): |
107 | 81 | _api_version = { |
108 | 82 | 'image': '2', |
109 | 83 | } |
110 | 84 |
|
111 | 85 | def __init__(self): |
112 | | - self.compute = None |
113 | | - self.identity = None |
114 | | - self.image = None |
115 | | - self.object_store = None |
116 | | - self.volume = None |
117 | | - self.network = None |
118 | | - self.sdk_connection = mock.Mock() |
| 86 | + super().__init__() |
119 | 87 |
|
120 | | - self.session = None |
121 | | - self.auth_ref = None |
122 | | - self.auth_plugin_name = None |
| 88 | + self.sdk_connection = mock.Mock() |
123 | 89 |
|
124 | 90 | self.network_endpoint_enabled = True |
125 | 91 | self.compute_endpoint_enabled = True |
@@ -158,64 +124,7 @@ def is_volume_endpoint_enabled(self, client=None): |
158 | 124 | return self.volume_endpoint_enabled |
159 | 125 |
|
160 | 126 |
|
161 | | -class FakeModule: |
162 | | - def __init__(self, name, version): |
163 | | - self.name = name |
164 | | - self.__version__ = version |
165 | | - # Workaround for openstacksdk case |
166 | | - self.version = mock.Mock() |
167 | | - self.version.__version__ = version |
168 | | - |
169 | | - |
170 | | -class FakeResource: |
171 | | - def __init__(self, manager=None, info=None, loaded=False, methods=None): |
172 | | - """Set attributes and methods for a resource. |
173 | | -
|
174 | | - :param manager: |
175 | | - The resource manager |
176 | | - :param Dictionary info: |
177 | | - A dictionary with all attributes |
178 | | - :param bool loaded: |
179 | | - True if the resource is loaded in memory |
180 | | - :param Dictionary methods: |
181 | | - A dictionary with all methods |
182 | | - """ |
183 | | - info = info or {} |
184 | | - methods = methods or {} |
185 | | - |
186 | | - self.__name__ = type(self).__name__ |
187 | | - self.manager = manager |
188 | | - self._info = info |
189 | | - self._add_details(info) |
190 | | - self._add_methods(methods) |
191 | | - self._loaded = loaded |
192 | | - |
193 | | - def _add_details(self, info): |
194 | | - for k, v in info.items(): |
195 | | - setattr(self, k, v) |
196 | | - |
197 | | - def _add_methods(self, methods): |
198 | | - """Fake methods with MagicMock objects. |
199 | | -
|
200 | | - For each <@key, @value> pairs in methods, add an callable MagicMock |
201 | | - object named @key as an attribute, and set the mock's return_value to |
202 | | - @value. When users access the attribute with (), @value will be |
203 | | - returned, which looks like a function call. |
204 | | - """ |
205 | | - for name, ret in methods.items(): |
206 | | - method = mock.Mock(return_value=ret) |
207 | | - setattr(self, name, method) |
208 | | - |
209 | | - def __repr__(self): |
210 | | - reprkeys = sorted( |
211 | | - k for k in self.__dict__.keys() if k[0] != '_' and k != 'manager' |
212 | | - ) |
213 | | - info = ", ".join(f"{k}={getattr(self, k)}" for k in reprkeys) |
214 | | - return f"<{self.__class__.__name__} {info}>" |
215 | | - |
216 | | - def keys(self): |
217 | | - return self._info.keys() |
218 | | - |
| 127 | +class FakeResource(BaseFakeResource): |
219 | 128 | def to_dict(self): |
220 | 129 | return self._info |
221 | 130 |
|
@@ -247,11 +156,3 @@ def __init__( |
247 | 156 | self._content = json.dumps(data) |
248 | 157 | if not isinstance(self._content, bytes): |
249 | 158 | self._content = self._content.encode() |
250 | | - |
251 | | - |
252 | | -class FakeModel(dict): |
253 | | - def __getattr__(self, key): |
254 | | - try: |
255 | | - return self[key] |
256 | | - except KeyError: |
257 | | - raise AttributeError(key) |
0 commit comments