コード例 #1
0
        public async Task SendAsyncShouldTimeoutMultipleMessagesAtATime()
        {
            using (var server = new FakeTcpServer(_log, 8999))
                using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint, _maxRetry))
                    using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(100), log: _log))
                    {
                        server.HasClientConnected.Wait(TimeSpan.FromSeconds(3));
                        Assert.That(server.ConnectionEventcount, Is.EqualTo(1));

                        var tasks = new[]
                        {
                            conn.SendAsync(new MetadataRequest()),
                            conn.SendAsync(new MetadataRequest()),
                            conn.SendAsync(new MetadataRequest())
                        };

                        Task.WhenAll(tasks);

                        await TaskTest.WaitFor(() => tasks.All(t => t.IsFaulted));

                        foreach (var task in tasks)
                        {
                            Assert.That(task.IsFaulted, Is.True, "Task should have faulted.");
                            Assert.That(task.Exception.InnerException, Is.TypeOf <ResponseTimeoutException>(),
                                        "Task fault should be of type ResponseTimeoutException.");
                        }
                    }
        }
コード例 #2
0
        public void SendAsyncShouldTimeoutMultipleMessagesAtATime()
        {
            using (var server = new FakeTcpServer(8999))
                using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
                    using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(100), log: _log))
                    {
                        TaskTest.WaitFor(() => server.ConnectionEventcount > 0);
                        Assert.That(server.ConnectionEventcount, Is.EqualTo(1));

                        var tasks = new[]
                        {
                            conn.SendAsync(new MetadataRequest()),
                            conn.SendAsync(new MetadataRequest()),
                            conn.SendAsync(new MetadataRequest())
                        };

                        Task.WhenAll(tasks);

                        TaskTest.WaitFor(() => tasks.Any(t => t.IsFaulted));
                        foreach (var task in tasks)
                        {
                            Assert.That(task.IsFaulted, Is.True);
                            Assert.That(task.Exception.InnerException, Is.TypeOf <ResponseTimeoutException>());
                        }
                    }
        }
コード例 #3
0
        public async void SendAsyncShouldNotAllowResponseToTimeoutWhileAwaitingKafkaToEstableConnection()
        {
            using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
                using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(1000000), log: _log))
                {
                    Console.WriteLine("SendAsync blocked by reconnection attempts...");
                    var taskResult = conn.SendAsync(new MetadataRequest());

                    taskResult.ContinueWith(t => taskResult = t).Wait(TimeSpan.FromSeconds(1));

                    Console.WriteLine("Task result should be WaitingForActivation...");
                    Assert.That(taskResult.IsFaulted, Is.False);
                    Assert.That(taskResult.Status, Is.EqualTo(TaskStatus.WaitingForActivation));

                    Console.WriteLine("Starting server to establish connection...");
                    using (var server = new FakeTcpServer(8999))
                    {
                        server.OnClientConnected += () => Console.WriteLine("Client connected...");
                        server.OnBytesReceived   += (b) =>
                        {
                            server.SendDataAsync(MessageHelper.CreateMetadataResponse(1, "Test"));
                        };

                        await taskResult;

                        Assert.That(taskResult.IsFaulted, Is.False);
                        Assert.That(taskResult.IsCanceled, Is.False);
                        Assert.That(taskResult.Status, Is.EqualTo(TaskStatus.RanToCompletion));
                    }
                }
        }
コード例 #4
0
 public void ShouldDisposeWithoutExceptionEvenWhileCallingSendAsync()
 {
     using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
     using (var conn = new KafkaConnection(socket, log: _log))
     {
         var task = conn.SendAsync(new MetadataRequest());
         task.Wait(TimeSpan.FromMilliseconds(1000));
         Assert.That(task.IsCompleted, Is.False, "The send task should still be pending.");
     }
 }
コード例 #5
0
 public void ShouldDisposeWithoutExceptionEvenWhileCallingSendAsync()
 {
     using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
         using (var conn = new KafkaConnection(socket, log: _log))
         {
             var task = conn.SendAsync(new MetadataRequest());
             task.Wait(TimeSpan.FromMilliseconds(1000));
             Assert.That(task.IsCompleted, Is.False, "The send task should still be pending.");
         }
 }
コード例 #6
0
        public void SendAsyncShouldTimeoutByThrowingResponseTimeoutExceptionWhenTcpConnectionIsNotAvailable()
        {
            using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
                using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(100), log: _log))
                {
                    var taskResult = conn.SendAsync(new MetadataRequest());

                    taskResult.ContinueWith(t => taskResult = t).Wait(TimeSpan.FromSeconds(1));

                    Assert.That(taskResult.IsFaulted, Is.True);
                    Assert.That(taskResult.Exception.InnerException, Is.TypeOf <ResponseTimeoutException>());
                }
        }
コード例 #7
0
        public void SendAsyncShouldTimeoutByThrowingResponseTimeoutException()
        {
            using (var server = new FakeTcpServer(8999))
                using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
                    using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(100), log: _log))
                    {
                        TaskTest.WaitFor(() => server.ConnectionEventcount > 0);
                        Assert.That(server.ConnectionEventcount, Is.EqualTo(1));

                        var taskResult = conn.SendAsync(new MetadataRequest());

                        taskResult.ContinueWith(t => taskResult = t).Wait(TimeSpan.FromSeconds(1));

                        Assert.That(taskResult.IsFaulted, Is.True);
                        Assert.That(taskResult.Exception.InnerException, Is.TypeOf <ResponseTimeoutException>());
                    }
        }
コード例 #8
0
        public async Task SendAsyncShouldTimeoutWhenSendAsyncTakesTooLong()
        {
            using (var server = new FakeTcpServer(_log, 8999))
                using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint, _maxRetry))
                    using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(1), log: _log))
                    {
                        await TaskTest.WaitFor(() => server.ConnectionEventcount > 0);

                        Assert.That(server.ConnectionEventcount, Is.EqualTo(1));

                        var taskResult = conn.SendAsync(new MetadataRequest());

                        taskResult.ContinueWith(t => taskResult = t).Wait(TimeSpan.FromMilliseconds(100));

                        Assert.That(taskResult.IsFaulted, Is.True, "Task should have reported an exception.");
                        Assert.That(taskResult.Exception.InnerException, Is.TypeOf <ResponseTimeoutException>());
                    }
        }
コード例 #9
0
        public void EnsureGzipCompressedMessageCanSend()
        {
            //ensure topic exists
            _kafkaConnection.SendAsync(new MetadataRequest {
                Topics = new List <string>(new[] { IntegrationConfig.IntegrationCompressionTopic })
            }).Wait();

            var conn = _router.SelectBrokerRoute(IntegrationConfig.IntegrationCompressionTopic, 0);

            var request = new ProduceRequest
            {
                Acks      = 1,
                TimeoutMS = 1000,
                Payload   = new List <Payload>
                {
                    new Payload
                    {
                        Codec     = MessageCodec.CodecGzip,
                        Topic     = IntegrationConfig.IntegrationCompressionTopic,
                        Partition = 0,
                        Messages  = new List <Message>
                        {
                            new Message {
                                Value = "0", Key = "1"
                            },
                            new Message {
                                Value = "1", Key = "1"
                            },
                            new Message {
                                Value = "2", Key = "1"
                            }
                        }
                    }
                }
            };

            var response = conn.Connection.SendAsync(request).Result;

            Assert.That(response.First().Error, Is.EqualTo(0));
        }
コード例 #10
0
        public void EnsureTwoRequestsCanCallOneAfterAnother()
        {
            var result1 = _conn.SendAsync(new MetadataRequest()).Result;
            var result2 = _conn.SendAsync(new MetadataRequest()).Result;

            Assert.That(result1.Count, Is.EqualTo(1));
            Assert.That(result2.Count, Is.EqualTo(1));
        }
コード例 #11
0
        public void SendAsyncShouldTimeoutMultipleMessagesAtATime()
        {
            using (var server = new FakeTcpServer(8999))
            using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
            using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(100), log: _log))
            {
                server.HasClientConnected.Wait(TimeSpan.FromSeconds(3));
                Assert.That(server.ConnectionEventcount, Is.EqualTo(1));

                var tasks = new[]
                    {
                        conn.SendAsync(new MetadataRequest()),
                        conn.SendAsync(new MetadataRequest()),
                        conn.SendAsync(new MetadataRequest())
                    };

                Task.WhenAll(tasks);

                TaskTest.WaitFor(() => tasks.Any(t => t.IsFaulted));
                foreach (var task in tasks)
                {
                    Assert.That(task.IsFaulted, Is.True, "Task should have faulted.");
                    Assert.That(task.Exception.InnerException, Is.TypeOf<ResponseTimeoutException>(), "Task fault should be of type ResponseTimeoutException.");
                }
            }
        }
コード例 #12
0
        public async void SendAsyncShouldNotAllowResponseToTimeoutWhileAwaitingKafkaToEstableConnection()
        {
            using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
            using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(1000000), log: _log))
            {
                Console.WriteLine("SendAsync blocked by reconnection attempts...");
                var taskResult = conn.SendAsync(new MetadataRequest());

                taskResult.ContinueWith(t => taskResult = t).Wait(TimeSpan.FromSeconds(1));

                Console.WriteLine("Task result should be WaitingForActivation...");
                Assert.That(taskResult.IsFaulted, Is.False);
                Assert.That(taskResult.Status, Is.EqualTo(TaskStatus.WaitingForActivation));

                Console.WriteLine("Starting server to establish connection...");
                using (var server = new FakeTcpServer(8999))
                {
                    server.OnClientConnected += () => Console.WriteLine("Client connected...");
                    server.OnBytesReceived += (b) =>
                    {
                        server.SendDataAsync(MessageHelper.CreateMetadataResponse(1, "Test"));
                    };

                    await taskResult;

                    Assert.That(taskResult.IsFaulted, Is.False);
                    Assert.That(taskResult.IsCanceled, Is.False);
                    Assert.That(taskResult.Status, Is.EqualTo(TaskStatus.RanToCompletion));
                }
            }
        }
コード例 #13
0
        public void SendAsyncShouldTimeoutWhenSendAsyncTakesTooLong()
        {
            using (var server = new FakeTcpServer(8999))
            using (var socket = new KafkaTcpSocket(_log, _kafkaEndpoint))
            using (var conn = new KafkaConnection(socket, TimeSpan.FromMilliseconds(1), log: _log))
            {
                TaskTest.WaitFor(() => server.ConnectionEventcount > 0);
                Assert.That(server.ConnectionEventcount, Is.EqualTo(1));

                var taskResult = conn.SendAsync(new MetadataRequest());

                taskResult.ContinueWith(t => taskResult = t).Wait(TimeSpan.FromMilliseconds(100));

                Assert.That(taskResult.IsFaulted, Is.True, "Task should have reported an exception.");
                Assert.That(taskResult.Exception.InnerException, Is.TypeOf<ResponseTimeoutException>());
            }
        }