33import time
44import pytest
55import socket
6- from blynklib import Connection , BlynkError
6+ from blynklib import Connection , BlynkError , RedirectError
77
88
99class TestBlynkConnection :
@@ -96,7 +96,7 @@ def test_receive_raise_other_oserror(self, cb, mocker):
9696 with mocker .patch ('socket.socket.recv' , side_effect = OSError ('[Errno 13]' )):
9797 with pytest .raises (OSError ) as os_err :
9898 cb .receive (10 , 1 )
99- assert '[Errno 13]' in str (os_err )
99+ assert '[Errno 13]' in str (os_err . value )
100100
101101 def test_is_server_alive_negative (self , cb ):
102102 result = cb .is_server_alive ()
@@ -131,7 +131,7 @@ def test_get_socket_exception(self, cb, mocker):
131131 with mocker .patch ('socket.getaddrinfo' , side_effect = BlynkError ('BE' )):
132132 with pytest .raises (BlynkError ) as b_err :
133133 cb ._get_socket ()
134- assert 'Connection with the Blynk server failed: BE' in str (b_err )
134+ assert 'Connection with the Blynk server failed: BE' in str (b_err . value )
135135
136136 def test_authenticate (self , cb , mocker ):
137137 with mocker .patch .object (cb , 'send' , return_value = None ):
@@ -144,35 +144,44 @@ def test_authenticate_invalid_auth_token(self, cb, mocker):
144144 with mocker .patch .object (cb , 'receive' , return_value = b'\x00 \x00 \x02 \x00 \x09 ' ):
145145 with pytest .raises (BlynkError ) as b_err :
146146 cb ._authenticate ()
147- assert 'Invalid Auth Token' in str (b_err )
147+ assert 'Invalid Auth Token' in str (b_err .value )
148+
149+ def test_authenticate_redirect_message (self , cb , mocker ):
150+ with mocker .patch .object (cb , 'send' , return_value = None ):
151+ with mocker .patch .object (cb , 'receive' , return_value = b'\x29 \x00 \x02 \x00 \x11 127.0.0.1\x00 4444' ):
152+ with pytest .raises (RedirectError ) as r_err :
153+ cb ._authenticate ()
154+ # pytest exception wraps real exception - so we need access value field first
155+ assert '127.0.0.1' in r_err .value .server
156+ assert '4444' in r_err .value .port
148157
149158 def test_authenticate_not_ok_status (self , cb , mocker ):
150159 with mocker .patch .object (cb , 'send' , return_value = None ):
151160 with mocker .patch .object (cb , 'receive' , return_value = b'\x00 \x00 \x02 \x00 \x19 ' ):
152161 with pytest .raises (BlynkError ) as b_err :
153162 cb ._authenticate ()
154- assert 'Auth stage failed. Status=25' in str (b_err )
163+ assert 'Auth stage failed. Status=25' in str (b_err . value )
155164
156165 def test_authenticate_timeout (self , cb , mocker ):
157166 with mocker .patch .object (cb , 'send' , return_value = None ):
158167 with mocker .patch .object (cb , 'receive' , return_value = None ):
159168 with pytest .raises (BlynkError ) as b_err :
160169 cb ._authenticate ()
161- assert 'Auth stage timeout' in str (b_err )
170+ assert 'Auth stage timeout' in str (b_err . value )
162171
163172 def test_set_heartbeat_timeout (self , cb , mocker ):
164173 with mocker .patch .object (cb , 'send' , return_value = None ):
165174 with mocker .patch .object (cb , 'receive' , return_value = None ):
166175 with pytest .raises (BlynkError ) as b_err :
167176 cb ._set_heartbeat ()
168- assert 'Heartbeat stage timeout' in str (b_err )
177+ assert 'Heartbeat stage timeout' in str (b_err . value )
169178
170179 def test_set_heartbeat_error_status (self , cb , mocker ):
171180 with mocker .patch .object (cb , 'send' , return_value = None ):
172181 with mocker .patch .object (cb , 'receive' , return_value = b'\x00 \x00 \x02 \x00 \x0e ' ):
173182 with pytest .raises (BlynkError ) as b_err :
174183 cb ._set_heartbeat ()
175- assert 'Set heartbeat returned code=14' in str (b_err )
184+ assert 'Set heartbeat returned code=14' in str (b_err . value )
176185
177186 def test_set_heartbeat_positive (self , cb , mocker ):
178187 with mocker .patch .object (cb , 'send' , return_value = None ):
0 commit comments