Пример #1
0
        public void WaitAndRetry_WithAction()
        {
            TimeSpan slept = TimeSpan.Zero;

            SystemUtil.SetSleep(span => slept += span);
            int count = 0;

            var policy = ActionPolicy
                         .Handle <TimeoutException>()
                         .WaitAndRetry(Range.Create(5, i => i.Seconds()), (ex, s) => count += 1);

            // non-handled
            Expect <ArgumentException>(() => policy.Do(RaiseArgument));
            Assert.AreEqual(TimeSpan.Zero, slept);
            Assert.AreEqual(0, count);

            // handled succeeds
            Raise <TimeoutException>(5, policy);
            Assert.AreEqual(10.Seconds(), slept);
            Assert.AreEqual(5, count);

            // handled fails
            Expect <TimeoutException>(6, policy);
            Assert.AreEqual(20.Seconds(), slept);
            Assert.AreEqual(10, count);
        }
Пример #2
0
        public void Stack_trace_is_preserved()
        {
            var policy = ActionPolicy
                         .Handle <InvalidOperationException>()
                         .Retry(2);

            StackTest <InvalidOperationException> .Check(policy);
        }
Пример #3
0
        public void Retry_Once()
        {
            var policy = ActionPolicy.Handle <TimeoutException>().Retry(0);

            // non-handled exception
            Expect <ArgumentException>(() => policy.Do(RaiseArgument));
            Raise <TimeoutException>(0, policy);
            Expect <TimeoutException>(1, policy);
        }
        public void Stack_trace_is_preserved()
        {
            var policy = ActionPolicy
                         .Handle <InvalidOperationException>()
                         .CircuitBreaker(10.Seconds(), 6);

            SystemUtil.SetSleep(s => { });

            StackTest <InvalidOperationException> .Check(policy);
        }
Пример #5
0
        public void Retry()
        {
            var policy = ActionPolicy
                         .Handle <TimeoutException>()
                         .Retry(2);

            // non-handled exception
            Expect <ArgumentException>(() => policy.Do(RaiseArgument));
            // handled succeeds
            Raise <TimeoutException>(2, policy);
            // handled fails
            Expect <TimeoutException>(3, policy);
        }
Пример #6
0
        public void RetryForever()
        {
            int counter = 0;
            var policy  = ActionPolicy
                          .Handle <TimeoutException>()
                          .RetryForever(ex => counter += 1);

            // non-handled exception
            Expect <ArgumentException>(() => policy.Do(RaiseArgument));
            Assert.AreEqual(0, counter);

            // handled succeeds
            Raise <TimeoutException>(11, policy);
            Assert.AreEqual(11, counter);
        }
Пример #7
0
        public void WaitAndRetry()
        {
            TimeSpan slept = TimeSpan.Zero;

            SystemUtil.SetSleep(span => slept += span);

            var policy = ActionPolicy
                         .Handle <TimeoutException>()
                         .WaitAndRetry(Range.Create(5, i => i.Seconds()));

            Expect <ArgumentException>(() => policy.Do(RaiseArgument));
            Assert.AreEqual(TimeSpan.Zero, slept);

            Expect <TimeoutException>(() => policy.Do(RaiseTimeout));
            Assert.AreEqual(10.Seconds(), slept);
        }
Пример #8
0
        public void Retry_With_Action()
        {
            int counter = 0;
            var policy  = ActionPolicy
                          .Handle <TimeoutException>()
                          .Retry(2, (ex, i) => counter += 1);

            // non-handled exception
            Expect <ArgumentException>(() => policy.Do(RaiseArgument));
            Assert.AreEqual(0, counter);

            // handled succeeds
            Raise <TimeoutException>(2, policy);
            Assert.AreEqual(2, counter);
            // handled fails
            Expect <TimeoutException>(3, policy);
            Assert.AreEqual(4, counter);
        }
Пример #9
0
        public void CircuitBreaker()
        {
            var policy = ActionPolicy
                         .Handle <TimeoutException>()
                         .CircuitBreaker(1.Minutes(), 2);


            var time = new DateTime(2008, 1, 1);

            SystemUtil.SetTime(time);

            // non-handled
            policy.Do(Nothing);
            Expect <ArgumentException>(() => policy.Do(RaiseArgument));

            // handled below

            // Raise
            Expect <TimeoutException>(() => policy.Do(RaiseTimeout));
            Expect <TimeoutException>(() => policy.Do(RaiseTimeout));
            // Trigger
            Expect <TimeoutException>(() => policy.Do(RaiseArgument));
            Expect <TimeoutException>(() => policy.Do(Nothing));

            // Elapse and pass
            SystemUtil.SetTime(time.AddMinutes(1));
            policy.Do(Nothing);

            // Raise
            Expect <TimeoutException>(() => policy.Do(RaiseTimeout));
            Expect <TimeoutException>(() => policy.Do(RaiseTimeout));

            // Elapse and rearm
            SystemUtil.SetTime(time.AddMinutes(1));
            Expect <TimeoutException>(() => policy.Do(RaiseTimeout));

            // Non-elapse and trigger
            SystemUtil.SetTime(time.AddSeconds(119));
            Expect <TimeoutException>(() => policy.Do(Nothing));

            // Elapse and pass
            SystemUtil.SetTime(time.AddMinutes(2));
            policy.Do(Nothing);
        }