@@ -115,27 +115,32 @@ def test_blocking_consume_on_exception():
115
115
116
116
117
117
def test_blocking_consume_two_exceptions ():
118
- policy = mock .Mock (spec = ('call_rpc' , 'on_response' , 'on_exception' ))
119
- policy .call_rpc .side_effect = (
120
- (mock .sentinel .A ,),
121
- (mock .sentinel .B ,),
122
- )
118
+ policy = mock .Mock (spec = ('call_rpc' , 'on_exception' ))
119
+
123
120
exc1 = NameError ('Oh noes.' )
124
121
exc2 = ValueError ('Something grumble.' )
125
- policy .on_response .side_effect = (exc1 , exc2 )
122
+ policy .on_exception .side_effect = OnException (acceptable = exc1 )
123
+
124
+ response_generator1 = mock .MagicMock (spec = ('__iter__' , 'done' ))
125
+ response_generator1 .__iter__ .side_effect = exc1
126
+ response_generator1 .done .return_value = True
127
+ response_generator2 = mock .MagicMock (spec = ('__iter__' , 'done' ))
128
+ response_generator2 .__iter__ .side_effect = exc2
129
+ policy .call_rpc .side_effect = (response_generator1 , response_generator2 )
126
130
127
131
consumer = _consumer .Consumer ()
128
132
consumer ._consumer_thread = mock .Mock (spec = threading .Thread )
129
- policy .on_exception .side_effect = OnException (acceptable = exc1 )
130
133
131
134
# Establish that we get responses until we are sent the exiting event.
132
135
consumer ._blocking_consume (policy )
133
136
assert consumer ._consumer_thread is None
134
137
135
138
# Check mocks.
136
139
assert policy .call_rpc .call_count == 2
137
- policy .on_response .assert_has_calls (
138
- [mock .call (mock .sentinel .A ), mock .call (mock .sentinel .B )])
140
+ response_generator1 .__iter__ .assert_called_once_with ()
141
+ response_generator1 .done .assert_called_once_with ()
142
+ response_generator2 .__iter__ .assert_called_once_with ()
143
+ response_generator2 .done .assert_not_called ()
139
144
policy .on_exception .assert_has_calls (
140
145
[mock .call (exc1 ), mock .call (exc2 )])
141
146
@@ -179,6 +184,18 @@ def basic_queue_generator(queue, received):
179
184
yield value
180
185
181
186
187
+ def test_stop_request_generator_response_not_done ():
188
+ consumer = _consumer .Consumer ()
189
+
190
+ response_generator = mock .Mock (spec = ('done' ,))
191
+ response_generator .done .return_value = False
192
+ stopped = consumer ._stop_request_generator (None , response_generator )
193
+ assert stopped is False
194
+
195
+ # Check mocks.
196
+ response_generator .done .assert_called_once_with ()
197
+
198
+
182
199
def test_stop_request_generator_not_running ():
183
200
# Model scenario tested:
184
201
# - The request generator **is not** running
@@ -207,7 +224,10 @@ def test_stop_request_generator_not_running():
207
224
# Make sure it **isn't** done.
208
225
assert request_generator .gi_frame is not None
209
226
210
- stopped = consumer ._stop_request_generator (request_generator )
227
+ response_generator = mock .Mock (spec = ('done' ,))
228
+ response_generator .done .return_value = True
229
+ stopped = consumer ._stop_request_generator (
230
+ request_generator , response_generator )
211
231
assert stopped is True
212
232
213
233
# Make sure it **is** done.
@@ -217,6 +237,9 @@ def test_stop_request_generator_not_running():
217
237
assert queue_ .get () == item2
218
238
assert queue_ .empty ()
219
239
240
+ # Check mocks.
241
+ response_generator .done .assert_called_once_with ()
242
+
220
243
221
244
def test_stop_request_generator_close_failure ():
222
245
# Model scenario tested:
@@ -229,11 +252,15 @@ def test_stop_request_generator_close_failure():
229
252
request_generator = mock .Mock (spec = ('close' ,))
230
253
request_generator .close .side_effect = TypeError ('Really, not a generator' )
231
254
232
- stopped = consumer ._stop_request_generator (request_generator )
255
+ response_generator = mock .Mock (spec = ('done' ,))
256
+ response_generator .done .return_value = True
257
+ stopped = consumer ._stop_request_generator (
258
+ request_generator , response_generator )
233
259
assert stopped is False
234
260
235
261
# Make sure close() was only called once.
236
262
request_generator .close .assert_called_once_with ()
263
+ response_generator .done .assert_called_once_with ()
237
264
238
265
239
266
def test_stop_request_generator_queue_non_empty ():
@@ -264,7 +291,10 @@ def test_stop_request_generator_queue_non_empty():
264
291
assert received .empty ()
265
292
assert request_generator .gi_frame is not None
266
293
267
- stopped = consumer ._stop_request_generator (request_generator )
294
+ response_generator = mock .Mock (spec = ('done' ,))
295
+ response_generator .done .return_value = True
296
+ stopped = consumer ._stop_request_generator (
297
+ request_generator , response_generator )
268
298
assert stopped is False
269
299
270
300
# Make sure the generator is **still** not finished.
@@ -279,6 +309,9 @@ def test_stop_request_generator_queue_non_empty():
279
309
pass
280
310
assert received .get () == item2
281
311
312
+ # Check mocks.
313
+ response_generator .done .assert_called_once_with ()
314
+
282
315
283
316
def test_stop_request_generator_running ():
284
317
# Model scenario tested:
@@ -304,7 +337,10 @@ def test_stop_request_generator_running():
304
337
assert received .empty ()
305
338
assert request_generator .gi_frame is not None
306
339
307
- stopped = consumer ._stop_request_generator (request_generator )
340
+ response_generator = mock .Mock (spec = ('done' ,))
341
+ response_generator .done .return_value = True
342
+ stopped = consumer ._stop_request_generator (
343
+ request_generator , response_generator )
308
344
assert stopped is True
309
345
310
346
# Make sure it **is** done, though we may have to wait until
@@ -316,3 +352,6 @@ def test_stop_request_generator_running():
316
352
assert request_generator .gi_frame is None
317
353
assert received .get () == _helper_threads .STOP
318
354
assert queue_ .empty ()
355
+
356
+ # Check mocks.
357
+ response_generator .done .assert_called_once_with ()
0 commit comments