Skip to content

Bug: utilitiescs-test-determinism-780-803-594 #811

Description

@drmoisan
  • Work Mode: full-bug

Summary

Consolidates the UtilitiesCS.Test nondeterminism filed as #780, #803, and #594 into one item so the required mstest-coverage check stops failing on unrelated pull requests. #803 is a duplicate of the DfDeedle_COM_Tests NullReferenceException already in #594: GetEmailDataInViewAsync_SeparatesTableSnapshotFromDataFrameTransform fails under parallel load because the class mutates static seams and production code at DfDeedle.cs:186 dereferences tableSnapshot.Item1 without a null check. #780 is DictionaryExtensions.TryAddValuesAsync cancelling its inner Task.Run after a hard-coded 500 ms wall-clock window, which the thread pool exceeds under coverage instrumentation with 24 class workers. #594 also carries two Console.Out races between concurrently executing tests. #592 (QuickFiler pump-host 60 s expiry) is deliberately not included: it is a different assembly and needs its own investigation.

Environment

  • OS/version: Windows 11 Pro 10.0.26200 locally; GitHub Actions windows runner in CI
  • Runtime: .NET Framework 4.8.1 test host, VSTest 18.9.0, MSTest 4.4.0, assembly-level parallelization with 24 class-scope workers
  • Command/flags used: vstest.console.exe <nine assemblies> /EnableCodeCoverage /InIsolation /Logger:trx "/TestCaseFilter:TestCategory!=LiveOutlook"; the repository mstest-coverage job
  • Data source or fixture: in-memory dictionaries; mocked Table and MAPIFolder in DfDeedle_COM_Tests

Steps to Reproduce

  1. Run the full suite under coverage with parallel class workers. Observe, intermittently: TryAddValuesAsync_UpdatesExistingValue failing with TaskCanceledException after ~20 s (passes in ~2 ms alone); GetEmailDataInViewAsync_SeparatesTableSnapshotFromDataFrameTransform failing with NullReferenceException at DfDeedle.cs:186; two Console.Out races.
  2. Re-run the identical head commit with no change and observe all checks passing. Observed on PR bug(799): render breadcrumb lineage below the archive root and unify suggestion-path projection #802 at b2132349 (7107 of 7108 passed, then green on re-run) and during PR Chore/update dependencies #779 verification on 2026-09-04.

Expected Behavior

  • Every test in UtilitiesCS.Test passes deterministically regardless of class ordering and parallel load.
  • TryAddValuesAsync does not fail production callers on thread-pool scheduling latency.
  • Production code at DfDeedle.cs:186 does not dereference a possibly-null snapshot element.
  • A full nine-assembly /InIsolation run reports zero failures on ten consecutive runs.

Actual Behavior

Intermittent failures as above, each blocking a required check on an unrelated pull request and inviting re-run-until-green.

Logs / Screenshots

Impact / Severity

  • Blocker
  • High
  • Medium
  • Low

Medium: a nondeterministic failure in a required check blocks unrelated pull requests and erodes the signal the gate exists to provide. Production callers of TryAddValuesAsync may also receive a spurious cancellation under starvation.

Source

From: docs/features/potential/2026-09-07-utilitiescs-test-determinism-780-803-594.md

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions