From a1c6ab4ce4ea8cecbb4b7bc052afe2753be7e842 Mon Sep 17 00:00:00 2001 From: Philip Wood Date: Tue, 18 Apr 2017 15:16:27 +0100 Subject: [PATCH] Get rest of unit tests working --- .../DownstreamUrlCreatorMiddleware.cs | 16 ---- .../HttpRequestBuilderMiddleware.cs | 11 --- .../DownstreamUrlCreatorMiddlewareTests.cs | 80 ++++++++----------- .../DownstreamUrlCreator/UrlBuilderTests.cs | 2 - .../Headers/AddHeadersToRequestTests.cs | 54 ++++++------- ...ttpRequestHeadersBuilderMiddlewareTests.cs | 21 ++--- .../HttpRequestBuilderMiddlewareTests.cs | 7 ++ 7 files changed, 75 insertions(+), 116 deletions(-) diff --git a/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs b/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs index 7cabd305..c91e06da 100644 --- a/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs +++ b/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs @@ -43,20 +43,6 @@ namespace Ocelot.DownstreamUrlCreator.Middleware return; } - //var dsScheme = DownstreamRoute.ReRoute.DownstreamScheme; - - //var dsHostAndPort = HostAndPort; - - //var dsUrl = _urlBuilder.Build(dsPath.Data.Value, dsScheme, dsHostAndPort); - - //if (dsUrl.IsError) - //{ - // _logger.LogDebug("IUrlBuilder returned an error, setting pipeline error"); - - // SetPipelineError(dsUrl.Errors); - // return; - //} - var uriBuilder = new UriBuilder(DownstreamRequest.RequestUri) { Path = dsPath.Data.Value, @@ -67,8 +53,6 @@ namespace Ocelot.DownstreamUrlCreator.Middleware _logger.LogDebug("downstream url is {downstreamUrl.Data.Value}", DownstreamRequest.RequestUri); - //SetDownstreamUrlForThisRequest(dsUrl.Data.Value); - _logger.LogDebug("calling next middleware"); await _next.Invoke(context); diff --git a/src/Ocelot/Request/Middleware/HttpRequestBuilderMiddleware.cs b/src/Ocelot/Request/Middleware/HttpRequestBuilderMiddleware.cs index fa92c8e1..c59af7a6 100644 --- a/src/Ocelot/Request/Middleware/HttpRequestBuilderMiddleware.cs +++ b/src/Ocelot/Request/Middleware/HttpRequestBuilderMiddleware.cs @@ -43,17 +43,6 @@ namespace Ocelot.Request.Middleware return; } - //var buildResult = await _requestCreator - // .Build(context.Request.Method, - // DownstreamUrl, - // context.Request.Body, - // context.Request.Headers, - // context.Request.QueryString, - // context.Request.ContentType, - // new RequestId.RequestId(DownstreamRoute?.ReRoute?.RequestIdKey, context.TraceIdentifier), - // DownstreamRoute.ReRoute.IsQos, - // qosProvider.Data); - var buildResult = await _requestCreator.Build( DownstreamRequest, DownstreamRoute.ReRoute.IsQos, diff --git a/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs b/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs index d511c4c1..aea1780f 100644 --- a/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs @@ -18,6 +18,7 @@ using Ocelot.Responses; using Ocelot.Values; using TestStack.BDDfy; using Xunit; +using Shouldly; namespace Ocelot.UnitTests.DownstreamUrlCreator { @@ -30,10 +31,9 @@ namespace Ocelot.UnitTests.DownstreamUrlCreator private readonly TestServer _server; private readonly HttpClient _client; private Response _downstreamRoute; - private HttpResponseMessage _result; private OkResponse _downstreamPath; - private OkResponse _downstreamUrl; - private HostAndPort _hostAndPort; + private HttpRequestMessage _downstreamRequest; + private HttpResponseMessage _result; public DownstreamUrlCreatorMiddlewareTests() { @@ -60,69 +60,34 @@ namespace Ocelot.UnitTests.DownstreamUrlCreator app.UseDownstreamUrlCreatorMiddleware(); }); + _downstreamRequest = new HttpRequestMessage(HttpMethod.Get, "https://my.url/abc/?q=123"); + _scopedRepository .Setup(sr => sr.Get("DownstreamRequest")) - .Returns(new OkResponse(new HttpRequestMessage(HttpMethod.Get, "https://my.url/abc/?q=123"))); + .Returns(new OkResponse(_downstreamRequest)); _server = new TestServer(builder); _client = _server.CreateClient(); } [Fact] - public void should_call_dependencies_correctly() + public void should_replace_scheme_and_path() { - var hostAndPort = new HostAndPort("127.0.0.1", 80); - this.Given(x => x.GivenTheDownStreamRouteIs( new DownstreamRoute( new List(), new ReRouteBuilder() .WithDownstreamPathTemplate("any old string") .WithUpstreamHttpMethod("Get") + .WithDownstreamScheme("https") .Build()))) - .And(x => x.GivenTheHostAndPortIs(hostAndPort)) - .And(x => x.TheUrlReplacerReturns("/api/products/1")) - .And(x => x.TheUrlBuilderReturns("http://127.0.0.1:80/api/products/1")) + .And(x => x.GivenTheDownstreamRequestUriIs("http://my.url/abc?q=123")) + .And(x => x.GivenTheUrlReplacerWillReturn("/api/products/1")) .When(x => x.WhenICallTheMiddleware()) - .Then(x => x.ThenTheScopedDataRepositoryIsCalledCorrectly()) + .Then(x => x.ThenTheDownstreamRequestUriIs("https://my.url:80/api/products/1?q=123")) .BDDfy(); } - private void GivenTheHostAndPortIs(HostAndPort hostAndPort) - { - _hostAndPort = hostAndPort; - _scopedRepository - .Setup(x => x.Get("HostAndPort")) - .Returns(new OkResponse(_hostAndPort)); - } - - private void TheUrlBuilderReturns(string dsUrl) - { - _downstreamUrl = new OkResponse(new DownstreamUrl(dsUrl)); - _urlBuilder - .Setup(x => x.Build(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns(_downstreamUrl); - } - - private void TheUrlReplacerReturns(string downstreamUrl) - { - _downstreamPath = new OkResponse(new DownstreamPath(downstreamUrl)); - _downstreamUrlTemplateVariableReplacer - .Setup(x => x.Replace(It.IsAny(), It.IsAny>())) - .Returns(_downstreamPath); - } - - private void ThenTheScopedDataRepositoryIsCalledCorrectly() - { - _scopedRepository - .Verify(x => x.Add("DownstreamUrl", _downstreamUrl.Data.Value), Times.Once()); - } - - private void WhenICallTheMiddleware() - { - _result = _client.GetAsync(_url).Result; - } - private void GivenTheDownStreamRouteIs(DownstreamRoute downstreamRoute) { _downstreamRoute = new OkResponse(downstreamRoute); @@ -131,6 +96,29 @@ namespace Ocelot.UnitTests.DownstreamUrlCreator .Returns(_downstreamRoute); } + private void GivenTheDownstreamRequestUriIs(string uri) + { + _downstreamRequest.RequestUri = new Uri(uri); + } + + private void GivenTheUrlReplacerWillReturn(string path) + { + _downstreamPath = new OkResponse(new DownstreamPath(path)); + _downstreamUrlTemplateVariableReplacer + .Setup(x => x.Replace(It.IsAny(), It.IsAny>())) + .Returns(_downstreamPath); + } + + private void WhenICallTheMiddleware() + { + _result = _client.GetAsync(_url).Result; + } + + private void ThenTheDownstreamRequestUriIs(string expectedUri) + { + _downstreamRequest.RequestUri.OriginalString.ShouldBe(expectedUri); + } + public void Dispose() { _client.Dispose(); diff --git a/test/Ocelot.UnitTests/DownstreamUrlCreator/UrlBuilderTests.cs b/test/Ocelot.UnitTests/DownstreamUrlCreator/UrlBuilderTests.cs index 7e512798..0414bbb3 100644 --- a/test/Ocelot.UnitTests/DownstreamUrlCreator/UrlBuilderTests.cs +++ b/test/Ocelot.UnitTests/DownstreamUrlCreator/UrlBuilderTests.cs @@ -1,7 +1,5 @@ using System; -using Ocelot.Configuration; using Ocelot.DownstreamUrlCreator; -using Ocelot.DownstreamUrlCreator.UrlTemplateReplacer; using Ocelot.Responses; using Ocelot.Values; using Shouldly; diff --git a/test/Ocelot.UnitTests/Headers/AddHeadersToRequestTests.cs b/test/Ocelot.UnitTests/Headers/AddHeadersToRequestTests.cs index 950dc72d..0395df91 100644 --- a/test/Ocelot.UnitTests/Headers/AddHeadersToRequestTests.cs +++ b/test/Ocelot.UnitTests/Headers/AddHeadersToRequestTests.cs @@ -12,6 +12,7 @@ using Ocelot.Responses; using Shouldly; using TestStack.BDDfy; using Xunit; +using System.Net.Http; namespace Ocelot.UnitTests.Headers { @@ -19,6 +20,8 @@ namespace Ocelot.UnitTests.Headers { private readonly AddHeadersToRequest _addHeadersToRequest; private readonly Mock _parser; + private readonly HttpRequestMessage _downstreamRequest; + private List _claims; private List _configuration; private HttpContext _context; private Response _result; @@ -28,17 +31,15 @@ namespace Ocelot.UnitTests.Headers { _parser = new Mock(); _addHeadersToRequest = new AddHeadersToRequest(_parser.Object); + _downstreamRequest = new HttpRequestMessage(); } [Fact] - public void should_add_headers_to_context() + public void should_add_headers_to_downstreamRequest() { - var context = new DefaultHttpContext + var claims = new List { - User = new ClaimsPrincipal(new ClaimsIdentity(new List - { - new Claim("test", "data") - })) + new Claim("test", "data") }; this.Given( @@ -46,7 +47,7 @@ namespace Ocelot.UnitTests.Headers { new ClaimToThing("header-key", "", "", 0) })) - .Given(x => x.GivenHttpContext(context)) + .Given(x => x.GivenClaims(claims)) .And(x => x.GivenTheClaimParserReturns(new OkResponse("value"))) .When(x => x.WhenIAddHeadersToTheRequest()) .Then(x => x.ThenTheResultIsSuccess()) @@ -55,25 +56,19 @@ namespace Ocelot.UnitTests.Headers } [Fact] - public void if_header_exists_should_replace_it() + public void should_replace_existing_headers_on_request() { - var context = new DefaultHttpContext - { - User = new ClaimsPrincipal(new ClaimsIdentity(new List - { - new Claim("test", "data") - })), - }; - - context.Request.Headers.Add("header-key", new StringValues("initial")); - this.Given( x => x.GivenConfigurationHeaderExtractorProperties(new List { new ClaimToThing("header-key", "", "", 0) })) - .Given(x => x.GivenHttpContext(context)) + .Given(x => x.GivenClaims(new List + { + new Claim("test", "data") + })) .And(x => x.GivenTheClaimParserReturns(new OkResponse("value"))) + .And(x => x.GivenThatTheRequestContainsHeader("header-key", "initial")) .When(x => x.WhenIAddHeadersToTheRequest()) .Then(x => x.ThenTheResultIsSuccess()) .And(x => x.ThenTheHeaderIsAdded()) @@ -88,7 +83,7 @@ namespace Ocelot.UnitTests.Headers { new ClaimToThing("", "", "", 0) })) - .Given(x => x.GivenHttpContext(new DefaultHttpContext())) + .Given(x => x.GivenClaims(new List())) .And(x => x.GivenTheClaimParserReturns(new ErrorResponse(new List { new AnyError() @@ -98,10 +93,9 @@ namespace Ocelot.UnitTests.Headers .BDDfy(); } - private void ThenTheHeaderIsAdded() + private void GivenClaims(List claims) { - var header = _context.Request.Headers.First(x => x.Key == "header-key"); - header.Value.First().ShouldBe(_claimValue.Data); + _claims = claims; } private void GivenConfigurationHeaderExtractorProperties(List configuration) @@ -109,9 +103,9 @@ namespace Ocelot.UnitTests.Headers _configuration = configuration; } - private void GivenHttpContext(HttpContext context) + private void GivenThatTheRequestContainsHeader(string key, string value) { - _context = context; + _downstreamRequest.Headers.Add(key, value); } private void GivenTheClaimParserReturns(Response claimValue) @@ -129,9 +123,7 @@ namespace Ocelot.UnitTests.Headers private void WhenIAddHeadersToTheRequest() { - //_result = _addHeadersToRequest.SetHeadersOnContext(_configuration, _context); - //TODO: pass in DownstreamRequest - _result = _addHeadersToRequest.SetHeadersOnDownstreamRequest(_configuration, _context.User.Claims, null); + _result = _addHeadersToRequest.SetHeadersOnDownstreamRequest(_configuration, _claims, _downstreamRequest); } private void ThenTheResultIsSuccess() @@ -145,6 +137,12 @@ namespace Ocelot.UnitTests.Headers _result.IsError.ShouldBe(true); } + private void ThenTheHeaderIsAdded() + { + var header = _downstreamRequest.Headers.First(x => x.Key == "header-key"); + header.Value.First().ShouldBe(_claimValue.Data); + } + class AnyError : Error { public AnyError() diff --git a/test/Ocelot.UnitTests/Headers/HttpRequestHeadersBuilderMiddlewareTests.cs b/test/Ocelot.UnitTests/Headers/HttpRequestHeadersBuilderMiddlewareTests.cs index aff337fc..d6a49dc5 100644 --- a/test/Ocelot.UnitTests/Headers/HttpRequestHeadersBuilderMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/Headers/HttpRequestHeadersBuilderMiddlewareTests.cs @@ -3,16 +3,13 @@ using System.Collections.Generic; using System.IO; using System.Net.Http; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using Moq; using Ocelot.Configuration; using Ocelot.Configuration.Builder; using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.UrlMatcher; -using Ocelot.DownstreamUrlCreator.Middleware; using Ocelot.Headers; using Ocelot.Headers.Middleware; using Ocelot.Infrastructure.RequestData; @@ -27,6 +24,7 @@ namespace Ocelot.UnitTests.Headers { private readonly Mock _scopedRepository; private readonly Mock _addHeaders; + private readonly HttpRequestMessage _downstreamRequest; private readonly string _url; private readonly TestServer _server; private readonly HttpClient _client; @@ -58,6 +56,10 @@ namespace Ocelot.UnitTests.Headers app.UseHttpRequestHeadersBuilderMiddleware(); }); + _scopedRepository + .Setup(sr => sr.Get("DownstreamRequest")) + .Returns(new OkResponse(_downstreamRequest)); + _server = new TestServer(builder); _client = _server.CreateClient(); } @@ -76,18 +78,14 @@ namespace Ocelot.UnitTests.Headers .Build()); this.Given(x => x.GivenTheDownStreamRouteIs(downstreamRoute)) - .And(x => x.GivenTheAddHeadersToRequestReturns()) + .And(x => x.GivenTheAddHeadersToDownstreamRequestReturnsOk()) .When(x => x.WhenICallTheMiddleware()) .Then(x => x.ThenTheAddHeadersToRequestIsCalledCorrectly()) .BDDfy(); } - private void GivenTheAddHeadersToRequestReturns() + private void GivenTheAddHeadersToDownstreamRequestReturnsOk() { - //_addHeaders - // .Setup(x => x.SetHeadersOnContext(It.IsAny>(), - // It.IsAny())) - // .Returns(new OkResponse()); _addHeaders .Setup(x => x.SetHeadersOnDownstreamRequest( It.IsAny>(), @@ -98,14 +96,11 @@ namespace Ocelot.UnitTests.Headers private void ThenTheAddHeadersToRequestIsCalledCorrectly() { - //_addHeaders - // .Verify(x => x.SetHeadersOnContext(It.IsAny>(), - // It.IsAny()), Times.Once); _addHeaders .Verify(x => x.SetHeadersOnDownstreamRequest( It.IsAny>(), It.IsAny>(), - It.IsAny()), Times.Once); + _downstreamRequest), Times.Once); } private void WhenICallTheMiddleware() diff --git a/test/Ocelot.UnitTests/Request/HttpRequestBuilderMiddlewareTests.cs b/test/Ocelot.UnitTests/Request/HttpRequestBuilderMiddlewareTests.cs index 00b2aa4c..8c2a0879 100644 --- a/test/Ocelot.UnitTests/Request/HttpRequestBuilderMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/Request/HttpRequestBuilderMiddlewareTests.cs @@ -25,6 +25,7 @@ namespace Ocelot.UnitTests.Request private readonly Mock _requestBuilder; private readonly Mock _scopedRepository; private readonly Mock _qosProviderHouse; + private readonly HttpRequestMessage _downstreamRequest; private readonly string _url; private readonly TestServer _server; private readonly HttpClient _client; @@ -58,6 +59,12 @@ namespace Ocelot.UnitTests.Request app.UseHttpRequestBuilderMiddleware(); }); + _downstreamRequest = new HttpRequestMessage(); + + _scopedRepository + .Setup(sr => sr.Get("DownstreamRequest")) + .Returns(new OkResponse(_downstreamRequest)); + _server = new TestServer(builder); _client = _server.CreateClient(); }