mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 12:10:50 +08:00 
			
		
		
		
	Feature/service discovery config key (#347)
* #346 make service discoery config key configurable * #346 missed this test * #346 updated docs
This commit is contained in:
		@@ -1,219 +1,260 @@
 | 
			
		||||
namespace Ocelot.UnitTests.Configuration
 | 
			
		||||
{
 | 
			
		||||
    using Xunit;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Shouldly;
 | 
			
		||||
    using Ocelot.Configuration.Repository;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Infrastructure.Consul;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.Configuration.File;
 | 
			
		||||
    using Ocelot.Cache;
 | 
			
		||||
    using System;
 | 
			
		||||
    using System.Collections.Generic;
 | 
			
		||||
    using Ocelot.Responses;
 | 
			
		||||
    using System.Threading.Tasks;
 | 
			
		||||
    using Ocelot.Configuration;
 | 
			
		||||
    using Ocelot.Configuration.Builder;
 | 
			
		||||
    using Ocelot.ServiceDiscovery.Configuration;
 | 
			
		||||
    using Consul;
 | 
			
		||||
    using Newtonsoft.Json;
 | 
			
		||||
    using System.Text;
 | 
			
		||||
    using System.Threading;
 | 
			
		||||
    using System.Linq;
 | 
			
		||||
 | 
			
		||||
    public class ConsulFileConfigurationRepositoryTests
 | 
			
		||||
    {
 | 
			
		||||
        private ConsulFileConfigurationRepository _repo;
 | 
			
		||||
        private Mock<IOcelotCache<FileConfiguration>> _cache;
 | 
			
		||||
        private Mock<IInternalConfigurationRepository> _internalRepo;
 | 
			
		||||
        private Mock<IConsulClientFactory> _factory;
 | 
			
		||||
        private Mock<IOcelotLoggerFactory> _loggerFactory;
 | 
			
		||||
        private Mock<IConsulClient> _client;
 | 
			
		||||
        private Mock<IKVEndpoint> _kvEndpoint;
 | 
			
		||||
        private FileConfiguration _fileConfiguration;
 | 
			
		||||
        private Response _setResult;
 | 
			
		||||
        private Response<FileConfiguration> _getResult;
 | 
			
		||||
 | 
			
		||||
        public ConsulFileConfigurationRepositoryTests()
 | 
			
		||||
        {
 | 
			
		||||
            _cache = new Mock<IOcelotCache<FileConfiguration>>();
 | 
			
		||||
            _internalRepo = new Mock<IInternalConfigurationRepository>();
 | 
			
		||||
            _loggerFactory = new Mock<IOcelotLoggerFactory>();
 | 
			
		||||
 | 
			
		||||
            _factory = new Mock<IConsulClientFactory>();
 | 
			
		||||
            _client = new Mock<IConsulClient>();
 | 
			
		||||
            _kvEndpoint = new Mock<IKVEndpoint>();
 | 
			
		||||
 | 
			
		||||
            _client
 | 
			
		||||
                .Setup(x => x.KV)
 | 
			
		||||
                .Returns(_kvEndpoint.Object);
 | 
			
		||||
            _factory
 | 
			
		||||
                .Setup(x => x.Get(It.IsAny<ConsulRegistryConfiguration>()))
 | 
			
		||||
                .Returns(_client.Object);
 | 
			
		||||
 | 
			
		||||
            _internalRepo
 | 
			
		||||
                .Setup(x => x.Get())
 | 
			
		||||
                .Returns(new OkResponse<IInternalConfiguration>(new InternalConfiguration(new List<ReRoute>(), "", new ServiceProviderConfigurationBuilder().Build(), "")));
 | 
			
		||||
            
 | 
			
		||||
            _repo = new ConsulFileConfigurationRepository(_cache.Object, _internalRepo.Object, _factory.Object, _loggerFactory.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_set_config()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenWritingToConsulSucceeds())
 | 
			
		||||
                .When(_ => WhenISetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIsStoredAs(config))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_get_config()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
             this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenFetchFromConsulSucceeds())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIs(config))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_get_null_config()
 | 
			
		||||
        {
 | 
			
		||||
             this.Given(_ => GivenFetchFromConsulReturnsNull())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIsNull())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_get_config_from_cache()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
             this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenFetchFromCacheSucceeds())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIs(config))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigurationIsNull()
 | 
			
		||||
        {
 | 
			
		||||
            _getResult.Data.ShouldBeNull();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigurationIs(FileConfiguration config)
 | 
			
		||||
        {
 | 
			
		||||
            var expected = JsonConvert.SerializeObject(config, Formatting.Indented);
 | 
			
		||||
            var result = JsonConvert.SerializeObject(_getResult.Data, Formatting.Indented);
 | 
			
		||||
            result.ShouldBe(expected);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task WhenIGetTheConfiguration()
 | 
			
		||||
        {
 | 
			
		||||
            _getResult = await _repo.Get();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenWritingToConsulSucceeds()
 | 
			
		||||
        {
 | 
			
		||||
            var response = new WriteResult<bool>();
 | 
			
		||||
            response.Response = true;
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Setup(x => x.Put(It.IsAny<KVPair>(), It.IsAny<CancellationToken>())).ReturnsAsync(response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
         private void GivenFetchFromCacheSucceeds()
 | 
			
		||||
        {
 | 
			
		||||
            _cache.Setup(x => x.Get(It.IsAny<string>(), It.IsAny<string>())).Returns(_fileConfiguration);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenFetchFromConsulReturnsNull()
 | 
			
		||||
        {
 | 
			
		||||
            QueryResult<KVPair> result = new QueryResult<KVPair>();
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Setup(x => x.Get(It.IsAny<string>(), It.IsAny<CancellationToken>()))
 | 
			
		||||
                .ReturnsAsync(result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenFetchFromConsulSucceeds()
 | 
			
		||||
        {
 | 
			
		||||
            var json = JsonConvert.SerializeObject(_fileConfiguration, Formatting.Indented);
 | 
			
		||||
 | 
			
		||||
            var bytes = Encoding.UTF8.GetBytes(json);
 | 
			
		||||
 | 
			
		||||
            var kvp = new KVPair("OcelotConfiguration");
 | 
			
		||||
            kvp.Value = bytes;
 | 
			
		||||
 | 
			
		||||
            var query = new QueryResult<KVPair>();
 | 
			
		||||
            query.Response = kvp;
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Setup(x => x.Get(It.IsAny<string>(), It.IsAny<CancellationToken>()))
 | 
			
		||||
                .ReturnsAsync(query);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigurationIsStoredAs(FileConfiguration config)
 | 
			
		||||
        {
 | 
			
		||||
            var json = JsonConvert.SerializeObject(config, Formatting.Indented);
 | 
			
		||||
 | 
			
		||||
            var bytes = Encoding.UTF8.GetBytes(json);
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Verify(x => x.Put(It.Is<KVPair>(k => k.Value.SequenceEqual(bytes)), It.IsAny<CancellationToken>()), Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task WhenISetTheConfiguration()
 | 
			
		||||
        {
 | 
			
		||||
            _setResult = await _repo.Set(_fileConfiguration);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenIHaveAConfiguration(FileConfiguration config)
 | 
			
		||||
        {
 | 
			
		||||
            _fileConfiguration = config;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        private FileConfiguration FakeFileConfiguration()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoutes = new List<FileReRoute>
 | 
			
		||||
            {
 | 
			
		||||
                new FileReRoute
 | 
			
		||||
                {
 | 
			
		||||
                    DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                    {
 | 
			
		||||
                        new FileHostAndPort
 | 
			
		||||
                        {
 | 
			
		||||
                            Host = "123.12.12.12",
 | 
			
		||||
                            Port = 80,
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    DownstreamScheme = "https",
 | 
			
		||||
                    DownstreamPathTemplate = "/asdfs/test/{test}"
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var globalConfiguration = new FileGlobalConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                ServiceDiscoveryProvider = new FileServiceDiscoveryProvider
 | 
			
		||||
                {
 | 
			
		||||
                    Port = 198,
 | 
			
		||||
                    Host = "blah"
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            return new FileConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                GlobalConfiguration = globalConfiguration,
 | 
			
		||||
                ReRoutes = reRoutes
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
namespace Ocelot.UnitTests.Configuration
 | 
			
		||||
{
 | 
			
		||||
    using Xunit;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Shouldly;
 | 
			
		||||
    using Ocelot.Configuration.Repository;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Infrastructure.Consul;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.Configuration.File;
 | 
			
		||||
    using Ocelot.Cache;
 | 
			
		||||
    using System;
 | 
			
		||||
    using System.Collections.Generic;
 | 
			
		||||
    using Ocelot.Responses;
 | 
			
		||||
    using System.Threading.Tasks;
 | 
			
		||||
    using Ocelot.Configuration;
 | 
			
		||||
    using Ocelot.Configuration.Builder;
 | 
			
		||||
    using Ocelot.ServiceDiscovery.Configuration;
 | 
			
		||||
    using Consul;
 | 
			
		||||
    using Newtonsoft.Json;
 | 
			
		||||
    using System.Text;
 | 
			
		||||
    using System.Threading;
 | 
			
		||||
    using System.Linq;
 | 
			
		||||
 | 
			
		||||
    public class ConsulFileConfigurationRepositoryTests
 | 
			
		||||
    {
 | 
			
		||||
        private ConsulFileConfigurationRepository _repo;
 | 
			
		||||
        private Mock<IOcelotCache<FileConfiguration>> _cache;
 | 
			
		||||
        private Mock<IInternalConfigurationRepository> _internalRepo;
 | 
			
		||||
        private Mock<IConsulClientFactory> _factory;
 | 
			
		||||
        private Mock<IOcelotLoggerFactory> _loggerFactory;
 | 
			
		||||
        private Mock<IConsulClient> _client;
 | 
			
		||||
        private Mock<IKVEndpoint> _kvEndpoint;
 | 
			
		||||
        private FileConfiguration _fileConfiguration;
 | 
			
		||||
        private Response _setResult;
 | 
			
		||||
        private Response<FileConfiguration> _getResult;
 | 
			
		||||
 | 
			
		||||
        public ConsulFileConfigurationRepositoryTests()
 | 
			
		||||
        {
 | 
			
		||||
            _cache = new Mock<IOcelotCache<FileConfiguration>>();
 | 
			
		||||
            _internalRepo = new Mock<IInternalConfigurationRepository>();
 | 
			
		||||
            _loggerFactory = new Mock<IOcelotLoggerFactory>();
 | 
			
		||||
 | 
			
		||||
            _factory = new Mock<IConsulClientFactory>();
 | 
			
		||||
            _client = new Mock<IConsulClient>();
 | 
			
		||||
            _kvEndpoint = new Mock<IKVEndpoint>();
 | 
			
		||||
 | 
			
		||||
            _client
 | 
			
		||||
                .Setup(x => x.KV)
 | 
			
		||||
                .Returns(_kvEndpoint.Object);
 | 
			
		||||
 | 
			
		||||
            _factory
 | 
			
		||||
                .Setup(x => x.Get(It.IsAny<ConsulRegistryConfiguration>()))
 | 
			
		||||
                .Returns(_client.Object);
 | 
			
		||||
 | 
			
		||||
            _internalRepo
 | 
			
		||||
                .Setup(x => x.Get())
 | 
			
		||||
                .Returns(new OkResponse<IInternalConfiguration>(new InternalConfiguration(new List<ReRoute>(), "", new ServiceProviderConfigurationBuilder().Build(), "")));
 | 
			
		||||
            
 | 
			
		||||
            _repo = new ConsulFileConfigurationRepository(_cache.Object, _internalRepo.Object, _factory.Object, _loggerFactory.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_set_config()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenWritingToConsulSucceeds())
 | 
			
		||||
                .When(_ => WhenISetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIsStoredAs(config))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_get_config()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
             this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenFetchFromConsulSucceeds())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIs(config))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_get_null_config()
 | 
			
		||||
        {
 | 
			
		||||
             this.Given(_ => GivenFetchFromConsulReturnsNull())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIsNull())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_get_config_from_cache()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
             this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenFetchFromCacheSucceeds())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .Then(_ => ThenTheConfigurationIs(config))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_set_config_key()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenTheConfigKeyComesFromFileConfig("Tom"))
 | 
			
		||||
                .And(_ => GivenFetchFromConsulSucceeds())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .And(_ => ThenTheConfigKeyIs("Tom"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_set_default_config_key()
 | 
			
		||||
        {
 | 
			
		||||
            var config = FakeFileConfiguration();
 | 
			
		||||
 | 
			
		||||
            this.Given(_ => GivenIHaveAConfiguration(config))
 | 
			
		||||
                .And(_ => GivenFetchFromConsulSucceeds())
 | 
			
		||||
                .When(_ => WhenIGetTheConfiguration())
 | 
			
		||||
                .And(_ => ThenTheConfigKeyIs("InternalConfiguration"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigKeyIs(string expected)
 | 
			
		||||
        {
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Verify(x => x.Get(expected, It.IsAny<CancellationToken>()), Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheConfigKeyComesFromFileConfig(string key)
 | 
			
		||||
        {
 | 
			
		||||
            _internalRepo
 | 
			
		||||
                .Setup(x => x.Get())
 | 
			
		||||
                .Returns(new OkResponse<IInternalConfiguration>(new InternalConfiguration(new List<ReRoute>(), "", new ServiceProviderConfigurationBuilder().WithConfigurationKey(key).Build(), "")));
 | 
			
		||||
            
 | 
			
		||||
            _repo = new ConsulFileConfigurationRepository(_cache.Object, _internalRepo.Object, _factory.Object, _loggerFactory.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigurationIsNull()
 | 
			
		||||
        {
 | 
			
		||||
            _getResult.Data.ShouldBeNull();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigurationIs(FileConfiguration config)
 | 
			
		||||
        {
 | 
			
		||||
            var expected = JsonConvert.SerializeObject(config, Formatting.Indented);
 | 
			
		||||
            var result = JsonConvert.SerializeObject(_getResult.Data, Formatting.Indented);
 | 
			
		||||
            result.ShouldBe(expected);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task WhenIGetTheConfiguration()
 | 
			
		||||
        {
 | 
			
		||||
            _getResult = await _repo.Get();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenWritingToConsulSucceeds()
 | 
			
		||||
        {
 | 
			
		||||
            var response = new WriteResult<bool>();
 | 
			
		||||
            response.Response = true;
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Setup(x => x.Put(It.IsAny<KVPair>(), It.IsAny<CancellationToken>())).ReturnsAsync(response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
         private void GivenFetchFromCacheSucceeds()
 | 
			
		||||
        {
 | 
			
		||||
            _cache.Setup(x => x.Get(It.IsAny<string>(), It.IsAny<string>())).Returns(_fileConfiguration);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenFetchFromConsulReturnsNull()
 | 
			
		||||
        {
 | 
			
		||||
            QueryResult<KVPair> result = new QueryResult<KVPair>();
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Setup(x => x.Get(It.IsAny<string>(), It.IsAny<CancellationToken>()))
 | 
			
		||||
                .ReturnsAsync(result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenFetchFromConsulSucceeds()
 | 
			
		||||
        {
 | 
			
		||||
            var json = JsonConvert.SerializeObject(_fileConfiguration, Formatting.Indented);
 | 
			
		||||
 | 
			
		||||
            var bytes = Encoding.UTF8.GetBytes(json);
 | 
			
		||||
 | 
			
		||||
            var kvp = new KVPair("OcelotConfiguration");
 | 
			
		||||
            kvp.Value = bytes;
 | 
			
		||||
 | 
			
		||||
            var query = new QueryResult<KVPair>();
 | 
			
		||||
            query.Response = kvp;
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Setup(x => x.Get(It.IsAny<string>(), It.IsAny<CancellationToken>()))
 | 
			
		||||
                .ReturnsAsync(query);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigurationIsStoredAs(FileConfiguration config)
 | 
			
		||||
        {
 | 
			
		||||
            var json = JsonConvert.SerializeObject(config, Formatting.Indented);
 | 
			
		||||
 | 
			
		||||
            var bytes = Encoding.UTF8.GetBytes(json);
 | 
			
		||||
 | 
			
		||||
            _kvEndpoint
 | 
			
		||||
                .Verify(x => x.Put(It.Is<KVPair>(k => k.Value.SequenceEqual(bytes)), It.IsAny<CancellationToken>()), Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task WhenISetTheConfiguration()
 | 
			
		||||
        {
 | 
			
		||||
            _setResult = await _repo.Set(_fileConfiguration);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenIHaveAConfiguration(FileConfiguration config)
 | 
			
		||||
        {
 | 
			
		||||
            _fileConfiguration = config;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        private FileConfiguration FakeFileConfiguration()
 | 
			
		||||
        {
 | 
			
		||||
            var reRoutes = new List<FileReRoute>
 | 
			
		||||
            {
 | 
			
		||||
                new FileReRoute
 | 
			
		||||
                {
 | 
			
		||||
                    DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                    {
 | 
			
		||||
                        new FileHostAndPort
 | 
			
		||||
                        {
 | 
			
		||||
                            Host = "123.12.12.12",
 | 
			
		||||
                            Port = 80,
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    DownstreamScheme = "https",
 | 
			
		||||
                    DownstreamPathTemplate = "/asdfs/test/{test}"
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var globalConfiguration = new FileGlobalConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                ServiceDiscoveryProvider = new FileServiceDiscoveryProvider
 | 
			
		||||
                {
 | 
			
		||||
                    Port = 198,
 | 
			
		||||
                    Host = "blah"
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            return new FileConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                GlobalConfiguration = globalConfiguration,
 | 
			
		||||
                ReRoutes = reRoutes
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,67 +1,70 @@
 | 
			
		||||
using Ocelot.Configuration;
 | 
			
		||||
using Ocelot.Configuration.Builder;
 | 
			
		||||
using Ocelot.Configuration.Creator;
 | 
			
		||||
using Ocelot.Configuration.File;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Configuration
 | 
			
		||||
{
 | 
			
		||||
    public class ServiceProviderCreatorTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ServiceProviderConfigurationCreator _creator;
 | 
			
		||||
        private FileGlobalConfiguration _globalConfig;
 | 
			
		||||
        private ServiceProviderConfiguration _result;
 | 
			
		||||
 | 
			
		||||
        public ServiceProviderCreatorTests()
 | 
			
		||||
        {
 | 
			
		||||
            _creator = new ServiceProviderConfigurationCreator();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_create_service_provider_config()
 | 
			
		||||
        {
 | 
			
		||||
            var globalConfig = new FileGlobalConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                ServiceDiscoveryProvider = new FileServiceDiscoveryProvider
 | 
			
		||||
                {
 | 
			
		||||
                    Host = "127.0.0.1",
 | 
			
		||||
                    Port = 1234,
 | 
			
		||||
                    Type = "ServiceFabric",
 | 
			
		||||
                    Token = "testtoken"
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var expected = new ServiceProviderConfigurationBuilder()
 | 
			
		||||
                .WithHost("127.0.0.1")
 | 
			
		||||
                .WithPort(1234)
 | 
			
		||||
                .WithType("ServiceFabric")
 | 
			
		||||
                .WithToken("testtoken")
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => x.GivenTheFollowingGlobalConfig(globalConfig))
 | 
			
		||||
                .When(x => x.WhenICreate())
 | 
			
		||||
                .Then(x => x.ThenTheConfigIs(expected))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheFollowingGlobalConfig(FileGlobalConfiguration fileGlobalConfig)
 | 
			
		||||
        {
 | 
			
		||||
            _globalConfig = fileGlobalConfig;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenICreate()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _creator.Create(_globalConfig);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigIs(ServiceProviderConfiguration expected)
 | 
			
		||||
        {
 | 
			
		||||
            _result.Host.ShouldBe(expected.Host);
 | 
			
		||||
            _result.Port.ShouldBe(expected.Port);
 | 
			
		||||
            _result.Token.ShouldBe(expected.Token);
 | 
			
		||||
            _result.Type.ShouldBe(expected.Type);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
using Ocelot.Configuration;
 | 
			
		||||
using Ocelot.Configuration.Builder;
 | 
			
		||||
using Ocelot.Configuration.Creator;
 | 
			
		||||
using Ocelot.Configuration.File;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Configuration
 | 
			
		||||
{
 | 
			
		||||
    public class ServiceProviderCreatorTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ServiceProviderConfigurationCreator _creator;
 | 
			
		||||
        private FileGlobalConfiguration _globalConfig;
 | 
			
		||||
        private ServiceProviderConfiguration _result;
 | 
			
		||||
 | 
			
		||||
        public ServiceProviderCreatorTests()
 | 
			
		||||
        {
 | 
			
		||||
            _creator = new ServiceProviderConfigurationCreator();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_create_service_provider_config()
 | 
			
		||||
        {
 | 
			
		||||
            var globalConfig = new FileGlobalConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                ServiceDiscoveryProvider = new FileServiceDiscoveryProvider
 | 
			
		||||
                {
 | 
			
		||||
                    Host = "127.0.0.1",
 | 
			
		||||
                    Port = 1234,
 | 
			
		||||
                    Type = "ServiceFabric",
 | 
			
		||||
                    Token = "testtoken",
 | 
			
		||||
                    ConfigurationKey = "woo"
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var expected = new ServiceProviderConfigurationBuilder()
 | 
			
		||||
                .WithHost("127.0.0.1")
 | 
			
		||||
                .WithPort(1234)
 | 
			
		||||
                .WithType("ServiceFabric")
 | 
			
		||||
                .WithToken("testtoken")
 | 
			
		||||
                .WithConfigurationKey("woo")
 | 
			
		||||
                .Build();
 | 
			
		||||
 | 
			
		||||
            this.Given(x => x.GivenTheFollowingGlobalConfig(globalConfig))
 | 
			
		||||
                .When(x => x.WhenICreate())
 | 
			
		||||
                .Then(x => x.ThenTheConfigIs(expected))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheFollowingGlobalConfig(FileGlobalConfiguration fileGlobalConfig)
 | 
			
		||||
        {
 | 
			
		||||
            _globalConfig = fileGlobalConfig;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenICreate()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _creator.Create(_globalConfig);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheConfigIs(ServiceProviderConfiguration expected)
 | 
			
		||||
        {
 | 
			
		||||
            _result.Host.ShouldBe(expected.Host);
 | 
			
		||||
            _result.Port.ShouldBe(expected.Port);
 | 
			
		||||
            _result.Token.ShouldBe(expected.Token);
 | 
			
		||||
            _result.Type.ShouldBe(expected.Type);
 | 
			
		||||
            _result.ConfigurationKey.ShouldBe(expected.ConfigurationKey);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ namespace Ocelot.UnitTests.LoadBalancer
 | 
			
		||||
        {
 | 
			
		||||
            _factory = new Mock<ILoadBalancerFactory>();
 | 
			
		||||
            _loadBalancerHouse = new LoadBalancerHouse(_factory.Object);
 | 
			
		||||
            _serviceProviderConfig = new ServiceProviderConfiguration("myType","myHost",123, string.Empty);
 | 
			
		||||
            _serviceProviderConfig = new ServiceProviderConfiguration("myType","myHost",123, string.Empty, "configKey");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user