Skip to main content

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.

Before and after IT console: Maven download spam versus progress bar with ETA

What changed

  • Live progressUNOMI-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 -ntp so 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-logs when 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.

Browse itests on GitHub Unomi 3 intro Contribute · Testing

← All posts