Akka.Streams.Tests.IO.TcpSpec.Tcp_listen_stream_must_shut_down_properly_even_if_some_accepted_connection_Flows_have_not_been_subscribed_to C# (CSharp) Method

Tcp_listen_stream_must_shut_down_properly_even_if_some_accepted_connection_Flows_have_not_been_subscribed_to() private method

        public void Tcp_listen_stream_must_shut_down_properly_even_if_some_accepted_connection_Flows_have_not_been_subscribed_to ()
        {
            this.AssertAllStagesStopped(() =>
            {
                var serverAddress = TestUtils.TemporaryServerAddress();
                var firstClientConnected = new TaskCompletionSource<NotUsed>();
                var takeTwoAndDropSecond = Flow.Create<Tcp.IncomingConnection>().Select(c =>
                {
                    firstClientConnected.TrySetResult(NotUsed.Instance);
                    return c;
                }).Grouped(2).Take(1).Select(e => e.First());

                Sys.TcpStream()
                    .Bind(serverAddress.Address.ToString(), serverAddress.Port)
                    .Via(takeTwoAndDropSecond)
                    .RunForeach(c => c.Flow.Join(Flow.Create<ByteString>()).Run(Materializer), Materializer);

                var folder = Source.From(Enumerable.Range(0, 100).Select(_ => ByteString.Create(new byte[] {0})))
                    .Via(Sys.TcpStream().OutgoingConnection(serverAddress))
                    .Aggregate(0, (i, s) => i + s.Count)
                    .ToMaterialized(Sink.First<int>(), Keep.Right);

                var total = folder.Run(Materializer);

                firstClientConnected.Task.Wait(TimeSpan.FromSeconds(2)).Should().BeTrue();
                var rejected = folder.Run(Materializer);

                total.Wait(TimeSpan.FromSeconds(10)).Should().BeTrue();
                total.Result.Should().Be(100);

                rejected.Wait(TimeSpan.FromSeconds(5)).Should().BeTrue();
                rejected.Exception.Flatten().InnerExceptions.Any(e => e is StreamTcpException).Should().BeTrue();
            }, Materializer);
        }
    }