Skip to content

Commit

Permalink
Adding public API test coverage (#5159)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alirexaa authored Aug 5, 2024
1 parent a41bd1b commit 5605efa
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/Aspire.Hosting.Kafka/KafkaBuilderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ public static class KafkaBuilderExtensions
/// <returns>A reference to the <see cref="IResourceBuilder{KafkaServerResource}"/>.</returns>
public static IResourceBuilder<KafkaServerResource> AddKafka(this IDistributedApplicationBuilder builder, string name, int? port = null)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(name);

var kafka = new KafkaServerResource(name);
return builder.AddResource(kafka)
.WithEndpoint(targetPort: KafkaBrokerPort, port: port, name: KafkaServerResource.PrimaryEndpointName)
Expand All @@ -44,6 +47,8 @@ public static IResourceBuilder<KafkaServerResource> AddKafka(this IDistributedAp
/// <returns>A reference to the <see cref="IResourceBuilder{KafkaServerResource}"/>.</returns>
public static IResourceBuilder<KafkaServerResource> WithKafkaUI(this IResourceBuilder<KafkaServerResource> builder, Action<IResourceBuilder<KafkaUIContainerResource>>? configureContainer = null, string? containerName = null)
{
ArgumentNullException.ThrowIfNull(builder);

if (builder.ApplicationBuilder.Resources.OfType<KafkaUIContainerResource>().SingleOrDefault() is { } existingKafkaUIResource)
{
var builderForExistingResource = builder.ApplicationBuilder.CreateResourceBuilder(existingKafkaUIResource);
Expand Down Expand Up @@ -77,6 +82,8 @@ public static IResourceBuilder<KafkaServerResource> WithKafkaUI(this IResourceBu
/// <returns>The resource builder for KafkaUI.</returns>
public static IResourceBuilder<KafkaUIContainerResource> WithHostPort(this IResourceBuilder<KafkaUIContainerResource> builder, int? port)
{
ArgumentNullException.ThrowIfNull(builder);

return builder.WithEndpoint("http", endpoint =>
{
endpoint.Port = port;
Expand All @@ -91,7 +98,11 @@ public static IResourceBuilder<KafkaUIContainerResource> WithHostPort(this IReso
/// <param name="isReadOnly">A flag that indicates if this is a read-only volume.</param>
/// <returns>The <see cref="IResourceBuilder{T}"/>.</returns>
public static IResourceBuilder<KafkaServerResource> WithDataVolume(this IResourceBuilder<KafkaServerResource> builder, string? name = null, bool isReadOnly = false)
=> builder.WithVolume(name ?? VolumeNameGenerator.CreateVolumeName(builder, "data"), "/var/lib/kafka/data", isReadOnly);
{
ArgumentNullException.ThrowIfNull(builder);

return builder.WithVolume(name ?? VolumeNameGenerator.CreateVolumeName(builder, "data"), "/var/lib/kafka/data", isReadOnly);
}

/// <summary>
/// Adds a bind mount for the data folder to a Kafka container resource.
Expand All @@ -101,7 +112,12 @@ public static IResourceBuilder<KafkaServerResource> WithDataVolume(this IResourc
/// <param name="isReadOnly">A flag that indicates if this is a read-only mount.</param>
/// <returns>The <see cref="IResourceBuilder{T}"/>.</returns>
public static IResourceBuilder<KafkaServerResource> WithDataBindMount(this IResourceBuilder<KafkaServerResource> builder, string source, bool isReadOnly = false)
=> builder.WithBindMount(source, "/var/lib/kafka/data", isReadOnly);
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(source);

return builder.WithBindMount(source, "/var/lib/kafka/data", isReadOnly);
}

private static void ConfigureKafkaContainer(EnvironmentCallbackContext context, KafkaServerResource resource)
{
Expand Down
115 changes: 115 additions & 0 deletions tests/Aspire.Hosting.Kafka.Tests/KafkaPublicApiTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Aspire.Hosting.ApplicationModel;
using Aspire.Hosting.Utils;
using Xunit;

namespace Aspire.Hosting.Kafka.Tests;

public class KafkaPublicApiTests
{
[Fact]
public void AddKafkaContainerShouldThrowWhenBuilderIsNull()
{
IDistributedApplicationBuilder builder = null!;
const string name = "Kafka";

var action = () => builder.AddKafka(name);

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(builder), exception.ParamName);
}

[Fact]
public void AddKafkaContainerShouldThrowWhenNameIsNull()
{
var builder = DistributedApplication.CreateBuilder([]);
string name = null!;

var action = () => builder.AddKafka(name);

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(name), exception.ParamName);
}

[Fact]
public void WithDataVolumeShouldThrowWhenBuilderIsNull()
{
IResourceBuilder<KafkaServerResource> builder = null!;

var action = () => builder.WithDataVolume();

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(builder), exception.ParamName);
}

[Fact]
public void WithDataBindMountShouldThrowWhenBuilderIsNull()
{
IResourceBuilder<KafkaServerResource> builder = null!;
const string source = "/Kafka/data";

var action = () => builder.WithDataBindMount(source);

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(builder), exception.ParamName);
}

[Fact]
public void WithDataBindMountShouldThrowWhenSourceIsNull()
{
var builderResource = TestDistributedApplicationBuilder.Create();
var Kafka = builderResource.AddKafka("Kafka");
string source = null!;

var action = () => Kafka.WithDataBindMount(source);

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(source), exception.ParamName);
}

[Fact]
public void WithKafkaUIShouldThrowWhenBuilderIsNull()
{
IResourceBuilder<KafkaServerResource> builder = null!;

var action = () => builder.WithKafkaUI();

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(builder), exception.ParamName);
}

[Fact]
public void WithHostPortShouldThrowWhenBuilderIsNull()
{
IResourceBuilder<KafkaUIContainerResource> builder = null!;

var action = () => builder.WithHostPort(9936);

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(builder), exception.ParamName);
}

[Fact]
public void CtorKafkaServerResourceShouldThrowWhenNameIsNull()
{
string name = null!;

var action = () => new KafkaServerResource(name);

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(name), exception.ParamName);
}

[Fact]
public void CtorKafkaUIContainerResourceShouldThrowWhenNameIsNull()
{
string name = null!;

var action = () => new KafkaUIContainerResource(name);

var exception = Assert.Throws<ArgumentNullException>(action);
Assert.Equal(nameof(name), exception.ParamName);
}
}

0 comments on commit 5605efa

Please sign in to comment.