Esempio n. 1
0
    static void WithAdminClient(ILogger logger, Action <IAdminClient> callback)
    {
        using var producer = new KafkaProducerImplementation(new SerilogLoggerFactory(logger), KafkaTestConfig.Address, configurationCustomizer: ConfigurationCustomizer);

        using var adminClient = producer.GetAdminClient();

        callback(adminClient);
    }
Esempio n. 2
0
        public void Dispose()
        {
            using (var producer = new KafkaProducerImplementation(new SerilogLoggerFactory(Logger), KafkaTestConfig.Address))
                using (var adminClient = producer.GetAdminClient())
                {
                    var metadata = adminClient.GetMetadata(TimeSpan.FromSeconds(10));

                    if (!metadata.Topics.Select(t => t.Topic).Contains(_topicName))
                    {
                        return;
                    }

                    Logger.Information("Deleting topic {topic}", _topicName);

                    ExceptionDispatchInfo exception = null;
                    var done = new ManualResetEvent(false);

                    Task.Run(async() =>
                    {
                        try
                        {
                            await adminClient
                            .DeleteTopicsAsync(new[] { _topicName }, new DeleteTopicsOptions
                            {
                                OperationTimeout = TimeSpan.FromSeconds(10)
                            });
                        }
                        catch (Exception ex)
                        {
                            exception = ExceptionDispatchInfo.Capture(ex);
                        }
                        finally
                        {
                            done.Set();
                        }
                    });

                    if (!done.WaitOne(TimeSpan.FromSeconds(20)))
                    {
                        throw new TimeoutException($"Timeout after waiting 20 s for topic {_topicName} to be deleted");
                    }

                    if (exception != null)
                    {
                        Console.WriteLine($"Error when deleting topic {_topicName}: {exception.SourceException}");
                    }
                }
        }
Esempio n. 3
0
    public async Task ListTopics()
    {
        var producer = new KafkaProducerImplementation(new ConsoleLoggerFactory(minimumLogLevel: LogLevel.Debug), KafkaTestConfig.Address);

        Using(producer);

        var adminClient = producer.GetAdminClient();

        Using(adminClient);

        var metadata = adminClient.GetMetadata(TimeSpan.FromSeconds(10));

        Console.WriteLine($@"Topics:

{string.Join(Environment.NewLine, metadata.Topics.Select(t => $"    {t.Topic}: {string.Join(", ", t.Partitions.Select(p => p.PartitionId))}"))}

");

        //Console.WriteLine("Deleting all topics!");

        //await adminClient.DeleteTopicsAsync(metadata.Topics.Select(t => t.Topic));
    }
Esempio n. 4
0
        public static string GetTopic(ILogger logger)
        {
            using (var producer = new KafkaProducerImplementation(new SerilogLoggerFactory(logger), KafkaTestConfig.Address))
                using (var adminClient = producer.GetAdminClient())
                {
                    var topics = adminClient
                                 .GetMetadata(TimeSpan.FromSeconds(10))
                                 .Topics.Select(topic => topic.Topic)
                                 .Select(topic => topic.Split('-'))
                                 .Where(parts => parts.Length == 2 && int.TryParse(parts[1], out _))
                                 .Select(parts => int.Parse(parts[1]))
                                 .ToList();

                    var number = topics.Any() ? topics.Max() : 0;

                    var topicName = $"testtopic-{number + 1}";

                    logger.Information("Using topic named {topic}", topicName);

                    return(topicName);
                }
        }