-
-
Notifications
You must be signed in to change notification settings - Fork 237
Version 2.x (WIP...) #1359
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
base: master
Are you sure you want to change the base?
Version 2.x (WIP...) #1359
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #1359 +/- ##
==========================================
+ Coverage 34.56% 34.61% +0.05%
==========================================
Files 155 156 +1
Lines 35228 35397 +169
==========================================
+ Hits 12176 12254 +78
- Misses 22764 22832 +68
- Partials 288 311 +23 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
@StefH, some feedback:
|
|
Thanks for your response. About 1: WireMock.Net is mostly used in unit tests. So how many % of those unit tests project are going to use an older framework like the one you mentioned? I think that supporting older frameworks in a main project and testing this in a unit test project is related but not always 1 to 1.... I will think on this and maybe support that one instead of 4.8 About 2: the question is how critical any security issue is because WireMock is used for testing, not for production code. |
It will be great. I have had similar discussions about other, testing only library - Verify. After 1,5 year author bringed back support for this old framework. I think that the requestor was .NET team.
I think that here are 2 aspects to consider: .NET SDK 9 for first release switchted settings to (then it was rollbacked, but some project kept it in place). I am not sure what is the current state: <PropertyGroup>
<NuGetAudit>true</NuGetAudit>
<NuGetAuditMode>all</NuGetAuditMode>
<NuGetAuditLevel>low</NuGetAuditLevel>
</PropertyGroup>With this + treat warnings as errors, which is pretty common, at least in my buble, it leads to the breaking compilation. Usually, there is a possibility to fix such changes basicaly by bumping transitive packages, but it is just inconvinient. IMO it is better to fix such cases centrally, The second aspect are security scans. I will consider OpenTelemetry as an example. Some end-users/companies making additional source code scans, not only shipped libraries. If we have any known vulnerable dependencies, there are at least yellow flags and we need to explain that the production code is not affected. With this, this project has strict rules to fix all such warnings. Thanks for maintaining this library, I know that it takes more time than people usually thinks. |
|
@Kielek |
|
That's fine, I think that I will need to create some simplified version of this package tailored to our usecase. |
|
@petrroll |
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 pull request updates WireMock.Net to version 2.x, which only supports .NET Framework 4.8 and .NET 8.0. The changes involve:
Changes:
- Reduced target framework support to only .NET Framework 4.8 and .NET 8.0
- Removed
ConfigureAwait(false)calls throughout the codebase - Commented out conditional compilation directives for feature flags (MIMEKIT, GRAPHQL, PROTOBUF, etc.)
- Updated package dependencies to newer versions
- Removed OWIN-based hosting in favor of ASP.NET Core only
- Migrated from
Check.ThatAsyncCodetoCheck.ThatCodein tests
Reviewed changes
Copilot reviewed 161 out of 182 changed files in this pull request and generated 90 comments.
Show a summary per file
| File | Description |
|---|---|
| test/**/*.cs | Removed ConfigureAwait(false) from async calls, updated assertion methods |
| test/**/*.csproj | Updated target frameworks to net48;net8.0, updated package versions |
| src/**/*.csproj | Updated target frameworks to net48;net8.0, removed conditional compilation |
| src/**/WireMock.Net.Minimal/Owin/OwinSelfHost.cs | Deleted - removed OWIN hosting support |
| src/**/Owin/*.cs | Migrated to ASP.NET Core exclusively |
| src/**/*.cs | Commented out conditional compilation directives, updated code accordingly |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| var serverUrl = "http://localhost:" + server.Ports[0]; | ||
| await new HttpClient().GetAsync(serverUrl + "/foo").ConfigureAwait(false); | ||
| await new HttpClient().GetAsync(serverUrl + "/foo"); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'HttpClient' is created but not disposed.
|
|
||
| var serverUrl = "http://localhost:" + server.Ports[0]; | ||
| await new HttpClient().GetAsync(serverUrl + "/foo").ConfigureAwait(false); | ||
| await new HttpClient().GetAsync(serverUrl + "/foo"); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'HttpClient' is created but not disposed.
| public async Task HaveReceived1Calls_AtAbsoluteUrlUsingPost_WhenAPostCallWasMadeToAbsoluteUrl_Should_BeOK() | ||
| { | ||
| await _httpClient.PostAsync("anyurl", new StringContent("")).ConfigureAwait(false); | ||
| await _httpClient.PostAsync("anyurl", new StringContent("")); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'StringContent' is created but not disposed.
| }); | ||
| var serverUrl = "http://localhost:" + server.Ports[0]; | ||
| await new HttpClient().GetAsync(serverUrl + "/foo").ConfigureAwait(false); | ||
| await new HttpClient().GetAsync(serverUrl + "/foo"); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'HttpClient' is created but not disposed.
| public async Task HaveReceived1Calls_AtAbsolutePathUsingPost_WhenAPostCallWasMadeToAbsolutePath_Should_BeOK() | ||
| { | ||
| await _httpClient.PostAsync("anypath", new StringContent("")).ConfigureAwait(false); | ||
| await _httpClient.PostAsync("anypath", new StringContent("")); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'StringContent' is created but not disposed.
|
|
||
| // Act | ||
| var response = await new HttpClient().PostAsync("http://localhost:" + server.Ports[0] + "/customer/132/document/pic.jpg", new StringContent("{ Hi = \"Hello World\" }")).ConfigureAwait(false); | ||
| var response = await new HttpClient().PostAsync("http://localhost:" + server.Ports[0] + "/customer/132/document/pic.jpg", new StringContent("{ Hi = \"Hello World\" }")); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'StringContent' is created but not disposed.
|
|
||
| // Act | ||
| var response = await new HttpClient().PostAsync("http://localhost:" + server.Ports[0] + "/customer/132/document/pic", new StringContent("{ Hi = \"Hello World\" }")).ConfigureAwait(false); | ||
| var response = await new HttpClient().PostAsync("http://localhost:" + server.Ports[0] + "/customer/132/document/pic", new StringContent("{ Hi = \"Hello World\" }")); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'HttpClient' is created but not disposed.
|
|
||
| // Act | ||
| var response = await new HttpClient().PostAsync("http://localhost:" + server.Ports[0] + "/customer/132/document/pic", new StringContent("{ Hi = \"Hello World\" }")).ConfigureAwait(false); | ||
| var response = await new HttpClient().PostAsync("http://localhost:" + server.Ports[0] + "/customer/132/document/pic", new StringContent("{ Hi = \"Hello World\" }")); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'StringContent' is created but not disposed.
| // then | ||
| Check.That(server.Mappings).IsEmpty(); | ||
| Check.ThatAsyncCode(() => new HttpClient().GetStringAsync("http://localhost:" + server.Ports[0] + path)).ThrowsAny(); | ||
| Check.ThatCode(() => new HttpClient().GetStringAsync("http://localhost:" + server.Ports[0] + path)).ThrowsAny(); |
Copilot
AI
Jan 19, 2026
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.
Disposable 'HttpClient' is created but not disposed.
|
|
||
| var tracingEnabled = _options.ActivityTracingOptions is not null; | ||
| var excludeAdmin = _options.ActivityTracingOptions?.ExcludeAdminRequests ?? true; | ||
| Activity? activity = null; |
Copilot
AI
Jan 19, 2026
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.
This variable is manually disposed in a finally block - consider a C# using statement as a preferable resource management technique.
|
@StefH I have briefly tried to take a look at it seems you haven't changed many places, just collapsed two settings into one which is great/fine. It is however quite a humongous PR so I can't promise I didn't miss anything 😅 Should be fairly easy to test via the test app tho / with producing test docker container and then trying the aspire integration |
|
Both codex 52 and Claude Opus 4.5 agree (thank you my employer for those tokens), so I think we're golden (I know I know, it's not great practice, but skimming it myself + validating with two separate models gives some signal) |
Version 2.x only supports: