Ejemplo n.º 1
0
        public void DeathWatch_must_fail_a_monitor_which_doesnt_handle_Terminated()
        {
            EventFilter.Exception <ActorKilledException>().And.Exception <DeathPactException>().Expect(2, () =>
            {
                var strategy = new FailedSupervisorStrategy(TestActor);
                _supervisor  = Sys.ActorOf(Props.Create(() => new Supervisor(strategy)).WithDeploy(Deploy.Local));

                var failed  = _supervisor.Ask(Props.Empty).Result as IActorRef;
                var brother = _supervisor.Ask(Props.Create(() => new BrotherActor(failed))).Result as IActorRef;

                StartWatching(brother);

                failed.Tell(Kill.Instance);
                var result = ReceiveWhile(TimeSpan.FromSeconds(5), msg =>
                {
                    var res = 0;
                    msg.Match()
                    .With <FF>(ff =>
                    {
                        if (ff.Fail.Cause is ActorKilledException && ff.Fail.Child == failed)
                        {
                            res = 1;
                        }
                        if (ff.Fail.Cause is DeathPactException && ff.Fail.Child == brother)
                        {
                            res = 2;
                        }
                    })
                    .With <WrappedTerminated>(x => res = x.Terminated.ActorRef == brother ? 3 : 0);
                    return(res.ToString());
                }, 3);

                ((IInternalActorRef)TestActor).IsTerminated.ShouldBe(false);
                result.ShouldOnlyContainInOrder("1", "2", "3");
            });
        }
Ejemplo n.º 2
0
        public void DeathWatch_must_fail_a_monitor_which_doesnt_handle_Terminated()
        {
            EventFilter.Exception<ActorKilledException>().And.Exception<DeathPactException>().Expect(2, () =>
            {
                var strategy = new FailedSupervisorStrategy(TestActor);
                _supervisor = Sys.ActorOf(Props.Create(() => new Supervisor(strategy)).WithDeploy(Deploy.Local));

                var failed = _supervisor.Ask(Props.Empty).Result as ActorRef;
                var brother = _supervisor.Ask(Props.Create(() => new BrotherActor(failed))).Result as ActorRef;

                StartWatching(brother);

                failed.Tell(Kill.Instance);
                var result = ReceiveWhile(TimeSpan.FromSeconds(5), msg =>
                {
                    var res = 0;
                    msg.Match()
                        .With<FF>(ff =>
                        {
                            if (ff.Fail.Cause is ActorKilledException && ff.Fail.Child == failed) res = 1;
                            if (ff.Fail.Cause is DeathPactException && ff.Fail.Child == brother) res = 2;
                        })
                        .With<WrappedTerminated>(x => res = x.Terminated.ActorRef == brother ? 3 : 0);
                    return res.ToString();
                }, 3);

                ((InternalActorRef)TestActor).IsTerminated.ShouldBe(false);
                result.ShouldOnlyContainInOrder("1", "2", "3");
            });
        }