The official MicroProfile Metrics 5.1.1 TCK (org.eclipse.microprofile.metrics:microprofile-metrics-api-tck:5.1.1) validates that an implementation honours the whole spec — exposition formats, scopes, types, configuration. Dirac passes it in full: 127/127 PASS (100 %), consolidated in TCK.md. The runner ships in the dirac-tck module, part of the reactor but gated behind the tck Maven profile.
Status
| Metric | Value |
|---|---|
Official 5.1.1 suite |
✅ 127/127 PASS (100 %) — TCK.md |
Milestone |
M8 — complete (ROADMAP.md) |
Smoke test (out of Arquillian) |
✅ |
M9 jlink smoke |
✅ |
|
The consolidated score lives in TCK.md; each run also regenerates a raw report in |
Prerequisites
The artefact org.eclipse.microprofile.metrics:microprofile-metrics-api-tck:5.1.1 is available on Maven Central. The runner first installs the required Dirac modules in the local M2, then runs the reactor on dirac-tck with the tck profile.
sdk env # Java 25 + Maven 3.9.16
./mvnw -ntp install -DskipTests # full reactor build
Running the runner
The script run-official-tck-mp-metrics-5.1.sh at the repository root orchestrates every variant.
# Smoke test — DiracTckSmokeTest, no Arquillian
./run-official-tck-mp-metrics-5.1.sh
# Full suite — JUnit 4/Arquillian, tck-official profile
./run-official-tck-mp-metrics-5.1.sh all
# Targeted test — tck-official profile + -Dtest=
./run-official-tck-mp-metrics-5.1.sh -Dtest=CounterTest
The runner installs dirac-api, dirac-core, dirac-cdi-vauban in the local M2 (step 1), then invokes ./mvnw -Ptck,<profile> -pl dirac-tck test (step 2). The summary report lands in dirac-tck/target/tck-report.txt. Direct invocation without the script:
./mvnw -Ptck -pl dirac-tck test # smoke
./mvnw -Ptck,tck-official -pl dirac-tck test # full suite
Runner architecture
dirac-tck is an in-reactor module gated behind the tck Maven profile (TCK harmonisation — Dirac is the pilot brick, mirroring the vidocq-runtime-tck-* pattern of the Vidocq runtime): a plain mvn install neither downloads nor runs anything TCK-related, and the release reactor never sees the module.
|
Historically |
Stack assembled by the runner:
| Layer | Component |
|---|---|
Spec |
|
Metrics implementation |
|
CDI container |
Vauban ( |
Arquillian container |
Dirac container that deploys the archive and exposes |
HTTP transport |
Chappe ( |
Test framework |
JUnit 4 + Arquillian ( |
Arquillian configuration in dirac-tck/src/test/resources/arquillian.xml. Current smoke test: dirac-tck/src/test/java/io/vidocq/dirac/tck/DiracTckSmokeTest.java.
jlink smoke (M9)
The jlink smoke validates that the whole Dirac stack can be assembled into a Java native image without an automatic module lacking a canonical name. The blocker is lifted by dirac-mp-metrics-api, which repackages the MP Metrics spec with an explicit module-info.class (module microprofile.metrics.api { exports …; }).
./run-jlink-smoke.sh # build + jlink + dirac-image-smoke image
./run-jlink-smoke-ci.sh # blocking CI wrapper
./mvnw -ntp -N -Pjlink-smoke verify
Details in JLINK.md.
Quality contract
Any structural modification of dirac-core, dirac-cdi-vauban or dirac-rest must preserve the 127/127 TCK score before merge. A TCK regression is a CI-level blocker: the PR does not pass. Any excluded test (if any) must be justified in TCK.md.