public void Tcp_listen_stream_must_be_able_to_implement_echo()
{
var serverAddress = TestUtils.TemporaryServerAddress();
var t = Sys.TcpStream()
.Bind(serverAddress.Address.ToString(), serverAddress.Port)
.ToMaterialized(EchoHandler(), Keep.Both)
.Run(Materializer);
var bindingFuture = t.Item1;
var echoServerFinish = t.Item2;
// make sure that the server has bound to the socket
bindingFuture.Wait(100).Should().BeTrue();
var binding = bindingFuture.Result;
var testInput = Enumerable.Range(0, 255).Select(i => ByteString.Create(new[] {Convert.ToByte(i)})).ToList();
var expectedOutput = testInput.Aggregate(ByteString.Empty, (agg, b) => agg.Concat(b));
var resultFuture =
Source.From(testInput)
.Via(Sys.TcpStream().OutgoingConnection(serverAddress))
.RunAggregate(ByteString.Empty, (agg, b) => agg.Concat(b), Materializer);
resultFuture.Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();
resultFuture.Result.ShouldBeEquivalentTo(expectedOutput);
binding.Unbind().Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();
echoServerFinish.Wait(TimeSpan.FromSeconds(1)).Should().BeTrue();
}