Unomi 3 · Quality
Clearer integration test runs in Unomi 3
Progress bars, quieter CI output, and tools that turn a 90–minute suite into something you can actually follow.
Apache Unomi’s integration tests are deliberately heavy: Pax Exam boots a real Karaf, Docker starts Elasticsearch or OpenSearch, and Failsafe walks a large end-to-end suite. That work takes on the order of
one to two hours on
GitHub Actions
(for example
run #29200354118
on master, ~1h 52m wall time). For years the console mostly said “still downloading” or “still running” — with almost no sense of
how far
or
what was left.
Unomi 3 invested in the execution experience of that suite: live progress, quieter logs, and developer tooling around archives and memory. The goal is not fewer tests — it is being able to watch (and debug) the ones we already run.
What changed
- Live progress — UNOMI-912 / #735 added
ProgressSuite+ProgressListener: accurate total, percentage, ETA, pass/fail counters, and a CSV of the slowest tests at the end. - Quieter Maven in CI — #764 aligned Actions with
./build.sh --ci; follow-up work forces-B -ntpso transfer “Progress (1): … kB” lines stop drowning the log. - Docker search logs off the console — Elasticsearch/OpenSearch container logs go to files under
itests/target/by default; opt in with--search-engine-logswhen you need them live. - Diagnose, don’t re-run blindly — #770 (archive / compare /
kt.sh) and #782 (memory sampling + CI artifacts) make flaky vs systematic failures easier to classify.
Before / after (CI console)
Raw job log downloads from Actions require repository privileges, so the excerpts below are representative reconstructions of what contributors and committers see in the “Execute integration tests” job — anchored to real public runs and the UNOMI-912 acceptance output.
Before — typical shape of an older IT job before progress-aware running and transfer quieting (see e.g. run #19324846828, 2025-11-13, pre–UNOMI-912 merge). Walls of Maven transfer progress, little suite-level signal:
Downloading from central: https://repo.maven.apache.org/.../junit-4.13.2.jar
Progress (1): 4.1/384 kB
Progress (1): 48/384 kB
Progress (1): 128/384 kB
Downloaded from central: .../junit-4.13.2.jar (0.4 s)
Downloading from central: https://repo.maven.apache.org/.../hamcrest-core-1.3.jar
Progress (1): 7.2/45 kB
...
[INFO] --- docker-maven-plugin: start (elasticsearch)
... thousands of similar lines ...
# Suite still running - no % complete, no ETA, no live fail list
After — same class of job on Unomi 3 tip (e.g.
run #29200354118,
2026-07-12). Transfer UI suppressed; ProgressListener owns the “are we stuck?” question. Format from
UNOMI-912:
[#######-----------------------] Progress: 23.33% (35/150 tests).
Estimated time remaining: 4m 12s. Successful: 35, Failed: 0
# ... later ...
Top 10 Slowest Tests:
Rank,Test Name,Duration (ms)
1,"GraphQLProfileIT.testUpdateProperty",18234
2,"ProfileMergeIT.testMerge",14925
...
Try it locally
./build.sh --integration-tests
# CI-shaped (batch + no transfer progress):
./build.sh --ci --integration-tests
After a run, see itests/README.md for archive-it-run.sh, compare-it-runs.sh, kt.sh, and memory sampling. On Actions, download the it-memory-metrics-* artifact from a completed IT job.
How this fits the Unomi 3 quality story
Progress and cleaner logs make the long path usable. Unomi 3 also added a short path — the in-memory persistence harness for fast service unit tests without Karaf or Docker. Different layers, same idea: confidence without guessing.