PY Modbus Test Suite
Version updated for https://github.com/php-modbus/py-modbus-test-suite to version v1.0.0.
- This action is used across all versions by ? repositories.
Action Type
This is a Composite action.
Go to the GitHub Marketplace to find the latest changes.
What’s Changed
v1.0.0 — 2026-07-07
Initial Release
Docker-based Modbus server simulator suite for testing Modbus clients and
SCADA systems, built on pymodbus (pinned 3.13.1).
Server Infrastructure
- 6 pre-configured endpoints via Docker Compose from a single image: Modbus TCP (host port 502), RTU over TCP (5021), ASCII over TCP (5022), UDP (5023), Modbus/TCP Security TLS (host port 802), RTU on virtual serial via RFC2217 (5024, raw 5025).
- Non-root container — binds unprivileged in-container ports (5020+); canonical 502/802 come from host port mappings.
- Health check via
python -m mbsim.healthcheck— readshr[0]of the health device (unit 1, expected1234), sodocker compose up --waitgates on real Modbus readiness. - Baked-in config and certs — GitHub Actions service containers cannot mount checkout files; override at runtime with
MBSIM_MAP_B64/MBSIM_SCENARIO_B64or a volume on/app/config.
Register Map & Generators
- YAML register map (
config/default-map.yaml) defining units 1–3 with holding registers, input registers, coils and discrete inputs; multipledevicesentries simulate a multi-drop bus behind one endpoint. - 4 deterministic generators —
ramp,sine,random_walk,toggle: tick-based, seeded per cell from the mapseed— same map, same history, every run.
Fault Injection
- Scenario YAML (
config/scenarios/*.yaml) attaching deterministic faults per rule; matchersdevice_id,function_code,every_nth,after_n_requests,times— counting is request-order based, never wall clock. - 7 fault actions —
exception,no_response,truncate,corrupt(CRC/LRC/MBAP),garbage,delay,disconnect. - 7 pre-configured fault services behind the
faultscompose profile (ports 5100–5106):tcp-silent,tcp-slow,tcp-exceptions,tcp-drop,rtu-tcp-badcrc,tcp-truncated,tcp-garbage. - Health-safety guard — rules that could hit holding-register reads on the health device are rejected at startup.
CI/CD
- GitHub Actions composite action (
action.yml) for one-step CI integration — inputsservices,faults,wait-timeout; outputcerts-dirfor TLS CA pinning. - Docker image published to
ghcr.io/php-modbus/py-modbus-test-suite(multi-arch amd64/arm64) by.github/workflows/release.yml, gated on the smoke suite. - CI-optimized compose file (
docker-compose.ci.yml) with no-restart policy.
Documentation
- Documentation in
docs/covering setup, endpoints, register map, generators, fault injection, environment variables, serial usage, and CI integration.