public void Loop_CustomInterceptor()
        {
            //Arrange
            const string initialValue  = "33";
            var          maxInt        = int.MaxValue.ToString(CultureInfo.InvariantCulture);
            var          initialValues = new List <string> {
                "1", "2", "3", "4", maxInt, "6"
            };
            var request            = new RequestMock(initialValue, RequestStepMock.Step1, initialValues, new TimeSpan(0, 0, 3));
            var customErrorHandler = new SubErrorHandlerMock();


            var interceptor = new SubInterceptorMock();
            const RequestStepMock passedSteps =
                RequestStepMock.Step1 |
                RequestStepMock.Step2 |
                RequestStepMock.Step3 |
                RequestStepMock.Step4 |
                RequestStepMock.Step5;

            //Act
            RequestPipelineMock.ExecuteLoop(request, new TimeSpan(0, 0, 2), null, null, customErrorHandler, interceptor);

            //Assert
            Assert.IsTrue(request.Done, "Заявка должна была дойти до конца.");
            Assert.IsFalse(interceptor.DefaultMethod, "Должен был отработать кастомный интерсептор.");
            Assert.AreEqual(interceptor.LastStep, passedSteps, "Должны перехватываться все предыдущие шаги в цепочке.");
        }
        public void Loop_CustomErrorHandler()
        {
            //Arrange
            const string initialValue  = "33";
            var          maxInt        = int.MaxValue.ToString(CultureInfo.InvariantCulture);
            var          initialValues = new List <string> {
                "1", "2", "3", "4", maxInt, "6"
            };
            var request            = new RequestMock(initialValue, RequestStepMock.Step1, initialValues, new TimeSpan(0, 0, 3));
            var customErrorHandler = new SubErrorHandlerMock();

            //Act
            RequestPipelineMock.ExecuteLoop(request, new TimeSpan(0, 0, 2), null, customErrorHandler: customErrorHandler);

            //Assert
            Assert.IsTrue(request.Done, "Заявка должна была дойти до конца.");
            Assert.IsFalse(request.Strings == null || request.Strings.Count < 1, "Инициализация строк прошла неудачно.");
            Assert.IsFalse(request.Values == null || request.Values.Count < 1, "Цикл не прошел совсем.");
            Assert.IsTrue(request.Values.Count == request.Strings.Count - 2, "При возникновении ошибки цикл должен пережодить на следующую итерацию.");
            Assert.IsTrue(customErrorHandler.Errors.Count == 2, "Цикл должен обрабатывать ошибки каждой итерации.");
            Assert.IsTrue(customErrorHandler.Errors[0] is OperationCanceledException, "Сначала должен быть таймаут");
            Assert.IsTrue(customErrorHandler.Errors[1] is OverflowException, "Потом должено быть переполнение");
        }