From be3f2966f77ee63214539ebb40874c241a9bf791 Mon Sep 17 00:00:00 2001 From: skwasjer Date: Wed, 17 Nov 2021 23:27:37 +0100 Subject: [PATCH 1/3] feat(server): target .NET Core 3.1 instead of .NET Standard 2.x so we can use Framework reference instead. --- src/MockHttp.Server/MockHttp.Server.csproj | 5 ++--- test/MockHttp.Server.Tests/MockHttp.Server.Tests.csproj | 7 ++----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/MockHttp.Server/MockHttp.Server.csproj b/src/MockHttp.Server/MockHttp.Server.csproj index 940d190..220d196 100644 --- a/src/MockHttp.Server/MockHttp.Server.csproj +++ b/src/MockHttp.Server/MockHttp.Server.csproj @@ -1,7 +1,7 @@  - net6.0;net5.0;netstandard2.1;netstandard2.0 + net6.0;net5.0;netcoreapp3.1 skwas.MockHttp.Server skwas.MockHttp.Server MockHttp @@ -14,8 +14,7 @@ - - + diff --git a/test/MockHttp.Server.Tests/MockHttp.Server.Tests.csproj b/test/MockHttp.Server.Tests/MockHttp.Server.Tests.csproj index 0702d8c..d81fe35 100644 --- a/test/MockHttp.Server.Tests/MockHttp.Server.Tests.csproj +++ b/test/MockHttp.Server.Tests/MockHttp.Server.Tests.csproj @@ -1,7 +1,7 @@  - net6.0;net5.0;netcoreapp3.1;netcoreapp2.1 + net6.0;net5.0;netcoreapp3.1 true @@ -17,10 +17,7 @@ - - - - + From 152d066f5aafbf172444a93a763e105fd53ebc50 Mon Sep 17 00:00:00 2001 From: skwasjer Date: Wed, 17 Nov 2021 23:55:23 +0100 Subject: [PATCH 2/3] test: remove .NET Core 2.1 and use .NET 4.8 instead --- .../MockHttp.Json.Tests.csproj | 7 ++----- test/MockHttp.Testing/MockHttp.Testing.csproj | 8 +++----- .../Extensions/HttpContentExtensionsTests.cs | 2 ++ test/MockHttp.Tests/MockHttp.Tests.csproj | 6 +----- test/MockHttp.Tests/MockHttpHandlerTests.cs | 19 +++++++++++++++++++ 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/test/MockHttp.Json.Tests/MockHttp.Json.Tests.csproj b/test/MockHttp.Json.Tests/MockHttp.Json.Tests.csproj index ca99a25..7f5e7a2 100644 --- a/test/MockHttp.Json.Tests/MockHttp.Json.Tests.csproj +++ b/test/MockHttp.Json.Tests/MockHttp.Json.Tests.csproj @@ -1,7 +1,7 @@  - net6.0;net5.0;netcoreapp3.1;netcoreapp2.1 + net6.0;net5.0;netcoreapp3.1;net48 true @@ -10,10 +10,7 @@ - - - - + \ No newline at end of file diff --git a/test/MockHttp.Testing/MockHttp.Testing.csproj b/test/MockHttp.Testing/MockHttp.Testing.csproj index af19032..02bccf7 100644 --- a/test/MockHttp.Testing/MockHttp.Testing.csproj +++ b/test/MockHttp.Testing/MockHttp.Testing.csproj @@ -1,7 +1,7 @@  - net6.0;net5.0;netstandard2.1;netstandard2.0 + net6.0;net5.0;netstandard2.1;net48 false @@ -9,14 +9,12 @@ + - - - - + \ No newline at end of file diff --git a/test/MockHttp.Tests/Extensions/HttpContentExtensionsTests.cs b/test/MockHttp.Tests/Extensions/HttpContentExtensionsTests.cs index ad339b8..3866b06 100644 --- a/test/MockHttp.Tests/Extensions/HttpContentExtensionsTests.cs +++ b/test/MockHttp.Tests/Extensions/HttpContentExtensionsTests.cs @@ -83,7 +83,9 @@ static object[] CreateTestCase(HttpContent content, string expectedData) }; yield return CreateTestCase(mpc, $"--boundary{Environment.NewLine}Content-Type: text/plain; charset=utf-8{Environment.NewLine}{Environment.NewLine}data{Environment.NewLine}--boundary--{Environment.NewLine}"); yield return CreateTestCase(new ObjectContent(typeof(string), data, new JsonMediaTypeFormatter()), $"\"{data}\""); +#if !NETFRAMEWORK yield return CreateTestCase(new ReadOnlyMemoryContent(buffer.AsMemory()), data); +#endif } } } diff --git a/test/MockHttp.Tests/MockHttp.Tests.csproj b/test/MockHttp.Tests/MockHttp.Tests.csproj index 2e877d6..a98e403 100644 --- a/test/MockHttp.Tests/MockHttp.Tests.csproj +++ b/test/MockHttp.Tests/MockHttp.Tests.csproj @@ -1,17 +1,13 @@  - net6.0;net5.0;netcoreapp3.1;netcoreapp2.1 + net6.0;net5.0;netcoreapp3.1;net48 true MockHttp - - - - diff --git a/test/MockHttp.Tests/MockHttpHandlerTests.cs b/test/MockHttp.Tests/MockHttpHandlerTests.cs index c8b5631..53ac56c 100644 --- a/test/MockHttp.Tests/MockHttpHandlerTests.cs +++ b/test/MockHttp.Tests/MockHttpHandlerTests.cs @@ -411,7 +411,9 @@ public async Task Given_a_request_expectation_when_sending_requests_it_should_co // Assert _sut.Verify(matching => matching.RequestUri("**/controller/**"), IsSent.Exactly(2), "we sent it"); +#if !NETFRAMEWORK await _sut.VerifyAsync(matching => matching.Content(jsonPostContent), IsSent.Once, "we sent it"); +#endif _sut.Verify(); _sut.VerifyNoOtherRequests(); @@ -640,4 +642,21 @@ public async Task When_resetting_invoked_requests_it_should_reset_sequence() } } } +#if NETFRAMEWORK + internal static class EnumerableExtensions + { + // Polyfill SkipLast + public static IEnumerable SkipLast(this IEnumerable enumerable, int count) + { + if (enumerable is null) + { + throw new ArgumentNullException(nameof(enumerable)); + } + + var list = new List(enumerable); + list.RemoveRange(list.Count - count, count); + return list; + } + } +#endif } From 52cb4d0af99cd1832e53a3867b0c151b98b0261f Mon Sep 17 00:00:00 2001 From: skwasjer Date: Wed, 17 Nov 2021 23:56:15 +0100 Subject: [PATCH 3/3] fix(CS0618): 'IHttpResponseFeature.Body' is obsolete: 'Use IHttpResponseBodyFeature.Stream instead.' --- .../Server/HttpResponseMessageExtensions.cs | 11 ++++++++--- src/MockHttp.Server/Server/ServerRequestHandler.cs | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/MockHttp.Server/Server/HttpResponseMessageExtensions.cs b/src/MockHttp.Server/Server/HttpResponseMessageExtensions.cs index cb7b462..c2fcb37 100644 --- a/src/MockHttp.Server/Server/HttpResponseMessageExtensions.cs +++ b/src/MockHttp.Server/Server/HttpResponseMessageExtensions.cs @@ -13,7 +13,12 @@ namespace MockHttp.Server { internal static class HttpResponseMessageExtensions { - internal static async Task MapToFeatureAsync(this HttpResponseMessage response, IHttpResponseFeature responseFeature, CancellationToken cancellationToken) + internal static async Task MapToFeatureAsync + ( + this HttpResponseMessage response, + IHttpResponseFeature responseFeature, + IHttpResponseBodyFeature responseBodyFeature, + CancellationToken cancellationToken) { responseFeature.StatusCode = (int)response.StatusCode; responseFeature.ReasonPhrase = response.ReasonPhrase; @@ -25,9 +30,9 @@ internal static async Task MapToFeatureAsync(this HttpResponseMessage response, #if NET5_0_OR_GREATER await using Stream contentStream = await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false); #else - using Stream contentStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); + await using Stream contentStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); #endif - await contentStream.CopyToAsync(responseFeature.Body, 4096, cancellationToken).ConfigureAwait(false); + await contentStream.CopyToAsync(responseBodyFeature.Writer.AsStream(), 4096, cancellationToken).ConfigureAwait(false); } } diff --git a/src/MockHttp.Server/Server/ServerRequestHandler.cs b/src/MockHttp.Server/Server/ServerRequestHandler.cs index 9e6f928..97cdc6b 100644 --- a/src/MockHttp.Server/Server/ServerRequestHandler.cs +++ b/src/MockHttp.Server/Server/ServerRequestHandler.cs @@ -37,7 +37,6 @@ public async Task HandleAsync(HttpContext httpContext, Func _) cancellationToken.ThrowIfCancellationRequested(); HttpResponseMessage httpResponseMessage; - IHttpResponseFeature responseFeature = httpContext.Features.Get(); try { httpResponseMessage = await SendAsync(httpRequestMessage, cancellationToken).ConfigureAwait(false); @@ -61,7 +60,9 @@ public async Task HandleAsync(HttpContext httpContext, Func _) response.RegisterForDispose(httpResponseMessage); cancellationToken.ThrowIfCancellationRequested(); - await httpResponseMessage.MapToFeatureAsync(responseFeature, cancellationToken).ConfigureAwait(false); + IHttpResponseFeature responseFeature = httpContext.Features.Get(); + IHttpResponseBodyFeature responseBodyFeature = httpContext.Features.Get(); + await httpResponseMessage.MapToFeatureAsync(responseFeature, responseBodyFeature, cancellationToken).ConfigureAwait(false); } private void LogRequestMessage(HttpContext httpContext, string message, LogLevel logLevel = LogLevel.Debug, Exception ex = null)