public async Task RespondsInParallelWithDelayAsync() { var serverEndPoint = new IPEndPoint(IPAddress.Loopback, new Random().Next(5000, 5500)); var server = new TotServer(serverEndPoint); var tcpClients = new List <TcpClient>(); var totClients = new List <TotClient>(); try { await server.StartAsync(); server.RequestArrived += RespondsInParallelWithDelayTest_Server_RequestArrivedAsync; var times = 10; for (int i = 0; i < times; i++) { var tcpClient = new TcpClient(); await tcpClient.ConnectAsync(serverEndPoint.Address, serverEndPoint.Port); tcpClients.Add(tcpClient); var totClient = new TotClient(tcpClient); await totClient.StartAsync(); totClients.Add(totClient); } var requestJobs = new List <Task <TotContent> >(); foreach (var totClient in totClients) { requestJobs.Add(totClient.RequestAsync("hello")); } foreach (var job in requestJobs) { var res = await job; Assert.Equal("world", res.ToString()); } Assert.Equal(times, Interlocked.Read(ref _respondsInParallelWithDelayCount)); } finally { foreach (var totClient in totClients) { await totClient?.StopAsync(); } foreach (var tcpClient in tcpClients) { tcpClient?.Dispose(); // this is when tcpClient.ConnectAsync fails } server.RequestArrived -= RespondsInParallelWithDelayTest_Server_RequestArrivedAsync; await server.StopAsync(); } }
public async Task RespondsAsync() { var serverEndPoint = new IPEndPoint(IPAddress.Loopback, new Random().Next(5000, 5500)); var server = new TotServer(serverEndPoint); var tcpClient = new TcpClient(); TotClient totClient = null; try { await server.StartAsync(); server.RequestArrived += RespondsTest_Server_RequestArrivedAsync; await tcpClient.ConnectAsync(serverEndPoint.Address, serverEndPoint.Port); totClient = new TotClient(tcpClient); await totClient.StartAsync(); var r1 = await totClient.RequestAsync("hello"); Assert.Equal("world", r1.ToString()); await Assert.ThrowsAsync <TotRequestException>(async() => await totClient.RequestAsync("hell")); await Assert.ThrowsAsync <TotRequestException>(async() => await totClient.RequestAsync(new TotRequest("hello") { Version = new TotVersion(200) })); } finally { await totClient?.StopAsync(); tcpClient?.Dispose(); // this is when tcpClient.ConnectAsync fails server.RequestArrived -= RespondsTest_Server_RequestArrivedAsync; await server.StopAsync(); } }