Feature/should not start if specified using service discovery but no provider registered (#584)

* #580 added failing test

* #580 added failing test for dynamic reroutes

* #580 added failing test for validator

* #580 validation tests passing

* #580 acceptance tests passing

* #580 got rid of the list in sdp factory

* +semver: breaking #580 service discovery provider returned by delegate must be the same as name in config, this is a breaking change because you have to specify consul now

* #580 removed use servide discovery property from file config, we dont need it, just use the service name as indicator the user wants to use service discovery for the given reroute
This commit is contained in:
Tom Pallister
2018-08-31 18:28:43 +01:00
committed by GitHub
parent 0a7d81038e
commit 55277cac45
26 changed files with 821 additions and 255 deletions

View File

@ -14,11 +14,12 @@ namespace Ocelot.UnitTests.ServiceDiscovery
using Shouldly;
using TestStack.BDDfy;
using Xunit;
using Ocelot.Responses;
public class ServiceProviderFactoryTests
public class ServiceDiscoveryProviderFactoryTests
{
private ServiceProviderConfiguration _serviceConfig;
private IServiceDiscoveryProvider _result;
private Response<IServiceDiscoveryProvider> _result;
private ServiceDiscoveryProviderFactory _factory;
private DownstreamReRoute _reRoute;
private readonly Mock<IOcelotLoggerFactory> _loggerFactory;
@ -26,7 +27,7 @@ namespace Ocelot.UnitTests.ServiceDiscovery
private IServiceProvider _provider;
private readonly IServiceCollection _collection;
public ServiceProviderFactoryTests()
public ServiceDiscoveryProviderFactoryTests()
{
_loggerFactory = new Mock<IOcelotLoggerFactory>();
_logger = new Mock<IOcelotLogger>();
@ -71,7 +72,7 @@ namespace Ocelot.UnitTests.ServiceDiscovery
}
[Fact]
public void should_call_delegate()
public void should_return_provider_because_type_matches_reflected_type_from_delegate()
{
var reRoute = new DownstreamReRouteBuilder()
.WithServiceName("product")
@ -79,6 +80,7 @@ namespace Ocelot.UnitTests.ServiceDiscovery
.Build();
var serviceConfig = new ServiceProviderConfigurationBuilder()
.WithType(nameof(Fake))
.Build();
this.Given(x => x.GivenTheReRoute(serviceConfig, reRoute))
@ -88,6 +90,25 @@ namespace Ocelot.UnitTests.ServiceDiscovery
.BDDfy();
}
[Fact]
public void should_not_return_provider_because_type_doesnt_match_reflected_type_from_delegate()
{
var reRoute = new DownstreamReRouteBuilder()
.WithServiceName("product")
.WithUseServiceDiscovery(true)
.Build();
var serviceConfig = new ServiceProviderConfigurationBuilder()
.WithType("Wookie")
.Build();
this.Given(x => x.GivenTheReRoute(serviceConfig, reRoute))
.And(x => GivenAFakeDelegate())
.When(x => x.WhenIGetTheServiceProvider())
.Then(x => x.ThenTheResultIsError())
.BDDfy();
}
[Fact]
public void should_return_service_fabric_provider()
{
@ -124,12 +145,17 @@ namespace Ocelot.UnitTests.ServiceDiscovery
private void ThenTheDelegateIsCalled()
{
_result.GetType().Name.ShouldBe("Fake");
_result.Data.GetType().Name.ShouldBe("Fake");
}
private void ThenTheResultIsError()
{
_result.IsError.ShouldBeTrue();
}
private void ThenTheFollowingServicesAreReturned(List<DownstreamHostAndPort> downstreamAddresses)
{
var result = (ConfigurationServiceProvider)_result;
var result = (ConfigurationServiceProvider)_result.Data;
var services = result.Get().Result;
for (int i = 0; i < services.Count; i++)
@ -155,7 +181,7 @@ namespace Ocelot.UnitTests.ServiceDiscovery
private void ThenTheServiceProviderIs<T>()
{
_result.ShouldBeOfType<T>();
_result.Data.ShouldBeOfType<T>();
}
}
}