Skip to content

Commit 9f47a32

Browse files
authored
Adapt serial tests. (#1094)
1 parent aee77e8 commit 9f47a32

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

pymodbus/server/async_io.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,7 @@ def __init__(
817817

818818
self.protocol = None
819819
self.transport = None
820+
self.server = None
820821
self.control = ModbusControlBlock()
821822
identity = kwargs.get("identity")
822823
if isinstance(identity, ModbusDeviceIdentification):
@@ -826,10 +827,6 @@ async def start(self):
826827
"""Start connecting."""
827828
await self._connect()
828829

829-
def _protocol_factory(self):
830-
"""Return protocol factory."""
831-
return self.handler(self)
832-
833830
async def _delayed_connect(self):
834831
"""Delay connect."""
835832
await asyncio.sleep(self.reconnect_delay)
@@ -839,10 +836,12 @@ async def _connect(self):
839836
"""Connect."""
840837
if self.reconnecting_task is not None:
841838
self.reconnecting_task = None
839+
if self.device.startswith("socket:"):
840+
return
842841
try:
843842
self.transport, self.protocol = await create_serial_connection(
844843
asyncio.get_event_loop(),
845-
self._protocol_factory,
844+
self.handler(self),
846845
self.device,
847846
baudrate=self.baudrate,
848847
bytesize=self.bytesize,
@@ -887,12 +886,24 @@ def _check_reconnect(self):
887886

888887
async def serve_forever(self):
889888
"""Start endless loop."""
889+
if self.device.startswith("socket:"):
890+
# Socket server means listen so start a socket server
891+
parts = self.device[7:].split(':')
892+
host_port = ('', int(parts[1]))
893+
self.server = await asyncio.get_event_loop().create_server(
894+
lambda: self.handler(self),
895+
*host_port,
896+
reuse_address=True,
897+
reuse_port=True,
898+
start_serving=True,
899+
backlog=20,
900+
)
901+
await self.server.serve_forever()
902+
return
903+
890904
while True:
891905
await asyncio.sleep(360)
892906

893-
self.protocol = None
894-
self.transport = None
895-
896907

897908
# --------------------------------------------------------------------------- #
898909
# Creation Factories

test/test_examples.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,15 @@
2727

2828
_logger = logging.getLogger()
2929
_logger.setLevel("DEBUG")
30-
3130
TEST_COMMS_FRAMER = [
3231
("tcp", ModbusSocketFramer, 5021),
3332
("tcp", ModbusRtuFramer, 5022),
3433
("tls", ModbusTlsFramer, 5023),
3534
("udp", ModbusSocketFramer, 5024),
3635
("udp", ModbusRtuFramer, 5025),
37-
("serial", ModbusRtuFramer, "dummy"),
38-
("serial", ModbusAsciiFramer, "dummy"),
39-
("serial", ModbusBinaryFramer, "dummy"),
36+
("serial", ModbusRtuFramer, "socket://127.0.0.1:5026"),
37+
("serial", ModbusAsciiFramer, "socket://127.0.0.1:5027"),
38+
("serial", ModbusBinaryFramer, "socket://127.0.0.1:5028"),
4039
]
4140

4241

@@ -59,13 +58,12 @@ async def _helper_server(
5958
test_port,
6059
):
6160
"""Run server."""
62-
if test_comm in ("serial"):
63-
yield
64-
return
6561
args = Commandline
6662
args.comm = test_comm
6763
args.framer = test_framer
68-
args.port = test_port + test_port_offset
64+
args.port = test_port
65+
if isinstance(test_port, int):
66+
args.port += test_port_offset
6967
asyncio.create_task(run_async_server(args))
7068
await asyncio.sleep(0.1)
7169
yield
@@ -121,7 +119,6 @@ def test_exp_sync_simple(
121119
thread.start()
122120
sleep(1)
123121
ServerStop()
124-
_logger.error("jan igen")
125122

126123

127124
@pytest.mark.parametrize("test_port_offset", [30])
@@ -151,5 +148,7 @@ async def test_exp_async_framer( # pylint: disable=unused-argument
151148
args = Commandline
152149
args.framer = test_framer
153150
args.comm = test_comm
154-
args.port = test_port + test_port_offset
151+
args.port = test_port
152+
if isinstance(test_port, int):
153+
args.port += test_port_offset
155154
await run_client(test_comm, test_type, args=args)

0 commit comments

Comments
 (0)