3
3
import time
4
4
import pytest
5
5
import socket
6
- from blynklib import Connection , BlynkError
6
+ from blynklib import Connection , BlynkError , RedirectError
7
7
8
8
9
9
class TestBlynkConnection :
@@ -96,7 +96,7 @@ def test_receive_raise_other_oserror(self, cb, mocker):
96
96
with mocker .patch ('socket.socket.recv' , side_effect = OSError ('[Errno 13]' )):
97
97
with pytest .raises (OSError ) as os_err :
98
98
cb .receive (10 , 1 )
99
- assert '[Errno 13]' in str (os_err )
99
+ assert '[Errno 13]' in str (os_err . value )
100
100
101
101
def test_is_server_alive_negative (self , cb ):
102
102
result = cb .is_server_alive ()
@@ -131,7 +131,7 @@ def test_get_socket_exception(self, cb, mocker):
131
131
with mocker .patch ('socket.getaddrinfo' , side_effect = BlynkError ('BE' )):
132
132
with pytest .raises (BlynkError ) as b_err :
133
133
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 )
135
135
136
136
def test_authenticate (self , cb , mocker ):
137
137
with mocker .patch .object (cb , 'send' , return_value = None ):
@@ -144,35 +144,44 @@ def test_authenticate_invalid_auth_token(self, cb, mocker):
144
144
with mocker .patch .object (cb , 'receive' , return_value = b'\x00 \x00 \x02 \x00 \x09 ' ):
145
145
with pytest .raises (BlynkError ) as b_err :
146
146
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
148
157
149
158
def test_authenticate_not_ok_status (self , cb , mocker ):
150
159
with mocker .patch .object (cb , 'send' , return_value = None ):
151
160
with mocker .patch .object (cb , 'receive' , return_value = b'\x00 \x00 \x02 \x00 \x19 ' ):
152
161
with pytest .raises (BlynkError ) as b_err :
153
162
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 )
155
164
156
165
def test_authenticate_timeout (self , cb , mocker ):
157
166
with mocker .patch .object (cb , 'send' , return_value = None ):
158
167
with mocker .patch .object (cb , 'receive' , return_value = None ):
159
168
with pytest .raises (BlynkError ) as b_err :
160
169
cb ._authenticate ()
161
- assert 'Auth stage timeout' in str (b_err )
170
+ assert 'Auth stage timeout' in str (b_err . value )
162
171
163
172
def test_set_heartbeat_timeout (self , cb , mocker ):
164
173
with mocker .patch .object (cb , 'send' , return_value = None ):
165
174
with mocker .patch .object (cb , 'receive' , return_value = None ):
166
175
with pytest .raises (BlynkError ) as b_err :
167
176
cb ._set_heartbeat ()
168
- assert 'Heartbeat stage timeout' in str (b_err )
177
+ assert 'Heartbeat stage timeout' in str (b_err . value )
169
178
170
179
def test_set_heartbeat_error_status (self , cb , mocker ):
171
180
with mocker .patch .object (cb , 'send' , return_value = None ):
172
181
with mocker .patch .object (cb , 'receive' , return_value = b'\x00 \x00 \x02 \x00 \x0e ' ):
173
182
with pytest .raises (BlynkError ) as b_err :
174
183
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 )
176
185
177
186
def test_set_heartbeat_positive (self , cb , mocker ):
178
187
with mocker .patch .object (cb , 'send' , return_value = None ):
0 commit comments