8000 more unit tests for main class · blynkkk/lib-python@5110fad · GitHub
[go: up one dir, main page]

Skip to content 8000
This repository was archived by the owner on May 7, 2025. It is now read-only.

Commit 5110fad

Browse files
committed
more unit tests for main class
1 parent 8ce1015 commit 5110fad

File tree

3 files changed

+149
-28
lines changed

3 files changed

+149
-28
lines changed

test/test_blynk_connection.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,12 @@ def test_send_socket_timeout(self, cb, mocker):
4848
result = cb.send('1234')
4949
assert result is None
5050

51-
# todo python 3 issue investigate
52-
# TypeError: descriptor '__getattribute__' requires a '_socket.socket' object but received a 'type'
53-
# def test_send_error_retry_count(self, cb, mocker):
54-
# cb._socket = socket.socket()
55-
# with mocker.patch('socket.socket.send', side_effect=OSError('OS')):
56-
# mocker.spy(socket.socket, 'send')
57-
# cb.send('1234')
58-
# assert cb._socket.send.call_count == 3
51+
def test_send_error_retry_count(self, cb, mocker):
52+
cb._socket = socket.socket()
53+
with mocker.patch('socket.socket.send', side_effect=OSError('OS')):
54+
mocker.spy(time, 'sleep')
55+
cb.send('1234')
56+
assert cb._socket.send.call_count == 3
5957

6058
def test_receive(self, cb, mocker):
6159
cb._socket = socket.socket()
@@ -123,14 +121,14 @@ def test_is_server_alive_positive_no_ping_2(self, cb):
123121
assert result is True
124122

125123
def test_get_socket(self, cb, mocker):
126-
with mocker.patch.object(cb, '_set_socket_timeout', return_value=None):
127-
with mocker.patch('socket.socket.connect', return_value=None):
124+
with mocker.patch('socket.socket'):
125+
with mocker.patch('socket.getaddrinfo'):
128126
cb._get_socket()
129127
assert cb._state == cb.CONNECTING
130128

131129
def test_get_socket_exception(self, cb, mocker):
132-
with mocker.patch.object(cb, '_set_socket_timeout', return_value=None):
133-
with mocker.patch('socket.socket.connect', side_effect=BlynkException('BE')):
130+
with mocker.patch('socket.socket'):
131+
with mocker.patch('socket.getaddrinfo', side_effect=BlynkException('BE')):
134132
with pytest.raises(BlynkException) as b_exc:
135133
cb._get_socket()
136134
assert 'Connection with the Blynk server failed: BE' in str(b_exc)

test/test_blynk_main.py

Lines changed: 130 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22
from __future__ import print_function
3+
import socket
34
import pytest
45
from blynklib import Blynk, BlynkException
56

@@ -10,32 +11,151 @@ def bl(self):
1011
blynk = Blynk('1234', log=print)
1112
yield blynk
1213

13-
def test_notify(self, bl, mocker):
14+
def test_connect(self, bl, mocker):
15+
with mocker.patch.object(bl, 'connected', return_value=False):
16+
with mocker.patch.object(bl, '_get_socket', return_value=None):
17+
with mocker.patch.object(bl, '_authenticate', return_value=None):
18+
with mocker.patch.object(bl, '_set_heartbeat', return_value=None):
19+
with mocker.patch.object(bl, 'call_handler', return_value=None):
20+
result = bl.connect()
21+
assert result is True
22+
23+
def test_connect_exception(self, bl, mocker):
24+
with mocker.patch.object(bl, 'connected', return_value=False):
25+
with mocker.patch.object(bl, '_get_socket', return_value=None):
26+
with mocker.patch.object(bl, '_authenticate', side_effect=BlynkException()):
27+
with mocker.patch.object(bl, 'disconnect', return_value=None):
28+
with mocker.patch('time.sleep', return_value=None):
29+
mocker.spy(bl, 'disconnect')
30+
result = bl.connect(0.001)
31+
assert result is False
32+
assert bl.disconnect.call_count > 1
33+
34+
def test_connect_timeout(self, bl, mocker):
35+
bl._state = bl.CONNECTING
36+
with mocker.patch.object(bl, 'connected', return_value=False):
37+
result = bl.connect(0.001)
38+
assert result is False
39+
40+
def test_disconnect(self, bl, mocker):
41+
bl._socket = socket.socket()
42+
with mocker.patch('time.sleep', return_value=None):
43+
bl.disconnect('123')
44+
45+
def test_virtual_write(self, bl, mocker):
1446
with mocker.patch.object(bl, 'send', return_value=10):
15-
result = bl.notify('123')
47+
result = bl.virtual_write(20, 'va1', 'val2')
1648
assert result == 10
1749

18-
def test_email(self, bl, mocker):
50+
def test_virtual_sync(self, bl, mocker):
1951
with mocker.patch.object(bl, 'send', return_value=20):
20-
result = bl.email('1', '2', '3')
52+
result = bl.virtual_sync(20, 22)
2153
assert result == 20
2254

23-
def test_set_property(self, bl, mocker):
55+
def test_email(self, bl, mocker):
2456
with mocker.patch.object(bl, 'send', return_value=30):
25-
result = bl.set_property(1, '2', '3')
57+
result = bl.email('1', '2', '3')
2658
assert result == 30
2759

2860
def test_tweet(self, bl, mocker):
2961
with mocker.patch.object(bl, 'send', return_value=40):
3062
result = bl.tweet('123')
3163
assert result == 40
3264

33-
def test_virtual_sync(self, bl, mocker):
65+
def test_notify(self, bl, mocker):
3466
with mocker.patch.object(bl, 'send', return_value=50):
35-
result = bl.virtual_sync(20, 22)
67+
result = bl.notify('123')
3668
assert result == 50
3769

38-
def test_virtual_write(self, bl, mocker):
70+
def test_set_property(self, bl, mocker):
3971
with mocker.patch.object(bl, 'send', return_value=60):
40-
result = bl.virtual_write(20, 'va1', 'val2')
72+
result = bl.set_property(1, '2', '3')
4173
assert result == 60
74+
75+
def test_hadle_event(self, bl):
76+
bl._events = {}
77+
78+
@bl.handle_event("connect")
79+
def connect_handler():
80+
pass
81+
82+
@bl.handle_event("disconnect")
83+
def connect_handler():
84+
pass
85+
86+
assert 'connect' in bl._events.keys()
87+
assert 'disconnect' in bl._events.keys()
88+
89+
def test_read_wildcard_event(self, bl):
90+
bl._events = {}
91+
92+
@bl.handle_event('read v*')
93+
def read_pin_handler():
94+
pass
95+
96+
assert 'read v10' in bl._events.keys()
97+
assert len(bl._events.keys()) == bl.VPIN_MAX_NUM
98+
99+
def test_write_wildcard_event(self, bl):
100+
bl._events = {}
101+
102+
@bl.handle_event('write v*')
103+
def write_pin_handler():
104+
pass
105+
106+
assert 'write v5' in bl._events.keys()
107+
assert len(bl._events.keys()) == bl.VPIN_MAX_NUM
108+
109+
def test_call_handler(self, bl):
110+
bl._events = {}
111+
112+
@bl.handle_event('write v2')
113+
def write_pin_handler(arg1, kwarg1=None):
114+
bl._state = 'TEST{}{}'.format(arg1, kwarg1)
115+
116+
bl.call_handler('write v2', 12, kwarg1='34')
117+
assert bl._state == 'TEST1234'
118+
119+
def test_process_rsp(self, bl, mocker):
120+
mocker.spy(bl, 'log')
121+
bl.process(bl.MSG_RSP, 100, 200, [])
122+
assert bl.log.call_count == 1
123+
124+
def test_process_ping(self, bl, mocker):
125+
with mocker.patch.object(bl, 'send', return_value=None):
126+
mocker.spy(bl, 'send')
127+
bl.process(bl.MSG_PING, 100, 200, [])
128+
assert bl.send.call_count == 1
129+
130+
def test_process_internal(self, bl, mocker):
131+
bl._events = {}
132+
133+
@bl.handle_event('internal_5')
134+
def internal_handler(*args):
135+
bl._status = 'INTERNAL TEST{}'.format(*args)
136+
137+
with mocker.patch.object(bl, 'send', return_value=None):
138+
bl.process(bl.MSG_INTERNAL, 100, 200, ['int', 5, 1, 2])
139+
assert bl._status == 'INTERNAL TEST[1, 2]'
140+
141+
def test_process_write(self, bl, mocker):
142+
bl._events = {}
143+
144+
@bl.handle_event('write V4')
145+
def write_handler(pin, *values):
146+
bl._status = 'WRITE TEST{}'.format(*values)
147+
148+
with mocker.patch.object(bl, 'send', return_value=None):
149+
bl.process(bl.MSG_HW, 100, 200, ['vw', 4, 1, 2])
150+
assert bl._status == 'WRITE TEST[1, 2]'
151+
152+
def test_process_read(self, bl, mocker):
153+
bl._events = {}
154+
155+
@bl.handle_event('read V7')
156+
def read_handler(pin):
157+
bl._status = 'READ TEST{}'.format(pin)
158+
159+
with mocker.patch.object(bl, 'send', return_value=None):
160+
bl.process(bl.MSG_HW, 100, 200, ['vr', 7])
161+
assert bl._status == 'READ TEST7'

test/test_blynk_protocol.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# -*- coding: utf-8 -*-
2+
import sys
23
import pytest
34
from blynklib import Protocol, BlynkException
45

@@ -41,12 +42,14 @@ def test_pack_msg_no_args(self, pb):
4142
result = pb._pack_msg(msg_type, *args)
4243
assert result == b'\x0f\x00\x02\x00\x00'
4344

44-
# todo python2 compatibility issue
45-
# def test_pack_msg_unicode(self, pb):
46-
# msg_type = 20
47-
# args = ["ёж"]
48-
# result = pb._pack_msg(msg_type, *args)
49-
# assert result == b'\x14\x00\x02\x00\x04\xd1\x91\xd0\xb6'
45+
def test_pack_msg_unicode(self, pb):
46+
if sys.version_info[0] == 2:
47+
pytest.skip('Python2 unicode compatibility issue')
48+
49+
msg_type = 20
50+
args = ["ёж"]
51+
result = pb._pack_msg(msg_type, *args)
52+
assert result == b'\x14\x00\x02\x00\x04\xd1\x91\xd0\xb6'
5053

5154
def test_parse_response_msg_hw(self, pb):
5255
data = b'\x14\x00\x02\x00\x13test\x001234\x00745\x00abcde'

0 commit comments

Comments
 (0)
0