diff --git a/README.md b/README.md index dd2569d4..7145dc38 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ [![Build status](https://ci.appveyor.com/api/projects/status/r6sv51qx36sis1je?svg=true)](https://ci.appveyor.com/project/TomPallister/ocelot-fcfpb) +[![Windows Build history](https://buildstats.info/appveyor/chart/TomPallister/ocelot-fcfpb?branch=develop&includeBuildsFromPullRequest=false)](https://ci.appveyor.com/project/TomPallister/ocelot-fcfpb/history?branch=develop) + + [![Coverage Status](https://coveralls.io/repos/github/TomPallister/Ocelot/badge.svg?branch=develop)](https://coveralls.io/github/TomPallister/Ocelot?branch=develop) Ocelot is a .NET Api Gateway. This project is aimed at people using .NET running diff --git a/build.cake b/build.cake index db4f168c..af2f9364 100644 --- a/build.cake +++ b/build.cake @@ -421,6 +421,8 @@ private void PublishPackages(ConvertableDirectoryPath packagesDir, ConvertableFi var codePackage = packagesDir + File(artifacts["nuget"]); Information("Pushing package " + codePackage); + + Information("Calling NuGetPush"); NuGetPush( codePackage, 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); + } + } +}