Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding public API test coverage for Aspire.Hosting.Milvus #5152

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions src/Aspire.Hosting.Milvus/MilvusBuilderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ public static IResourceBuilder<MilvusServerResource> AddMilvus(this IDistributed
IResourceBuilder<ParameterResource> apiKey,
int? grpcPort = null)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(name);
ArgumentNullException.ThrowIfNull(apiKey, nameof(apiKey));

var tokenParameter = apiKey.Resource;
Expand Down Expand Up @@ -88,6 +90,9 @@ public static IResourceBuilder<MilvusServerResource> AddMilvus(this IDistributed
/// <returns>A reference to the <see cref="IResourceBuilder{T}"/>.</returns>
public static IResourceBuilder<MilvusDatabaseResource> AddDatabase(this IResourceBuilder<MilvusServerResource> builder, string name, string? databaseName = null)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(name);

// Use the resource name as the database name if it's not provided
databaseName ??= name;

Expand Down Expand Up @@ -118,6 +123,8 @@ public static IResourceBuilder<MilvusDatabaseResource> AddDatabase(this IResourc
/// <returns>A reference to the <see cref="IResourceBuilder{T}"/>.</returns>
public static IResourceBuilder<T> WithAttu<T>(this IResourceBuilder<T> builder, Action<IResourceBuilder<AttuResource>>? configureContainer = null, string? containerName = null) where T : MilvusServerResource
{
ArgumentNullException.ThrowIfNull(builder);

containerName ??= $"{builder.Resource.Name}-attu";

var attuContainer = new AttuResource(containerName);
Expand All @@ -141,7 +148,10 @@ public static IResourceBuilder<T> WithAttu<T>(this IResourceBuilder<T> builder,
/// <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<MilvusServerResource> WithDataVolume(this IResourceBuilder<MilvusServerResource> builder, string? name = null, bool isReadOnly = false)
=> builder.WithVolume(name ?? VolumeNameGenerator.CreateVolumeName(builder, "data"), "/var/lib/milvus", isReadOnly);
{
ArgumentNullException.ThrowIfNull(builder);
return builder.WithVolume(name ?? VolumeNameGenerator.CreateVolumeName(builder, "data"), "/var/lib/milvus", isReadOnly);
}

/// <summary>
/// Adds a bind mount for the data folder to a Milvus container resource.
Expand All @@ -151,7 +161,11 @@ public static IResourceBuilder<MilvusServerResource> WithDataVolume(this IResour
/// <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<MilvusServerResource> WithDataBindMount(this IResourceBuilder<MilvusServerResource> builder, string source, bool isReadOnly = false)
=> builder.WithBindMount(source, "/var/lib/milvus", isReadOnly);
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(source);
return builder.WithBindMount(source, "/var/lib/milvus", isReadOnly);
}

/// <summary>
/// Adds a bind mount for the configuration of a Milvus container resource.
Expand All @@ -160,7 +174,11 @@ public static IResourceBuilder<MilvusServerResource> WithDataBindMount(this IRes
/// <param name="configurationFilePath">The source directory on the host to mount into the container.</param>
/// <returns>The <see cref="IResourceBuilder{T}"/>.</returns>
public static IResourceBuilder<MilvusServerResource> WithConfigurationBindMount(this IResourceBuilder<MilvusServerResource> builder, string configurationFilePath)
=> builder.WithBindMount(configurationFilePath, "/milvus/configs/milvus.yaml");
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(configurationFilePath);
return builder.WithBindMount(configurationFilePath, "/milvus/configs/milvus.yaml");
}

private static void ConfigureAttuContainer(EnvironmentCallbackContext context, MilvusServerResource resource)
{
Expand Down
181 changes: 181 additions & 0 deletions tests/Aspire.Hosting.Milvus.Tests/MilvusPublicApiTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
// 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 Xunit;

namespace Aspire.Hosting.Milvus.Tests;

public class MilvusPublicApiTests
{
[Fact]
public void AddMilvusContainerShouldThrowWhenBuilderIsNull()
{
IDistributedApplicationBuilder builder = null!;
var name = "Milvus";

IResourceBuilder<ParameterResource> apiKey = null!;
var action = () => builder.AddMilvus(name, apiKey);

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

[Fact]
public void AddMilvusContainerShouldThrowWhenNameIsNull()
{
var builder = DistributedApplication.CreateBuilder([]);
builder.Configuration["Parameters:ApiKey"] = "root:Milvus";
var apiKey = builder.AddParameter("ApiKey");
string name = null!;

var action = () => builder.AddMilvus(name, apiKey);

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

[Fact]
public void AddMilvusContainerShouldThrowWhenApiKeyIsNull()
{
var builder = DistributedApplication.CreateBuilder([]);
var name = "Milvus";

IResourceBuilder<ParameterResource> apiKey = null!;

var action = () => builder.AddMilvus(name, apiKey);

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

[Fact]
public void AddDatabaseShouldThrowWhenNameIsNull()
{
var builder = DistributedApplication.CreateBuilder([]);
builder.Configuration["Parameters:ApiKey"] = "root:Milvus";
var apiKey = builder.AddParameter("ApiKey");

var milvus = builder.AddMilvus("Milvus", apiKey);
string name = null!;

var action = () => milvus.AddDatabase(name);

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

[Fact]
public void AddDatabaseShouldThrowWhenSourceIsNull()
{
IResourceBuilder<MilvusServerResource> builder = null!;
string name = "db";

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

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

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

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

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

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

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

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

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

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

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

[Fact]
public void WithDataBindMountShouldThrowWhenSourceIsNull()
{
var builder = DistributedApplication.CreateBuilder([]);
builder.Configuration["Parameters:ApiKey"] = "root:Milvus";
var apiKey = builder.AddParameter("ApiKey");

var milvus = builder.AddMilvus("Milvus", apiKey);
string source = null!;

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

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

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

var action = () => builder.WithConfigurationBindMount("/milvus/configs/milvus.yaml");

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

[Fact]
public void WithConfigurationBindMountShouldThrowWhenConfigurationFilePathIsNull()
{
var builder = DistributedApplication.CreateBuilder([]);
builder.Configuration["Parameters:ApiKey"] = "root:Milvus";
var apiKey = builder.AddParameter("ApiKey");

var milvus = builder.AddMilvus("Milvus", apiKey);
string configurationFilePath = null!;
var action = () => milvus.WithConfigurationBindMount(configurationFilePath);

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

[Fact]
public void CtorMilvusServerResourceShouldThrowWhenNameIsNull()
{
var builder = DistributedApplication.CreateBuilder([]);
string name = null!;
var apiKey = new ParameterResource("ApiKey", (pd) => "root:Milvus");

var action = () => new MilvusServerResource(name, apiKey);

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

[Fact]
public void CtorMilvusServerResourceShouldThrowWhenApiKeyIsNull()
{
var name = "Milvus";
ParameterResource apiKey = null!;

var action = () => new MilvusServerResource(name, apiKey);

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