diff --git a/test/Ocelot.UnitTests/LoadBalancer/LoadBalancerFactoryTests.cs b/test/Ocelot.UnitTests/LoadBalancer/LoadBalancerFactoryTests.cs index 70b9a837..bd9ac6c0 100644 --- a/test/Ocelot.UnitTests/LoadBalancer/LoadBalancerFactoryTests.cs +++ b/test/Ocelot.UnitTests/LoadBalancer/LoadBalancerFactoryTests.cs @@ -8,6 +8,7 @@ using Ocelot.ServiceDiscovery.Providers; using Shouldly; using System.Collections.Generic; using System.Threading.Tasks; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; using Ocelot.Values; using TestStack.BDDfy; @@ -39,7 +40,7 @@ namespace Ocelot.UnitTests.LoadBalancer } [Fact] - public void should_return_no_load_balancer() + public void should_return_no_load_balancer_by_default() { var reRoute = new DownstreamReRouteBuilder() .WithUpstreamHttpMethod(new List { "Get" }) @@ -85,6 +86,22 @@ namespace Ocelot.UnitTests.LoadBalancer .BDDfy(); } + [Fact] + public void should_return_error_response_when_call_to_service_provider_fails() + { + var reRoute = new DownstreamReRouteBuilder() + .WithLoadBalancerOptions(new LoadBalancerOptions("FakeLoadBalancerOne", "", 0)) + .WithUpstreamHttpMethod(new List { "Get" }) + .Build(); + + this.Given(x => x.GivenAReRoute(reRoute)) + .And(x => GivenAServiceProviderConfig(new ServiceProviderConfigurationBuilder().Build())) + .And(x => x.GivenTheServiceProviderFactoryFails()) + .When(x => x.WhenIGetTheLoadBalancer()) + .Then(x => x.ThenAnErrorResponseIsReturned()) + .BDDfy(); + } + private void GivenAServiceProviderConfig(ServiceProviderConfiguration serviceProviderConfig) { _serviceProviderConfig = serviceProviderConfig; @@ -97,6 +114,13 @@ namespace Ocelot.UnitTests.LoadBalancer .Returns(new OkResponse(_serviceProvider.Object)); } + private void GivenTheServiceProviderFactoryFails() + { + _serviceProviderFactory + .Setup(x => x.Get(It.IsAny(), It.IsAny())) + .Returns(new ErrorResponse(new CannotFindDataError("For tests"))); + } + private void ThenTheServiceProviderIsCalledCorrectly() { _serviceProviderFactory @@ -118,6 +142,11 @@ namespace Ocelot.UnitTests.LoadBalancer _result.Data.ShouldBeOfType(); } + private void ThenAnErrorResponseIsReturned() + { + _result.IsError.ShouldBeTrue(); + } + private class FakeLoadBalancerCreator : ILoadBalancerCreator where T : ILoadBalancer, new() {