Answer the broker-selection question for the device-access plane
mechanically: MQTT is an open wire protocol and the driver talks a
standard Paho client, so any conformant broker is a drop-in selection —
EMQX, Mosquitto, HiveMQ, NanoMQ, VerneMQ — via one URL
(dc3.driver.mqtt.url), no adapter layer needed.
MqttVendorNeutralityIT proves the property: the production option
builder (MqttUtil) plus the same client code performs a
publish/subscribe round trip against HiveMQ CE and Eclipse Mosquitto,
differing only in the broker URL. The compose default (dc3-emqx) is a
deployment choice; the guide's new device-access section documents the
URL-only selection, the no-vendor-code guardrail and the MQTT 3.1.1
dialect note (MQTT 5-only features belong to the internal-plane
adapter).
Full gated E2E now 26/26.
Add EVENT target type to AlarmTargetTypeFlagEnum, wire event report
into the alarm rule pipeline, add RabbitMQ contract E2E tests for
command call and event report, and create design documentation.
E2eStack: singleton Testcontainers-driven stack that starts
- timescale/timescaledb-ha:pg18 (production-pinned), aliased dc3-postgres
- rabbitmq:3.13-management, aliased dc3-rabbitmq
on a shared docker network with reuse enabled. start() is idempotent and
exposes JDBC URL / AMQP host:port / credentials / container references for
downstream E2E tests.
BaseE2eIT: shared base class with @BeforeAll bootStack() and
@Tag("e2e") + @EnabledIfEnvironmentVariable(DC3_E2E=true|1|yes|on)
so non-E2E builds (no Docker, e.g. unit-test CI lanes) skip the suite by
default. Subclasses opt in by setting DC3_E2E.
HarnessSmokeIT (3 tests, gated):
- postgres is reachable and accepts simple queries
- rabbitmq is reachable and accepts the AMQP handshake
- start() is idempotent across repeated calls (containers stay running)
build: declare postgresql, rabbitmq testcontainers + amqp-client + postgres JDBC
driver as test scope so the harness can reach the stack without leaking E2E
deps into deployable artifacts. Replaces the .gitkeep placeholder put in by
S0 with the real harness module.
Run via DC3_E2E=true mvn -pl dc3-e2e -am verify.
Introduce two reactor modules that exist purely to host repository-wide
test concerns:
- dc3-coverage (packaging=pom) runs jacoco:report-aggregate against all
contributing modules and applies a tree-wide jacoco:check rule. The
aggregator excludes generated sources, deployable Application classes,
POJO entity packages and the third-party modbus4j sero utilities so
the percentage stays anchored on real business logic. Coverage gates
start at 0% and tighten in later stages as more tests land.
- dc3-e2e (packaging=jar) reserves a place for the docker-compose driven
end-to-end suite delivered in stage S8. Unit and integration phases
are skipped by default and only the e2e profile turns them on.
Both modules are wired into the root reactor.