コード例 #1
0
        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));
                }
        }