qunit tests: fix runner stalled freezes#31274
Merged
EugeniyKiyashko merged 12 commits intoNov 20, 2025
Merged
Conversation
f8dbdeb to
fd0606d
Compare
834f13d to
0f10556
Compare
852a9c6 to
87fb3d0
Compare
1d8e2eb to
3dd3bd4
Compare
e629419 to
c1e04bd
Compare
06c48e9 to
51b782e
Compare
9881404 to
9873de3
Compare
9873de3 to
94de4ec
Compare
24acb98 to
a1b3996
Compare
Contributor
There was a problem hiding this comment.
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
vizandui.htmlEditorcategories 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 |
| 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 |
There was a problem hiding this comment.
[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.
sjbur
approved these changes
Nov 20, 2025
anna-shakhova
approved these changes
Nov 20, 2025
r-farkhutdinov
approved these changes
Nov 20, 2025
dmlvr
approved these changes
Nov 20, 2025
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>
EugeniyKiyashko
added a commit
that referenced
this pull request
Nov 20, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.