Esempio n. 1
0
        public async Task Should_call_onFallback_passing_result_triggering_fallback()
        {
            bool fallbackActionExecuted = false;
            Func <CancellationToken, Task <ResultClass> > fallbackAction = ct => { fallbackActionExecuted = true; return(Task.FromResult(new ResultClass(ResultPrimitive.Substitute))); };

            ResultClass resultPassedToOnFallback = null;
            Func <DelegateResult <ResultClass>, Task> onFallbackAsync = r => { resultPassedToOnFallback = r.Result; return(TaskHelper.EmptyTask); };

            FallbackPolicy <ResultClass> fallbackPolicy = Policy
                                                          .HandleResult <ResultClass>(r => r.ResultCode == ResultPrimitive.Fault)
                                                          .FallbackAsync(fallbackAction, onFallbackAsync);

            ResultClass resultFromDelegate = new ResultClass(ResultPrimitive.Fault);
            await fallbackPolicy.ExecuteAsync(() => { return(Task.FromResult(resultFromDelegate)); });

            fallbackActionExecuted.Should().BeTrue();
            resultPassedToOnFallback.Should().NotBeNull();
            resultPassedToOnFallback.Should().Be(resultFromDelegate);
        }
Esempio n. 2
0
        public void Should_call_onFallback_passing_result_triggering_fallback()
        {
            bool fallbackActionExecuted       = false;
            Func <ResultClass> fallbackAction = () => { fallbackActionExecuted = true; return(new ResultClass(ResultPrimitive.Substitute)); };

            ResultClass resultPassedToOnFallback = null;
            Action <DelegateResult <ResultClass> > onFallback = r => { resultPassedToOnFallback = r.Result; };

            FallbackPolicy <ResultClass> fallbackPolicy = Policy
                                                          .HandleResult <ResultClass>(r => r.ResultCode == ResultPrimitive.Fault)
                                                          .Fallback(fallbackAction, onFallback);

            ResultClass resultFromDelegate = new ResultClass(ResultPrimitive.Fault);

            fallbackPolicy.Execute(() => { return(resultFromDelegate); });

            fallbackActionExecuted.Should().BeTrue();
            resultPassedToOnFallback.Should().NotBeNull();
            resultPassedToOnFallback.Should().Be(resultFromDelegate);
        }