diff --git a/src/Ocelot/Responder/HttpContextResponder.cs b/src/Ocelot/Responder/HttpContextResponder.cs index 76e8956a..fbfbc6c2 100644 --- a/src/Ocelot/Responder/HttpContextResponder.cs +++ b/src/Ocelot/Responder/HttpContextResponder.cs @@ -55,7 +55,7 @@ namespace Ocelot.Responder using (Stream stream = new MemoryStream(content)) { - if (response.StatusCode != HttpStatusCode.NotModified) + if (response.StatusCode != HttpStatusCode.NotModified && context.Response.ContentLength != 0) { await stream.CopyToAsync(context.Response.Body); } @@ -79,4 +79,4 @@ namespace Ocelot.Responder } } } -} \ No newline at end of file +} diff --git a/test/Ocelot.UnitTests/Ocelot.UnitTests.csproj b/test/Ocelot.UnitTests/Ocelot.UnitTests.csproj index 9c0f0a4f..7993644f 100644 --- a/test/Ocelot.UnitTests/Ocelot.UnitTests.csproj +++ b/test/Ocelot.UnitTests/Ocelot.UnitTests.csproj @@ -19,10 +19,6 @@ True - - - - diff --git a/test/Ocelot.UnitTests/Responder/HttpContextResponderTests.cs b/test/Ocelot.UnitTests/Responder/HttpContextResponderTests.cs new file mode 100644 index 00000000..ae465774 --- /dev/null +++ b/test/Ocelot.UnitTests/Responder/HttpContextResponderTests.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using Microsoft.AspNetCore.Http; +using Ocelot.Headers; +using Ocelot.Responder; +using Shouldly; +using Xunit; + +namespace Ocelot.UnitTests.Responder +{ + public class HttpContextResponderTests + { + private readonly HttpContextResponder _responder; + private RemoveOutputHeaders _removeOutputHeaders; + + public HttpContextResponderTests() + { + _removeOutputHeaders = new RemoveOutputHeaders(); + _responder = new HttpContextResponder(_removeOutputHeaders); + } + + [Fact] + public void should_remove_transfer_encoding_header() + { + var httpContext = new DefaultHttpContext(); + var httpResponseMessage = new HttpResponseMessage {Content = new StringContent("")}; + httpResponseMessage.Headers.Add("Transfer-Encoding", "woop"); + _responder.SetResponseOnHttpContext(httpContext, httpResponseMessage).GetAwaiter().GetResult(); + var header = httpContext.Response.Headers["Transfer-Encoding"]; + header.ShouldBeEmpty(); + } + + [Fact] + public void should_have_content_length() + { + var httpContext = new DefaultHttpContext(); + var httpResponseMessage = new HttpResponseMessage { Content = new StringContent("test") }; + _responder.SetResponseOnHttpContext(httpContext, httpResponseMessage).GetAwaiter().GetResult(); + var header = httpContext.Response.Headers["Content-Length"]; + header.First().ShouldBe("4"); + } + + [Fact] + public void should_add_header() + { + var httpContext = new DefaultHttpContext(); + var httpResponseMessage = new HttpResponseMessage { Content = new StringContent("test") }; + httpResponseMessage.Headers.Add("test", "test"); + _responder.SetResponseOnHttpContext(httpContext, httpResponseMessage).GetAwaiter().GetResult(); + var header = httpContext.Response.Headers["test"]; + header.First().ShouldBe("test"); + } + + [Fact] + public void should_call_without_exception() + { + var httpContext = new DefaultHttpContext(); + _responder.SetErrorResponseOnContext(httpContext, 500); + } + } +}