示例#1
0
        private static void InvokeOnceFailWithUnexceptedException(bool useExceptionName, bool isDelay)
        {
            TestSleepHandler testSleepHandler = new TestSleepHandler();
            ITestRemoteService rs = GetRemoteService(3, useExceptionName, isDelay, testSleepHandler);
            try
            {
                rs.DoTransfer2();
                Assert.Fail("Should have failed.");
            }
            catch (ArgumentException)
            {

            }
        }
        private static void InvokeOnceFailWithUnexceptedException(bool useExceptionName, bool isDelay)
        {
            TestSleepHandler   testSleepHandler = new TestSleepHandler();
            ITestRemoteService rs = GetRemoteService(3, useExceptionName, isDelay, testSleepHandler);

            try
            {
                rs.DoTransfer2();
                Assert.Fail("Should have failed.");
            }
            catch (ArgumentException)
            {
            }
        }
 private static void AssertSleepsAndReset(TestSleepHandler testSleepHandler, int numFailures, bool isDelay)
 {
     Assert.AreEqual(numFailures, testSleepHandler.CalledTimeSpans.Count);
     for (int i = 0; i < numFailures; i++)
     {
         if (isDelay)
         {
             Assert.AreEqual(TimeSpan.FromSeconds(1), testSleepHandler.CalledTimeSpans[i]);
         }
         else
         {
             Assert.AreEqual(TimeSpan.FromSeconds(1 * (i + 1) + 0.5), testSleepHandler.CalledTimeSpans[i]);
         }
     }
     testSleepHandler.CalledTimeSpans.Clear();
 }
        private static void InvokeOncePassOnceFail(bool useExceptionName, bool isDelay)
        {
            TestSleepHandler   testSleepHandler = new TestSleepHandler();
            ITestRemoteService rs = GetRemoteService(2, useExceptionName, isDelay, testSleepHandler);

            rs.DoTransfer();
            AssertSleepsAndReset(testSleepHandler, 2, isDelay);

            rs = GetRemoteService(3, useExceptionName, isDelay, testSleepHandler);
            try
            {
                rs.DoTransfer();
                Assert.Fail("Should have failed.");
            } catch (ArithmeticException)
            {
                // they maximum retry count is 3, thus only 2 sleep calls
                AssertSleepsAndReset(testSleepHandler, 2, isDelay);
            }
        }
示例#5
0
        private static void InvokeOncePassOnceFail(bool useExceptionName, bool isDelay)
        {
            TestSleepHandler testSleepHandler = new TestSleepHandler();
            ITestRemoteService rs = GetRemoteService(2, useExceptionName, isDelay, testSleepHandler);

            rs.DoTransfer();
            AssertSleepsAndReset(testSleepHandler, 2, isDelay);

            rs = GetRemoteService(3, useExceptionName, isDelay, testSleepHandler);
            try
            {
                rs.DoTransfer();
                Assert.Fail("Should have failed.");
            } catch (ArithmeticException)
            {
                // they maximum retry count is 3, thus only 2 sleep calls
                AssertSleepsAndReset(testSleepHandler, 2, isDelay);
            }
        }
        private static ITestRemoteService GetRemoteService(int numFailures, bool usingExceptionName, bool isDelay, TestSleepHandler testSleepHandler)
        {
            TestRemoteService remoteService = new TestRemoteService();

            remoteService.NumFailures = numFailures;
            ProxyFactory factory = new ProxyFactory(remoteService);

            RetryAdvice retryAdvice = new RetryAdvice(new RetryAdvice.SleepHandler(testSleepHandler.Sleep));

            if (usingExceptionName)
            {
                if (isDelay)
                {
                    retryAdvice.RetryExpression = "on exception name ArithmeticException retry 3x delay 1s";
                }
                else
                {
                    retryAdvice.RetryExpression = "on exception name ArithmeticException retry 3x rate (1*#n + 0.5)";
                }
            }
            else
            {
                if (isDelay)
                {
                    retryAdvice.RetryExpression = "on exception (#e is T(System.ArithmeticException)) retry 3x delay 1s";
                }
                else
                {
                    retryAdvice.RetryExpression = "on exception (#e is T(System.ArithmeticException)) retry 3x rate (1*#n + 0.5)";
                }
            }
            retryAdvice.AfterPropertiesSet();
            factory.AddAdvice(retryAdvice);
            ITestRemoteService rs = factory.GetProxy() as ITestRemoteService;

            Assert.IsNotNull(rs);
            return(rs);
        }
示例#7
0
 private static void AssertSleepsAndReset(TestSleepHandler testSleepHandler, int numFailures, bool isDelay)
 {
     Assert.AreEqual(numFailures, testSleepHandler.CalledTimeSpans.Count);
     for(int i=0;i<numFailures;i++)
     {
         if (isDelay)
         {
             Assert.AreEqual(TimeSpan.FromSeconds(1), testSleepHandler.CalledTimeSpans[i]);
         }
         else
         {
             Assert.AreEqual(TimeSpan.FromSeconds(1 * (i + 1) + 0.5), testSleepHandler.CalledTimeSpans[i]);
         }
     }
     testSleepHandler.CalledTimeSpans.Clear();
 }
示例#8
0
        private static ITestRemoteService GetRemoteService(int numFailures, bool usingExceptionName, bool isDelay, TestSleepHandler testSleepHandler)
        {
            TestRemoteService remoteService = new TestRemoteService();
            remoteService.NumFailures = numFailures;
            ProxyFactory factory = new ProxyFactory(remoteService);

            RetryAdvice retryAdvice = new RetryAdvice(new RetryAdvice.SleepHandler(testSleepHandler.Sleep));
            if (usingExceptionName)
            {
                if (isDelay)
                {
                    retryAdvice.RetryExpression = "on exception name ArithmeticException retry 3x delay 1s";
                }
                else
                {
                    retryAdvice.RetryExpression = "on exception name ArithmeticException retry 3x rate (1*#n + 0.5)";
                }
            }
            else
            {
                if (isDelay)
                {
                    retryAdvice.RetryExpression = "on exception (#e is T(System.ArithmeticException)) retry 3x delay 1s";
                }
                else
                {
                    retryAdvice.RetryExpression = "on exception (#e is T(System.ArithmeticException)) retry 3x rate (1*#n + 0.5)";
                }
            }
            retryAdvice.AfterPropertiesSet();
            factory.AddAdvice(retryAdvice);
            ITestRemoteService rs = factory.GetProxy() as ITestRemoteService;
            Assert.IsNotNull(rs);
            return rs;
        }