File: ConfluentKafkaPublicApiTests.cs
Web Access
Project: src\tests\Aspire.Confluent.Kafka.Tests\Aspire.Confluent.Kafka.Tests.csproj (Aspire.Confluent.Kafka.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Confluent.Kafka;
using Microsoft.Extensions.Hosting;
using Xunit;
 
namespace Aspire.Confluent.Kafka.Tests;
 
public class ConfluentKafkaPublicApiTests
{
    [Theory]
    [InlineData(0)]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    [InlineData(4)]
    [InlineData(5)]
    public void AddKafkaConsumerShouldThrowWhenBuilderIsNull(int overrideIndex)
    {
        IHostApplicationBuilder builder = null!;
        const string connectionName = "Kafka:Consumer";
        Action<KafkaConsumerSettings>? configureSettings = null;
        Action<ConsumerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ConsumerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKafkaConsumer<string, string>(connectionName),
            1 => () => builder.AddKafkaConsumer<string, string>(connectionName, configureSettings),
            2 => () => builder.AddKafkaConsumer(connectionName, configureBuilder),
            3 => () => builder.AddKafkaConsumer(connectionName, configureBuilderWithServiceProvider),
            4 => () => builder.AddKafkaConsumer(connectionName, configureSettings, configureBuilder),
            5 => () => builder.AddKafkaConsumer(connectionName, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = Assert.Throws<ArgumentNullException>(action);
        Assert.Equal(nameof(builder), exception.ParamName);
    }
 
    [Theory]
    [InlineData(0, false)]
    [InlineData(0, true)]
    [InlineData(1, false)]
    [InlineData(1, true)]
    [InlineData(2, false)]
    [InlineData(2, true)]
    [InlineData(3, false)]
    [InlineData(3, true)]
    [InlineData(4, false)]
    [InlineData(4, true)]
    [InlineData(5, false)]
    [InlineData(5, true)]
    public void AddKafkaConsumerShouldThrowWhenConnectionNameIsNullOrEmpty(int overrideIndex, bool isNull)
    {
        var builder = Host.CreateEmptyApplicationBuilder(null);
        var connectionName = isNull ? null! : string.Empty;
        Action<KafkaConsumerSettings>? configureSettings = null;
        Action<ConsumerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ConsumerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKafkaConsumer<string, string>(connectionName),
            1 => () => builder.AddKafkaConsumer<string, string>(connectionName, configureSettings),
            2 => () => builder.AddKafkaConsumer(connectionName, configureBuilder),
            3 => () => builder.AddKafkaConsumer(connectionName, configureBuilderWithServiceProvider),
            4 => () => builder.AddKafkaConsumer(connectionName, configureSettings, configureBuilder),
            5 => () => builder.AddKafkaConsumer(connectionName, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = isNull
            ? Assert.Throws<ArgumentNullException>(action)
            : Assert.Throws<ArgumentException>(action);
        Assert.Equal(nameof(connectionName), exception.ParamName);
    }
 
    [Theory]
    [InlineData(0)]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    [InlineData(4)]
    [InlineData(5)]
    public void AddKeyedKafkaConsumerShouldThrowWhenBuilderIsNull(int overrideIndex)
    {
        IHostApplicationBuilder builder = null!;
        const string name = "Kafka:Consumer";
        Action<KafkaConsumerSettings>? configureSettings = null;
        Action<ConsumerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ConsumerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKeyedKafkaConsumer<string, string>(name),
            1 => () => builder.AddKeyedKafkaConsumer<string, string>(name, configureSettings),
            2 => () => builder.AddKeyedKafkaConsumer(name, configureBuilder),
            3 => () => builder.AddKeyedKafkaConsumer(name, configureBuilderWithServiceProvider),
            4 => () => builder.AddKeyedKafkaConsumer(name, configureSettings, configureBuilder),
            5 => () => builder.AddKeyedKafkaConsumer(name, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = Assert.Throws<ArgumentNullException>(action);
        Assert.Equal(nameof(builder), exception.ParamName);
    }
 
    [Theory]
    [InlineData(0, false)]
    [InlineData(0, true)]
    [InlineData(1, false)]
    [InlineData(1, true)]
    [InlineData(2, false)]
    [InlineData(2, true)]
    [InlineData(3, false)]
    [InlineData(3, true)]
    [InlineData(4, false)]
    [InlineData(4, true)]
    [InlineData(5, false)]
    [InlineData(5, true)]
    public void AddKeyedKafkaConsumerShouldThrowWhenConnectionNameIsNullOrEmpty(int overrideIndex, bool isNull)
    {
        var builder = Host.CreateEmptyApplicationBuilder(null);
        var name = isNull ? null! : string.Empty;
        Action<KafkaConsumerSettings>? configureSettings = null;
        Action<ConsumerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ConsumerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKeyedKafkaConsumer<string, string>(name),
            1 => () => builder.AddKeyedKafkaConsumer<string, string>(name, configureSettings),
            2 => () => builder.AddKeyedKafkaConsumer(name, configureBuilder),
            3 => () => builder.AddKeyedKafkaConsumer(name, configureBuilderWithServiceProvider),
            4 => () => builder.AddKeyedKafkaConsumer(name, configureSettings, configureBuilder),
            5 => () => builder.AddKeyedKafkaConsumer(name, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = isNull
            ? Assert.Throws<ArgumentNullException>(action)
            : Assert.Throws<ArgumentException>(action);
        Assert.Equal(nameof(name), exception.ParamName);
    }
 
    [Theory]
    [InlineData(0)]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    [InlineData(4)]
    [InlineData(5)]
    public void AddKafkaProducerShouldThrowWhenBuilderIsNull(int overrideIndex)
    {
        IHostApplicationBuilder builder = null!;
        const string connectionName = "Kafka:Consumer";
        Action<KafkaProducerSettings>? configureSettings = null;
        Action<ProducerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ProducerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKafkaProducer<string, string>(connectionName),
            1 => () => builder.AddKafkaProducer<string, string>(connectionName, configureSettings),
            2 => () => builder.AddKafkaProducer(connectionName, configureBuilder),
            3 => () => builder.AddKafkaProducer(connectionName, configureBuilderWithServiceProvider),
            4 => () => builder.AddKafkaProducer(connectionName, configureSettings, configureBuilder),
            5 => () => builder.AddKafkaProducer(connectionName, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = Assert.Throws<ArgumentNullException>(action);
        Assert.Equal(nameof(builder), exception.ParamName);
    }
 
    [Theory]
    [InlineData(0, false)]
    [InlineData(0, true)]
    [InlineData(1, false)]
    [InlineData(1, true)]
    [InlineData(2, false)]
    [InlineData(2, true)]
    [InlineData(3, false)]
    [InlineData(3, true)]
    [InlineData(4, false)]
    [InlineData(4, true)]
    [InlineData(5, false)]
    [InlineData(5, true)]
    public void AddKafkaProducerShouldThrowWhenConnectionNameIsNullOrEmpty(int overrideIndex, bool isNull)
    {
        var builder = Host.CreateEmptyApplicationBuilder(null);
        var connectionName = isNull ? null! : string.Empty;
        Action<KafkaProducerSettings>? configureSettings = null;
        Action<ProducerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ProducerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKafkaProducer<string, string>(connectionName),
            1 => () => builder.AddKafkaProducer<string, string>(connectionName, configureSettings),
            2 => () => builder.AddKafkaProducer(connectionName, configureBuilder),
            3 => () => builder.AddKafkaProducer(connectionName, configureBuilderWithServiceProvider),
            4 => () => builder.AddKafkaProducer(connectionName, configureSettings, configureBuilder),
            5 => () => builder.AddKafkaProducer(connectionName, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = isNull
            ? Assert.Throws<ArgumentNullException>(action)
            : Assert.Throws<ArgumentException>(action);
        Assert.Equal(nameof(connectionName), exception.ParamName);
    }
 
    [Theory]
    [InlineData(0)]
    [InlineData(1)]
    [InlineData(2)]
    [InlineData(3)]
    [InlineData(4)]
    [InlineData(5)]
    public void AddKeyedKafkaProducerConsumerShouldThrowWhenBuilderIsNull(int overrideIndex)
    {
        IHostApplicationBuilder builder = null!;
        const string name = "Kafka:Consumer";
        Action<KafkaProducerSettings>? configureSettings = null;
        Action<ProducerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ProducerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKeyedKafkaProducer<string, string>(name),
            1 => () => builder.AddKeyedKafkaProducer<string, string>(name, configureSettings),
            2 => () => builder.AddKeyedKafkaProducer(name, configureBuilder),
            3 => () => builder.AddKeyedKafkaProducer(name, configureBuilderWithServiceProvider),
            4 => () => builder.AddKeyedKafkaProducer(name, configureSettings, configureBuilder),
            5 => () => builder.AddKeyedKafkaProducer(name, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = Assert.Throws<ArgumentNullException>(action);
        Assert.Equal(nameof(builder), exception.ParamName);
    }
 
    [Theory]
    [InlineData(0, false)]
    [InlineData(0, true)]
    [InlineData(1, false)]
    [InlineData(1, true)]
    [InlineData(2, false)]
    [InlineData(2, true)]
    [InlineData(3, false)]
    [InlineData(3, true)]
    [InlineData(4, false)]
    [InlineData(4, true)]
    [InlineData(5, false)]
    [InlineData(5, true)]
    public void AddKeyedKafkaProducerShouldThrowWhenConnectionNameIsNullOrEmpty(int overrideIndex, bool isNull)
    {
        var builder = Host.CreateEmptyApplicationBuilder(null);
        var name = isNull ? null! : string.Empty;
        Action<KafkaProducerSettings>? configureSettings = null;
        Action<ProducerBuilder<string, string>>? configureBuilder = null;
        Action<IServiceProvider, ProducerBuilder<string, string>>? configureBuilderWithServiceProvider = null;
 
        Action action = overrideIndex switch
        {
            0 => () => builder.AddKeyedKafkaProducer<string, string>(name),
            1 => () => builder.AddKeyedKafkaProducer<string, string>(name, configureSettings),
            2 => () => builder.AddKeyedKafkaProducer(name, configureBuilder),
            3 => () => builder.AddKeyedKafkaProducer(name, configureBuilderWithServiceProvider),
            4 => () => builder.AddKeyedKafkaProducer(name, configureSettings, configureBuilder),
            5 => () => builder.AddKeyedKafkaProducer(name, configureSettings, configureBuilderWithServiceProvider),
            _ => throw new InvalidOperationException()
        };
 
        var exception = isNull
            ? Assert.Throws<ArgumentNullException>(action)
            : Assert.Throws<ArgumentException>(action);
        Assert.Equal(nameof(name), exception.ParamName);
    }
}