From 38634ac65a43ef95ef52ca2af20a65c6150109d8 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 21 Nov 2022 07:30:27 +0100 Subject: [PATCH 1/3] Use try-catch when adding or removing logEntry (#848) * Use try-catch when removing logEntry * . * try catch add * Add extra check * ... --- src/WireMock.Net/Owin/WireMockMiddleware.cs | 40 +++++++++++++++---- .../WireMockServer.Admin.cs | 21 ++++++++++ 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/WireMock.Net/Owin/WireMockMiddleware.cs b/src/WireMock.Net/Owin/WireMockMiddleware.cs index d78d4a35..1c4d8dee 100644 --- a/src/WireMock.Net/Owin/WireMockMiddleware.cs +++ b/src/WireMock.Net/Owin/WireMockMiddleware.cs @@ -269,29 +269,55 @@ namespace WireMock.Owin { _options.Logger.DebugRequestResponse(_logEntryMapper.Map(entry), entry.RequestMessage.Path.StartsWith("/__admin/")); - if (addRequest) + // If addRequest is set to true and MaxRequestLogCount is null or does have a value greater than 0, try to add a new request log. + if (addRequest && _options.MaxRequestLogCount is null or > 0) { - _options.LogEntries.Add(entry); + TryAddLogEntry(entry); } - if (_options.MaxRequestLogCount != null) + // In case MaxRequestLogCount has a value greater than 0, try to delete existing request logs based on the count. + if (_options.MaxRequestLogCount is > 0) { var logEntries = _options.LogEntries.ToList(); foreach (var logEntry in logEntries.OrderBy(le => le.RequestMessage.DateTime).Take(logEntries.Count - _options.MaxRequestLogCount.Value)) { - _options.LogEntries.Remove(logEntry); + TryRemoveLogEntry(logEntry); } } - if (_options.RequestLogExpirationDuration != null) + // In case RequestLogExpirationDuration has a value greater than 0, try to delete existing request logs based on the date. + if (_options.RequestLogExpirationDuration is > 0) { var checkTime = DateTime.UtcNow.AddHours(-_options.RequestLogExpirationDuration.Value); - foreach (var logEntry in _options.LogEntries.ToList().Where(le => le.RequestMessage.DateTime < checkTime)) { - _options.LogEntries.Remove(logEntry); + TryRemoveLogEntry(logEntry); } } } + + private void TryAddLogEntry(LogEntry logEntry) + { + try + { + _options.LogEntries.Add(logEntry); + } + catch + { + // Ignore exception (can happen during stress testing) + } + } + + private void TryRemoveLogEntry(LogEntry logEntry) + { + try + { + _options.LogEntries.Remove(logEntry); + } + catch + { + // Ignore exception (can happen during stress testing) + } + } } } \ No newline at end of file diff --git a/test/WireMock.Net.Tests/WireMockServer.Admin.cs b/test/WireMock.Net.Tests/WireMockServer.Admin.cs index f299c17d..96f13347 100644 --- a/test/WireMock.Net.Tests/WireMockServer.Admin.cs +++ b/test/WireMock.Net.Tests/WireMockServer.Admin.cs @@ -5,6 +5,7 @@ using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; +using FluentAssertions; using Moq; using Newtonsoft.Json; using NFluent; @@ -374,6 +375,26 @@ public class WireMockServerAdminTests server.Stop(); } + [Fact] + public async Task WireMockServer_Admin_Logging_SetMaxRequestLogCount_To_0_Should_Not_AddLogging() + { + // Assign + var client = new HttpClient(); + + // Act + var server = WireMockServer.Start(); + server.SetMaxRequestLogCount(0); + + await client.GetAsync("http://localhost:" + server.Port + "/foo1").ConfigureAwait(false); + await client.GetAsync("http://localhost:" + server.Port + "/foo2").ConfigureAwait(false); + await client.GetAsync("http://localhost:" + server.Port + "/foo3").ConfigureAwait(false); + + // Assert + server.LogEntries.Should().BeEmpty(); + + server.Stop(); + } + [Fact] public void WireMockServer_Admin_WatchStaticMappings() { From 429d6830aeb91184beeb8f97aaf3c672cc029f85 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Thu, 24 Nov 2022 21:47:56 +0100 Subject: [PATCH 2/3] 1.5.11 --- CHANGELOG.md | 5 +++++ Directory.Build.props | 2 +- Generate-ReleaseNotes.cmd | 2 +- PackageReleaseNotes.txt | 7 ++++--- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2008c08..0a986fc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 1.5.11 (24 November 2022) +- [#836](https://github.com/WireMock-Net/WireMock.Net/pull/836) - Add Settings.QueryParameterMultipleValueSupport [feature] contributed by [StefH](https://github.com/StefH) +- [#848](https://github.com/WireMock-Net/WireMock.Net/pull/848) - Use try-catch when adding or removing logEntry [bug] contributed by [StefH](https://github.com/StefH) +- [#846](https://github.com/WireMock-Net/WireMock.Net/issues/846) - Exception ArgumentOutOfRangeException [bug] + # 1.5.10 (06 November 2022) - [#843](https://github.com/WireMock-Net/WireMock.Net/pull/843) - Webhook Templating: Use the transformed URL to create the HttpRequestMessage contributed by [ggradnig](https://github.com/ggradnig) - [#845](https://github.com/WireMock-Net/WireMock.Net/pull/845) - Add WireMockNullLogger as valid commandline logger option [feature] contributed by [StefH](https://github.com/StefH) diff --git a/Directory.Build.props b/Directory.Build.props index 6ec53d29..ddc26c89 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ - 1.5.10 + 1.5.11 WireMock.Net-Logo.png https://github.com/WireMock-Net/WireMock.Net Apache-2.0 diff --git a/Generate-ReleaseNotes.cmd b/Generate-ReleaseNotes.cmd index 6468ffae..dfe38106 100644 --- a/Generate-ReleaseNotes.cmd +++ b/Generate-ReleaseNotes.cmd @@ -1,6 +1,6 @@ rem https://github.com/StefH/GitHubReleaseNotes -SET version=1.5.10 +SET version=1.5.11 GitHubReleaseNotes --output CHANGELOG.md --skip-empty-releases --exclude-labels question invalid doc duplicate --version %version% --token %GH_TOKEN% diff --git a/PackageReleaseNotes.txt b/PackageReleaseNotes.txt index d3e6f892..4f99d97f 100644 --- a/PackageReleaseNotes.txt +++ b/PackageReleaseNotes.txt @@ -1,5 +1,6 @@ -# 1.5.10 (06 November 2022) -- #843 Webhook Templating: Use the transformed URL to create the HttpRequestMessage -- #845 Add WireMockNullLogger as valid commandline logger option [feature] +# 1.5.11 (24 November 2022) +- #836 Add Settings.QueryParameterMultipleValueSupport [feature] +- #848 Use try-catch when adding or removing logEntry [bug] +- #846 Exception ArgumentOutOfRangeException [bug] The full release notes can be found here: https://github.com/WireMock-Net/WireMock.Net/blob/master/CHANGELOG.md \ No newline at end of file From 35d42a5c0d21ba2c21aeae772b45e958be5f75c6 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 25 Nov 2022 18:13:02 +0100 Subject: [PATCH 3/3] Fix Linux CI build + Fix opencover (#851) * Fix Linux CI Test (opencover.xml) * 2 * Build & Execute Unit tests * ,cmd * cout * 12 * b * server * b =b * /p:CoverletOutput=./test/WireMock.Net.Tests/WireMock.Net.Tests * co? * 2p * 2? * failOnStderr: false * e0 * cc * pub * sc * coverlet * props * pt * coverage.net6.0.opencover.xml --- Directory.Build.props | 7 +++++++ azure-pipelines-ci.yml | 14 ++++++-------- examples/WireMock.Net.Service/App.config | 10 +++++----- .../WireMock.Net.Service.csproj | 3 ++- examples/WireMock.Net.Service/packages.config | 2 +- test/WireMock.Net.Tests/WireMock.Net.Tests.csproj | 6 +++--- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index ddc26c89..a051c5a1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -20,6 +20,13 @@ true + + + true + GeneratedCodeAttribute + opencover + + diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index 5eee61f5..d1ca4c6d 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -43,14 +43,12 @@ jobs: command: 'build' projects: './test/WireMock.Net.Tests/WireMock.Net.Tests.csproj' arguments: '--configuration Debug --framework net6.0' - - - task: DotNetCoreCLI@2 - displayName: 'Execute Unit tests' + + - task: CmdLine@2 inputs: - command: 'test' - projects: './test/WireMock.Net.Tests/WireMock.Net.Tests.csproj' - arguments: '--no-build --configuration Debug --framework net6.0 --collect:"XPlat Code Coverage" --logger trx /p:CollectCoverage=true /p:CoverletOutputFormat=opencover' - + script: 'dotnet test ./test/WireMock.Net.Tests/WireMock.Net.Tests.csproj --no-build --configuration Debug --framework net6.0' + displayName: 'Execute Unit Tests with Coverage' + - task: SonarCloudAnalyze@1 displayName: 'SonarCloud: Run Code Analysis' condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')) # Do not run for PullRequests @@ -76,7 +74,7 @@ jobs: - task: PublishBuildArtifacts@1 displayName: Publish coverage file inputs: - PathtoPublish: '/home/vsts/work/1/s/test/WireMock.Net.Tests/coverage.net6.0.opencover.xml' + PathtoPublish: './test/WireMock.Net.Tests/coverage.net6.0.opencover.xml' - job: Windows_Build_Test diff --git a/examples/WireMock.Net.Service/App.config b/examples/WireMock.Net.Service/App.config index 0819f408..aa4814ca 100644 --- a/examples/WireMock.Net.Service/App.config +++ b/examples/WireMock.Net.Service/App.config @@ -1,14 +1,14 @@ - + - + - - + + - \ No newline at end of file + diff --git a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj index 3b135fc1..193ff51f 100644 --- a/examples/WireMock.Net.Service/WireMock.Net.Service.csproj +++ b/examples/WireMock.Net.Service/WireMock.Net.Service.csproj @@ -8,9 +8,10 @@ Exe WireMock.Net.Service WireMock.Net.Service - v4.5.2 + v4.8 512 true + AnyCPU diff --git a/examples/WireMock.Net.Service/packages.config b/examples/WireMock.Net.Service/packages.config index 1dae1526..4c8969d8 100644 --- a/examples/WireMock.Net.Service/packages.config +++ b/examples/WireMock.Net.Service/packages.config @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj index 8c3eb968..794e4038 100644 --- a/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj +++ b/test/WireMock.Net.Tests/WireMock.Net.Tests.csproj @@ -31,17 +31,17 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive