コード例 #1
0
        public void When_decider_says_Stop_Then_all_the_siblings_are_Stopped()
        {
            var strategy         = new AllForOneSupervisorStrategy(exception => SupervisorAction.Stop);
            var actor            = A.Fake <InternalActorRef>();
            var sibling          = A.Fake <InternalActorRef>();
            var actorRestartInfo = new ChildRestartInfo(actor);
            var actorAndSiblings = new List <ChildRestartInfo> {
                new ChildRestartInfo(sibling), actorRestartInfo
            };
            var failureHandled = strategy.HandleFailure(actorRestartInfo, new Exception(), actorAndSiblings);

            failureHandled.Should().BeTrue();
            A.CallTo(() => actor.Stop()).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => sibling.Stop()).MustHaveHappened(Repeated.Exactly.Once);
        }
コード例 #2
0
        public void When_decider_says_Escalate_Then_no_calls_are_made_to_actor_and_false_is_returned()
        {
            var strategy         = new AllForOneSupervisorStrategy(exception => SupervisorAction.Escalate);
            var actor            = A.Fake <InternalActorRef>();
            var sibling          = A.Fake <InternalActorRef>();
            var actorRestartInfo = new ChildRestartInfo(actor);
            var actorAndSiblings = new List <ChildRestartInfo> {
                new ChildRestartInfo(sibling), actorRestartInfo
            };
            var failureHandled = strategy.HandleFailure(actorRestartInfo, new Exception(), actorAndSiblings);

            failureHandled.Should().BeFalse();
            A.CallTo(actor).MustNotHaveHappened();
            A.CallTo(sibling).MustNotHaveHappened();
        }
コード例 #3
0
        public void When_decider_says_Resume_Then_the_actor_is_Resumed_but_not_the_siblings()
        {
            var strategy         = new AllForOneSupervisorStrategy(exception => SupervisorAction.Resume);
            var actor            = A.Fake <InternalActorRef>();
            var sibling          = A.Fake <InternalActorRef>();
            var actorRestartInfo = new ChildRestartInfo(actor);
            var actorAndSiblings = new List <ChildRestartInfo> {
                new ChildRestartInfo(sibling), actorRestartInfo
            };
            var cause          = new Exception();
            var failureHandled = strategy.HandleFailure(actorRestartInfo, cause, actorAndSiblings);

            failureHandled.Should().BeTrue();
            A.CallTo(() => actor.Resume(cause)).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => sibling.Resume(cause)).MustNotHaveHappened();
        }
コード例 #4
0
        public void When_decider_says_Restart_Then_the_actor_is_Restarted_without_suspending_and_the_siblings_are_suspended_and_restarted()
        {
            var strategy         = new AllForOneSupervisorStrategy(exception => SupervisorAction.Restart);
            var actor            = A.Fake <InternalActorRef>();
            var sibling1         = A.Fake <InternalActorRef>();
            var sibling2         = A.Fake <InternalActorRef>();
            var actorRestartInfo = new ChildRestartInfo(actor);
            var actorAndSiblings = new List <ChildRestartInfo> {
                new ChildRestartInfo(sibling1), actorRestartInfo, new ChildRestartInfo(sibling2)
            };
            var cause          = new Exception();
            var failureHandled = strategy.HandleFailure(actorRestartInfo, cause, actorAndSiblings);

            failureHandled.Should().BeTrue();
            A.CallTo(() => actor.Restart(cause)).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => actor.Suspend()).MustNotHaveHappened();
            A.CallTo(() => sibling1.Suspend()).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => sibling1.Restart(cause)).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => sibling2.Suspend()).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => sibling2.Restart(cause)).MustHaveHappened(Repeated.Exactly.Once);
        }