namespace Ocelot.UnitTests.Consul { using Moq; using Ocelot.Infrastructure; using Ocelot.Logging; using Ocelot.ServiceDiscovery.Providers; using Provider.Consul; using Shouldly; using System; using System.Collections.Generic; using TestStack.BDDfy; using Values; using Xunit; public class PollingConsulServiceDiscoveryProviderTests { private readonly int _delay; private readonly List _services; private readonly Mock _factory; private readonly Mock _logger; private readonly Mock _consulServiceDiscoveryProvider; private List _result; public PollingConsulServiceDiscoveryProviderTests() { _services = new List(); _delay = 1; _factory = new Mock(); _logger = new Mock(); _factory.Setup(x => x.CreateLogger()).Returns(_logger.Object); _consulServiceDiscoveryProvider = new Mock(); } [Fact] public void should_return_service_from_consul() { var service = new Service("", new ServiceHostAndPort("", 0), "", "", new List()); 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) { using (var provider = new PollConsul(_delay, _factory.Object, _consulServiceDiscoveryProvider.Object)) { var result = Wait.WaitFor(3000).Until(() => { try { _result = provider.Get().GetAwaiter().GetResult(); if (_result.Count == expected) { return true; } return false; } catch (Exception) { return false; } }); result.ShouldBeTrue(); } } } }