mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 20:50:49 +08:00 
			
		
		
		
	This commit is contained in:
		@@ -1,297 +0,0 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Consul;
 | 
			
		||||
using Microsoft.AspNetCore.Builder;
 | 
			
		||||
using Microsoft.AspNetCore.Hosting;
 | 
			
		||||
using Microsoft.AspNetCore.Http;
 | 
			
		||||
using Moq;
 | 
			
		||||
using Ocelot.Infrastructure.Consul;
 | 
			
		||||
using Ocelot.Logging;
 | 
			
		||||
using Ocelot.ServiceDiscovery.Configuration;
 | 
			
		||||
using Ocelot.ServiceDiscovery.Providers;
 | 
			
		||||
using Ocelot.Values;
 | 
			
		||||
using Xunit;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
{
 | 
			
		||||
    public class ConsulServiceDiscoveryProviderTests : IDisposable
 | 
			
		||||
    {
 | 
			
		||||
        private IWebHost _fakeConsulBuilder;
 | 
			
		||||
        private readonly List<ServiceEntry> _serviceEntries;
 | 
			
		||||
        private ConsulServiceDiscoveryProvider _provider;
 | 
			
		||||
        private readonly string _serviceName;
 | 
			
		||||
        private readonly int _port;
 | 
			
		||||
        private readonly string _consulHost;
 | 
			
		||||
        private readonly string _fakeConsulServiceDiscoveryUrl;
 | 
			
		||||
        private List<Service> _services;
 | 
			
		||||
        private readonly Mock<IOcelotLoggerFactory> _factory;
 | 
			
		||||
        private readonly Mock<IOcelotLogger> _logger;
 | 
			
		||||
        private string _receivedToken;
 | 
			
		||||
        private readonly IConsulClientFactory _clientFactory;
 | 
			
		||||
 | 
			
		||||
        public ConsulServiceDiscoveryProviderTests()
 | 
			
		||||
        {
 | 
			
		||||
            _serviceName = "test";
 | 
			
		||||
            _port = 8500;
 | 
			
		||||
            _consulHost = "localhost";
 | 
			
		||||
            _fakeConsulServiceDiscoveryUrl = $"http://{_consulHost}:{_port}";
 | 
			
		||||
            _serviceEntries = new List<ServiceEntry>();
 | 
			
		||||
 | 
			
		||||
            _factory = new Mock<IOcelotLoggerFactory>();
 | 
			
		||||
            _clientFactory = new ConsulClientFactory();
 | 
			
		||||
            _logger = new Mock<IOcelotLogger>();
 | 
			
		||||
            _factory.Setup(x => x.CreateLogger<ConsulServiceDiscoveryProvider>()).Returns(_logger.Object);
 | 
			
		||||
 | 
			
		||||
            var config = new ConsulRegistryConfiguration(_consulHost, _port, _serviceName, null);
 | 
			
		||||
            _provider = new ConsulServiceDiscoveryProvider(config, _factory.Object, _clientFactory);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_return_service_from_consul()
 | 
			
		||||
        {
 | 
			
		||||
            var serviceEntryOne = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = "localhost",
 | 
			
		||||
                    Port = 50881,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this.Given(x =>GivenThereIsAFakeConsulServiceDiscoveryProvider(_fakeConsulServiceDiscoveryUrl, _serviceName))
 | 
			
		||||
                .And(x => GivenTheServicesAreRegisteredWithConsul(serviceEntryOne))
 | 
			
		||||
                .When(x => WhenIGetTheServices())
 | 
			
		||||
                .Then(x => ThenTheCountIs(1))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_use_token()
 | 
			
		||||
        {
 | 
			
		||||
            var token = "test token";
 | 
			
		||||
            var config = new ConsulRegistryConfiguration(_consulHost, _port, _serviceName, token);
 | 
			
		||||
            _provider = new ConsulServiceDiscoveryProvider(config, _factory.Object, _clientFactory);
 | 
			
		||||
 | 
			
		||||
            var serviceEntryOne = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = "localhost",
 | 
			
		||||
                    Port = 50881,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenThereIsAFakeConsulServiceDiscoveryProvider(_fakeConsulServiceDiscoveryUrl, _serviceName))
 | 
			
		||||
                .And(_ => GivenTheServicesAreRegisteredWithConsul(serviceEntryOne))
 | 
			
		||||
                .When(_ => WhenIGetTheServices())
 | 
			
		||||
                .Then(_ => ThenTheCountIs(1))
 | 
			
		||||
                .And(_ => _receivedToken.ShouldBe(token))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_return_services_with_invalid_address()
 | 
			
		||||
        {
 | 
			
		||||
            var serviceEntryOne = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = "http://localhost",
 | 
			
		||||
                    Port = 50881,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var serviceEntryTwo = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = "http://localhost",
 | 
			
		||||
                    Port = 50888,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenThereIsAFakeConsulServiceDiscoveryProvider(_fakeConsulServiceDiscoveryUrl, _serviceName))
 | 
			
		||||
                .And(x => GivenTheServicesAreRegisteredWithConsul(serviceEntryOne, serviceEntryTwo))
 | 
			
		||||
                .When(x => WhenIGetTheServices())
 | 
			
		||||
                .Then(x => ThenTheCountIs(0))
 | 
			
		||||
                .And(x => ThenTheLoggerHasBeenCalledCorrectlyForInvalidAddress())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_return_services_with_empty_address()
 | 
			
		||||
        {
 | 
			
		||||
            var serviceEntryOne = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = "",
 | 
			
		||||
                    Port = 50881,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var serviceEntryTwo = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = null,
 | 
			
		||||
                    Port = 50888,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenThereIsAFakeConsulServiceDiscoveryProvider(_fakeConsulServiceDiscoveryUrl, _serviceName))
 | 
			
		||||
                .And(x => GivenTheServicesAreRegisteredWithConsul(serviceEntryOne, serviceEntryTwo))
 | 
			
		||||
                .When(x => WhenIGetTheServices())
 | 
			
		||||
                .Then(x => ThenTheCountIs(0))
 | 
			
		||||
                .And(x => ThenTheLoggerHasBeenCalledCorrectlyForEmptyAddress())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_return_services_with_invalid_port()
 | 
			
		||||
        {
 | 
			
		||||
            var serviceEntryOne = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = "localhost",
 | 
			
		||||
                    Port = -1,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var serviceEntryTwo = new ServiceEntry()
 | 
			
		||||
            {
 | 
			
		||||
                Service = new AgentService()
 | 
			
		||||
                {
 | 
			
		||||
                    Service = _serviceName,
 | 
			
		||||
                    Address = "localhost",
 | 
			
		||||
                    Port = 0,
 | 
			
		||||
                    ID = Guid.NewGuid().ToString(),
 | 
			
		||||
                    Tags = new string[0]
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenThereIsAFakeConsulServiceDiscoveryProvider(_fakeConsulServiceDiscoveryUrl, _serviceName))
 | 
			
		||||
                .And(x => GivenTheServicesAreRegisteredWithConsul(serviceEntryOne, serviceEntryTwo))
 | 
			
		||||
                .When(x => WhenIGetTheServices())
 | 
			
		||||
                .Then(x => ThenTheCountIs(0))
 | 
			
		||||
                .And(x => ThenTheLoggerHasBeenCalledCorrectlyForInvalidPorts())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheLoggerHasBeenCalledCorrectlyForInvalidAddress()
 | 
			
		||||
        {
 | 
			
		||||
            _logger.Verify(
 | 
			
		||||
                x => x.LogWarning(
 | 
			
		||||
                    "Unable to use service Address: http://localhost and Port: 50881 as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"),
 | 
			
		||||
                Times.Once);
 | 
			
		||||
 | 
			
		||||
            _logger.Verify(
 | 
			
		||||
                x => x.LogWarning(
 | 
			
		||||
                    "Unable to use service Address: http://localhost and Port: 50888 as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"),
 | 
			
		||||
                Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheLoggerHasBeenCalledCorrectlyForEmptyAddress()
 | 
			
		||||
        {
 | 
			
		||||
            _logger.Verify(
 | 
			
		||||
                x => x.LogWarning(
 | 
			
		||||
                    "Unable to use service Address:  and Port: 50881 as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"),
 | 
			
		||||
                Times.Once);
 | 
			
		||||
 | 
			
		||||
            _logger.Verify(
 | 
			
		||||
                x => x.LogWarning(
 | 
			
		||||
                    "Unable to use service Address:  and Port: 50888 as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"),
 | 
			
		||||
                Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheLoggerHasBeenCalledCorrectlyForInvalidPorts()
 | 
			
		||||
        {
 | 
			
		||||
            _logger.Verify(
 | 
			
		||||
                x => x.LogWarning(
 | 
			
		||||
                    "Unable to use service Address: localhost and Port: -1 as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"),
 | 
			
		||||
                Times.Once);
 | 
			
		||||
 | 
			
		||||
            _logger.Verify(
 | 
			
		||||
                x => x.LogWarning(
 | 
			
		||||
                    "Unable to use service Address: localhost and Port: 0 as it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"),
 | 
			
		||||
                Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheCountIs(int count)
 | 
			
		||||
        {
 | 
			
		||||
            _services.Count.ShouldBe(count);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIGetTheServices()
 | 
			
		||||
        {
 | 
			
		||||
            _services = _provider.Get().GetAwaiter().GetResult();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheServicesAreRegisteredWithConsul(params ServiceEntry[] serviceEntries)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (var serviceEntry in serviceEntries)
 | 
			
		||||
            {
 | 
			
		||||
                _serviceEntries.Add(serviceEntry);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenThereIsAFakeConsulServiceDiscoveryProvider(string url, string serviceName)
 | 
			
		||||
        {
 | 
			
		||||
            _fakeConsulBuilder = new WebHostBuilder()
 | 
			
		||||
                .UseUrls(url)
 | 
			
		||||
                .UseKestrel()
 | 
			
		||||
                .UseContentRoot(Directory.GetCurrentDirectory())
 | 
			
		||||
                .UseIISIntegration()
 | 
			
		||||
                .UseUrls(url)
 | 
			
		||||
                .Configure(app =>
 | 
			
		||||
                {
 | 
			
		||||
                    app.Run(async context =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if (context.Request.Path.Value == $"/v1/health/service/{serviceName}")
 | 
			
		||||
                        {
 | 
			
		||||
                            if (context.Request.Headers.TryGetValue("X-Consul-Token", out var values))
 | 
			
		||||
                            {
 | 
			
		||||
                                _receivedToken = values.First();
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            await context.Response.WriteJsonAsync(_serviceEntries);
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
                })
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            _fakeConsulBuilder.Start();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Dispose()
 | 
			
		||||
        {
 | 
			
		||||
            _fakeConsulBuilder?.Dispose();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,80 +0,0 @@
 | 
			
		||||
namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
{
 | 
			
		||||
    using System;
 | 
			
		||||
    using System.Collections.Generic;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.ServiceDiscovery.Providers;
 | 
			
		||||
    using Ocelot.Values;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Shouldly;
 | 
			
		||||
    using static Ocelot.Infrastructure.Wait;
 | 
			
		||||
 | 
			
		||||
    public class PollingConsulServiceDiscoveryProviderTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly int _delay;
 | 
			
		||||
        private PollingConsulServiceDiscoveryProvider _provider;
 | 
			
		||||
        private readonly List<Service> _services;
 | 
			
		||||
        private readonly Mock<IOcelotLoggerFactory> _factory;
 | 
			
		||||
        private readonly Mock<IOcelotLogger> _logger;
 | 
			
		||||
        private readonly Mock<IServiceDiscoveryProvider> _consulServiceDiscoveryProvider;
 | 
			
		||||
        private List<Service> _result;
 | 
			
		||||
 | 
			
		||||
        public PollingConsulServiceDiscoveryProviderTests()
 | 
			
		||||
        {
 | 
			
		||||
            _services = new List<Service>();
 | 
			
		||||
            _delay = 1;
 | 
			
		||||
            _factory = new Mock<IOcelotLoggerFactory>();
 | 
			
		||||
            _logger = new Mock<IOcelotLogger>();
 | 
			
		||||
            _factory.Setup(x => x.CreateLogger<PollingConsulServiceDiscoveryProvider>()).Returns(_logger.Object);
 | 
			
		||||
            _consulServiceDiscoveryProvider = new Mock<IServiceDiscoveryProvider>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_return_service_from_consul()
 | 
			
		||||
        {
 | 
			
		||||
            var service = new Service("", new ServiceHostAndPort("", 0), "", "", new List<string>());
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenConsulReturns(service))
 | 
			
		||||
                .When(x => WhenIGetTheServices(1))
 | 
			
		||||
                .Then(x => ThenTheCountIs(1))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenConsulReturns(Service service)
 | 
			
		||||
        {
 | 
			
		||||
            _services.Add(service);
 | 
			
		||||
            _consulServiceDiscoveryProvider.Setup(x => x.Get()).ReturnsAsync(_services);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheCountIs(int count)
 | 
			
		||||
        {
 | 
			
		||||
            _result.Count.ShouldBe(count);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIGetTheServices(int expected)
 | 
			
		||||
        {
 | 
			
		||||
            _provider = new PollingConsulServiceDiscoveryProvider(_delay, "", _factory.Object, _consulServiceDiscoveryProvider.Object);
 | 
			
		||||
 | 
			
		||||
            var result = WaitFor(3000).Until(() => {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    _result = _provider.Get().GetAwaiter().GetResult();
 | 
			
		||||
                    if(_result.Count == expected)
 | 
			
		||||
                    {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                catch(Exception)
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            result.ShouldBeTrue();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,23 +1,12 @@
 | 
			
		||||
using Ocelot.ServiceDiscovery.Configuration;
 | 
			
		||||
using Ocelot.ServiceDiscovery.Providers;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
{
 | 
			
		||||
    using System;
 | 
			
		||||
    using System.Collections.Generic;
 | 
			
		||||
    using System.IO;
 | 
			
		||||
    using System.Text;
 | 
			
		||||
    using Consul;
 | 
			
		||||
    using Microsoft.AspNetCore.Builder;
 | 
			
		||||
    using Microsoft.AspNetCore.Hosting;
 | 
			
		||||
    using Microsoft.AspNetCore.Http;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.ServiceDiscovery;
 | 
			
		||||
    using Ocelot.Values;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Shouldly;
 | 
			
		||||
    using Ocelot.ServiceDiscovery.Configuration;
 | 
			
		||||
    using Ocelot.ServiceDiscovery.Providers;
 | 
			
		||||
 | 
			
		||||
    public class ServiceFabricServiceDiscoveryProviderTests
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,41 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using Moq;
 | 
			
		||||
using Ocelot.Configuration;
 | 
			
		||||
using Ocelot.Configuration.Builder;
 | 
			
		||||
using Ocelot.Infrastructure.Consul;
 | 
			
		||||
using Ocelot.Logging;
 | 
			
		||||
using Ocelot.ServiceDiscovery;
 | 
			
		||||
using Ocelot.ServiceDiscovery.Providers;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
{
 | 
			
		||||
    using Pivotal.Discovery.Client;
 | 
			
		||||
    using System;
 | 
			
		||||
    using System.Threading.Tasks;
 | 
			
		||||
    using Microsoft.Extensions.DependencyInjection;
 | 
			
		||||
    using Steeltoe.Common.Discovery;
 | 
			
		||||
    using Values;
 | 
			
		||||
    using System.Collections.Generic;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Configuration;
 | 
			
		||||
    using Ocelot.Configuration.Builder;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.ServiceDiscovery;
 | 
			
		||||
    using Ocelot.ServiceDiscovery.Providers;
 | 
			
		||||
    using Shouldly;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
 | 
			
		||||
    public class ServiceProviderFactoryTests
 | 
			
		||||
    {
 | 
			
		||||
        private ServiceProviderConfiguration _serviceConfig;
 | 
			
		||||
        private IServiceDiscoveryProvider _result;
 | 
			
		||||
        private readonly ServiceDiscoveryProviderFactory _factory;
 | 
			
		||||
        private ServiceDiscoveryProviderFactory _factory;
 | 
			
		||||
        private DownstreamReRoute _reRoute;
 | 
			
		||||
        private Mock<IOcelotLoggerFactory> _loggerFactory;
 | 
			
		||||
        private Mock<IDiscoveryClient> _discoveryClient;
 | 
			
		||||
        private Mock<IOcelotLogger> _logger;
 | 
			
		||||
        private IServiceProvider _provider;
 | 
			
		||||
        private IServiceCollection _collection;
 | 
			
		||||
 | 
			
		||||
        public ServiceProviderFactoryTests()
 | 
			
		||||
        {
 | 
			
		||||
            _loggerFactory = new Mock<IOcelotLoggerFactory>();
 | 
			
		||||
            _logger = new Mock<IOcelotLogger>();
 | 
			
		||||
            _loggerFactory.Setup(x => x.CreateLogger<PollingConsulServiceDiscoveryProvider>()).Returns(_logger.Object);
 | 
			
		||||
            _discoveryClient = new Mock<IDiscoveryClient>();
 | 
			
		||||
            var consulClient = new Mock<IConsulClientFactory>();
 | 
			
		||||
            _factory = new ServiceDiscoveryProviderFactory(_loggerFactory.Object, consulClient.Object, _discoveryClient.Object);
 | 
			
		||||
            _collection = new ServiceCollection();
 | 
			
		||||
            _provider = _collection.BuildServiceProvider();
 | 
			
		||||
            _factory = new ServiceDiscoveryProviderFactory(_loggerFactory.Object, _discoveryClient.Object, _provider);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        [Fact]
 | 
			
		||||
@@ -72,7 +74,7 @@ namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_return_consul_service_provider()
 | 
			
		||||
        public void should_call_delegate()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new DownstreamReRouteBuilder()
 | 
			
		||||
                .WithServiceName("product")
 | 
			
		||||
@@ -83,27 +85,9 @@ namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => x.GivenTheReRoute(serviceConfig, reRoute))
 | 
			
		||||
                .And(x => GivenAFakeDelegate())
 | 
			
		||||
                .When(x => x.WhenIGetTheServiceProvider())
 | 
			
		||||
                .Then(x => x.ThenTheServiceProviderIs<ConsulServiceDiscoveryProvider>())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_return_polling_consul_service_provider()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoute = new DownstreamReRouteBuilder()
 | 
			
		||||
                .WithServiceName("product")
 | 
			
		||||
                .WithUseServiceDiscovery(true)
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            var serviceConfig = new ServiceProviderConfigurationBuilder()
 | 
			
		||||
                .WithType("PollConsul")
 | 
			
		||||
                .WithPollingInterval(100000)
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => x.GivenTheReRoute(serviceConfig, reRoute))
 | 
			
		||||
                .When(x => x.WhenIGetTheServiceProvider())
 | 
			
		||||
                .Then(x => x.ThenTheServiceProviderIs<PollingConsulServiceDiscoveryProvider>())
 | 
			
		||||
                .Then(x => x.ThenTheDelegateIsCalled())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -143,6 +127,27 @@ namespace Ocelot.UnitTests.ServiceDiscovery
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenAFakeDelegate()
 | 
			
		||||
        {
 | 
			
		||||
            ServiceDiscoveryFinderDelegate fake = (provider, config, name) => new Fake();
 | 
			
		||||
            _collection.AddSingleton(fake);
 | 
			
		||||
            _provider = _collection.BuildServiceProvider();
 | 
			
		||||
            _factory = new ServiceDiscoveryProviderFactory(_loggerFactory.Object, _discoveryClient.Object, _provider);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        class Fake : IServiceDiscoveryProvider
 | 
			
		||||
        {
 | 
			
		||||
            public Task<List<Service>> Get()
 | 
			
		||||
            {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheDelegateIsCalled()
 | 
			
		||||
        {
 | 
			
		||||
            _result.GetType().Name.ShouldBe("Fake");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheFollowingServicesAreReturned(List<DownstreamHostAndPort> downstreamAddresses)
 | 
			
		||||
        {
 | 
			
		||||
            var result = (ConfigurationServiceProvider)_result;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user