Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
        }