Akka.Cluster.Tools.Tests.MultiNode.PublishSubscribe.DistributedPubSubMediatorSpec.DistributedPubSubMediator_should_send_one_message_to_each_group C# (CSharp) Method

DistributedPubSubMediator_should_send_one_message_to_each_group() public method

        public void DistributedPubSubMediator_should_send_one_message_to_each_group()
        {
            DistributedPubSubMediator_should_SendAll_to_all_other_nodes();

            Within(TimeSpan.FromSeconds(20), () =>
            {
                RunOn(() =>
                {
                    var u12 = CreateChatUser("u12");
                    u12.Tell(new JoinGroup("topic2", "group1"));
                    ExpectMsg<SubscribeAck>(s => s.Subscribe.Topic == "topic2"
                                                                           && s.Subscribe.Group == "group1"
                                                                           && s.Subscribe.Ref.Equals(u12));
                }, _first);

                RunOn(() =>
                {
                    var u12 = CreateChatUser("u12");
                    u12.Tell(new JoinGroup("topic2", "group2"));
                    ExpectMsg<SubscribeAck>(s => s.Subscribe.Topic == "topic2"
                                                                           && s.Subscribe.Group == "group2"
                                                                           && s.Subscribe.Ref.Equals(u12));

                    var u13 = CreateChatUser("u13");
                    u12.Tell(new JoinGroup("topic2", "group2"));
                    ExpectMsg<SubscribeAck>(s => s.Subscribe.Topic == "topic2"
                                                                           && s.Subscribe.Group == "group2"
                                                                           && s.Subscribe.Ref.Equals(u13));
                }, _second);

                AwaitCount(17);
                EnterBarrier("12-registered");

                RunOn(() =>
                {
                    ChatUser("u12").Tell(new ShoutToGroup("topic12", "hi"));
                }, _first);

                RunOn(() =>
                {
                    ExpectMsg("hi");
                    ExpectNoMsg(TimeSpan.FromSeconds(2));   // each group receive only one message
                }, _first, _second);
                EnterBarrier("12-published");

                RunOn(() =>
                {
                    var u12 = ChatUser("u12");
                    u12.Tell(new ExitGroup("topic2", "group1"));
                    ExpectMsg<UnsubscribeAck>(s => s.Unsubscribe.Topic == "topic2"
                                                                           && s.Unsubscribe.Group == "group1"
                                                                           && s.Unsubscribe.Ref.Equals(u12));
                }, _first);

                RunOn(() =>
                {
                    var u12 = ChatUser("u12");
                    u12.Tell(new ExitGroup("topic2", "group2"));
                    ExpectMsg<UnsubscribeAck>(s => s.Unsubscribe.Topic == "topic2"
                                                                           && s.Unsubscribe.Group == "group2"
                                                                           && s.Unsubscribe.Ref.Equals(u12));
                    var u13 = ChatUser("u13");
                    u12.Tell(new ExitGroup("topic2", "group2"));
                    ExpectMsg<UnsubscribeAck>(s => s.Unsubscribe.Topic == "topic2"
                                                                           && s.Unsubscribe.Group == "group2"
                                                                           && s.Unsubscribe.Ref.Equals(u13));
                }, _second);
                EnterBarrier("after-12");
            });
        }