Esempio n. 1
0
        public void AddResponseToRetryOn_RetriesOnMatchedPredicate_WhenMultiplePredicatesAreRegistered()
        {
            var service = Substitute.For <ITestService>();

            var firstFailResponse = new Response {
                StatusCode = 100
            };
            var secondFailResponse = new Response {
                StatusCode = 101
            };
            var successResponse = new Response {
                StatusCode = 1
            };

            service
            .TestMethodComplex(Arg.Any <Request>())
            .Returns(firstFailResponse, secondFailResponse, successResponse);

            var actionInvoker = new RetryingWcfActionInvoker <ITestService>(
                () => service,
                () => new ConstantDelayPolicy(TimeSpan.FromMilliseconds(50)),
                retryCount: 2);

            actionInvoker.AddResponseToRetryOn <IResponseStatus>(r => r.StatusCode == firstFailResponse.StatusCode);
            actionInvoker.AddResponseToRetryOn <IResponseStatus>(r => r.StatusCode == secondFailResponse.StatusCode);

            var response = actionInvoker.Invoke(s => s.TestMethodComplex(new Request()));

            Assert.That(response.StatusCode, Is.EqualTo(successResponse.StatusCode));
        }
Esempio n. 2
0
        public void AddResponseToRetryOn_RetriesOnConfiguredResponse_ForResponseType()
        {
            var service = Substitute.For <ITestService>();

            var failResponse = new Response {
                ResponseMessage = "fail"
            };
            var successResponse = new Response {
                ResponseMessage = "success"
            };

            service
            .TestMethodComplex(Arg.Any <Request>())
            .Returns(failResponse, failResponse, successResponse);

            var actionInvoker = new RetryingWcfActionInvoker <ITestService>(
                () => service,
                () => new ConstantDelayPolicy(TimeSpan.FromMilliseconds(50)),
                retryCount: 2);

            actionInvoker.AddResponseToRetryOn <Response>(r => r.ResponseMessage == failResponse.ResponseMessage);

            var response = actionInvoker.Invoke(s => s.TestMethodComplex(new Request()));

            Assert.That(response.ResponseMessage, Is.EqualTo(successResponse.ResponseMessage));
        }
Esempio n. 3
0
        public void AddResponseToRetryOn_RetriesOnConfiguredResponse_ForResponseType()
        {
            var mockService = new Mock <ITestService>();

            var failResponse = new Response {
                ResponseMessage = "fail"
            };
            var successResponse = new Response {
                ResponseMessage = "success"
            };

            mockService
            .SetupSequence(m => m.TestMethodComplex(It.IsAny <Request>()))
            .Returns(failResponse)
            .Returns(failResponse)
            .Returns(successResponse);

            var actionInvoker = new RetryingWcfActionInvoker <ITestService>(
                () => new TestServiceImpl(mockService),
                () => new ConstantDelayPolicy(TimeSpan.FromMilliseconds(50)),
                retryCount: 2);

            actionInvoker.AddResponseToRetryOn <Response>(r => r.ResponseMessage == failResponse.ResponseMessage);

            var response = actionInvoker.Invoke(s => s.TestMethodComplex(new Request()));

            Assert.That(response.ResponseMessage, Is.EqualTo(successResponse.ResponseMessage));
        }
        public void Benchmark_RetryingWcfActionInvoker_Invoke()
        {
            var service = Substitute.For <ITestService>();

            service
            .TestMethodComplex(Arg.Any <Request>())
            .Returns(new Response {
                StatusCode = 1
            });

            var actionInvoker = new RetryingWcfActionInvoker <ITestService>(
                () => service);

            actionInvoker.AddResponseToRetryOn <IResponseStatus>(r => r.StatusCode == 100);

            var sw = Stopwatch.StartNew();

            foreach (var i in Enumerable.Range(0, 300000))
            {
                var response = actionInvoker.Invoke(s => s.TestMethodComplex(new Request()));
                Assert.That(response.StatusCode, Is.EqualTo(1));
            }
            sw.Stop();

            Trace.WriteLine(string.Format("Complete in {0}", sw.Elapsed));
        }
        public void Benchmark_RetryingWcfActionInvoker_Invoke()
        {
            var service = Substitute.For<ITestService>();

            service
                .TestMethodComplex(Arg.Any<Request>())
                .Returns(new Response { StatusCode = 1 });

            var actionInvoker = new RetryingWcfActionInvoker<ITestService>(
                () => service);

            actionInvoker.AddResponseToRetryOn<IResponseStatus>(r => r.StatusCode == 100);

            var sw = Stopwatch.StartNew();
            foreach (var i in Enumerable.Range(0, 300000))
            {
                var response = actionInvoker.Invoke(s => s.TestMethodComplex(new Request()));
                Assert.That(response.StatusCode, Is.EqualTo(1));
            }
            sw.Stop();

            Trace.WriteLine(string.Format("Complete in {0}", sw.Elapsed));
        }