Skip to content

Commit 3844b02

Browse files
committed
Refactor system tests with helpers
1 parent 1ef6035 commit 3844b02

File tree

6 files changed

+54
-44
lines changed

6 files changed

+54
-44
lines changed

tests/system/responses/test_exception_async_responses.py

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22
import struct
33
from functools import partial
44

5-
from ..validators import validate_response_mbap
5+
from ..validators import validate_response_mbap, validate_response_error
66
from umodbus.client import tcp
77

88

99
pytestmark = pytest.mark.asyncio
1010

1111

12+
async def req_rep(adu, reader, writer):
13+
writer.write(adu)
14+
await writer.drain()
15+
return await reader.read(1024)
16+
17+
1218
@pytest.mark.parametrize('function_code, quantity', [
1319
(1, 0),
1420
(2, 0),
@@ -20,20 +26,17 @@
2026
(4, 0x007D + 1),
2127
])
2228
async def test_request_returning_invalid_data_value_error(async_tcp_streams, mbap, function_code,
23-
quantity):
29+
quantity):
2430
""" Validate response PDU of request returning exception response with
2531
error code 3.
2632
"""
27-
function_code, starting_address, quantity = (function_code, 0, quantity)
33+
starting_address = 0
2834
adu = mbap + struct.pack('>BHH', function_code, starting_address, quantity)
2935

30-
reader, writer = async_tcp_streams
31-
writer.write(adu)
32-
await writer.drain()
33-
resp = await reader.read(1024)
36+
resp = await req_rep(adu, *async_tcp_streams)
3437

3538
validate_response_mbap(mbap, resp)
36-
assert struct.unpack('>BB', resp[-2:]) == (0x80 + function_code, 3)
39+
validate_response_error(resp, function_code, 3)
3740

3841

3942
@pytest.mark.parametrize('function', [
@@ -55,13 +58,10 @@ async def test_request_returning_invalid_data_address_error(async_tcp_streams, f
5558
mbap = adu[:7]
5659
function_code = struct.unpack('>B', adu[7:8])[0]
5760

58-
reader, writer = async_tcp_streams
59-
writer.write(adu)
60-
await writer.drain()
61-
resp = await reader.read(1024)
61+
resp = await req_rep(adu, *async_tcp_streams)
6262

6363
validate_response_mbap(mbap, resp)
64-
assert struct.unpack('>BB', resp[-2:]) == (0x80 + function_code, 2)
64+
validate_response_error(resp, function_code, 2)
6565

6666

6767
@pytest.mark.parametrize('function', [
@@ -83,10 +83,7 @@ async def test_request_returning_server_device_failure_error(async_tcp_streams,
8383
mbap = adu[:7]
8484
function_code = struct.unpack('>B', adu[7:8])[0]
8585

86-
reader, writer = async_tcp_streams
87-
writer.write(adu)
88-
await writer.drain()
89-
resp = await reader.read(1024)
86+
resp = await req_rep(adu, *async_tcp_streams)
9087

9188
validate_response_mbap(mbap, resp)
92-
assert struct.unpack('>BB', resp[-2:]) == (0x80 + function_code, 4)
89+
validate_response_error(resp, function_code, 4)

tests/system/responses/test_exception_async_rtu_responses.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import struct
33
from functools import partial
44

5-
from ..validators import validate_response_mbap
5+
from ..validators import validate_response_error
66

77
from umodbus.client.serial import rtu
88
from umodbus.client.serial.redundancy_check import (get_crc, validate_crc,
@@ -12,6 +12,12 @@
1212
pytestmark = pytest.mark.asyncio
1313

1414

15+
async def req_rep(adu, reader, writer, serial_port):
16+
writer.write(adu)
17+
await writer.drain()
18+
return await reader.read(serial_port.in_waiting)
19+
20+
1521
@pytest.mark.parametrize('function_code, quantity', [
1622
(1, 0),
1723
(2, 0),
@@ -33,12 +39,10 @@ async def test_request_returning_invalid_data_value_error(
3339
starting_address, quantity))
3440

3541
reader, writer = async_serial_streams
36-
writer.write(adu)
37-
await writer.drain()
38-
resp = await reader.read(rtu_server.serial_port.in_waiting)
42+
resp = await req_rep(adu, reader, writer, rtu_server.serial_port)
3943

4044
validate_crc(resp)
41-
assert struct.unpack('>BB', resp[1:-2]) == (0x80 + function_code, 3)
45+
validate_response_error(resp[:-2], function_code, 3)
4246

4347

4448
@pytest.mark.parametrize('function', [
@@ -60,12 +64,10 @@ async def test_request_returning_invalid_data_address_error(rtu_server, async_se
6064
function_code = struct.unpack('>B', adu[1:2])[0]
6165

6266
reader, writer = async_serial_streams
63-
writer.write(adu)
64-
await writer.drain()
65-
resp = await reader.read(rtu_server.serial_port.in_waiting)
67+
resp = await req_rep(adu, reader, writer, rtu_server.serial_port)
6668

6769
validate_crc(resp)
68-
assert struct.unpack('>BB', resp[1:-2]) == (0x80 + function_code, 2)
70+
validate_response_error(resp[:-2], function_code, 2)
6971

7072

7173
@pytest.mark.parametrize('function', [
@@ -87,9 +89,8 @@ async def test_request_returning_server_device_failure_error(rtu_server, async_s
8789
function_code = struct.unpack('>B', adu[1:2])[0]
8890

8991
reader, writer = async_serial_streams
90-
writer.write(adu)
91-
await writer.drain()
92-
resp = await reader.read(rtu_server.serial_port.in_waiting)
92+
resp = await req_rep(adu, reader, writer, rtu_server.serial_port)
9393

9494
validate_crc(resp)
95-
assert struct.unpack('>BB', resp[1:-2]) == (0x80 + function_code, 4)
95+
validate_response_error(resp[:-2], function_code, 4)
96+

tests/system/responses/test_exception_responses.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import struct
33
from functools import partial
44

5-
from ..validators import validate_response_mbap
5+
from ..validators import validate_response_mbap, validate_response_error
66
from umodbus.client import tcp
77

88

@@ -28,7 +28,7 @@ def test_request_returning_invalid_data_value_error(sock, mbap, function_code,
2828
resp = sock.recv(1024)
2929

3030
validate_response_mbap(mbap, resp)
31-
assert struct.unpack('>BB', resp[-2:]) == (0x80 + function_code, 3)
31+
validate_response_error(resp, function_code, 3)
3232

3333

3434
@pytest.mark.parametrize('function', [
@@ -54,7 +54,7 @@ def test_request_returning_invalid_data_address_error(sock, function):
5454
resp = sock.recv(1024)
5555

5656
validate_response_mbap(mbap, resp)
57-
assert struct.unpack('>BB', resp[-2:]) == (0x80 + function_code, 2)
57+
validate_response_error(resp, function_code, 2)
5858

5959

6060
@pytest.mark.parametrize('function', [
@@ -80,4 +80,4 @@ def test_request_returning_server_device_failure_error(sock, function):
8080
resp = sock.recv(1024)
8181

8282
validate_response_mbap(mbap, resp)
83-
assert struct.unpack('>BB', resp[-2:]) == (0x80 + function_code, 4)
83+
validate_response_error(resp, function_code, 4)

tests/system/responses/test_exception_rtu_responses.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
import struct
33
from functools import partial
44

5-
from ..validators import validate_response_mbap
6-
5+
from ..validators import validate_response_mbap, validate_response_error
76
from umodbus.client.serial import rtu
87
from umodbus.client.serial.redundancy_check import (get_crc, validate_crc,
98
add_crc, CRCError)
@@ -45,7 +44,7 @@ def test_request_returning_invalid_data_value_error(rtu_server, function_code,
4544
resp = rtu_server.serial_port.read(rtu_server.serial_port.in_waiting)
4645

4746
validate_crc(resp)
48-
assert struct.unpack('>BB', resp[1:-2]) == (0x80 + function_code, 3)
47+
validate_response_error(resp[:-2], function_code, 3)
4948

5049

5150
@pytest.mark.parametrize('function', [
@@ -71,7 +70,7 @@ def test_request_returning_invalid_data_address_error(rtu_server, function):
7170
resp = rtu_server.serial_port.read(rtu_server.serial_port.in_waiting)
7271

7372
validate_crc(resp)
74-
assert struct.unpack('>BB', resp[1:-2]) == (0x80 + function_code, 2)
73+
validate_response_error(resp[:-2], function_code, 2)
7574

7675

7776
@pytest.mark.parametrize('function', [
@@ -97,4 +96,4 @@ def test_request_returning_server_device_failure_error(rtu_server, function):
9796
resp = rtu_server.serial_port.read(rtu_server.serial_port.in_waiting)
9897

9998
validate_crc(resp)
100-
assert struct.unpack('>BB', resp[1:-2]) == (0x80 + function_code, 4)
99+
validate_response_error(resp[:-2], function_code, 4)

tests/system/responses/test_succesful_async_responses.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ async def test_response_on_single_bit_value_read_requests(async_tcp_streams, fun
2727
""" Validate response of a succesful Read Coils or Read Discrete Inputs
2828
request.
2929
"""
30-
slave_id, starting_address, quantity = (1, 0, 10)
30+
slave_id = 1
31+
starting_address = 0
32+
quantity = 10
3133
req_adu = function(slave_id, starting_address, quantity)
3234

3335
assert await tcp.async_send_message(req_adu, *async_tcp_streams) == [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
@@ -41,7 +43,9 @@ async def test_response_on_multi_bit_value_read_requests(async_tcp_streams, func
4143
""" Validate response of a succesful Read Holding Registers or Read
4244
Input Registers request.
4345
"""
44-
slave_id, starting_address, quantity = (1, 0, 10)
46+
slave_id = 1
47+
starting_address = 0
48+
quantity = 10
4549
req_adu = function(slave_id, starting_address, quantity)
4650

4751
assert await tcp.async_send_message(req_adu, *async_tcp_streams) ==\
@@ -56,7 +60,9 @@ async def test_response_single_value_write_request(async_tcp_streams, function,
5660
""" Validate responde of succesful Read Single Coil and Read Single
5761
Register request.
5862
"""
59-
slave_id, starting_address, value = (1, 0, value)
63+
slave_id = 1
64+
starting_address = 0
65+
quantity = 10
6066
req_adu = function(slave_id, starting_address, value)
6167

6268
assert await tcp.async_send_message(req_adu, *async_tcp_streams) == value
@@ -72,7 +78,9 @@ async def test_async_response_multi_value_write_request(async_tcp_streams, funct
7278
7379
Both requests write 2 values, starting address is 0.
7480
"""
75-
slave_id, starting_address = (1, 0)
81+
slave_id = 1
82+
starting_address = 0
83+
quantity = 10
7684
req_adu = function(slave_id, starting_address, values)
7785

7886
assert await tcp.async_send_message(req_adu, *async_tcp_streams) == 2

tests/system/validators.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ def validate_response_mbap(request_mbap, response):
3232
validate_unit_id(request_mbap, response)
3333

3434

35+
def validate_response_error(resp, function_code, error_code):
36+
assert struct.unpack('>BB', resp[-2:]) == \
37+
(0x80 + function_code, error_code)
38+
39+
3540
def validate_function_code(request, response):
3641
""" Validate if Function code in request and response equal. """
3742
assert struct.unpack('>B', request[7:8])[0] == \

0 commit comments

Comments
 (0)