11import collections
22import copy
33import socket
4+ import time
45from unittest import TestCase
56
67from mock import patch , MagicMock , call , PropertyMock
@@ -173,13 +174,11 @@ def test_fail(self):
173174 ], self .processed_messages )
174175
175176
176- @patch (MODULE_PATH + "time" )
177177@patch (MODULE_PATH + "_WSMessageProducer._empty_send_queue" , MagicMock ())
178178@patch (MODULE_PATH + "_WSMessageProducer._empty_websocket" , MagicMock ())
179179class Test__WSMessageProducer_run (WSMessageProducerTest ):
180180
181- def prepare (self , time ):
182- _WSMessageProducer ._POLL_INTERVAL = 0
181+ def prepare (self , time_ ):
183182 self .next_time = 0
184183
185184 def increment_time ():
@@ -190,25 +189,60 @@ def increment_time():
190189
191190 return current_time
192191
193- time .time = increment_time
192+ time_ .time = increment_time
194193
195- def test (self , time ):
196- self .prepare (time )
194+ @patch (MODULE_PATH + "_WSMessageProducer._POLL_INTERVAL" , 0 )
195+ @patch (MODULE_PATH + "time" )
196+ def test (self , time_ ):
197+ self .prepare (time_ )
197198
198199 self .ws_message_producer .run ()
199200
200201 self .assertEqual (10 , self .ws_message_producer ._last_ws_attempt )
201202
202- def test_exception (self , time ):
203+ @patch (MODULE_PATH + "_WSMessageProducer._POLL_INTERVAL" , 0 )
204+ @patch (MODULE_PATH + "time" )
205+ def test_exception (self , time_ ):
203206 exception = Exception ()
204207 self .ws_message_producer ._empty_send_queue .side_effect = exception
205- self .prepare (time )
208+ self .prepare (time_ )
206209
207210 self .ws_message_producer .run ()
208211
209212 self .assertEqual (0 , self .ws_message_producer ._last_ws_attempt )
210213 self .assertEqual (exception , self .ws_message_producer .exception )
211214
215+ def test_wait_timeout (self ):
216+
217+ def _stop ():
218+ self .ws_message_producer ._continue = False
219+
220+ self .ws_message_producer ._empty_send_queue = MagicMock ()
221+ self .ws_message_producer ._empty_websocket .side_effect = _stop
222+ self .ws_message_producer .poll_signal .clear = MagicMock ()
223+ start = time .time ()
224+
225+ self .ws_message_producer .run ()
226+
227+ self .assertGreater (time .time () - start , 1 )
228+ self .ws_message_producer .poll_signal .clear .assert_not_called ()
229+
230+ def test_poll_signal_set (self ):
231+
232+ def _stop ():
233+ self .ws_message_producer ._continue = False
234+
235+ self .ws_message_producer ._empty_send_queue = MagicMock ()
236+ self .ws_message_producer ._empty_websocket .side_effect = _stop
237+ self .ws_message_producer .poll_signal .set ()
238+ self .ws_message_producer .poll_signal .clear = MagicMock ()
239+
240+ start = time .time ()
241+ self .ws_message_producer .run ()
242+
243+ self .assertLess (time .time () - start , 1 )
244+ self .ws_message_producer .poll_signal .clear .assert_called_once_with ()
245+
212246
213247class Test__WSMessagingThread_blocked (WSMessageProducerTest ):
214248
0 commit comments