Run the LiveView test files in parallel closes #611 #616

Merged
simon merged 5 commits from issue/mitgliederverwaltung-611 into main 2026-10-20 23:37:17 +02:00
Owner

closes #611

Description of the implemented changes

The changes were:

  • Bugfixing
  • New Feature
  • Breaking Change
  • Refactoring

Run the LiveView test files in parallel: most of the remaining serial block of the fast suite were LiveView test modules whose only serial reason was "flip deferred". They are now hardened against other tests' rows and host load and run async; every module that stays serial names its actual reason.

What has been changed?

  • State that the async log-capture guard covers the capture_log tag forms
  • Move the wall-clock and log-capture tests into their own serial modules
  • Keep LiveView tests independent of other tests' rows and of host load
  • Run the LiveView test modules async and name why the rest stay serial
  • Record the suite times after the LiveView flips and the async pitfalls they surfaced

Definition of Done

Code Quality

  • No new technical depths
  • Linting passed
  • Documentation is added were needed

Accessibility

  • New elements are properly defined with html-tags
  • Colour contrast follows WCAG criteria
  • Aria labels are added when needed
  • Everything is accessible by keyboard
  • Tab-Order is comprehensible
  • All interactive elements have a visible focus

Testing

  • Tests for new code are written
  • All tests pass
  • axe-core dev tools show no critical or major issues

Additional Notes

Fast suite (just test-fast) on the same 4 vCPU host, seeds 101/202/303, no other test run on the host, medians:

Before After Δ
Total 227.4 s 162.8 s −64.6 s (−28 %)
Async 55.9 s 74.6 s +18.7 s
Sync 169.6 s 88.2 s −81.4 s

30 test modules moved from serial to async (74.8 s of serial time). Every flipped module passed --repeat-until-failure 5 on its own and five seeded full-suite runs per batch, with no Postgres deadlock and no lock wait of 1 s or more. Under parallel load from another worktree on the same host the suite takes 180–215 s.

Modules that stay serial after the async proof: index_sort_atom_property_test (asserts the VM-wide atom count), index_value_control_test, index_bulk_scope_test, index_filter_chips_test, index_filter_input_hardening_test (assert_patch timed out under heavy host load; the hardening is kept), and member_field_live/index_component_test (a lock wait on the settings row; settings isolation is #540's scope). Re-flipping the four assert_patch modules with a longer patch timeout is a follow-up.

Deliberate deviation: six overview test modules of the same assert_patch class stay async with a 1 s patch timeout instead of going back to serial; they never failed themselves and held five full runs under heavy load.

No product code changes; the diff is limited to test/ and docs/.

Larger commits: "Keep LiveView tests independent of other tests' rows and of host load" and "Run the LiveView test modules async and name why the rest stay serial" each touch many test files (the first rewrites fixtures and assertions, the second is mostly one use … async: line or one # Serial: comment per file).

LiveView modules that stay serial because of global state or the settings row (handover to #540): member_live/vereinfacht_sync_notice_test (mutates OS env), member_live/index_sort_atom_property_test (VM-wide atom count), member_live/index_groups_performance_test (global telemetry handler), member_live/index_filter_input_hardening_logging_test (captures logs), member_live/index_boolean_filter_performance_test (wall-clock budget), member_field_live/index_component_test, member_live/form_error_handling_test and join_request_live/show_test (update the settings row); unchanged: global_settings_live_test, global_settings_live_config_test, join_live_test, join_live_email_failure_test, auth/link_oidc_account_live_logging_test, member_live/index/setup_test.

closes #611 ## Description of the implemented changes The changes were: - [ ] Bugfixing - [ ] New Feature - [ ] Breaking Change - [ ] Refactoring Run the LiveView test files in parallel: most of the remaining serial block of the fast suite were LiveView test modules whose only serial reason was "flip deferred". They are now hardened against other tests' rows and host load and run async; every module that stays serial names its actual reason. ## What has been changed? - State that the async log-capture guard covers the capture_log tag forms - Move the wall-clock and log-capture tests into their own serial modules - Keep LiveView tests independent of other tests' rows and of host load - Run the LiveView test modules async and name why the rest stay serial - Record the suite times after the LiveView flips and the async pitfalls they surfaced ## Definition of Done ### Code Quality - [ ] No new technical depths - [x] Linting passed - [x] Documentation is added were needed ### Accessibility - [ ] New elements are properly defined with html-tags - [ ] Colour contrast follows WCAG criteria - [ ] Aria labels are added when needed - [ ] Everything is accessible by keyboard - [ ] Tab-Order is comprehensible - [ ] All interactive elements have a visible focus ### Testing - [x] Tests for new code are written - [x] All tests pass - [ ] axe-core dev tools show no critical or major issues ## Additional Notes Fast suite (`just test-fast`) on the same 4 vCPU host, seeds 101/202/303, no other test run on the host, medians: | | Before | After | Δ | |---|---|---|---| | Total | 227.4 s | 162.8 s | −64.6 s (−28 %) | | Async | 55.9 s | 74.6 s | +18.7 s | | Sync | 169.6 s | 88.2 s | −81.4 s | 30 test modules moved from serial to async (74.8 s of serial time). Every flipped module passed `--repeat-until-failure 5` on its own and five seeded full-suite runs per batch, with no Postgres deadlock and no lock wait of 1 s or more. Under parallel load from another worktree on the same host the suite takes 180–215 s. Modules that stay serial after the async proof: `index_sort_atom_property_test` (asserts the VM-wide atom count), `index_value_control_test`, `index_bulk_scope_test`, `index_filter_chips_test`, `index_filter_input_hardening_test` (`assert_patch` timed out under heavy host load; the hardening is kept), and `member_field_live/index_component_test` (a lock wait on the settings row; settings isolation is #540's scope). Re-flipping the four `assert_patch` modules with a longer patch timeout is a follow-up. Deliberate deviation: six overview test modules of the same `assert_patch` class stay async with a 1 s patch timeout instead of going back to serial; they never failed themselves and held five full runs under heavy load. No product code changes; the diff is limited to `test/` and `docs/`. Larger commits: "Keep LiveView tests independent of other tests' rows and of host load" and "Run the LiveView test modules async and name why the rest stay serial" each touch many test files (the first rewrites fixtures and assertions, the second is mostly one `use … async:` line or one `# Serial:` comment per file). LiveView modules that stay serial because of global state or the settings row (handover to #540): `member_live/vereinfacht_sync_notice_test` (mutates OS env), `member_live/index_sort_atom_property_test` (VM-wide atom count), `member_live/index_groups_performance_test` (global telemetry handler), `member_live/index_filter_input_hardening_logging_test` (captures logs), `member_live/index_boolean_filter_performance_test` (wall-clock budget), `member_field_live/index_component_test`, `member_live/form_error_handling_test` and `join_request_live/show_test` (update the settings row); unchanged: `global_settings_live_test`, `global_settings_live_config_test`, `join_live_test`, `join_live_email_failure_test`, `auth/link_oidc_account_live_logging_test`, `member_live/index/setup_test`.
Modules that failed the async proof stay serial with their reason: the sort atom property asserts the VM-wide atom count, four overview modules hit assert_patch timeouts under heavy host load, and the member field table showed a settings row lock wait.
docs(test): record the suite times after the LiveView flips and the async pitfalls they surfaced
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
805fafc163
simon merged commit b407fb1272 into main 2026-10-20 23:37:17 +02:00
simon deleted branch issue/mitgliederverwaltung-611 2026-10-20 23:37:17 +02:00
Sign in to join this conversation.
No description provided.