Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release corrections. #1586

Merged
merged 1 commit into from
Jun 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Supported versions

Version `2.5.3 <https://github.com/pymodbus-dev/pymodbus/releases/tag/v2.5.3>`_ is the last 2.x release (Supports python >= 2.7, no longer supported).

Version `3.3.0 <https://github.com/pymodbus-dev/pymodbus/releases/tag/v3.3.1>`_ is the current release (Supports Python >= 3.8).
Version `3.3.1 <https://github.com/pymodbus-dev/pymodbus/releases/tag/v3.3.1>`_ is the current release (Supports Python >= 3.8).

.. important::
All API changes after 3.0.0 are documented in `API_changes.rst <https://github.com/pymodbus-dev/pymodbus/blob/dev/API_changes.rst>`_
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
"""Pymodbus Simulator Example.
"""Pymodbus datastore simulator Example.
An example of using simulator datastore with json interface.
Expand All @@ -17,6 +17,8 @@
The corresponding client can be started as:
python3 client_sync.py
.. tip:: This is NOT the pymodbus simulator, that is started as pymodbus.simulator.
"""
import argparse
import asyncio
Expand Down
2 changes: 1 addition & 1 deletion test/test_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@
from examples.client_custom_msg import run_custom_client
from examples.client_payload import run_payload_calls
from examples.client_test import run_async_calls as run_client_test
from examples.datastore_simulator import run_server_simulator, setup_simulator
from examples.message_generator import generate_messages
from examples.message_parser import parse_messages
from examples.server_async import run_async_server, setup_server
from examples.server_callback import run_callback_server
from examples.server_payload import setup_payload_server
from examples.server_simulator import run_server_simulator, setup_simulator
from examples.server_updating import run_updating_server, setup_updating_server
from pymodbus import pymodbus_apply_logging_config
from pymodbus.server import ServerAsyncStop
Expand Down
38 changes: 20 additions & 18 deletions test/transport/test_reconnect.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,53 +12,55 @@ class TestReconnectTransport:
async def test_no_reconnect_call(self, transport, commparams):
"""Test connection_lost()."""
transport.setup_tcp(False, "localhost", BASE_PORT + 1)
transport.call_connect_listen = mock.AsyncMock(return_value=(None, None))
mocker = mock.AsyncMock(return_value=(None, None))
transport.loop.create_connection = mocker
transport.connection_made(mock.Mock())
assert not transport.call_connect_listen.call_count
assert not mocker.call_count
assert transport.reconnect_delay_current == commparams.reconnect_delay
transport.connection_lost(RuntimeError("Connection lost"))
assert not transport.call_connect_listen.call_count
assert not mocker.call_count
assert transport.reconnect_delay_current == commparams.reconnect_delay
transport.close()

async def test_reconnect_call(self, transport, commparams):
"""Test connection_lost()."""
transport.setup_tcp(False, "localhost", BASE_PORT + 2)
transport.call_connect_listen = mock.AsyncMock(return_value=(None, None))
mocker = mock.AsyncMock(return_value=(None, None))
transport.loop.create_connection = mocker
transport.connection_made(mock.Mock())
transport.connection_lost(RuntimeError("Connection lost"))
await asyncio.sleep(transport.reconnect_delay_current * 1.2)
assert transport.call_connect_listen.call_count == 1
await asyncio.sleep(transport.reconnect_delay_current * 1.8)
assert mocker.call_count == 1
assert transport.reconnect_delay_current == commparams.reconnect_delay * 2
transport.close()

async def test_multi_reconnect_call(self, transport, commparams):
"""Test connection_lost()."""
transport.setup_tcp(False, "localhost", BASE_PORT + 3)
transport.call_connect_listen = mock.AsyncMock(return_value=(None, None))
mocker = mock.AsyncMock(return_value=(None, None))
transport.loop.create_connection = mocker
transport.connection_made(mock.Mock())
transport.connection_lost(RuntimeError("Connection lost"))
await asyncio.sleep(transport.reconnect_delay_current * 1.2)
assert transport.call_connect_listen.call_count == 1
await asyncio.sleep(transport.reconnect_delay_current * 1.8)
assert mocker.call_count == 1
assert transport.reconnect_delay_current == commparams.reconnect_delay * 2
await asyncio.sleep(transport.reconnect_delay_current * 1.2)
assert transport.call_connect_listen.call_count == 2
await asyncio.sleep(transport.reconnect_delay_current * 1.8)
assert mocker.call_count == 2
assert transport.reconnect_delay_current == commparams.reconnect_delay_max
await asyncio.sleep(transport.reconnect_delay_current * 1.2)
assert transport.call_connect_listen.call_count == 3
await asyncio.sleep(transport.reconnect_delay_current * 1.8)
assert mocker.call_count >= 3
assert transport.reconnect_delay_current == commparams.reconnect_delay_max
transport.close()

async def test_reconnect_call_ok(self, transport, commparams):
"""Test connection_lost()."""
transport.setup_tcp(False, "localhost", BASE_PORT + 4)
transport.call_connect_listen = mock.AsyncMock(
return_value=(mock.Mock(), mock.Mock())
)
mocker = mock.AsyncMock(return_value=(mock.Mock(), mock.Mock()))
transport.loop.create_connection = mocker
transport.connection_made(mock.Mock())
transport.connection_lost(RuntimeError("Connection lost"))
await asyncio.sleep(transport.reconnect_delay_current * 1.2)
assert transport.call_connect_listen.call_count == 1
await asyncio.sleep(transport.reconnect_delay_current * 1.8)
assert mocker.call_count == 1
assert transport.reconnect_delay_current == commparams.reconnect_delay * 2
assert not transport.reconnect_task
transport.close()