public void When_a_dead_actor_is_watched_Then_an_WatchedActorTerminated_message_is_sent_to_watcher() { var system = new TestActorSystem(); system.Start(); var mailbox = new TestMailbox(system.CreateDefaultMailbox()); var watchedActor = system.CreateActor(ActorCreationProperties.Create <StoppingActor>(), "WatchedActor"); var watcherProps = new DelegateActorCreationProperties(() => new WatchingActor(watchedActor)) { MailboxCreator = () => mailbox }; watchedActor.Send("stop", null); var watcher = system.CreateActor(watcherProps, "Watcher"); mailbox.ClearEnqueuedSystemMessages(); mailbox.ClearEnqueuedMessages(); watcher.Send("watch", null); var watchSystemMessages = mailbox.GetEnquedSystemMessagesOfType <ActorTerminated>(); watchSystemMessages.Should().HaveCount(1); watchSystemMessages[0].TerminatedActor.Should().BeSameAs(watchedActor); var watchMessages = mailbox.GetEnquedMessagesOfType <WatchedActorTerminated>(); watchMessages.Should().HaveCount(1); watchMessages[0].TerminatedActor.Should().BeSameAs(watchedActor); }
public void When_rewatching_an_unwatched_actor_Then_Watch_message_is_sent_to_that_actor() { var system = new TestActorSystem(); system.Start(); var mailbox = new TestMailbox(system.CreateDefaultMailbox()); var watchedActorProps = new DelegateActorCreationProperties(() => AnonymousActor.Create <object>(_ => { })) { MailboxCreator = () => mailbox }; var watchedActor = system.CreateActor(watchedActorProps, "WatchedActor"); var watcher = system.CreateActor(ActorCreationProperties.Create(() => new WatchingActor(watchedActor)), "Watcher"); watcher.Send("watch", null); watcher.Send("unwatch", null); mailbox.ClearEnqueuedSystemMessages(); watcher.Send("watch", null); var watchMessages = mailbox.GetEnquedSystemMessagesOfType <WatchActor>(); watchMessages.Should().HaveCount(1); watchMessages[0].Watcher.Should().BeSameAs(watcher); }