# Modbus integration-test fixture — pymodbus simulator. # # One service per profile. Bring up only the profile a test class needs; # they all bind :5020 on the host so can't run concurrently. The compose # `profiles:` feature gates which service spins up via `--profile `. # # Usage: # docker compose --profile standard up # docker compose --profile dl205 up # docker compose --profile mitsubishi up # docker compose --profile s7_1500 up services: standard: profiles: ["standard"] build: context: . dockerfile: Dockerfile image: otopcua-pymodbus:3.13.0 container_name: otopcua-pymodbus-standard restart: "no" ports: - "5020:5020" command: [ "pymodbus.simulator", "--modbus_server", "srv", "--modbus_device", "dev", "--json_file", "/fixtures/standard.json" ] dl205: profiles: ["dl205"] image: otopcua-pymodbus:3.13.0 build: context: . dockerfile: Dockerfile container_name: otopcua-pymodbus-dl205 restart: "no" ports: - "5020:5020" command: [ "pymodbus.simulator", "--modbus_server", "srv", "--modbus_device", "dev", "--json_file", "/fixtures/dl205.json" ] mitsubishi: profiles: ["mitsubishi"] image: otopcua-pymodbus:3.13.0 build: context: . dockerfile: Dockerfile container_name: otopcua-pymodbus-mitsubishi restart: "no" ports: - "5020:5020" command: [ "pymodbus.simulator", "--modbus_server", "srv", "--modbus_device", "dev", "--json_file", "/fixtures/mitsubishi.json" ] s7_1500: profiles: ["s7_1500"] image: otopcua-pymodbus:3.13.0 build: context: . dockerfile: Dockerfile container_name: otopcua-pymodbus-s7_1500 restart: "no" ports: - "5020:5020" command: [ "pymodbus.simulator", "--modbus_server", "srv", "--modbus_device", "dev", "--json_file", "/fixtures/s7_1500.json" ] # Exception-injection profile. Runs the standalone pure-stdlib Modbus/TCP # server shipped as exception_injector.py instead of the pymodbus # simulator — pymodbus naturally emits only exception codes 02 + 03, and # this profile extends integration coverage to the other codes the # driver's MapModbusExceptionToStatus table handles (01, 04, 05, 06, # 0A, 0B). Rules are driven by exception_injection.json. exception_injection: profiles: ["exception_injection"] image: otopcua-pymodbus:3.13.0 build: context: . dockerfile: Dockerfile container_name: otopcua-modbus-exception-injector restart: "no" ports: - "5020:5020" command: [ "python", "/fixtures/exception_injector.py", "--config", "/fixtures/exception_injection.json" ]