Skip to content

Commit c348d96

Browse files
committed
Adapt serial tests.
1 parent aee77e8 commit c348d96

File tree

2 files changed

+29
-19
lines changed

2 files changed

+29
-19
lines changed

pymodbus/server/async_io.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -826,10 +826,6 @@ async def start(self):
826826
"""Start connecting."""
827827
await self._connect()
828828

829-
def _protocol_factory(self):
830-
"""Return protocol factory."""
831-
return self.handler(self)
832-
833829
async def _delayed_connect(self):
834830
"""Delay connect."""
835831
await asyncio.sleep(self.reconnect_delay)
@@ -839,10 +835,12 @@ async def _connect(self):
839835
"""Connect."""
840836
if self.reconnecting_task is not None:
841837
self.reconnecting_task = None
838+
if self.device.startswith("socket:"):
839+
return
842840
try:
843841
self.transport, self.protocol = await create_serial_connection(
844842
asyncio.get_event_loop(),
845-
self._protocol_factory,
843+
self.handler(self),
846844
self.device,
847845
baudrate=self.baudrate,
848846
bytesize=self.bytesize,
@@ -887,12 +885,26 @@ def _check_reconnect(self):
887885

888886
async def serve_forever(self):
889887
"""Start endless loop."""
888+
if self.device.startswith("socket:"):
889+
# Socket server means listen so start a socket server
890+
parts = self.device[7:].split(':')
891+
host_port = ('', int(parts[1]))
892+
await asyncio.get_event_loop().create_server(
893+
lambda: self.handler(self),
894+
*host_port,
895+
reuse_address=True,
896+
reuse_port=True,
897+
start_serving=True,
898+
backlog=20,
899+
)
900+
try:
901+
await self.server.serve_forever()
902+
except asyncio.exceptions.CancelledError:
903+
raise
904+
890905
while True:
891906
await asyncio.sleep(360)
892907

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

897909
# --------------------------------------------------------------------------- #
898910
# Creation Factories

test/test_examples.py

Lines changed: 9 additions & 11 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

@@ -50,7 +49,6 @@ class Commandline:
5049
store = "sequential"
5150
slaves = None
5251

53-
5452
@pytest_asyncio.fixture(name="mock_run_server")
5553
async def _helper_server(
5654
test_comm,
@@ -59,13 +57,12 @@ async def _helper_server(
5957
test_port,
6058
):
6159
"""Run server."""
62-
if test_comm in ("serial"):
63-
yield
64-
return
6560
args = Commandline
6661
args.comm = test_comm
6762
args.framer = test_framer
68-
args.port = test_port + test_port_offset
63+
args.port = test_port
64+
if isinstance(test_port, int):
65+
args.port += test_port_offset
6966
asyncio.create_task(run_async_server(args))
7067
await asyncio.sleep(0.1)
7168
yield
@@ -121,7 +118,6 @@ def test_exp_sync_simple(
121118
thread.start()
122119
sleep(1)
123120
ServerStop()
124-
_logger.error("jan igen")
125121

126122

127123
@pytest.mark.parametrize("test_port_offset", [30])
@@ -151,5 +147,7 @@ async def test_exp_async_framer( # pylint: disable=unused-argument
151147
args = Commandline
152148
args.framer = test_framer
153149
args.comm = test_comm
154-
args.port = test_port + test_port_offset
150+
args.port = test_port
151+
if isinstance(test_port, int):
152+
args.port += test_port_offset
155153
await run_client(test_comm, test_type, args=args)

0 commit comments

Comments
 (0)