Skip to content

Commit c1418c0

Browse files
author
Francesco Fiorentino
committed
Add unit test for retry parameter in send() method
1 parent 437d4f8 commit c1418c0

File tree

2 files changed

+73
-11
lines changed

2 files changed

+73
-11
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@
66
/xmodem.egg-info
77
/.coverage
88
/.tox
9+
/.cache
10+
/.idea
911
*.py.swp

test/unit/test_xmodem.py

Lines changed: 71 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
import StringIO.StringIO as BytesIO
1111

1212
# local
13-
import xmodem
13+
from xmodem import XMODEM
14+
from xmodem import NAK, CRC, ACK
1415

1516
# 3rd-party
1617
import pytest
@@ -24,24 +25,83 @@ def dummy_putc(data, timeout=1):
2425
return 0
2526

2627

28+
def test_xmodem_bad_mode():
29+
# given,
30+
mode = 'XXX'
31+
modem = XMODEM(getc=dummy_getc, putc=dummy_putc, mode=mode)
32+
# exercise
33+
with pytest.raises(ValueError):
34+
status = modem.send(BytesIO(b'dummy-stream'))
35+
36+
2737
@pytest.mark.parametrize('mode', ['xmodem', 'xmodem1k'])
2838
def test_xmodem_dummy_fails_send(mode):
2939
# given,
30-
modem = xmodem.XMODEM(getc=dummy_getc,
31-
putc=dummy_putc,
32-
mode=mode)
40+
modem = XMODEM(getc=dummy_getc, putc=dummy_putc, mode=mode)
3341
# exercise
3442
status = modem.send(BytesIO(b'dummy-stream'))
3543
# verify
3644
assert not status, ("Expected value of status `False'")
3745

3846

39-
def test_xmodem_bad_mode():
47+
@pytest.mark.parametrize('mode', ['xmodem', 'xmodem1k'])
48+
@pytest.mark.parametrize('stream_data', [BytesIO(b'dummy-stream ' * 17),
49+
BytesIO(b'dummy-stream ' * 1000)])
50+
def test_xmodem_send_exceed_maximum_number_of_resend(mode, stream_data):
4051
# given,
41-
mode = 'XXX'
42-
modem = xmodem.XMODEM(getc=dummy_getc,
43-
putc=dummy_putc,
44-
mode=mode)
52+
max_resend = 16
53+
54+
def generator():
55+
if mode == 'xmodem':
56+
yield NAK
57+
else:
58+
yield CRC
59+
60+
if mode == 'xmodem':
61+
yield ACK
62+
63+
for i in range(max_resend + 1):
64+
yield None
65+
66+
mock = generator()
67+
68+
def getc(size, timeout=1):
69+
x = mock.next()
70+
print("mock_getc => {}".format(x),)
71+
return x
72+
73+
xmodem = XMODEM(getc=getc, putc=dummy_putc, mode=mode)
4574
# exercise
46-
with pytest.raises(ValueError):
47-
status = modem.send(BytesIO(b'dummy-stream'))
75+
assert not xmodem.send(stream=stream_data, retry=max_resend)
76+
77+
78+
@pytest.mark.parametrize('mode', ['xmodem', 'xmodem1k'])
79+
@pytest.mark.parametrize('stream_data', [BytesIO(b'dummy-stream ' * 17),
80+
BytesIO(b'dummy-stream ' * 1000)])
81+
def test_xmodem_send_fails_once_each_packet(mode, stream_data):
82+
# given,
83+
max_resend = 16
84+
85+
def generator():
86+
if mode == 'xmodem':
87+
yield NAK
88+
else:
89+
yield CRC
90+
91+
while True:
92+
yield None
93+
yield ACK
94+
95+
mock = generator()
96+
97+
def getc(size, timeout=1):
98+
x = mock.next()
99+
print("mock_getc => {}".format(x))
100+
return x
101+
102+
def putc(data, timeout=1):
103+
return 0
104+
105+
xmodem = XMODEM(getc=getc, putc=dummy_putc, mode=mode)
106+
# exercise
107+
assert xmodem.send(stream=stream_data, retry=max_resend)

0 commit comments

Comments
 (0)