public void TestReconnectFailure() { var listener = new TcpListener(IPAddress.Loopback, 0); listener.Start(); int port = ((IPEndPoint)listener.Server.LocalEndPoint).Port; var writer = new TcpSocketWriter(IPAddress.Loopback, port, new TryOnceTcpConnectionPolicy(), 2); var receiver = listener.AcceptTcpClient(); receiver.Close(); var errors = new List <Exception>(); var errorThrown = false; writer.LoggingFailureHandler += (ex) => { errorThrown = true; errors.Add(ex); }; listener.Stop(); while (!errorThrown) { writer.Enqueue("boris\r\n"); } writer.Dispose(); Assert.Equal(3, errors.Count()); Assert.True(errors[0] is SocketException); Assert.True(errors[1] is SocketException); Assert.True(errors[2] is TcpReconnectFailureException); }
public async Task TestEventsQueuedCanBeDropped() { var listener = new TcpListener(IPAddress.Loopback, 0); listener.Start(); int port = ((IPEndPoint)listener.Server.LocalEndPoint).Port; var policy = new TriggeredTcpReconnectionPolicy(); policy.Trigger(); var writer = new TcpSocketWriter(IPAddress.Loopback, port, policy, 2); var listenerClient = await listener.AcceptTcpClientAsync(); listenerClient.Close(); var errors = new List <Exception>(); var errorThrown = false; writer.LoggingFailureHandler += (ex) => { errorThrown = true; errors.Add(ex); }; while (!errorThrown) { writer.Enqueue("boris\r\n"); } for (int i = 0; i < 10; i++) { writer.Enqueue("boris\r\n"); } policy.Trigger(); listenerClient = await listener.AcceptTcpClientAsync(); writer.Dispose(); var receiverReader = new StreamReader(listenerClient.GetStream()); // Then check what was left in the queue when we disconnected Assert.Equal("boris", await receiverReader.ReadLineAsync()); Assert.Equal("boris", await receiverReader.ReadLineAsync()); Assert.Equal(0, listenerClient.Available); }
public async Task TestEventsQueuedWhileWaitingForInitialConnection() { var listener = new TcpListener(IPAddress.Loopback, 0); listener.Start(); int port = ((IPEndPoint)listener.Server.LocalEndPoint).Port; var writer = new TcpSocketWriter(IPAddress.Loopback, port, new ExponentialBackoffTcpReconnectionPolicy(), 100); writer.Enqueue("Event 1\r\n"); writer.Enqueue("Event 2\r\n"); listener.Start(); var listenerClient = listener.AcceptTcpClient(); var receiverReader = new StreamReader(listenerClient.GetStream()); Assert.Equal("Event 1", await receiverReader.ReadLineAsync()); Assert.Equal("Event 2", await receiverReader.ReadLineAsync()); listener.Stop(); listenerClient.Close(); writer.Dispose(); }
public override void Close() { writer.Dispose(); base.Close(); }