Fix cyclic dependency test race#8
Merged
Merged
Conversation
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.
What changed
This fixes a race introduced in the recent re-entrant resolve test coverage.
The new issue #5 test in
ReentrantResolveTests.swiftoverrides the shared globalcyclicDependencyHandler, but the existing cyclic dependency test inSwiftiePodTests.swiftdoes the same. Because Swift Testing runs tests in parallel, those two tests could interfere with each other and assert against the wrong handler output.This PR makes the test setup exclusive when replacing
cyclicDependencyHandler, and also aligns the re-entrant test worker queues with user-initiated QoS.Why
The regression was reproducible in the test suite itself:
xcodebuild test -scheme SwiftiePod -destination 'platform=macOS'Before this fix, the two cyclic-dependency tests could fail nondeterministically because they were mutating shared global state at the same time.
Root cause
Both tests relied on swapping a process-global handler:
Tests/SwiftiePodTests/SwiftiePodTests.swiftTests/SwiftiePodTests/ReentrantResolveTests.swiftThat was safe while run in isolation, but not once both tests were eligible to execute concurrently.
Implementation
Tests/SwiftiePodTests/TestUtils.swiftImpact
This change is test-only. It does not modify library/runtime behavior in
Sources/.It removes a flaky test interaction and keeps the newer re-entrant cycle coverage in place.
Validation
xcodebuild test -scheme SwiftiePod -destination 'platform=macOS'