mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 09:55:28 +08:00 
			
		
		
		
	Rename all ReRoute to Route to move closer to YARP +semver: breaking
This commit is contained in:
		@@ -6,25 +6,25 @@ using Ocelot.Responses;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
using static Ocelot.UnitTests.Multiplexing.UserDefinedResponseAggregatorTests;
 | 
			
		||||
 | 
			
		||||
using static Ocelot.UnitTests.Multiplexing.UserDefinedResponseAggregatorTests;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
{
 | 
			
		||||
    public class DefinedAggregatorProviderTests
 | 
			
		||||
    {
 | 
			
		||||
        private ServiceLocatorDefinedAggregatorProvider _provider;
 | 
			
		||||
        private Response<IDefinedAggregator> _aggregator;
 | 
			
		||||
        private ReRoute _reRoute;
 | 
			
		||||
        private Route _route;
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_find_aggregator()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder()
 | 
			
		||||
            var route = new RouteBuilder()
 | 
			
		||||
                .WithAggregator("TestDefinedAggregator")
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenDefinedAggregator())
 | 
			
		||||
                .And(_ => GivenReRoute(reRoute))
 | 
			
		||||
                .And(_ => GivenRoute(route))
 | 
			
		||||
                .When(_ => WhenIGet())
 | 
			
		||||
                .Then(_ => ThenTheAggregatorIsReturned())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
@@ -33,12 +33,12 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_find_aggregator()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder()
 | 
			
		||||
            var route = new RouteBuilder()
 | 
			
		||||
                .WithAggregator("TestDefinedAggregator")
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenNoDefinedAggregator())
 | 
			
		||||
                .And(_ => GivenReRoute(reRoute))
 | 
			
		||||
                .And(_ => GivenRoute(route))
 | 
			
		||||
                .When(_ => WhenIGet())
 | 
			
		||||
                .Then(_ => ThenAnErrorIsReturned())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
@@ -66,14 +66,14 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
            _provider = new ServiceLocatorDefinedAggregatorProvider(services);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenReRoute(ReRoute reRoute)
 | 
			
		||||
        private void GivenRoute(Route route)
 | 
			
		||||
        {
 | 
			
		||||
            _reRoute = reRoute;
 | 
			
		||||
            _route = route;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIGet()
 | 
			
		||||
        {
 | 
			
		||||
            _aggregator = _provider.Get(_reRoute);
 | 
			
		||||
            _aggregator = _provider.Get(_route);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenAnErrorIsReturned()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
{
 | 
			
		||||
    using Microsoft.AspNetCore.Http;
 | 
			
		||||
    using Moq;
 | 
			
		||||
@@ -14,68 +14,68 @@
 | 
			
		||||
    using System.Threading.Tasks;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
 | 
			
		||||
    public class MultiplexingMiddlewareTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly MultiplexingMiddleware _middleware;
 | 
			
		||||
        private DownstreamRoute _downstreamRoute;
 | 
			
		||||
        private int _count;
 | 
			
		||||
        private Mock<IResponseAggregator> _aggregator;
 | 
			
		||||
        private Mock<IResponseAggregatorFactory> _factory;
 | 
			
		||||
 | 
			
		||||
    public class MultiplexingMiddlewareTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly MultiplexingMiddleware _middleware;
 | 
			
		||||
        private Ocelot.DownstreamRouteFinder.DownstreamRouteHolder _downstreamRoute;
 | 
			
		||||
        private int _count;
 | 
			
		||||
        private Mock<IResponseAggregator> _aggregator;
 | 
			
		||||
        private Mock<IResponseAggregatorFactory> _factory;
 | 
			
		||||
        private HttpContext _httpContext;
 | 
			
		||||
        private RequestDelegate _next;
 | 
			
		||||
        private Mock<IOcelotLoggerFactory> _loggerFactory;
 | 
			
		||||
        private Mock<IOcelotLogger> _logger;
 | 
			
		||||
 | 
			
		||||
        public MultiplexingMiddlewareTests()
 | 
			
		||||
        {
 | 
			
		||||
            _httpContext = new DefaultHttpContext();
 | 
			
		||||
            _factory = new Mock<IResponseAggregatorFactory>();
 | 
			
		||||
            _aggregator = new Mock<IResponseAggregator>();
 | 
			
		||||
            _factory.Setup(x => x.Get(It.IsAny<ReRoute>())).Returns(_aggregator.Object);
 | 
			
		||||
 | 
			
		||||
        public MultiplexingMiddlewareTests()
 | 
			
		||||
        {
 | 
			
		||||
            _httpContext = new DefaultHttpContext();
 | 
			
		||||
            _factory = new Mock<IResponseAggregatorFactory>();
 | 
			
		||||
            _aggregator = new Mock<IResponseAggregator>();
 | 
			
		||||
            _factory.Setup(x => x.Get(It.IsAny<Route>())).Returns(_aggregator.Object);
 | 
			
		||||
            _loggerFactory = new Mock<IOcelotLoggerFactory>();
 | 
			
		||||
            _logger = new Mock<IOcelotLogger>();
 | 
			
		||||
            _loggerFactory.Setup(x => x.CreateLogger<MultiplexingMiddleware>()).Returns(_logger.Object);
 | 
			
		||||
            _loggerFactory.Setup(x => x.CreateLogger<MultiplexingMiddleware>()).Returns(_logger.Object);
 | 
			
		||||
            _next = context => Task.FromResult(_count++);
 | 
			
		||||
            _middleware = new MultiplexingMiddleware(_next, _loggerFactory.Object, _factory.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_multiplex()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder().WithDownstreamReRoute(new DownstreamReRouteBuilder().Build()).WithDownstreamReRoute(new DownstreamReRouteBuilder().Build()).Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheFollowing(reRoute))
 | 
			
		||||
                .When(x => WhenIMultiplex())
 | 
			
		||||
                .Then(x => ThePipelineIsCalled(2))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_multiplex()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder().WithDownstreamReRoute(new DownstreamReRouteBuilder().Build()).Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheFollowing(reRoute))
 | 
			
		||||
                .When(x => WhenIMultiplex())
 | 
			
		||||
                .Then(x => ThePipelineIsCalled(1))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheFollowing(ReRoute reRoute)
 | 
			
		||||
        {
 | 
			
		||||
            _downstreamRoute = new DownstreamRoute(new List<PlaceholderNameAndValue>(), reRoute);
 | 
			
		||||
            _httpContext.Items.UpsertDownstreamRoute(_downstreamRoute);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIMultiplex()
 | 
			
		||||
        {
 | 
			
		||||
            _middleware.Invoke(_httpContext).GetAwaiter().GetResult();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThePipelineIsCalled(int expected)
 | 
			
		||||
        {
 | 
			
		||||
            _count.ShouldBe(expected);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
            _middleware = new MultiplexingMiddleware(_next, _loggerFactory.Object, _factory.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_multiplex()
 | 
			
		||||
        {
 | 
			
		||||
            var route = new RouteBuilder().WithDownstreamRoute(new DownstreamRouteBuilder().Build()).WithDownstreamRoute(new DownstreamRouteBuilder().Build()).Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheFollowing(route))
 | 
			
		||||
                .When(x => WhenIMultiplex())
 | 
			
		||||
                .Then(x => ThePipelineIsCalled(2))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_multiplex()
 | 
			
		||||
        {
 | 
			
		||||
            var route = new RouteBuilder().WithDownstreamRoute(new DownstreamRouteBuilder().Build()).Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheFollowing(route))
 | 
			
		||||
                .When(x => WhenIMultiplex())
 | 
			
		||||
                .Then(x => ThePipelineIsCalled(1))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheFollowing(Route route)
 | 
			
		||||
        {
 | 
			
		||||
            _downstreamRoute = new Ocelot.DownstreamRouteFinder.DownstreamRouteHolder(new List<PlaceholderNameAndValue>(), route);
 | 
			
		||||
            _httpContext.Items.UpsertDownstreamRoute(_downstreamRoute);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIMultiplex()
 | 
			
		||||
        {
 | 
			
		||||
            _middleware.Invoke(_httpContext).GetAwaiter().GetResult();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThePipelineIsCalled(int expected)
 | 
			
		||||
        {
 | 
			
		||||
            _count.ShouldBe(expected);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
    {
 | 
			
		||||
        private readonly InMemoryResponseAggregatorFactory _factory;
 | 
			
		||||
        private Mock<IDefinedAggregatorProvider> _provider;
 | 
			
		||||
        private ReRoute _reRoute;
 | 
			
		||||
        private Route _route;
 | 
			
		||||
        private IResponseAggregator _aggregator;
 | 
			
		||||
 | 
			
		||||
        public ResponseAggregatorFactoryTests()
 | 
			
		||||
@@ -25,10 +25,10 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_return_simple_json_aggregator()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder()
 | 
			
		||||
            var route = new RouteBuilder()
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenReRoute(reRoute))
 | 
			
		||||
            this.Given(_ => GivenRoute(route))
 | 
			
		||||
                .When(_ => WhenIGet())
 | 
			
		||||
                .Then(_ => ThenTheAggregatorIs<SimpleJsonResponseAggregator>())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
@@ -37,24 +37,24 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_return_user_defined_aggregator()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder()
 | 
			
		||||
            var route = new RouteBuilder()
 | 
			
		||||
                .WithAggregator("doesntmatter")
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenReRoute(reRoute))
 | 
			
		||||
            this.Given(_ => GivenRoute(route))
 | 
			
		||||
                .When(_ => WhenIGet())
 | 
			
		||||
                .Then(_ => ThenTheAggregatorIs<UserDefinedResponseAggregator>())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenReRoute(ReRoute reRoute)
 | 
			
		||||
        private void GivenRoute(Route route)
 | 
			
		||||
        {
 | 
			
		||||
            _reRoute = reRoute;
 | 
			
		||||
            _route = route;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIGet()
 | 
			
		||||
        {
 | 
			
		||||
            _aggregator = _factory.Get(_reRoute);
 | 
			
		||||
            _aggregator = _factory.Get(_route);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheAggregatorIs<T>()
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        private readonly SimpleJsonResponseAggregator _aggregator;
 | 
			
		||||
        private List<HttpContext> _downstreamContexts;
 | 
			
		||||
        private HttpContext _upstreamContext;
 | 
			
		||||
        private ReRoute _reRoute;
 | 
			
		||||
        private Route _route;
 | 
			
		||||
 | 
			
		||||
        public SimpleJsonResponseAggregatorTests()
 | 
			
		||||
        {
 | 
			
		||||
@@ -32,23 +32,23 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_aggregate_n_responses_and_set_response_content_on_upstream_context_withConfig()
 | 
			
		||||
        {
 | 
			
		||||
            var commentsDownstreamReRoute = new DownstreamReRouteBuilder().WithKey("Comments").Build();
 | 
			
		||||
            var commentsDownstreamRoute = new DownstreamRouteBuilder().WithKey("Comments").Build();
 | 
			
		||||
 | 
			
		||||
            var userDetailsDownstreamReRoute = new DownstreamReRouteBuilder().WithKey("UserDetails")
 | 
			
		||||
            var userDetailsDownstreamRoute = new DownstreamRouteBuilder().WithKey("UserDetails")
 | 
			
		||||
                .WithUpstreamPathTemplate(new UpstreamPathTemplate("", 0, false, "/v1/users/{userId}"))
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            var downstreamReRoutes = new List<DownstreamReRoute>
 | 
			
		||||
            var downstreamRoutes = new List<DownstreamRoute>
 | 
			
		||||
            {
 | 
			
		||||
                commentsDownstreamReRoute,
 | 
			
		||||
                userDetailsDownstreamReRoute
 | 
			
		||||
                commentsDownstreamRoute,
 | 
			
		||||
                userDetailsDownstreamRoute
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var reRoute = new ReRouteBuilder()
 | 
			
		||||
                .WithDownstreamReRoutes(downstreamReRoutes)
 | 
			
		||||
                .WithAggregateReRouteConfig(new List<AggregateReRouteConfig>()
 | 
			
		||||
            var route = new RouteBuilder()
 | 
			
		||||
                .WithDownstreamRoutes(downstreamRoutes)
 | 
			
		||||
                .WithAggregateRouteConfig(new List<AggregateRouteConfig>()
 | 
			
		||||
                {
 | 
			
		||||
                    new AggregateReRouteConfig(){ReRouteKey = "UserDetails",JsonPath = "$[*].writerId",Parameter = "userId"}
 | 
			
		||||
                    new AggregateRouteConfig(){RouteKey = "UserDetails",JsonPath = "$[*].writerId",Parameter = "userId"}
 | 
			
		||||
                })
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
@@ -56,19 +56,19 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
 | 
			
		||||
            var commentsDownstreamContext = new DefaultHttpContext();
 | 
			
		||||
            commentsDownstreamContext.Items.UpsertDownstreamResponse(new DownstreamResponse(new StringContent(commentsResponseContent, Encoding.UTF8, "application/json"), HttpStatusCode.OK, new EditableList<KeyValuePair<string, IEnumerable<string>>>(), "some reason"));
 | 
			
		||||
            commentsDownstreamContext.Items.UpsertDownstreamReRoute(commentsDownstreamReRoute);
 | 
			
		||||
            commentsDownstreamContext.Items.UpsertDownstreamRoute(commentsDownstreamRoute);
 | 
			
		||||
 | 
			
		||||
            var userDetailsResponseContent = @"[{""id"":1,""firstName"":""abolfazl"",""lastName"":""rajabpour""},{""id"":2,""firstName"":""reza"",""lastName"":""rezaei""}]";
 | 
			
		||||
            var userDetailsDownstreamContext = new DefaultHttpContext();
 | 
			
		||||
            userDetailsDownstreamContext.Items.UpsertDownstreamResponse(new DownstreamResponse(new StringContent(userDetailsResponseContent, Encoding.UTF8, "application/json"), HttpStatusCode.OK, new List<KeyValuePair<string, IEnumerable<string>>>(), "some reason"));
 | 
			
		||||
            userDetailsDownstreamContext.Items.UpsertDownstreamReRoute(userDetailsDownstreamReRoute);
 | 
			
		||||
            userDetailsDownstreamContext.Items.UpsertDownstreamRoute(userDetailsDownstreamRoute);
 | 
			
		||||
 | 
			
		||||
            var downstreamContexts = new List<HttpContext> { commentsDownstreamContext, userDetailsDownstreamContext };
 | 
			
		||||
 | 
			
		||||
            var expected = "{\"Comments\":" + commentsResponseContent + ",\"UserDetails\":" + userDetailsResponseContent + "}";
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheUpstreamContext(new DefaultHttpContext()))
 | 
			
		||||
                .And(x => GivenTheReRoute(reRoute))
 | 
			
		||||
                .And(x => GivenTheRoute(route))
 | 
			
		||||
                .And(x => GivenTheDownstreamContext(downstreamContexts))
 | 
			
		||||
                .When(x => WhenIAggregate())
 | 
			
		||||
                .Then(x => ThenTheContentIs(expected))
 | 
			
		||||
@@ -80,34 +80,34 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_aggregate_n_responses_and_set_response_content_on_upstream_context()
 | 
			
		||||
        {
 | 
			
		||||
            var billDownstreamReRoute = new DownstreamReRouteBuilder().WithKey("Bill").Build();
 | 
			
		||||
            var billDownstreamRoute = new DownstreamRouteBuilder().WithKey("Bill").Build();
 | 
			
		||||
 | 
			
		||||
            var georgeDownstreamReRoute = new DownstreamReRouteBuilder().WithKey("George").Build();
 | 
			
		||||
            var georgeDownstreamRoute = new DownstreamRouteBuilder().WithKey("George").Build();
 | 
			
		||||
 | 
			
		||||
            var downstreamReRoutes = new List<DownstreamReRoute>
 | 
			
		||||
            var downstreamRoutes = new List<DownstreamRoute>
 | 
			
		||||
            {
 | 
			
		||||
                billDownstreamReRoute,
 | 
			
		||||
                georgeDownstreamReRoute
 | 
			
		||||
                billDownstreamRoute,
 | 
			
		||||
                georgeDownstreamRoute
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var reRoute = new ReRouteBuilder()
 | 
			
		||||
                .WithDownstreamReRoutes(downstreamReRoutes)
 | 
			
		||||
            var route = new RouteBuilder()
 | 
			
		||||
                .WithDownstreamRoutes(downstreamRoutes)
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            var billDownstreamContext = new DefaultHttpContext();
 | 
			
		||||
            billDownstreamContext.Items.UpsertDownstreamResponse(new DownstreamResponse(new StringContent("Bill says hi"), HttpStatusCode.OK, new EditableList<KeyValuePair<string, IEnumerable<string>>>(), "some reason"));
 | 
			
		||||
            billDownstreamContext.Items.UpsertDownstreamReRoute(billDownstreamReRoute);
 | 
			
		||||
            billDownstreamContext.Items.UpsertDownstreamRoute(billDownstreamRoute);
 | 
			
		||||
 | 
			
		||||
            var georgeDownstreamContext = new DefaultHttpContext();
 | 
			
		||||
            georgeDownstreamContext.Items.UpsertDownstreamResponse(new DownstreamResponse(new StringContent("George says hi"), HttpStatusCode.OK, new List<KeyValuePair<string, IEnumerable<string>>>(), "some reason"));
 | 
			
		||||
            georgeDownstreamContext.Items.UpsertDownstreamReRoute(georgeDownstreamReRoute);
 | 
			
		||||
            georgeDownstreamContext.Items.UpsertDownstreamRoute(georgeDownstreamRoute);
 | 
			
		||||
 | 
			
		||||
            var downstreamContexts = new List<HttpContext> { billDownstreamContext, georgeDownstreamContext };
 | 
			
		||||
 | 
			
		||||
            var expected = "{\"Bill\":Bill says hi,\"George\":George says hi}";
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheUpstreamContext(new DefaultHttpContext()))
 | 
			
		||||
                .And(x => GivenTheReRoute(reRoute))
 | 
			
		||||
                .And(x => GivenTheRoute(route))
 | 
			
		||||
                .And(x => GivenTheDownstreamContext(downstreamContexts))
 | 
			
		||||
                .When(x => WhenIAggregate())
 | 
			
		||||
                .Then(x => ThenTheContentIs(expected))
 | 
			
		||||
@@ -119,27 +119,27 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_return_error_if_any_downstreams_have_errored()
 | 
			
		||||
        {
 | 
			
		||||
            var billDownstreamReRoute = new DownstreamReRouteBuilder().WithKey("Bill").Build();
 | 
			
		||||
            var billDownstreamRoute = new DownstreamRouteBuilder().WithKey("Bill").Build();
 | 
			
		||||
 | 
			
		||||
            var georgeDownstreamReRoute = new DownstreamReRouteBuilder().WithKey("George").Build();
 | 
			
		||||
            var georgeDownstreamRoute = new DownstreamRouteBuilder().WithKey("George").Build();
 | 
			
		||||
 | 
			
		||||
            var downstreamReRoutes = new List<DownstreamReRoute>
 | 
			
		||||
            var downstreamRoutes = new List<DownstreamRoute>
 | 
			
		||||
            {
 | 
			
		||||
                billDownstreamReRoute,
 | 
			
		||||
                georgeDownstreamReRoute
 | 
			
		||||
                billDownstreamRoute,
 | 
			
		||||
                georgeDownstreamRoute
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var reRoute = new ReRouteBuilder()
 | 
			
		||||
                .WithDownstreamReRoutes(downstreamReRoutes)
 | 
			
		||||
            var route = new RouteBuilder()
 | 
			
		||||
                .WithDownstreamRoutes(downstreamRoutes)
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            var billDownstreamContext = new DefaultHttpContext();
 | 
			
		||||
            billDownstreamContext.Items.UpsertDownstreamResponse(new DownstreamResponse(new StringContent("Bill says hi"), HttpStatusCode.OK, new List<KeyValuePair<string, IEnumerable<string>>>(), "some reason"));
 | 
			
		||||
            billDownstreamContext.Items.UpsertDownstreamReRoute(billDownstreamReRoute);
 | 
			
		||||
            billDownstreamContext.Items.UpsertDownstreamRoute(billDownstreamRoute);
 | 
			
		||||
 | 
			
		||||
            var georgeDownstreamContext = new DefaultHttpContext();
 | 
			
		||||
            georgeDownstreamContext.Items.UpsertDownstreamResponse(new DownstreamResponse(new StringContent("Error"), HttpStatusCode.OK, new List<KeyValuePair<string, IEnumerable<string>>>(), "some reason"));
 | 
			
		||||
            georgeDownstreamContext.Items.UpsertDownstreamReRoute(georgeDownstreamReRoute);
 | 
			
		||||
            georgeDownstreamContext.Items.UpsertDownstreamRoute(georgeDownstreamRoute);
 | 
			
		||||
 | 
			
		||||
            georgeDownstreamContext.Items.SetError(new AnyError());
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +148,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
            var expected = "Error";
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheUpstreamContext(new DefaultHttpContext()))
 | 
			
		||||
                .And(x => GivenTheReRoute(reRoute))
 | 
			
		||||
                .And(x => GivenTheRoute(route))
 | 
			
		||||
                .And(x => GivenTheDownstreamContext(downstreamContexts))
 | 
			
		||||
                .When(x => WhenIAggregate())
 | 
			
		||||
                .Then(x => ThenTheContentIs(expected))
 | 
			
		||||
@@ -167,9 +167,9 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
            _upstreamContext.Items.DownstreamResponse().ShouldBe(_downstreamContexts[1].Items.DownstreamResponse());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheReRoute(ReRoute reRoute)
 | 
			
		||||
        private void GivenTheRoute(Route route)
 | 
			
		||||
        {
 | 
			
		||||
            _reRoute = reRoute;
 | 
			
		||||
            _route = route;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheUpstreamContext(HttpContext upstreamContext)
 | 
			
		||||
@@ -184,7 +184,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
 | 
			
		||||
        private void WhenIAggregate()
 | 
			
		||||
        {
 | 
			
		||||
            _aggregator.Aggregate(_reRoute, _upstreamContext, _downstreamContexts).GetAwaiter().GetResult();
 | 
			
		||||
            _aggregator.Aggregate(_route, _upstreamContext, _downstreamContexts).GetAwaiter().GetResult();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheContentIs(string expected)
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
    {
 | 
			
		||||
        private readonly UserDefinedResponseAggregator _aggregator;
 | 
			
		||||
        private readonly Mock<IDefinedAggregatorProvider> _provider;
 | 
			
		||||
        private ReRoute _reRoute;
 | 
			
		||||
        private Route _route;
 | 
			
		||||
        private List<HttpContext> _contexts;
 | 
			
		||||
        private HttpContext _context;
 | 
			
		||||
 | 
			
		||||
@@ -34,7 +34,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_call_aggregator()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder().Build();
 | 
			
		||||
            var route = new RouteBuilder().Build();
 | 
			
		||||
 | 
			
		||||
            var context = new DefaultHttpContext();
 | 
			
		||||
 | 
			
		||||
@@ -51,7 +51,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenTheProviderReturnsAggregator())
 | 
			
		||||
                .And(_ => GivenReRoute(reRoute))
 | 
			
		||||
                .And(_ => GivenRoute(route))
 | 
			
		||||
                .And(_ => GivenContexts(contexts))
 | 
			
		||||
                .And(_ => GivenContext(context))
 | 
			
		||||
                .When(_ => WhenIAggregate())
 | 
			
		||||
@@ -63,7 +63,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_find_aggregator()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new ReRouteBuilder().Build();
 | 
			
		||||
            var route = new RouteBuilder().Build();
 | 
			
		||||
 | 
			
		||||
            var context = new DefaultHttpContext();
 | 
			
		||||
 | 
			
		||||
@@ -80,7 +80,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenTheProviderReturnsError())
 | 
			
		||||
                .And(_ => GivenReRoute(reRoute))
 | 
			
		||||
                .And(_ => GivenRoute(route))
 | 
			
		||||
                .And(_ => GivenContexts(contexts))
 | 
			
		||||
                .And(_ => GivenContext(context))
 | 
			
		||||
                .When(_ => WhenIAggregate())
 | 
			
		||||
@@ -97,7 +97,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
 | 
			
		||||
        private void GivenTheProviderReturnsError()
 | 
			
		||||
        {
 | 
			
		||||
            _provider.Setup(x => x.Get(It.IsAny<ReRoute>())).Returns(new ErrorResponse<IDefinedAggregator>(new AnyError()));
 | 
			
		||||
            _provider.Setup(x => x.Get(It.IsAny<Route>())).Returns(new ErrorResponse<IDefinedAggregator>(new AnyError()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task ThenTheContentIsCorrect()
 | 
			
		||||
@@ -108,7 +108,7 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
 | 
			
		||||
        private void ThenTheProviderIsCalled()
 | 
			
		||||
        {
 | 
			
		||||
            _provider.Verify(x => x.Get(_reRoute), Times.Once);
 | 
			
		||||
            _provider.Verify(x => x.Get(_route), Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenContext(HttpContext context)
 | 
			
		||||
@@ -123,18 +123,18 @@ namespace Ocelot.UnitTests.Multiplexing
 | 
			
		||||
 | 
			
		||||
        private async Task WhenIAggregate()
 | 
			
		||||
        {
 | 
			
		||||
            await _aggregator.Aggregate(_reRoute, _context, _contexts);
 | 
			
		||||
            await _aggregator.Aggregate(_route, _context, _contexts);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheProviderReturnsAggregator()
 | 
			
		||||
        {
 | 
			
		||||
            var aggregator = new TestDefinedAggregator();
 | 
			
		||||
            _provider.Setup(x => x.Get(It.IsAny<ReRoute>())).Returns(new OkResponse<IDefinedAggregator>(aggregator));
 | 
			
		||||
            _provider.Setup(x => x.Get(It.IsAny<Route>())).Returns(new OkResponse<IDefinedAggregator>(aggregator));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenReRoute(ReRoute reRoute)
 | 
			
		||||
        private void GivenRoute(Route route)
 | 
			
		||||
        {
 | 
			
		||||
            _reRoute = reRoute;
 | 
			
		||||
            _route = route;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public class TestDefinedAggregator : IDefinedAggregator
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user