1
1
# -*- coding: utf-8 -*-
2
2
from __future__ import print_function
3
+ import time
3
4
import pytest
4
5
import socket
5
6
from blynklib import Connection
@@ -22,3 +23,90 @@ def test_set_socket_timeout_via_poll(self, cb):
22
23
in_timeout = 10
23
24
cb ._socket = 2222
24
25
cb ._set_socket_timeout (in_timeout )
26
+
27
+ def test_send (self , cb , mocker ):
28
+ cb ._socket = socket .socket ()
29
+ with mocker .patch ('socket.socket.send' , return_value = 5 ):
30
+ result = cb .send ('1234' )
31
+ assert result == 5
32
+
33
+ def test_send_ioerror (self , cb , mocker ):
34
+ cb ._socket = socket .socket ()
35
+ with mocker .patch ('socket.socket.send' , side_effect = IOError ('IO' )):
36
+ result = cb .send ('1234' )
37
+ assert result is None
38
+
39
+ def test_send_oserror (self , cb , mocker ):
40
+ cb ._socket = socket .socket ()
41
+ with mocker .patch ('socket.socket.send' , side_effect = OSError ('OS' )):
42
+ result = cb .send ('1234' )
43
+ assert result is None
44
+
45
+ # todo spy modify - AttributeError: 'socket' object attribute 'send' is read-only
46
+ # def test_send_error_retry_count(self, cb, mocker):
47
+ # cb._socket = socket.socket()
48
+ # with mocker.patch('socket.socket.send', side_effect=OSError('OS')):
49
+ # mocker.spy(cb._socket, 'send')
50
+ # cb.send('1234')
51
+ # assert cb._socket.send.call_count == 3
52
+
53
+ def test_receive (self , cb , mocker ):
54
+ cb ._socket = socket .socket ()
55
+ with mocker .patch .object (cb , '_set_socket_timeout' , return_value = None ):
56
+ with mocker .patch ('socket.socket.recv' , return_value = b'12345' ):
D7AE
td>57
+ result = cb .receive (10 , 1 )
58
+ assert result == b'12345'
59
+
60
+ def test_receive_timeout (self , cb , mocker ):
61
+ cb ._socket = socket .socket ()
62
+ with mocker .patch .object (cb , '_set_socket_timeout' , return_value = None ):
63
+ with mocker .patch ('socket.socket.recv' , side_effect = OSError ('timed out' )):
64
+ result = cb .receive (10 , 1 )
65
+ assert result == b''
66
+
67
+ def test_receive_eagain (self , cb , mocker ):
68
+ cb ._socket = socket .socket ()
69
+ with mocker .patch .object (cb , '_set_socket_timeout' , return_value = None ):
70
+ # with mocker.patch.object(cb._socket, 'recv', side_effect=IOError('[Errno 11]')):
71
+ with mocker .patch ('socket.socket.recv' , side_effect = IOError ('[Errno 11]' )):
72
+ result = cb .receive (10 , 1 )
73
+ assert result == b''
74
+
75
+ def test_receive_etimeout (self , cb , mocker ):
76
+ cb ._socket = socket .socket ()
77
+ with mocker .patch .object (cb , '_set_socket_timeout' , return_value = None ):
78
+ # with mocker.patch.object(cb._socket, 'recv', side_effect=OSError('[Errno 60]')):
79
+ with mocker .patch ('socket.socket.recv' , side_effect = OSError ('[Errno 60]' )):
80
+ result = cb .receive (10 , 1 )
81
+ assert result == b''
82
+
83
+ def test_receive_raise_other_oserror (self , cb , mocker ):
84
+ cb ._socket = socket .socket ()
85
+ with mocker .patch .object (cb , '_set_socket_timeout' , return_value = None ):
86
+ # with mocker.patch.object(cb._socket, 'recv', side_effect=OSError('[Errno 13]')):
87
+ with mocker .patch ('socket.socket.recv' , side_effect = OSError ('[Errno 13]' )):
88
+ with pytest .raises (OSError ) as os_err :
89
+ cb .receive (10 , 1 )
90
+ assert '[Errno 13]' in str (os_err )
91
+
92
+ def test_is_server_alive_negative (self , cb ):
93
+ result = cb .is_server_alive ()
94
+ assert result is False
95
+
96
+ def test_is_server_alive_positive_ping (self , cb , mocker ):
97
+ cb ._last_rcv_time = int (time .time () * 1000 )
98
+ with mocker .patch .object (cb , 'send' , return_value = None ):
99
+ result = cb .is_server_alive ()
100
+ assert result is True
101
+
102
+ def test_is_server_alive_positive_no_ping_1 (self , cb ):
103
+ cb ._last_rcv_time = int (time .time () * 1000 )
104
+ cb ._last_ping_time = int (time .time () * 1000 )
105
+ result = cb .is_server_alive ()
106
+ assert result is True
107
+
108
+ def test_is_server_alive_positive_no_ping_2 (self , cb ):
109
+ cb ._last_rcv_time = int (time .time () * 1000 )
110
+ cb ._last_send_time = int (time .time () * 1000 )
111
+ result = cb .is_server_alive ()
112
+ assert result is True
0 commit comments