Description
Summary
The macOS engine job failed because the reflection-mode child for AbstractClassTests.Test exited without writing its TRX report. Its captured standard output and error were empty. The parent expected an empty failed test session with a report, so this prevents an otherwise successful pull request from passing CI.
Reproduction
Observed on PR #7583 head ed7f5809f0adc589e8916060f8eb1749b480155a, .NET run 41904799061, macOS job 126836484135.
Run the normal macOS engine Reflection pipeline. When invoking the child directly, set TUNIT_ENGINE_TESTS_TRX_PATH to a unique writable absolute .trx path; the engine harness normally supplies it to enable the in-process reporter. The failing child command is TUnit.TestProject --treenode-filter /*/*/AbstractBaseClass/* --diagnostic-verbosity Debug --diagnostic --diagnostic-file-prefix log_AbstractClassTests_ --timeout 10m --reflection. The parent reports failure after 289ms, no TRX, and empty child output/error. The engine run had 756 tests and one failure. A reliable isolated reproduction is not yet established.
Expected and actual
Expected: the abstract-class selection emits a TRX report with zero tests and the expected failed session outcome. Actual: no report is written. Investigate child exit status and diagnostic artifacts rather than rerunning without diagnosis. This differs from #7554's long Windows reflection pass-session timeout.
Environment
GitHub Actions macos-latest, arm64, Release/net10.0, reflection discovery. Found while maintaining #7583. Preserve the selected tests and assertions while diagnosing the missing report.
Acceptance criteria
- Diagnose the short-lived macOS reflection child failure using its exit code and available diagnostic artifacts; empty captured output alone does not establish the cause.
- Include the child exit code and expected TRX path in missing-report failure diagnostics (
InvokableTestBase.RunWithFailureLoggingcurrently omits the exit code). - Correct the diagnosed cause while retaining the abstract-class filter, zero-test/failed-session assertions, and normal timeout.
- Validate in the hosted macOS reflection engine pipeline; do not run
TUnit.Engine.Testslocally or rely on an unchanged-head rerun as the fix.
Activity
thomhurst commentedon Nov 4, 2026
Audited against origin/main at a85bb69. The abstract-class assertions and in-process TRX path remain unchanged; RunWithFailureLogging still omits the child exit code. The cited macOS job is confirmed failed. No native parent, children, blockers, or open PR closing this issue were found. #7606 targets the distinct long Windows timeout and does not establish a fix here.
Kept this issue open and claimable. Added the required TUNIT_ENGINE_TESTS_TRX_PATH environment variable to direct reproduction instructions and explicit diagnosis, failure-diagnostics, and hosted-validation acceptance criteria. No implementation or local Engine.Tests execution was performed in this triage unit.
Capture child process exit diagnostics for #7607
thomhurst commentedon Nov 5, 2026
Run 41949899257 completed successfully; both required reviewers approved ba75eb4 without blockers. Ubuntu .NET CI passed, including the Aspire fixture. The remaining failure in run 41949898636 is macOS Reflection: Bug7126CultureInvariantDisplayNameTests(de-DE) exited after 153ms with no TRX or captured output. Its diagnostic artifact contains only two successful sibling culture sessions, not the failed child. This matches the early-child failure under investigation in #7607; an unchanged-head rerun is not justified by the available evidence.
Pushed 4915a0e to record PID, exit code (or explicitly unavailable), expected TRX path, and the original exception on child failures. This is evidence collection for #7607, not a claimed root-cause fix. Built the modified Engine.Tests project on fresh main with SDK 10.0.403: 0 errors (existing warnings); did not execute Engine.Tests locally. git diff --check passed. Fresh hosted CI and reviews must assess this head before merge; auto-merge is disabled.
Skip certificate trust preparation for HTTP-only Aspire test resources (
thomhurst commentedon Nov 5, 2026
New evidence from #7663 head 6f90cc7: .NET run 42094411865, macOS job 127481076688 reports two Reflection children exiting with code 137 after about one second: AbstractClassTests.Test (PID 9554, 991ms) and AfterEveryAssemblyHookTests.Test (PID 9553, 993ms). Both had empty stdout/stderr and no TRX. The uploaded TestingPlatformDiagnosticLogsmacos-latest artifact contains no diagnostic file for either prefix. The other 853 engine tests passed.
This establishes SIGKILL-style termination, but not its source; memory pressure is not proven. Existing PID/exit-code reporting has delivered useful evidence, so that acceptance criterion is already implemented. PR #7663 is being rebased onto current main, which includes macOS native crash collection from #7659, for fresh hosted validation. No unchanged-head rerun or local Engine.Tests execution was used.