WIP: feat(tests): enable parallel execution of functional tests #68

Closed
jabber.developer2 wants to merge 15 commits from feat/parallel-functional-tests into master
Collaborator

Summary

Implement parallel functional test execution to reduce CI time (~3.2x speedup).

Changes

Test Infrastructure

  • Dynamic XDG paths: Each test instance uses unique directories based on stabber port (./tests/functionaltests/files/{port}/xdg_*), enabling safe parallel execution
  • Test groups: Split 69 tests into 4 balanced groups that can run independently
  • CLI argument: ./functionaltests [1-4] to run specific group

Build System

  • Added make check-functional-parallel target
  • Updated ci-build.sh to use parallel execution by default

Test Groups

Group Tests Content
1 17 Connect, Ping, Rooms, Software
2 17 Message, Receipts, Roster, Chat Session
3 16 Presence, Disconnect
4 19 MUC, Carbons

Usage

# Parallel execution (default in CI)
make check-functional-parallel

# Or manually
./functionaltests 1 & ./functionaltests 2 & ./functionaltests 3 & ./functionaltests 4 & wait

# Sequential (legacy)
./functionaltests


Resolves #26
## Summary Implement parallel functional test execution to reduce CI time (~3.2x speedup). ## Changes ### Test Infrastructure - **Dynamic XDG paths**: Each test instance uses unique directories based on stabber port (`./tests/functionaltests/files/{port}/xdg_*`), enabling safe parallel execution - **Test groups**: Split 69 tests into 4 balanced groups that can run independently - **CLI argument**: `./functionaltests [1-4]` to run specific group ### Build System - Added `make check-functional-parallel` target - Updated `ci-build.sh` to use parallel execution by default ## Test Groups | Group | Tests | Content | |-------|-------|---------| | 1 | 17 | Connect, Ping, Rooms, Software | | 2 | 17 | Message, Receipts, Roster, Chat Session | | 3 | 16 | Presence, Disconnect | | 4 | 19 | MUC, Carbons | ## Usage ```bash # Parallel execution (default in CI) make check-functional-parallel # Or manually ./functionaltests 1 & ./functionaltests 2 & ./functionaltests 3 & ./functionaltests 4 & wait # Sequential (legacy) ./functionaltests Resolves #26
jabber.developer2 added 1 commit 2026-01-13 14:56:52 +00:00
feat(tests): enable parallel execution of functional tests
All checks were successful
CI Code / Check spelling (pull_request) Successful in 19s
CI Code / Check coding style (pull_request) Successful in 34s
CI Code / Linux (ubuntu) (pull_request) Successful in 30m9s
CI Code / Linux (arch) (pull_request) Successful in 33m47s
CI Code / Linux (debian) (pull_request) Successful in 33m9s
fa17173e5c
jabber.developer2 added 1 commit 2026-01-15 14:22:37 +00:00
feat(tests): update Dockerfile and CI script for parallel builds and improved caching
All checks were successful
CI Code / Check spelling (pull_request) Successful in 19s
CI Code / Check coding style (pull_request) Successful in 33s
CI Code / Linux (ubuntu) (pull_request) Successful in 15m23s
CI Code / Linux (debian) (pull_request) Successful in 15m35s
CI Code / Linux (arch) (pull_request) Successful in 18m11s
bed046e7ed
jabber.developer2 added this to the Plans (2025-2026) project 2026-01-16 09:35:12 +00:00
jabber.developer2 added 1 commit 2026-01-16 13:48:21 +00:00
feat: update compatibility header for cmocka 2.0 deprecation handling
All checks were successful
CI Code / Linux (debian) (pull_request) Successful in 12m52s
CI Code / Check coding style (pull_request) Successful in 32s
CI Code / Check spelling (pull_request) Successful in 17s
CI Code / Linux (ubuntu) (pull_request) Successful in 15m26s
CI Code / Linux (arch) (pull_request) Successful in 18m7s
5153e04f96
jabber.developer2 added 1 commit 2026-01-16 14:12:11 +00:00
fix(build): use $(srcdir)/tests for VPATH builds
All checks were successful
CI Code / Linux (arch) (pull_request) Successful in 16m40s
CI Code / Check coding style (pull_request) Successful in 36s
CI Code / Check spelling (pull_request) Successful in 21s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m20s
CI Code / Linux (debian) (pull_request) Successful in 18m41s
7765f65be1
Fix include paths for out-of-tree builds (e.g., build-1/, build-2/)
to correctly find tests/prof_cmocka.h header file.
jabber.developer2 added 1 commit 2026-01-16 14:38:35 +00:00
test: remove cmocka 2.0 fix to verify CI failure
All checks were successful
CI Code / Check coding style (pull_request) Successful in 32s
CI Code / Check spelling (pull_request) Successful in 19s
CI Code / Linux (debian) (pull_request) Successful in 15m51s
CI Code / Linux (ubuntu) (pull_request) Successful in 15m58s
CI Code / Linux (arch) (pull_request) Successful in 16m8s
e1a9f55a32
Temporarily removing CMOCKA_DISABLE_DEPRECATION_WARNINGS to demonstrate
that tests fail on debian:testing (cmocka 2.0.1) without this fix.
jabber.developer2 added 1 commit 2026-01-16 15:16:01 +00:00
Add --no-cache to docker build to force fresh image build with
latest cmocka 2.0.1 from debian:testing.
jabber.developer2 added 1 commit 2026-01-16 16:34:10 +00:00
perf: optimize build with configure cache and parallel make
All checks were successful
CI Code / Check spelling (pull_request) Successful in 18s
CI Code / Check coding style (pull_request) Successful in 36s
CI Code / Linux (ubuntu) (pull_request) Successful in 17m55s
CI Code / Linux (debian) (pull_request) Successful in 18m8s
CI Code / Linux (arch) (pull_request) Successful in 20m12s
c125746f6e
- Add -C flag to ./configure for caching results
- Use --depth 1 for git clone (faster)
- Use make -j$(nproc) for stabber/libstrophe builds

Borrowed optimizations from build/multicore branch.
jabber.developer2 added 1 commit 2026-01-17 14:46:15 +00:00
feat: add code coverage support
All checks were successful
CI Code / Code Coverage (pull_request) Has been skipped
CI Code / Check spelling (pull_request) Successful in 20s
CI Code / Check coding style (pull_request) Successful in 33s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m16s
CI Code / Linux (debian) (pull_request) Successful in 18m27s
CI Code / Linux (arch) (pull_request) Successful in 20m58s
f41888b7a5
- Add --enable-coverage option to configure.ac
- Add coverage and coverage-html targets to Makefile.am
- Add coverage CI job with Codecov upload
- Add lcov to all Dockerfiles (arch, debian, fedora, tumbleweed, ubuntu)

Usage:
  ./configure --enable-coverage
  make check
  make coverage-html
jabber.developer2 added 1 commit 2026-01-17 15:03:28 +00:00
ci: improve test failure detection in parallel tests
All checks were successful
CI Code / Check spelling (pull_request) Successful in 18s
CI Code / Code Coverage (pull_request) Has been skipped
CI Code / Check coding style (pull_request) Successful in 30s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m10s
CI Code / Linux (debian) (pull_request) Successful in 18m23s
CI Code / Linux (arch) (pull_request) Successful in 20m2s
e40b89ad92
1. ci-build.sh: Add verify_test_failure_detection() function
   - Tests that single test failures are properly detected
   - Tests that parallel test failures are properly detected
   - Runs at CI start to catch framework issues early

2. Makefile.am: Fix check-functional-parallel exit code handling
   - OLD: used 'wait' without checking individual exit codes
   - NEW: capture each PID and check exit code with 'wait $pid'
   - On failure: print the log file and set failed flag
   - Exit with error if any group failed

This ensures CI correctly fails when:
- Any unit test fails
- Any of the 4 functional test groups fails
- Any parallel build configuration fails
jabber.developer2 added 1 commit 2026-01-17 15:13:57 +00:00
ci: run coverage on PRs too, not just master push
Some checks failed
CI Code / Check spelling (pull_request) Successful in 18s
CI Code / Check coding style (pull_request) Successful in 30s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m7s
CI Code / Linux (debian) (pull_request) Successful in 18m25s
CI Code / Linux (arch) (pull_request) Successful in 20m32s
CI Code / Code Coverage (pull_request) Failing after 12m34s
1d113c4d64
jabber.developer2 added 1 commit 2026-01-17 15:37:15 +00:00
ci: fix coverage lcov exclude pattern
Some checks failed
CI Code / Check spelling (pull_request) Successful in 19s
CI Code / Check coding style (pull_request) Successful in 35s
CI Code / Code Coverage (pull_request) Failing after 14m46s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m1s
CI Code / Linux (debian) (pull_request) Successful in 18m16s
CI Code / Linux (arch) (pull_request) Successful in 20m5s
ca5835c58e
The code is built in /usr/src/profanity/ inside Docker, so
excluding '/usr/*' removes all source files!

Fix: exclude only system headers/libs (/usr/include/*, /usr/lib/*),
not the entire /usr/ tree.

Also add --ignore-errors empty to handle edge cases.
jabber.developer2 added 1 commit 2026-01-17 16:10:35 +00:00
ci: add functional tests to coverage + fix lcov errors
All checks were successful
CI Code / Check spelling (pull_request) Successful in 19s
CI Code / Check coding style (pull_request) Successful in 35s
CI Code / Code Coverage (pull_request) Successful in 15m28s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m1s
CI Code / Linux (debian) (pull_request) Successful in 18m16s
CI Code / Linux (arch) (pull_request) Successful in 20m20s
d80092821b
1. Add 'make check-functional-parallel' to coverage job
   - Unit tests alone cover ~27% (mostly utilities)
   - Functional tests exercise UI, XMPP, and full application flow
   - Should significantly increase coverage

2. Fix lcov errors:
   - Remove /usr/lib/* pattern (unused, causes error)
   - Add 'unused' to --ignore-errors
jabber.developer2 added 1 commit 2026-01-19 12:54:20 +00:00
ci: add branch coverage to lcov
All checks were successful
CI Code / Check spelling (pull_request) Successful in 19s
CI Code / Check coding style (pull_request) Successful in 37s
CI Code / Code Coverage (pull_request) Successful in 15m56s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m20s
CI Code / Linux (debian) (pull_request) Successful in 18m42s
CI Code / Linux (arch) (pull_request) Successful in 20m9s
f6b621ad40
Enable branch coverage with --rc lcov_branch_coverage=1.
This provides more detailed coverage metrics:
- Line coverage: % of code lines executed
- Function coverage: % of functions called
- Branch coverage: % of if/else/switch branches taken

Branch coverage is a step towards MC/DC (Modified Condition/Decision Coverage)
used in safety-critical systems.

Also add coverage/ to .gitignore.
jabber.developer2 added 1 commit 2026-01-19 13:29:51 +00:00
ci: fix deprecated lcov option
All checks were successful
CI Code / Check spelling (pull_request) Successful in 21s
CI Code / Check coding style (pull_request) Successful in 35s
CI Code / Code Coverage (pull_request) Successful in 15m29s
CI Code / Linux (ubuntu) (pull_request) Successful in 18m0s
CI Code / Linux (debian) (pull_request) Successful in 18m19s
CI Code / Linux (arch) (pull_request) Successful in 20m21s
4789ada834
Change lcov_branch_coverage to branch_coverage (new syntax)
jabber.developer2 added 1 commit 2026-01-19 13:33:31 +00:00
revert: remove cmocka 2.0 compatibility workaround
Some checks failed
CI Code / Code Coverage (pull_request) Has been cancelled
CI Code / Linux (arch) (pull_request) Has been cancelled
CI Code / Linux (ubuntu) (pull_request) Has been cancelled
CI Code / Check coding style (pull_request) Has been cancelled
CI Code / Check spelling (pull_request) Has been cancelled
CI Code / Linux (debian) (pull_request) Has been cancelled
01c3205f5d
Restore original prof_cmocka.h - the CMOCKA_DISABLE_DEPRECATION_WARNINGS
workaround is not needed for this project.
jabber.developer removed this from the Plans (2025-2026) project 2026-01-21 15:55:18 +00:00
Some checks failed
CI Code / Code Coverage (pull_request) Has been cancelled
Required
Details
CI Code / Linux (arch) (pull_request) Has been cancelled
Required
Details
CI Code / Linux (ubuntu) (pull_request) Has been cancelled
Required
Details
CI Code / Check coding style (pull_request) Has been cancelled
Required
Details
CI Code / Check spelling (pull_request) Has been cancelled
Required
Details
CI Code / Linux (debian) (pull_request) Has been cancelled
Required
Details

Pull request closed

Sign in to join this conversation.
No description provided.