Skip to content

Commit 4330789

Browse files
committed
Test coverage server 100%.
1 parent 660e87b commit 4330789

File tree

6 files changed

+120
-15
lines changed

6 files changed

+120
-15
lines changed

pymodbus/server/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""**Server classes**."""
22

33
__all__ = [
4+
"ModbusBaseServer",
45
"ModbusSerialServer",
56
"ModbusSimulatorServer",
67
"ModbusTcpServer",
@@ -25,6 +26,7 @@
2526
ModbusTlsServer,
2627
ModbusUdpServer,
2728
)
29+
from pymodbus.server.base import ModbusBaseServer
2830
from pymodbus.server.simulator.http_server import ModbusSimulatorServer
2931
from pymodbus.server.simulator.main import get_commandline as get_simulator_commandline
3032
from pymodbus.server.startstop import (

pymodbus/server/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
class ModbusBaseServer(ModbusProtocol):
1919
"""Common functionality for all server classes."""
2020

21-
active_server: ModbusBaseServer | None
21+
active_server: ModbusBaseServer | None = None
2222

2323
def __init__( # pylint: disable=too-many-arguments
2424
self,

pymodbus/server/simulator/custom_actions.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

pymodbus/server/startstop.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,12 @@ async def ServerAsyncStop() -> None:
158158
await ModbusBaseServer.active_server.shutdown()
159159
ModbusBaseServer.active_server = None
160160

161-
162161
def ServerStop() -> None:
163162
"""Terminate server."""
164163
if not ModbusBaseServer.active_server:
165164
raise RuntimeError("Modbus server not running.")
166-
future = asyncio.run_coroutine_threadsafe(ServerAsyncStop(), ModbusBaseServer.active_server.loop)
167-
future.result(timeout=10 if os.name == 'nt' else 0.1)
165+
try:
166+
future = asyncio.run_coroutine_threadsafe(ServerAsyncStop(), ModbusBaseServer.active_server.loop)
167+
future.result(timeout=10 if os.name == 'nt' else 0.1)
168+
except TimeoutError:
169+
return

test/server/test_server_asyncio.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
ModbusServerContext,
1616
)
1717
from pymodbus.exceptions import NoSuchIdException
18-
from pymodbus.server import ModbusTcpServer, ModbusTlsServer, ModbusUdpServer
18+
from pymodbus.server import (
19+
ModbusTcpServer,
20+
ModbusTlsServer,
21+
ModbusUdpServer,
22+
)
1923

2024

2125
_logger = logging.getLogger()

test/server/test_startstop.py

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
"""Test server asyncio."""
2+
from unittest import mock
3+
4+
import pytest
5+
6+
from pymodbus.server import (
7+
ModbusBaseServer,
8+
ServerAsyncStop,
9+
ServerStop,
10+
StartAsyncSerialServer,
11+
StartAsyncTcpServer,
12+
StartAsyncTlsServer,
13+
StartAsyncUdpServer,
14+
StartSerialServer,
15+
StartTcpServer,
16+
StartTlsServer,
17+
StartUdpServer,
18+
)
19+
from pymodbus.datastore import ModbusDeviceContext, ModbusServerContext
20+
from pymodbus.transport import NULLMODEM_HOST
21+
22+
SERV_ADDR = ("127.0.0.1", 0)
23+
24+
25+
class TestStartStopServer:
26+
"""Test for the pymodbus.server.startstop module."""
27+
28+
async def test_ServerAsyncStop(self):
29+
"""Test ServerAsyncStop."""
30+
with pytest.raises(RuntimeError):
31+
await ServerAsyncStop()
32+
with pytest.raises(RuntimeError):
33+
ServerStop()
34+
ModbusBaseServer.active_server = mock.AsyncMock()
35+
await ServerAsyncStop()
36+
ModbusBaseServer.active_server = mock.AsyncMock()
37+
ServerStop()
38+
ModbusBaseServer.active_server = None
39+
40+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
41+
async def test_StartAsyncSerialServer(self, mock_method):
42+
"""Test StartAsyncSerialServer."""
43+
mock_method.return_value=True
44+
await StartAsyncSerialServer(
45+
ModbusServerContext(devices=ModbusDeviceContext(), single=True),
46+
port="/dev/tty01",
47+
)
48+
49+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
50+
async def test_StartAsyncTcpServer(self, mock_method):
51+
"""Test StartAsyncTcpServer."""
52+
mock_method.return_value=True
53+
await StartAsyncTcpServer(
54+
ModbusServerContext(devices=ModbusDeviceContext(), single=True)
55+
)
56+
57+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
58+
async def test_StartAsyncTlsServer(self, mock_method):
59+
"""Test StartAsyncTlsServer."""
60+
mock_method.return_value=True
61+
await StartAsyncTlsServer(
62+
ModbusServerContext(devices=ModbusDeviceContext(), single=True)
63+
)
64+
65+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
66+
async def test_StartAsyncUdpServer(self, mock_method):
67+
"""Test StartAsyncUdpServer."""
68+
mock_method.return_value=True
69+
await StartAsyncUdpServer(
70+
ModbusServerContext(devices=ModbusDeviceContext(), single=True)
71+
)
72+
73+
def test_ServerStop(self):
74+
"""Test ServerStop."""
75+
76+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
77+
def test_StartSerialServer(self, mock_method):
78+
"""Test StartSerialServer."""
79+
mock_method.return_value=True
80+
StartSerialServer(
81+
ModbusServerContext(devices=ModbusDeviceContext(), single=True),
82+
port="/dev/tty01",
83+
)
84+
85+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
86+
def test_StartTcpServer(self, mock_method):
87+
"""Test StartTcpServer."""
88+
mock_method.return_value=True
89+
StartTcpServer(
90+
ModbusServerContext(devices=ModbusDeviceContext(), single=True)
91+
)
92+
93+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
94+
def test_StartTlsServer(self, mock_method):
95+
"""Test StartTlsServer."""
96+
mock_method.return_value=True
97+
StartTlsServer(
98+
ModbusServerContext(devices=ModbusDeviceContext(), single=True)
99+
)
100+
101+
@mock.patch('pymodbus.server.ModbusBaseServer.serve_forever')
102+
def test_StartUdpServer(self, mock_method):
103+
"""Test StartUdpServer."""
104+
mock_method.return_value=True
105+
StartUdpServer(
106+
ModbusServerContext(devices=ModbusDeviceContext(), single=True)
107+
)

0 commit comments

Comments
 (0)