Skip to content

Commit a8d7f64

Browse files
committed
tests: Add object store v1 FakeClientMixin
As done elsewhere in e.g. Ic203964c7dede7dd80ae2d93b8fa1b7e6634a758 Change-Id: I8183761513fb2d498d40bb6491e9ee1e61ae5fd1 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
1 parent c20a053 commit a8d7f64

5 files changed

Lines changed: 133 additions & 194 deletions

File tree

openstackclient/tests/unit/object/v1/fakes.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
14-
#
1514

16-
from keystoneauth1 import session
15+
from unittest import mock
1716

1817
from openstackclient.api import object_store_v1 as object_store
1918
from openstackclient.tests.unit import utils
@@ -80,12 +79,14 @@
8079
object_upload_name = 'test-object-name'
8180

8281

83-
class TestObjectv1(utils.TestCommand):
82+
class FakeClientMixin:
8483
def setUp(self):
8584
super().setUp()
8685

87-
self.app.client_manager.session = session.Session()
88-
self.app.client_manager.object_store = object_store.APIv1(
89-
session=self.app.client_manager.session,
90-
endpoint=ENDPOINT,
86+
self.app.client_manager.object_store = mock.Mock(
87+
spec=object_store.APIv1
9188
)
89+
self.object_store_client = self.app.client_manager.object_store
90+
91+
92+
class TestObjectV1(FakeClientMixin, utils.TestCommand): ...

openstackclient/tests/unit/object/v1/test_container.py

Lines changed: 65 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -14,48 +14,21 @@
1414
#
1515

1616
import copy
17-
from unittest import mock
1817

19-
from openstackclient.api import object_store_v1 as object_store
2018
from openstackclient.object.v1 import container
2119
from openstackclient.tests.unit.object.v1 import fakes as object_fakes
2220

2321

24-
AUTH_TOKEN = "foobar"
25-
AUTH_URL = "http://0.0.0.0"
26-
27-
28-
class FakeClient:
29-
def __init__(self, endpoint=None, **kwargs):
30-
self.endpoint = AUTH_URL
31-
self.token = AUTH_TOKEN
32-
33-
34-
class TestContainer(object_fakes.TestObjectv1):
35-
columns = ('Name',)
36-
22+
class TestContainerDelete(object_fakes.TestObjectV1):
3723
def setUp(self):
3824
super().setUp()
39-
self.app.client_manager.object_store = object_store.APIv1(
40-
session=mock.Mock(),
41-
service_type="object-store",
42-
)
43-
self.api = self.app.client_manager.object_store
44-
4525

46-
@mock.patch('openstackclient.api.object_store_v1.APIv1.object_delete')
47-
@mock.patch('openstackclient.api.object_store_v1.APIv1.object_list')
48-
@mock.patch('openstackclient.api.object_store_v1.APIv1.container_delete')
49-
class TestContainerDelete(TestContainer):
50-
def setUp(self):
51-
super().setUp()
26+
self.object_store_client.container_delete.return_value = None
5227

5328
# Get the command object to test
5429
self.cmd = container.DeleteContainer(self.app, None)
5530

56-
def test_container_delete(self, c_mock, o_list_mock, o_delete_mock):
57-
c_mock.return_value = None
58-
31+
def test_container_delete(self):
5932
arglist = [
6033
object_fakes.container_name,
6134
]
@@ -68,16 +41,17 @@ def test_container_delete(self, c_mock, o_list_mock, o_delete_mock):
6841
self.assertIsNone(self.cmd.take_action(parsed_args))
6942

7043
kwargs = {}
71-
c_mock.assert_called_with(
44+
self.object_store_client.container_delete.assert_called_with(
7245
container=object_fakes.container_name, **kwargs
7346
)
74-
self.assertFalse(o_list_mock.called)
75-
self.assertFalse(o_delete_mock.called)
47+
self.object_store_client.object_list.assert_not_called()
48+
self.object_store_client.object_delete.assert_not_called()
7649

77-
def test_recursive_delete(self, c_mock, o_list_mock, o_delete_mock):
78-
c_mock.return_value = None
79-
o_list_mock.return_value = [object_fakes.OBJECT]
80-
o_delete_mock.return_value = None
50+
def test_recursive_delete(self):
51+
self.object_store_client.object_delete.return_value = None
52+
self.object_store_client.object_list.return_value = [
53+
object_fakes.OBJECT
54+
]
8155

8256
arglist = [
8357
'--recursive',
@@ -91,20 +65,22 @@ def test_recursive_delete(self, c_mock, o_list_mock, o_delete_mock):
9165

9266
self.assertIsNone(self.cmd.take_action(parsed_args))
9367

94-
kwargs = {}
95-
c_mock.assert_called_with(
96-
container=object_fakes.container_name, **kwargs
68+
self.object_store_client.container_delete.assert_called_with(
69+
container=object_fakes.container_name
9770
)
98-
o_list_mock.assert_called_with(container=object_fakes.container_name)
99-
o_delete_mock.assert_called_with(
71+
self.object_store_client.object_list.assert_called_with(
72+
container=object_fakes.container_name
73+
)
74+
self.object_store_client.object_delete.assert_called_with(
10075
container=object_fakes.container_name,
10176
object=object_fakes.OBJECT['name'],
10277
)
10378

104-
def test_r_delete(self, c_mock, o_list_mock, o_delete_mock):
105-
c_mock.return_value = None
106-
o_list_mock.return_value = [object_fakes.OBJECT]
107-
o_delete_mock.return_value = None
79+
def test_r_delete(self):
80+
self.object_store_client.object_delete.return_value = None
81+
self.object_store_client.object_list.return_value = [
82+
object_fakes.OBJECT
83+
]
10884

10985
arglist = [
11086
'-r',
@@ -118,27 +94,29 @@ def test_r_delete(self, c_mock, o_list_mock, o_delete_mock):
11894

11995
self.assertIsNone(self.cmd.take_action(parsed_args))
12096

121-
kwargs = {}
122-
c_mock.assert_called_with(
123-
container=object_fakes.container_name, **kwargs
97+
self.object_store_client.container_delete.assert_called_with(
98+
container=object_fakes.container_name
12499
)
125-
o_list_mock.assert_called_with(container=object_fakes.container_name)
126-
o_delete_mock.assert_called_with(
100+
self.object_store_client.object_list.assert_called_with(
101+
container=object_fakes.container_name
102+
)
103+
self.object_store_client.object_delete.assert_called_with(
127104
container=object_fakes.container_name,
128105
object=object_fakes.OBJECT['name'],
129106
)
130107

131108

132-
@mock.patch('openstackclient.api.object_store_v1.APIv1.container_list')
133-
class TestContainerList(TestContainer):
109+
class TestContainerList(object_fakes.TestObjectV1):
110+
columns = ('Name',)
111+
134112
def setUp(self):
135113
super().setUp()
136114

137115
# Get the command object to test
138116
self.cmd = container.ListContainer(self.app, None)
139117

140-
def test_object_list_containers_no_options(self, c_mock):
141-
c_mock.return_value = [
118+
def test_object_list_containers_no_options(self):
119+
self.object_store_client.container_list.return_value = [
142120
copy.deepcopy(object_fakes.CONTAINER),
143121
copy.deepcopy(object_fakes.CONTAINER_3),
144122
copy.deepcopy(object_fakes.CONTAINER_2),
@@ -153,9 +131,7 @@ def test_object_list_containers_no_options(self, c_mock):
153131
# containing the data to be listed.
154132
columns, data = self.cmd.take_action(parsed_args)
155133

156-
# Set expected values
157-
kwargs = {}
158-
c_mock.assert_called_with(**kwargs)
134+
self.object_store_client.container_list.assert_called_with()
159135

160136
self.assertEqual(self.columns, columns)
161137
datalist = (
@@ -165,8 +141,8 @@ def test_object_list_containers_no_options(self, c_mock):
165141
)
166142
self.assertEqual(datalist, tuple(data))
167143

168-
def test_object_list_containers_prefix(self, c_mock):
169-
c_mock.return_value = [
144+
def test_object_list_containers_prefix(self):
145+
self.object_store_client.container_list.return_value = [
170146
copy.deepcopy(object_fakes.CONTAINER),
171147
copy.deepcopy(object_fakes.CONTAINER_3),
172148
]
@@ -185,11 +161,9 @@ def test_object_list_containers_prefix(self, c_mock):
185161
# containing the data to be listed.
186162
columns, data = self.cmd.take_action(parsed_args)
187163

188-
# Set expected values
189-
kwargs = {
190-
'prefix': 'bit',
191-
}
192-
c_mock.assert_called_with(**kwargs)
164+
self.object_store_client.container_list.assert_called_with(
165+
prefix='bit',
166+
)
193167

194168
self.assertEqual(self.columns, columns)
195169
datalist = (
@@ -198,8 +172,8 @@ def test_object_list_containers_prefix(self, c_mock):
198172
)
199173
self.assertEqual(datalist, tuple(data))
200174

201-
def test_object_list_containers_marker(self, c_mock):
202-
c_mock.return_value = [
175+
def test_object_list_containers_marker(self):
176+
self.object_store_client.container_list.return_value = [
203177
copy.deepcopy(object_fakes.CONTAINER),
204178
copy.deepcopy(object_fakes.CONTAINER_3),
205179
]
@@ -221,12 +195,10 @@ def test_object_list_containers_marker(self, c_mock):
221195
# containing the data to be listed.
222196
columns, data = self.cmd.take_action(parsed_args)
223197

224-
# Set expected values
225-
kwargs = {
226-
'marker': object_fakes.container_name,
227-
'end_marker': object_fakes.container_name_3,
228-
}
229-
c_mock.assert_called_with(**kwargs)
198+
self.object_store_client.container_list.assert_called_with(
199+
marker=object_fakes.container_name,
200+
end_marker=object_fakes.container_name_3,
201+
)
230202

231203
self.assertEqual(self.columns, columns)
232204
datalist = (
@@ -235,8 +207,8 @@ def test_object_list_containers_marker(self, c_mock):
235207
)
236208
self.assertEqual(datalist, tuple(data))
237209

238-
def test_object_list_containers_limit(self, c_mock):
239-
c_mock.return_value = [
210+
def test_object_list_containers_limit(self):
211+
self.object_store_client.container_list.return_value = [
240212
copy.deepcopy(object_fakes.CONTAINER),
241213
copy.deepcopy(object_fakes.CONTAINER_3),
242214
]
@@ -255,11 +227,9 @@ def test_object_list_containers_limit(self, c_mock):
255227
# containing the data to be listed.
256228
columns, data = self.cmd.take_action(parsed_args)
257229

258-
# Set expected values
259-
kwargs = {
260-
'limit': 2,
261-
}
262-
c_mock.assert_called_with(**kwargs)
230+
self.object_store_client.container_list.assert_called_with(
231+
limit=2,
232+
)
263233

264234
self.assertEqual(self.columns, columns)
265235
datalist = (
@@ -268,8 +238,8 @@ def test_object_list_containers_limit(self, c_mock):
268238
)
269239
self.assertEqual(datalist, tuple(data))
270240

271-
def test_object_list_containers_long(self, c_mock):
272-
c_mock.return_value = [
241+
def test_object_list_containers_long(self):
242+
self.object_store_client.container_list.return_value = [
273243
copy.deepcopy(object_fakes.CONTAINER),
274244
copy.deepcopy(object_fakes.CONTAINER_3),
275245
]
@@ -287,9 +257,7 @@ def test_object_list_containers_long(self, c_mock):
287257
# containing the data to be listed.
288258
columns, data = self.cmd.take_action(parsed_args)
289259

290-
# Set expected values
291-
kwargs = {}
292-
c_mock.assert_called_with(**kwargs)
260+
self.object_store_client.container_list.assert_called_with()
293261

294262
collist = ('Name', 'Bytes', 'Count')
295263
self.assertEqual(collist, columns)
@@ -307,8 +275,8 @@ def test_object_list_containers_long(self, c_mock):
307275
)
308276
self.assertEqual(datalist, tuple(data))
309277

310-
def test_object_list_containers_all(self, c_mock):
311-
c_mock.return_value = [
278+
def test_object_list_containers_all(self):
279+
self.object_store_client.container_list.return_value = [
312280
copy.deepcopy(object_fakes.CONTAINER),
313281
copy.deepcopy(object_fakes.CONTAINER_2),
314282
copy.deepcopy(object_fakes.CONTAINER_3),
@@ -327,11 +295,9 @@ def test_object_list_containers_all(self, c_mock):
327295
# containing the data to be listed.
328296
columns, data = self.cmd.take_action(parsed_args)
329297

330-
# Set expected values
331-
kwargs = {
332-
'full_listing': True,
333-
}
334-
c_mock.assert_called_with(**kwargs)
298+
self.object_store_client.container_list.assert_called_with(
299+
full_listing=True,
300+
)
335301

336302
self.assertEqual(self.columns, columns)
337303
datalist = (
@@ -342,16 +308,17 @@ def test_object_list_containers_all(self, c_mock):
342308
self.assertEqual(datalist, tuple(data))
343309

344310

345-
@mock.patch('openstackclient.api.object_store_v1.APIv1.container_show')
346-
class TestContainerShow(TestContainer):
311+
class TestContainerShow(object_fakes.TestObjectV1):
347312
def setUp(self):
348313
super().setUp()
349314

350315
# Get the command object to test
351316
self.cmd = container.ShowContainer(self.app, None)
352317

353-
def test_container_show(self, c_mock):
354-
c_mock.return_value = copy.deepcopy(object_fakes.CONTAINER)
318+
def test_container_show(self):
319+
self.object_store_client.container_show.return_value = copy.deepcopy(
320+
object_fakes.CONTAINER
321+
)
355322

356323
arglist = [
357324
object_fakes.container_name,
@@ -366,11 +333,8 @@ def test_container_show(self, c_mock):
366333
# data to be shown.
367334
columns, data = self.cmd.take_action(parsed_args)
368335

369-
# Set expected values
370-
kwargs = {}
371-
# lib.container.show_container(api, url, container)
372-
c_mock.assert_called_with(
373-
container=object_fakes.container_name, **kwargs
336+
self.object_store_client.container_show.assert_called_with(
337+
container=object_fakes.container_name,
374338
)
375339

376340
collist = ('bytes', 'count', 'name')

openstackclient/tests/unit/object/v1/test_container_all.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,24 @@
1313

1414
import copy
1515

16+
from keystoneauth1 import session
1617
from requests_mock.contrib import fixture
1718

19+
from openstackclient.api import object_store_v1 as object_store
1820
from openstackclient.object.v1 import container as container_cmds
1921
from openstackclient.tests.unit.object.v1 import fakes as object_fakes
2022

2123

22-
class TestContainerAll(object_fakes.TestObjectv1):
24+
class TestContainerAll(object_fakes.TestObjectV1):
2325
def setUp(self):
2426
super().setUp()
2527

28+
# these tests require a "real" client since we mock requests
2629
self.requests_mock = self.useFixture(fixture.Fixture())
30+
self.app.client_manager.object_store = object_store.APIv1(
31+
session=session.Session(),
32+
endpoint=object_fakes.ENDPOINT,
33+
)
2734

2835

2936
class TestContainerCreate(TestContainerAll):

0 commit comments

Comments
 (0)