@@ -215,48 +215,69 @@ def test_invalid_response_headers(self, sock):
215215 sock .reset_mock ()
216216
217217class ThreadedClientTest (unittest .TestCase ):
218+
218219 @patch ('ws4py.client.socket' )
219- def test_thread_is_started_once_connected (self , sock ):
220- s = MagicMock (spec = socket .socket )
221- sock .socket .return_value = s
220+ def setUp (self , sock ):
221+ self . sock = MagicMock (spec = socket .socket )
222+ sock .socket .return_value = self . sock
222223 sock .getaddrinfo .return_value = [(socket .AF_INET , socket .SOCK_STREAM , 0 , "" ,
223224 ("127.0.0.1" , 80 , 0 , 0 ))]
224-
225- c = WebSocketClient (url = "ws://127.0.0.1/" )
226225
227- def exchange1 (* args , ** kwargs ):
228- yield b"\r \n " .join ([
229- b"HTTP/1.1 101 Switching Protocols" ,
230- b"Connection: Upgrade" ,
231- b"Sec-Websocket-Version: 13" ,
232- b"Content-Type: text/plain;charset=utf-8" ,
233- b"Sec-Websocket-Accept: " + b64encode (sha1 (c .key + WS_KEY ).digest ()),
234- b"Upgrade: websocket" ,
235- b"Date: Sun, 26 Jul 2015 12:32:55 GMT" ,
236- b"Server: ws4py/test" ,
237- b"\r \n "
238- ])
226+ self .client = WebSocketClient (url = "ws://127.0.0.1/" )
239227
240- for i in range (100 ):
241- time .sleep (0.1 )
242- yield Frame (opcode = OPCODE_TEXT , body = b'hello' ,
243- fin = 1 ).build ()
228+ def _exchange1 (self , * args , ** kwargs ):
229+ yield b"\r \n " .join ([
230+ b"HTTP/1.1 101 Switching Protocols" ,
231+ b"Connection: Upgrade" ,
232+ b"Sec-Websocket-Version: 13" ,
233+ b"Content-Type: text/plain;charset=utf-8" ,
234+ b"Sec-Websocket-Accept: " + b64encode (sha1 (self .client .key + WS_KEY ).digest ()),
235+ b"Upgrade: websocket" ,
236+ b"Date: Sun, 26 Jul 2015 12:32:55 GMT" ,
237+ b"Server: ws4py/test" ,
238+ b"\r \n "
239+ ])
244240
245- s .recv .side_effect = exchange1 ()
246- self .assertFalse (c ._th .is_alive ())
247-
248- c .connect ()
241+ for i in range (100 ):
242+ time .sleep (0.1 )
243+ yield Frame (opcode = OPCODE_TEXT , body = b'hello' ,
244+ fin = 1 ).build ()
245+
246+ def _exchange2 (self , * args , ** kwargs ):
247+ yield Frame (opcode = OPCODE_CLOSE , body = b'' ,
248+ fin = 1 ).build ()
249+
250+ def test_thread_is_started_once_connected (self ):
251+ self .sock .recv .side_effect = self ._exchange1 ()
252+ self .assertFalse (self .client ._th .is_alive ())
253+
254+ self .client .connect ()
249255 time .sleep (0.5 )
250- self .assertTrue (c ._th .is_alive ())
256+ self .assertTrue (self . client ._th .is_alive ())
251257
252- def exchange2 (* args , ** kwargs ):
253- yield Frame (opcode = OPCODE_CLOSE , body = b'' ,
254- fin = 1 ).build ()
255- s .recv .side_effect = exchange2 ()
258+ self .sock .recv .side_effect = self ._exchange2 ()
256259 time .sleep (0.5 )
257- self .assertFalse (c ._th .is_alive ())
258-
259-
260+ self .assertFalse (self .client ._th .is_alive ())
261+
262+ def test_thread_is_started_once_connected_secure (self ):
263+ """ Same as the above test, but with SSL socket """
264+ # pretend the socket is an SSL socket
265+ self .sock .pending = lambda : False
266+ self .client ._is_secure = True
267+
268+ self .sock .recv .side_effect = self ._exchange1 ()
269+ self .assertFalse (self .client ._th .is_alive ())
270+
271+ self .client .connect ()
272+ time .sleep (0.5 )
273+ self .assertTrue (self .client ._th .is_alive ())
274+
275+ self .sock .recv .side_effect = self ._exchange2 ()
276+ time .sleep (0.5 )
277+ self .assertFalse (self .client ._th .is_alive ())
278+
279+
280+
260281if __name__ == '__main__' :
261282 suite = unittest .TestSuite ()
262283 loader = unittest .TestLoader ()
0 commit comments