2727from google .cloud .pubsub_v1 .subscriber .policy import thread
2828
2929
30- def create_consumer ():
31- creds = mock .Mock (spec = credentials .Credentials )
32- client = subscriber .Client (credentials = creds )
33- subscription = client .subscribe ('sub_name_e' )
34- return _consumer .Consumer (policy = subscription )
35-
36-
3730def test_send_request ():
38- consumer = create_consumer ()
31+ consumer = _consumer . Consumer ()
3932 request = types .StreamingPullRequest (subscription = 'foo' )
4033 with mock .patch .object (queue .Queue , 'put' ) as put :
4134 consumer .send_request (request )
4235 put .assert_called_once_with (request )
4336
4437
4538def test_request_generator_thread ():
46- consumer = create_consumer ()
47- generator = consumer ._request_generator_thread ()
39+ consumer = _consumer .Consumer ()
40+ creds = mock .Mock (spec = credentials .Credentials )
41+ client = subscriber .Client (credentials = creds )
42+ policy = client .subscribe ('sub_name_e' )
43+ generator = consumer ._request_generator_thread (policy )
4844
4945 # The first request that comes from the request generator thread
5046 # should always be the initial request.
@@ -64,27 +60,24 @@ def test_request_generator_thread():
6460
6561
6662def test_blocking_consume ():
67- consumer = create_consumer ( )
68- Policy = type ( consumer . _policy )
63+ policy = mock . Mock ( spec = ( 'call_rpc' , 'on_response' ) )
64+ policy . call_rpc . return_value = ( mock . sentinel . A , mock . sentinel . B )
6965
70- # Establish that we get responses until we run out of them.
71- with mock .patch .object (Policy , 'call_rpc' , autospec = True ) as call_rpc :
72- call_rpc .return_value = (mock .sentinel .A , mock .sentinel .B )
73- with mock .patch .object (Policy , 'on_response' , autospec = True ) as on_res :
74- consumer ._blocking_consume ()
75- assert on_res .call_count == 2
76- assert on_res .mock_calls [0 ][1 ][1 ] == mock .sentinel .A
77- assert on_res .mock_calls [1 ][1 ][1 ] == mock .sentinel .B
66+ consumer = _consumer .Consumer ()
67+ assert consumer ._blocking_consume (policy ) is None
68+ policy .call_rpc .assert_called_once ()
69+ policy .on_response .assert_has_calls (
70+ [mock .call (mock .sentinel .A ), mock .call (mock .sentinel .B )])
7871
7972
8073@mock .patch .object (_consumer , '_LOGGER' )
8174def test_blocking_consume_when_exiting (_LOGGER ):
82- consumer = create_consumer ()
75+ consumer = _consumer . Consumer ()
8376 assert consumer .stopped .is_set () is False
8477 consumer .stopped .set ()
8578
8679 # Make sure method cleanly exits.
87- assert consumer ._blocking_consume () is None
80+ assert consumer ._blocking_consume (None ) is None
8881
8982 _LOGGER .debug .assert_called_once_with ('Event signalled consumer exit.' )
9083
@@ -107,12 +100,12 @@ def test_blocking_consume_on_exception():
107100 exc = TypeError ('Bad things!' )
108101 policy .on_response .side_effect = exc
109102
110- consumer = _consumer .Consumer (policy = policy )
103+ consumer = _consumer .Consumer ()
111104 consumer ._consumer_thread = mock .Mock (spec = threading .Thread )
112105 policy .on_exception .side_effect = OnException ()
113106
114107 # Establish that we get responses until we are sent the exiting event.
115- consumer ._blocking_consume ()
108+ consumer ._blocking_consume (policy )
116109 assert consumer ._consumer_thread is None
117110
118111 # Check mocks.
@@ -131,12 +124,12 @@ def test_blocking_consume_two_exceptions():
131124 exc2 = ValueError ('Something grumble.' )
132125 policy .on_response .side_effect = (exc1 , exc2 )
133126
134- consumer = _consumer .Consumer (policy = policy )
127+ consumer = _consumer .Consumer ()
135128 consumer ._consumer_thread = mock .Mock (spec = threading .Thread )
136129 policy .on_exception .side_effect = OnException (acceptable = exc1 )
137130
138131 # Establish that we get responses until we are sent the exiting event.
139- consumer ._blocking_consume ()
132+ consumer ._blocking_consume (policy )
140133 assert consumer ._consumer_thread is None
141134
142135 # Check mocks.
@@ -148,20 +141,24 @@ def test_blocking_consume_two_exceptions():
148141
149142
150143def test_start_consuming ():
151- consumer = create_consumer ()
144+ creds = mock .Mock (spec = credentials .Credentials )
145+ client = subscriber .Client (credentials = creds )
146+ policy = client .subscribe ('sub_name_e' )
147+ consumer = _consumer .Consumer ()
152148 with mock .patch .object (threading , 'Thread' , autospec = True ) as Thread :
153- consumer .start_consuming ()
149+ consumer .start_consuming (policy )
154150
155151 assert consumer .stopped .is_set () is False
156152 Thread .assert_called_once_with (
157153 name = _consumer ._BIDIRECTIONAL_CONSUMER_NAME ,
158154 target = consumer ._blocking_consume ,
155+ args = (policy ,),
159156 )
160157 assert consumer ._consumer_thread is Thread .return_value
161158
162159
163160def test_stop_consuming ():
164- consumer = create_consumer ()
161+ consumer = _consumer . Consumer ()
165162 assert consumer .stopped .is_set () is False
166163 thread = mock .Mock (spec = threading .Thread )
167164 consumer ._consumer_thread = thread
@@ -188,7 +185,7 @@ def test_stop_request_generator_not_running():
188185 # - The request queue **is not** empty
189186 # Expected result:
190187 # - ``_stop_request_generator()`` successfully calls ``.close()``
191- consumer = create_consumer ()
188+ consumer = _consumer . Consumer ()
192189 queue_ = consumer ._request_queue
193190 received = queue .Queue ()
194191 request_generator = basic_queue_generator (queue_ , received )
@@ -227,7 +224,7 @@ def test_stop_request_generator_close_failure():
227224 # Expected result:
228225 # - ``_stop_request_generator()`` falls through to the ``LOGGER.error``
229226 # case and returns ``False``
230- consumer = create_consumer ()
227+ consumer = _consumer . Consumer ()
231228
232229 request_generator = mock .Mock (spec = ('close' ,))
233230 request_generator .close .side_effect = TypeError ('Really, not a generator' )
@@ -247,7 +244,7 @@ def test_stop_request_generator_queue_non_empty():
247244 # - ``_stop_request_generator()`` can't call ``.close()`` (since
248245 # the generator is running) but then returns with ``False`` because
249246 # the queue **is not** empty
250- consumer = create_consumer ()
247+ consumer = _consumer . Consumer ()
251248 # Attach a "fake" queue to the request generator so the generator can
252249 # block on an empty queue while the consumer's queue is not empty.
253250 queue_ = queue .Queue ()
@@ -292,7 +289,7 @@ def test_stop_request_generator_running():
292289 # the generator is running) but then verifies that the queue is
293290 # empty and sends ``STOP`` into the queue to successfully stop
294291 # the generator
295- consumer = create_consumer ()
292+ consumer = _consumer . Consumer ()
296293 queue_ = consumer ._request_queue
297294 received = queue .Queue ()
298295 request_generator = basic_queue_generator (queue_ , received )
0 commit comments