# pymodbus simulator container for the Modbus integration suite.
#
# Pinned base + package version so the fixture surface is reproducible —
# matches the version referenced in docs/drivers/Modbus-Test-Fixture.md.
FROM python:3.12-slim-bookworm

LABEL org.opencontainers.image.source="https://github.com/dohertj2/lmxopcua" \
      org.opencontainers.image.description="pymodbus simulator for OtOpcUa Modbus driver integration tests"

RUN pip install --no-cache-dir "pymodbus[simulator]==3.13.0"

# Ship every profile in the image so one container can serve whichever
# family a test run needs; the compose file picks which JSON is active via
# the command override.
WORKDIR /fixtures
COPY profiles/ /fixtures/

# Standalone exception-injection server (pure Python stdlib — no pymodbus
# dependency). Speaks raw Modbus/TCP and emits arbitrary exception codes
# per rules in exception_injection.json. Drives the `exception_injection`
# compose profile. See Docker/README.md §exception injection.
COPY exception_injector.py /fixtures/

EXPOSE 5020

# Default to the standard profile; docker-compose.yml overrides per service.
# --http_port intentionally omitted; pymodbus 3.13's web UI binds on a
# container-local default we don't publish, so it's not reachable from the
# host and costs nothing.
CMD ["pymodbus.simulator", \
     "--modbus_server", "srv", \
     "--modbus_device",  "dev", \
     "--json_file",      "/fixtures/standard.json"]
