private static async Task <CircuitBreakerState> RunScenario(int[] openingRates, Rating[] analyseResponses) { var circuitBreakerPeriod = new CircuitBreakerPeriod { PeriodMs = 10 }; var circuitBreakerOpeningRates = A.Fake <ICircuitBreakerOpeningRates>(); var circuitBreakerAnalyser = new StubCircuitBreakerAnalyser(analyseResponses); var testSubject = new CircuitBreakerState("policy", circuitBreakerAnalyser, circuitBreakerOpeningRates, circuitBreakerPeriod); A.CallTo(() => circuitBreakerOpeningRates.OpeningRates).Returns(openingRates); var monitorTask = Task.Run(() => testSubject.MonitorAsync(CancellationToken.None)); // Wait long enough for the monitor task to throw an exception, due to no more analyser responses await Task.Delay(100); try { await monitorTask; } catch (InvalidOperationException) { } return(testSubject); }
public async Task setup_scenario_base() { ClosedPcts = new List <double>(); ShouldAccepts = new List <bool>(); var circuitBreakerPeriod = new CircuitBreakerPeriod { PeriodMs = 100 }; var circuitBreakerOpeningRates = new BinaryCircuitBreakerOpeningRates(); var circuitBreakerAnalyser = new DefaultCircuitBreakerAnalyser(); TestSubject = new CircuitBreakerState("policy", circuitBreakerAnalyser, circuitBreakerOpeningRates, circuitBreakerPeriod); var cancellationTokenSource = new CancellationTokenSource(); var monitorTask = Task.Run(() => TestSubject.MonitorAsync(cancellationTokenSource.Token)); await RunScenario(); cancellationTokenSource.Cancel(); await monitorTask; }