-
Notifications
You must be signed in to change notification settings - Fork 311
Create app context switch test helper #3371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces a new test helper—LocalAppContextSwitchesHelper—to safely capture and restore global app context switches using the RAII pattern. The changes update various test projects to utilize the helper instead of direct reflection-based switch manipulation, refactor the TdsParserStateObject to dispose of switch state correctly, and adjust some test inline data to match the new API.
Reviewed Changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated no comments.
Show a summary per file
File | Description |
---|---|
tests/ManualTests/SQL/DataReaderTest/DataReaderTest.cs | Replaced direct switch handling with the helper to ensure proper restoration. |
tests/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj | Added compilation reference for the new helper. |
tests/FunctionalTests/TdsParserStateObject.TestHarness.cs | Refactored to use a disposable helper instance and implemented IDisposable. |
tests/FunctionalTests/SqlParameterTest.cs | Updated test inline data and usage of the helper for switch configuration. |
tests/FunctionalTests/MultiplexerTests.cs | Converted state object instantiation to a using statement for proper disposal. |
tests/FunctionalTests/Microsoft.Data.SqlClient.Tests.csproj | Included the helper compilation. |
tests/FunctionalTests/LocalAppContextSwitchesTests.cs | Amended inline test data to cover new switch properties. |
tests/Common/LocalAppContextSwitchesHelper.cs | Introduced the new helper class implementation. |
Comments suppressed due to low confidence (2)
src/Microsoft.Data.SqlClient/tests/FunctionalTests/TdsParserStateObject.TestHarness.cs:161
- [nitpick] Consider renaming the 'LocalAppContextSwitches' field to clearly indicate it is an instance of the helper rather than the original static switch holder.
private SwitchesHelper LocalAppContextSwitches = new();
src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlParameterTest.cs:1947
- The removal of test cases using null switch values changes the expected behavior. Please verify that omitting these cases is intentional and that the documentation and coverage adequately address the default switch behavior.
[InlineData(null, 7, null)]
src/Microsoft.Data.SqlClient/tests/FunctionalTests/TdsParserStateObject.TestHarness.cs
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/FunctionalTests/TdsParserStateObject.TestHarness.cs
Show resolved
Hide resolved
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #3371 +/- ##
==========================================
+ Coverage 64.47% 67.67% +3.19%
==========================================
Files 298 299 +1
Lines 65525 65640 +115
==========================================
+ Hits 42248 44419 +2171
+ Misses 23277 21221 -2056
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
- Added a test helper to get/set app context switch values. - Updated existing tests to use the helper. - Added missing switches to LocalAppContextSwitches tests.
a3b5c48
to
c10ae2a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea, good implementation, just a bunch of style stuff I want to make sure we get right.
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Outdated
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Outdated
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Outdated
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Outdated
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlParameterTest.cs
Outdated
Show resolved
Hide resolved
src/Microsoft.Data.SqlClient/tests/FunctionalTests/TdsParserStateObject.TestHarness.cs
Show resolved
Hide resolved
- Addressed review comments. - Added UseConnectionPoolV2 switch to the Helper. - Commented out some Debug.Asserts() that are failing.
- Fixed typo in LocalAppContextSwitchesTests.
src/Microsoft.Data.SqlClient/tests/Common/LocalAppContextSwitchesHelper.cs
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Much better, thank you for addressing the feedback 👍
Description
This change adds a test helper to get/set app context switch values. The
LocalAppContextSwitches
class is internal and global, which makes it difficult to manipulate safely in the tests. The helper implements the RAII pattern, capturing the switch values on construction and restoring them on disposal. The helper also provides reflection-based access to the properties and fields ofLocalAppContextSwitches
so tests can manufacture the environment they need.The new
LocalAppContextSwitchesHelper
class is needed by both the Functional and Manual tests, so I put it into a new siblingCommon
directory and reference it directly in the two test projects.All existing tests that touched the app context switches have been updated.
Issues
Fixes #3370 .
Testing
Modified tests were run locally and are passing. CI will run full regression.