diff --git a/src/Ocelot/DownstreamRouteFinder/Finder/DownstreamRouteFinder.cs b/src/Ocelot/DownstreamRouteFinder/Finder/DownstreamRouteFinder.cs index cd2c098f..d6509b23 100644 --- a/src/Ocelot/DownstreamRouteFinder/Finder/DownstreamRouteFinder.cs +++ b/src/Ocelot/DownstreamRouteFinder/Finder/DownstreamRouteFinder.cs @@ -27,7 +27,7 @@ namespace Ocelot.DownstreamRouteFinder.Finder { upstreamUrlPath = upstreamUrlPath.SetLastCharacterAs('/'); - var configuration = await _configProvider.Get(); + var configuration = await _configProvider.Get(); var applicableReRoutes = configuration.Data.ReRoutes.Where(r => r.UpstreamHttpMethod.Count == 0 || r.UpstreamHttpMethod.Select(x => x.Method.ToLower()).Contains(upstreamHttpMethod.ToLower())); diff --git a/src/Ocelot/LoadBalancer/LoadBalancerCreator.cs b/src/Ocelot/LoadBalancer/LoadBalancerCreator.cs new file mode 100644 index 00000000..70a42148 --- /dev/null +++ b/src/Ocelot/LoadBalancer/LoadBalancerCreator.cs @@ -0,0 +1,24 @@ +using System.Threading.Tasks; +using Ocelot.Configuration; +using Ocelot.LoadBalancer.LoadBalancers; + +namespace Ocelot.LoadBalancer +{ + public class LoadBalancerCreator + { + private readonly ILoadBalancerHouse _loadBalancerHouse; + private readonly ILoadBalancerFactory _loadBalanceFactory; + + public LoadBalancerCreator(ILoadBalancerHouse loadBalancerHouse, ILoadBalancerFactory loadBalancerFactory) + { + _loadBalancerHouse = loadBalancerHouse; + _loadBalanceFactory = loadBalancerFactory; + } + + public async Task SetupLoadBalancer(ReRoute reRoute) + { + var loadBalancer = await _loadBalanceFactory.Get(reRoute); + _loadBalancerHouse.Add(reRoute.ReRouteKey, loadBalancer); + } + } +} \ No newline at end of file diff --git a/test/Ocelot.UnitTests/LoadBalancer/LoadBalancerCreatorTests.cs b/test/Ocelot.UnitTests/LoadBalancer/LoadBalancerCreatorTests.cs new file mode 100644 index 00000000..9b9a2df1 --- /dev/null +++ b/test/Ocelot.UnitTests/LoadBalancer/LoadBalancerCreatorTests.cs @@ -0,0 +1,57 @@ +using Xunit; +using Shouldly; +using TestStack.BDDfy; +using Ocelot.LoadBalancer; +using Ocelot.LoadBalancer.LoadBalancers; +using Moq; +using Ocelot.Configuration; +using System.Collections.Generic; +using Ocelot.Values; +using Ocelot.Configuration.Builder; + +namespace Ocelot.UnitTests.LoadBalancer +{ + public class LoadBalancerCreatorTests + { + private LoadBalancerCreator _creator; + private ILoadBalancerHouse _house; + private Mock _factory; + private ReRoute _reRoute; + + public LoadBalancerCreatorTests() + { + _house = new LoadBalancerHouse(); + _factory = new Mock(); + _creator = new LoadBalancerCreator(_house, _factory.Object); + } + + [Fact] + public void should_create_load_balancer() + { + var reRoute = new ReRouteBuilder().WithLoadBalancerKey("Test").Build(); + this.Given(x => GivenTheFollowingReRoute(reRoute)) + .When(x => WhenICallTheCreator()) + .Then(x => x.ThenTheLoadBalancerIsCreated()) + .BDDfy(); + } + + private void GivenTheFollowingReRoute(ReRoute reRoute) + { + _reRoute = reRoute; + _factory + .Setup(x => x.Get(It.IsAny())) + .ReturnsAsync(new NoLoadBalancer(new List())); + } + + private void WhenICallTheCreator() + { + _creator.SetupLoadBalancer(_reRoute).Wait(); + } + + private void ThenTheLoadBalancerIsCreated() + { + var lb = _house.Get(_reRoute.ReRouteKey); + lb.ShouldNotBeNull(); + } + } +} \ No newline at end of file