|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Globalization;
using Aspire.Hosting.ApplicationModel;
using Aspire.Hosting.Tests.Utils;
using Aspire.Hosting.Utils;
using Xunit;
namespace Aspire.Hosting.Azure.Tests;
public class AzureCosmosDBExtensionsTests
{
[Theory]
[InlineData(null)]
[InlineData(8081)]
[InlineData(9007)]
public void AddAzureCosmosDBWithEmulatorGetsExpectedPort(int? port = null)
{
using var builder = TestDistributedApplicationBuilder.Create();
var cosmos = builder.AddAzureCosmosDB("cosmos");
cosmos.RunAsEmulator(container =>
{
container.WithGatewayPort(port);
});
var endpointAnnotation = cosmos.Resource.Annotations.OfType<EndpointAnnotation>().FirstOrDefault();
Assert.NotNull(endpointAnnotation);
var actualPort = endpointAnnotation.Port;
Assert.Equal(port, actualPort);
}
[Theory]
[InlineData("2.3.97-preview")]
[InlineData("1.0.7")]
public void AddAzureCosmosDBWithEmulatorGetsExpectedImageTag(string imageTag)
{
using var builder = TestDistributedApplicationBuilder.Create();
var cosmos = builder.AddAzureCosmosDB("cosmos");
cosmos.RunAsEmulator(container =>
{
container.WithImageTag(imageTag);
});
var containerImageAnnotation = cosmos.Resource.Annotations.OfType<ContainerImageAnnotation>().FirstOrDefault();
Assert.NotNull(containerImageAnnotation);
var actualTag = containerImageAnnotation.Tag;
Assert.Equal(imageTag ?? "latest", actualTag);
}
[Theory]
[InlineData(30)]
[InlineData(12)]
public async Task AddAzureCosmosDBWithPartitionCountCanOverrideNumberOfPartitions(int partitionCount)
{
using var builder = TestDistributedApplicationBuilder.Create();
var cosmos = builder.AddAzureCosmosDB("cosmos");
cosmos.RunAsEmulator(r => r.WithPartitionCount(partitionCount));
var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(cosmos.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance);
Assert.Equal(partitionCount.ToString(CultureInfo.InvariantCulture), config["AZURE_COSMOS_EMULATOR_PARTITION_COUNT"]);
}
[Fact]
public void AddAzureCosmosDBWithDataExplorer()
{
#pragma warning disable ASPIRECOSMOS001 // RunAsPreviewEmulator is experimental
using var builder = TestDistributedApplicationBuilder.Create();
var cosmos = builder.AddAzureCosmosDB("cosmos");
cosmos.RunAsPreviewEmulator(e => e.WithDataExplorer());
var endpoint = cosmos.GetEndpoint("data-explorer");
Assert.NotNull(endpoint);
Assert.Equal(1234, endpoint.TargetPort);
// WithDataExplorer doesn't work against the non-preview emulator
var cosmos2 = builder.AddAzureCosmosDB("cosmos2");
Assert.Throws<NotSupportedException>(() => cosmos2.RunAsEmulator(e => e.WithDataExplorer()));
#pragma warning restore ASPIRECOSMOS001 // RunAsPreviewEmulator is experimental
}
}
|