alexnoddings / Tyne

C# libaries designed for making Line of Business Blazor apps more efficiently.
https://alexnoddings.github.io/Tyne/
MIT License
2 stars 0 forks source link

HTTP mediator tests failing on .NET 9 #164

Closed alexnoddings closed 1 month ago

alexnoddings commented 1 month ago

After upgrading to .NET 9, HTTP Mediator and MediatorEndpoints tests have started failing.

When writing responses back to the HTTP response, the following error is thrown:

fail: Tyne.HttpMediator.Client.ExceptionHandlerMiddleware[101002100]
      Unhandled exception in the HTTP mediator pipeline.
      System.InvalidOperationException: The PipeWriter 'ResponseBodyPipeWriter' does not implement PipeWriter.UnflushedBytes.
         at System.Text.Json.ThrowHelper.ThrowInvalidOperationException_PipeWriterDoesNotImplementUnflushedBytes(PipeWriter pipeWriter)
         at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1.SerializeAsync(PipeWriter pipeWriter, T rootValue, Int32 flushThreshold, CancellationToken cancellationToken, Object rootValueBoxed)
         at Microsoft.AspNetCore.Http.HttpResponseJsonExtensions.WriteAsJsonAsyncSlow[TValue](Task startTask, PipeWriter body, TValue value, JsonSerializerOptions options, Boolean ignoreOCE, CancellationToken cancellationToken)
         at Tyne.HttpMediator.Server.HttpResponseResultWriter.WriteCoreAsync[T](HttpContext httpContext, HttpResult`1 result, JsonSerializerOptions options, CancellationToken cancellationToken) in /_/src/HttpMediator.Server/ResultWriter/HttpResponseResultWriter.cs:line 34
         at Tyne.HttpMediator.Server.HttpRequestHandler.HandleRequestCoreAsync[TRequest,TResponse](HttpContext httpContext, TRequest request) in /_/src/HttpMediator.Server/Mapping/HttpRequestHandler.cs:line 61
         at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|7_0(Endpoint endpoint, Task requestTask, ILogger logger)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
         at Microsoft.AspNetCore.TestHost.HttpContextBuilder.<>c__DisplayClass23_0.<<SendAsync>g__RunRequestAsync|0>d.MoveNext()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.TestHost.ClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
         at Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
         at Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
         at Tyne.HttpMediator.Client.HttpSenderMiddleware.InvokeAsync[TRequest,TResponse](TRequest request, HttpMediatorDelegate`2 next) in /_/src/HttpMediator.Client/Middleware/Implementations/HttpSender/HttpSenderMiddleware.cs:line 38
         at Tyne.HttpMediator.Client.FluentValidationMiddleware.InvokeAsync[TRequest,TResponse](TRequest request, HttpMediatorDelegate`2 next) in /_/src/HttpMediator.Client.FluentValidation/FluentValidationMiddleware.cs:line 47
         at Tyne.HttpMediator.Client.ExceptionHandlerMiddleware.InvokeAsync[TRequest,TResponse](TRequest request, HttpMediatorDelegate`2 next) in /_/src/HttpMediator.Client/Middleware/Implementations/ExceptionHandler/ExceptionHandlerMiddleware.cs:line 23
alexnoddings commented 1 month ago

Exception is thrown by .NET 9 changes to Json serialisation which don't work with the MVC testing package's memory buffering.

It still works on .NET 8.