Skip to content

qunit tests: fix runner stalled freezes#31274

Merged
EugeniyKiyashko merged 12 commits into
DevExpress:25_2from
EugeniyKiyashko:25_2_update_testcafe
Nov 20, 2025
Merged

qunit tests: fix runner stalled freezes#31274
EugeniyKiyashko merged 12 commits into
DevExpress:25_2from
EugeniyKiyashko:25_2_update_testcafe

Conversation

@EugeniyKiyashko

Copy link
Copy Markdown
Contributor

No description provided.

@EugeniyKiyashko EugeniyKiyashko self-assigned this Oct 8, 2025
@EugeniyKiyashko EugeniyKiyashko marked this pull request as draft October 8, 2025 14:10
@EugeniyKiyashko EugeniyKiyashko force-pushed the 25_2_update_testcafe branch 6 times, most recently from 834f13d to 0f10556 Compare October 9, 2025 22:27
@EugeniyKiyashko EugeniyKiyashko changed the title e2e tests: try to bump TestCafe version qunit tests: try to parallel execution Nov 10, 2025
@EugeniyKiyashko EugeniyKiyashko force-pushed the 25_2_update_testcafe branch 6 times, most recently from 1d8e2eb to 3dd3bd4 Compare November 10, 2025 17:02
@EugeniyKiyashko EugeniyKiyashko force-pushed the 25_2_update_testcafe branch 7 times, most recently from e629419 to c1e04bd Compare November 14, 2025 10:48
@EugeniyKiyashko EugeniyKiyashko force-pushed the 25_2_update_testcafe branch 2 times, most recently from 06c48e9 to 51b782e Compare November 18, 2025 10:01
@EugeniyKiyashko EugeniyKiyashko force-pushed the 25_2_update_testcafe branch 3 times, most recently from 9881404 to 9873de3 Compare November 19, 2025 20:58
@EugeniyKiyashko EugeniyKiyashko changed the title qunit tests: try to parallel execution qunit tests: fix runner stalled freezes Nov 20, 2025
@EugeniyKiyashko EugeniyKiyashko marked this pull request as ready for review November 20, 2025 07:18
Copilot AI review requested due to automatic review settings November 20, 2025 07:18
@EugeniyKiyashko EugeniyKiyashko requested review from a team as code owners November 20, 2025 07:18

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request addresses critical issues with QUnit test runner stalls and freezes in CI environments by implementing multiple improvements across the test infrastructure.

Key Changes:

  • Implemented request queuing and throttling to prevent server overload during parallel test execution
  • Added race condition guards to prevent duplicate suite finalization
  • Enhanced watchdog monitoring with better logging and configurable timeouts
  • Reorganized test constellations by removing viz and ui.htmlEditor categories and redistributing tests to optimize parallel execution

Reviewed Changes

Copilot reviewed 31 out of 40 changed files in this pull request and generated 17 comments.

Show a summary per file
File Description
packages/devextreme/testing/runner/Views/Main/RunAll.cshtml Added finalization queue with concurrency limits (3 concurrent requests), throttled alive notifications (5s), added race condition guards for duplicate finalization, and improved timeout handling with 10s AJAX timeouts
packages/devextreme/testing/runner/Controllers/MainController.cs Converted NotifySuiteFinalized and NotifyIsAlive to async methods using SemaphoreSlim for thread-safe file I/O, added response writing/flushing, and MAX_WORKERS environment variable support
packages/devextreme/testing/runner/Program.cs Added aggressive HTTP connection pooling configuration (1000 connections, disabled Nagle) and thread pool tuning (100-1000 threads) to handle high concurrency
packages/devextreme/testing/runner/Tools/UIModelHelper.cs Removed viz and ui.htmlEditor from known constellations
packages/devextreme/testing/runner/Models/BaseRunViewModel.cs Added MaxWorkers property for configurable parallel worker count
packages/devextreme/testing/tests/DevExpress.viz.*/__meta.json (12 files) Moved all viz component tests from viz constellation to ui constellation
packages/devextreme/testing/tests/DevExpress.*.htmlEditor/__meta.json (2 files) Moved htmlEditor tests from ui.htmlEditor to ui.editors constellation
packages/devextreme/docker-ci.sh Enhanced watchdog with detailed logging, 30-minute stall detection (6×5min checks), proper PID monitoring, and GitHub Actions mode with 45s startup timeout
packages/devextreme/project.json Enabled Nx caching for test-env task
e2e/testcafe-devextreme/runner.ts Changed default cache from true to false, made cache configuration dynamic based on CLI args
e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts Replaced screenshot comparison with functional assertion checking visible rows count, added 100ms load delay simulation
e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/keyboardNavigation.functional.ts Marked test as unstable with .meta({ unstable: true })
e2e/testcafe-devextreme/tests/dataGrid/common/filterRow/filterRow.ts Removed .disablePageReloads fixture configuration and after hook with page reload
apps/demos/utils/visual-tests/testcafe-runner.ts Removed cache configuration from createTestCafe call and unused THEME import
.github/workflows/qunit_tests.yml Reduced timeout from 60 to 20 minutes, removed constellation splits (e.g., ui.scheduler(1/2)ui.scheduler), added MAX_WORKERS environment variable support with values for specific constellations
.github/workflows/testcafe_tests.yml Split dataGrid tests into 4 parts instead of 3, enabled caching for dataGrid tests, commented out Chrome setup step, changed artifact upload conditions from failure() to always()
.github/workflows/demos_visual_tests.yml Increased concurrency limits (React: 3→4, Angular: 2→3, other: 2→3)
.github/copilot-instructions.md Updated QUnit workflow file reference and timeout documentation
.github/actions/run-qunit-tests/action.yml Added maxWorkers input parameter, commented out Chrome/Node setup steps, changed RawLog artifact upload from failure() to always(), added MAX_WORKERS environment variable

Comment thread packages/devextreme/testing/runner/Controllers/MainController.cs
Comment thread packages/devextreme/testing/runner/Program.cs
stall_count=$((stall_count + 1))
echo "Watchdog [check #$check_count]: STALL DETECTED (attempt $stall_count/6) - LastSuiteTime unchanged: $last_suite_time"

if [ $stall_count -ge 6 ]; then

Copilot AI Nov 20, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The hardcoded value 6 for stall threshold should be defined as a constant at the top of the function for better maintainability. This would make it easier to adjust the timeout threshold (currently 30 minutes = 6 checks × 5 min) without searching through the code.

Copilot uses AI. Check for mistakes.
Comment thread e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts
Comment thread .github/actions/run-qunit-tests/action.yml
Comment thread e2e/testcafe-devextreme/tests/dataGrid/common/scrolling.ts
Comment thread packages/devextreme/testing/runner/Views/Main/RunAll.cshtml
Comment thread packages/devextreme/testing/runner/Controllers/MainController.cs
Comment thread packages/devextreme/docker-ci.sh
Comment thread .github/workflows/testcafe_tests.yml
@EugeniyKiyashko EugeniyKiyashko merged commit 18ca85d into DevExpress:25_2 Nov 20, 2025
152 of 153 checks passed
EugeniyKiyashko added a commit to EugeniyKiyashko/DevExtreme that referenced this pull request Nov 20, 2025
Co-authored-by: Vladislav Volkov <dxvladislavvolkov@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants