public async Task SendAsyncWithDynamicVersionInfoOnlyMakesVersionCallOnce() { var versionRequests = 0; var endpoint = TestConfig.ServerEndpoint(); using (var server = new TcpServer(endpoint.Ip.Port, TestConfig.Log)) using (var conn = new Connection(endpoint, new ConnectionConfiguration(requestTimeout: TimeSpan.FromSeconds(3), versionSupport: VersionSupport.Kafka8.Dynamic()), log: TestConfig.Log)) { server.OnReceivedAsync = async data => { var fullHeader = KafkaDecoder.DecodeFullHeader(data.Skip(Request.IntegerByteSize)); var context = fullHeader.Item1; switch (fullHeader.Item2) { case ApiKey.ApiVersions: Interlocked.Increment(ref versionRequests); await server.SendDataAsync(KafkaDecoder.EncodeResponseBytes(context, new ApiVersionsResponse(ErrorCode.NONE, new[] { new ApiVersionsResponse.VersionSupport(ApiKey.Fetch, 3, 3) }))); break; default: await server.SendDataAsync(KafkaDecoder.EncodeResponseBytes(context, new FetchResponse())); break; } }; for (var i = 0; i < 3; i++) { await conn.SendAsync(new FetchRequest(new FetchRequest.Topic("Foo", 0, 0)), CancellationToken.None); } Assert.That(versionRequests, Is.EqualTo(1)); } }