using Autofac;
using Autofac.Features.Indexed;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ReliabilityPatterns;
namespace Tests
{
[TestClass]
public class CircuitBreakerTests
{
public enum ExternalServices
{
ServiceA,
ServiceB
}
public class ClientA
{
readonly CircuitBreaker breaker;
public ClientA(IIndex<ExternalServices, CircuitBreaker> circuitBreakers)
{
breaker = circuitBreakers[ExternalServices.ServiceA];
}
public CircuitBreaker Breaker
{
get { return breaker; }
}
}
[TestMethod]
public void ShouldRetrieveADifferentCircuitBreakerPerExternalService()
{
// Arrange
var builder = new ContainerBuilder();
builder
.RegisterInstance(new CircuitBreaker() { Threshold = 5 })
.Keyed<CircuitBreaker>(ExternalServices.ServiceA);
builder
.RegisterInstance(new CircuitBreaker() { Threshold = 10 })
.Keyed<CircuitBreaker>(ExternalServices.ServiceB);
builder.RegisterType<ClientA>().AsSelf();
var container = builder.Build();
// Act
var client = container.Resolve<ClientA>();
// Assert
Assert.AreEqual((uint)5, client.Breaker.Threshold);
}
}
}