public void FakeShouldBeAbleToReconnect() { using (var server = new FakeTcpServer(8999)) { byte[] received = null; server.OnBytesReceived += data => received = data; var t1 = new TcpClient(); t1.Connect(_fakeServerUrl.Host, _fakeServerUrl.Port); TaskTest.WaitFor(() => server.ConnectionEventcount == 1); server.DropConnection(); TaskTest.WaitFor(() => server.DisconnectionEventCount == 1); var t2 = new TcpClient(); t2.Connect(_fakeServerUrl.Host, _fakeServerUrl.Port); TaskTest.WaitFor(() => server.ConnectionEventcount == 2); t2.GetStream().Write(99.ToBytes(), 0, 4); TaskTest.WaitFor(() => received != null); Assert.That(received.ToInt32(), Is.EqualTo(99)); } }
public void ReadShouldReconnectAfterLosingConnection() { using (var server = new FakeTcpServer(FakeServerPort)) { var disconnects = 0; var connects = 0; server.OnClientConnected += () => Interlocked.Increment(ref connects); server.OnClientDisconnected += () => Interlocked.Increment(ref disconnects); var socket = new KafkaTcpSocket(new DefaultTraceLog(), _fakeServerUrl); var resultTask = ReadFromSocketWithRetry(socket, 4); //wait till connected TaskTest.WaitFor(() => connects > 0); //drop connection server.DropConnection(); TaskTest.WaitFor(() => disconnects > 0); Assert.That(disconnects, Is.EqualTo(1), "Server should have disconnected the client."); //wait for reconnection TaskTest.WaitFor(() => connects > 1); Assert.That(connects, Is.EqualTo(2), "Socket should have reconnected."); //send data and get result server.SendDataAsync(99.ToBytes()); Assert.That(resultTask.Result.ToInt32(), Is.EqualTo(99), "Socket should have received the 4 bytes."); } }
public void ReadShouldThrowServerDisconnectedExceptionWhenDisconnected() { using (var server = new FakeTcpServer(FakeServerPort)) { var socket = new KafkaTcpSocket(new DefaultTraceLog(), _fakeServerUrl); var resultTask = socket.ReadAsync(4); //wait till connected TaskTest.WaitFor(() => server.ConnectionEventcount > 0); server.DropConnection(); TaskTest.WaitFor(() => server.DisconnectionEventCount > 0); resultTask.ContinueWith(t => resultTask = t).Wait(TimeSpan.FromSeconds(1)); Assert.That(resultTask.IsFaulted, Is.True); Assert.That(resultTask.Exception.InnerException, Is.TypeOf<ServerDisconnectedException>()); } }
public void ReadShouldLogDisconnectAndRecover() { var mockLog = _kernel.GetMock<IKafkaLog>(); using (var server = new FakeTcpServer(8999)) using (var socket = new KafkaTcpSocket(mockLog.Object, _kafkaEndpoint)) using (var conn = new KafkaConnection(socket, log: mockLog.Object)) { TaskTest.WaitFor(() => server.ConnectionEventcount > 0); Assert.That(server.ConnectionEventcount, Is.EqualTo(1)); server.DropConnection(); TaskTest.WaitFor(() => server.DisconnectionEventCount > 0); Assert.That(server.DisconnectionEventCount, Is.EqualTo(1)); //Wait a while for the client to notice the disconnect and log Thread.Sleep(15); //should log an exception and keep going mockLog.Verify(x => x.ErrorFormat(It.IsAny<string>(), It.IsAny<Exception>())); TaskTest.WaitFor(() => server.ConnectionEventcount > 1); Assert.That(server.ConnectionEventcount, Is.EqualTo(2)); } }