mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 15:30:49 +08:00 
			
		
		
		
	Cover LoadBalancerFactory edge-case by a unit test.
This commit is contained in:
		@@ -8,6 +8,7 @@ using Ocelot.ServiceDiscovery.Providers;
 | 
				
			|||||||
using Shouldly;
 | 
					using Shouldly;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Ocelot.Infrastructure.RequestData;
 | 
				
			||||||
using Ocelot.Middleware;
 | 
					using Ocelot.Middleware;
 | 
				
			||||||
using Ocelot.Values;
 | 
					using Ocelot.Values;
 | 
				
			||||||
using TestStack.BDDfy;
 | 
					using TestStack.BDDfy;
 | 
				
			||||||
@@ -39,7 +40,7 @@ namespace Ocelot.UnitTests.LoadBalancer
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void should_return_no_load_balancer()
 | 
					        public void should_return_no_load_balancer_by_default()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var reRoute = new DownstreamReRouteBuilder()
 | 
					            var reRoute = new DownstreamReRouteBuilder()
 | 
				
			||||||
                .WithUpstreamHttpMethod(new List<string> { "Get" })
 | 
					                .WithUpstreamHttpMethod(new List<string> { "Get" })
 | 
				
			||||||
@@ -85,6 +86,22 @@ namespace Ocelot.UnitTests.LoadBalancer
 | 
				
			|||||||
                .BDDfy();
 | 
					                .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<string> { "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)
 | 
					        private void GivenAServiceProviderConfig(ServiceProviderConfiguration serviceProviderConfig)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _serviceProviderConfig = serviceProviderConfig;
 | 
					            _serviceProviderConfig = serviceProviderConfig;
 | 
				
			||||||
@@ -97,6 +114,13 @@ namespace Ocelot.UnitTests.LoadBalancer
 | 
				
			|||||||
                .Returns(new OkResponse<IServiceDiscoveryProvider>(_serviceProvider.Object));
 | 
					                .Returns(new OkResponse<IServiceDiscoveryProvider>(_serviceProvider.Object));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void GivenTheServiceProviderFactoryFails()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _serviceProviderFactory
 | 
				
			||||||
 | 
					                .Setup(x => x.Get(It.IsAny<ServiceProviderConfiguration>(), It.IsAny<DownstreamReRoute>()))
 | 
				
			||||||
 | 
					                .Returns(new ErrorResponse<IServiceDiscoveryProvider>(new CannotFindDataError("For tests")));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void ThenTheServiceProviderIsCalledCorrectly()
 | 
					        private void ThenTheServiceProviderIsCalledCorrectly()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _serviceProviderFactory
 | 
					            _serviceProviderFactory
 | 
				
			||||||
@@ -118,6 +142,11 @@ namespace Ocelot.UnitTests.LoadBalancer
 | 
				
			|||||||
            _result.Data.ShouldBeOfType<T>();
 | 
					            _result.Data.ShouldBeOfType<T>();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void ThenAnErrorResponseIsReturned()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _result.IsError.ShouldBeTrue();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private class FakeLoadBalancerCreator<T> : ILoadBalancerCreator
 | 
					        private class FakeLoadBalancerCreator<T> : ILoadBalancerCreator
 | 
				
			||||||
            where T : ILoadBalancer, new()
 | 
					            where T : ILoadBalancer, new()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user