public KafkaConnectionTests() { _log = new DefaultTraceLog(); _kafkaEndpoint = new DefaultKafkaConnectionFactory().Resolve(new Uri("http://localhost:8999"), _log); }
public async Task ShouldRecoverFromFailerByUpdateMetadataOnce() //Do not debug this test !! { var log = new DefaultTraceLog(); var routerProxy = new BrokerRouterProxy(_kernel); routerProxy._cacheExpiration = TimeSpan.FromMilliseconds(1000); var router = routerProxy.Create(); int partitionId = 0; ProtocolGateway protocolGateway = new ProtocolGateway(router); var fetchRequest = new FetchRequest(); int numberOfCall = 100; long numberOfErrorSend = 0; TaskCompletionSource<int> x = new TaskCompletionSource<int>(); Func<Task<FetchResponse>> ShouldReturnNotLeaderForPartitionAndThenNoError = async () => { log.DebugFormat("FetchResponse Start "); if (!x.Task.IsCompleted) { if (Interlocked.Increment(ref numberOfErrorSend) == numberOfCall) { await Task.Delay(routerProxy._cacheExpiration); await Task.Delay(1); x.TrySetResult(1); log.DebugFormat("all is complete "); } await x.Task; log.DebugFormat("SocketException "); throw new BrokerConnectionException("",new KafkaEndpoint()); } log.DebugFormat("Completed "); return new FetchResponse() { Error = (short)ErrorResponseCode.NoError }; }; routerProxy.BrokerConn0.FetchResponseFunction = ShouldReturnNotLeaderForPartitionAndThenNoError; routerProxy.BrokerConn0.MetadataResponseFunction = BrokerRouterProxy.CreateMetadataResponseWithMultipleBrokers; Task[] tasks = new Task[numberOfCall]; for (int i = 0; i < numberOfCall; i++) { tasks[i] = protocolGateway.SendProtocolRequest(fetchRequest, BrokerRouterProxy.TestTopic, partitionId); } await Task.WhenAll(tasks); Assert.That(numberOfErrorSend, Is.GreaterThan(1), "numberOfErrorSend"); Assert.That(routerProxy.BrokerConn0.FetchRequestCallCount, Is.EqualTo(numberOfCall + numberOfErrorSend), "FetchRequestCallCount"); Assert.That(routerProxy.BrokerConn0.MetadataRequestCallCount, Is.EqualTo(2), "MetadataRequestCallCount"); }
public KafkaTcpSocketTests() { var log = new DefaultTraceLog(); _fakeServerUrl = new DefaultKafkaConnectionFactory().Resolve(new Uri("http://localhost:8999"), log); _badServerUrl = new DefaultKafkaConnectionFactory().Resolve(new Uri("http://localhost:1"), log); }
public async Task KafkaConnectionShouldLogDisconnectAndRecover() { var mockLog =new Mock<IKafkaLog>(); var log= new DefaultTraceLog(LogLevel.Error); using (var server = new FakeTcpServer(log, 8999)) using (var socket = new KafkaTcpSocket(log, _kafkaEndpoint, _maxRetry)) using (var conn = new KafkaConnection(socket, log: mockLog.Object)) { var disconnected = 0; socket.OnServerDisconnected += () => Interlocked.Increment(ref disconnected); for (int connectionAttempt = 1; connectionAttempt < 4; connectionAttempt++) { await TaskTest.WaitFor(() => server.ConnectionEventcount == connectionAttempt); Assert.That(server.ConnectionEventcount, Is.EqualTo(connectionAttempt)); server.SendDataAsync(CreateCorrelationMessage(1)).Wait(TimeSpan.FromSeconds(5)); await TaskTest.WaitFor(() => !conn.IsOnErrorState()); Assert.IsFalse(conn.IsOnErrorState()); mockLog.Verify(x => x.InfoFormat("Polling read thread has recovered: {0}", It.IsAny<object[]>()), Times.Exactly(connectionAttempt-1)); server.DropConnection(); await TaskTest.WaitFor(() => conn.IsOnErrorState()); Assert.AreEqual(disconnected,connectionAttempt); Assert.IsTrue(conn.IsOnErrorState()); mockLog.Verify(x => x.ErrorFormat("Exception occured in polling read thread {0}: {1}", It.IsAny<object[]>()), Times.Exactly(connectionAttempt )); } } }