| File: AzureKubernetesHelmChartTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Azure.Kubernetes.Tests\Aspire.Hosting.Azure.Kubernetes.Tests.csproj (Aspire.Hosting.Azure.Kubernetes.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #pragma warning disable ASPIREAZURE003 using Aspire.Hosting.ApplicationModel; using Aspire.Hosting.Azure.Kubernetes; using Aspire.Hosting.Kubernetes; using Aspire.Hosting.Utils; namespace Aspire.Hosting.Azure.Tests; public class AzureKubernetesHelmChartTests { [Fact] public void AksAddHelmChart_HasCorrectParent() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); var chart = aks.AddHelmChart("cert-manager", "oci://quay.io/jetstack/charts/cert-manager", "1.17.0"); // The chart should be a child of the inner K8S environment, not the AKS environment. Assert.IsType<KubernetesHelmChartResource>(chart.Resource); Assert.IsType<KubernetesEnvironmentResource>(chart.Resource.Parent); } [Fact] public void AksAddHelmChart_BasicProperties() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); var chart = aks.AddHelmChart("cert-manager", "oci://quay.io/jetstack/charts/cert-manager", "1.17.0"); Assert.Equal("cert-manager", chart.Resource.Name); Assert.Equal("oci://quay.io/jetstack/charts/cert-manager", chart.Resource.ChartReference); Assert.Equal("1.17.0", chart.Resource.ChartVersion); } [Fact] public void AksAddHelmChart_WithHelmValue_StoresValues() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); var chart = aks.AddHelmChart("cert-manager", "oci://quay.io/jetstack/charts/cert-manager", "1.17.0") .WithHelmValue("crds.enabled", "true") .WithHelmValue("config.enableGatewayAPI", "true"); Assert.Equal(2, chart.Resource.Values.Count); Assert.Equal("true", chart.Resource.Values["crds.enabled"]); Assert.Equal("true", chart.Resource.Values["config.enableGatewayAPI"]); } [Fact] public void AksAddHelmChart_WithNamespace_SetsNamespace() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); var chart = aks.AddHelmChart("nginx", "oci://ghcr.io/nginx/charts/nginx-ingress", "1.5.0") .WithNamespace("ingress-nginx"); Assert.Equal("ingress-nginx", chart.Resource.Namespace); } [Fact] public void AksAddHelmChart_WithReleaseName_SetsReleaseName() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); var chart = aks.AddHelmChart("nginx", "oci://ghcr.io/nginx/charts/nginx-ingress", "1.5.0") .WithReleaseName("my-nginx"); Assert.Equal("my-nginx", chart.Resource.ReleaseName); } [Fact] public void AksAddHelmChart_WithDestroy_OptsIn() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); var chart = aks.AddHelmChart("podinfo", "oci://ghcr.io/stefanprodan/charts/podinfo", "6.7.1") .WithDestroy(); Assert.True(chart.Resource.DestroyOnUninstall); } [Fact] public void AksAddHelmChart_DestroyDefaultsToFalse() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); var chart = aks.AddHelmChart("podinfo", "oci://ghcr.io/stefanprodan/charts/podinfo", "6.7.1"); Assert.False(chart.Resource.DestroyOnUninstall); } [Fact] public void AksAddHelmChart_ThrowsOnNullBuilder() { Assert.Throws<ArgumentNullException>(() => ((IResourceBuilder<AzureKubernetesEnvironmentResource>)null!) .AddHelmChart("test", "oci://example.com/chart", "1.0.0")); } [Theory] [InlineData(null, "oci://example.com/chart", "1.0.0")] [InlineData("", "oci://example.com/chart", "1.0.0")] [InlineData("test", null, "1.0.0")] [InlineData("test", "", "1.0.0")] [InlineData("test", "oci://example.com/chart", null)] [InlineData("test", "oci://example.com/chart", "")] public void AksAddHelmChart_ThrowsOnNullOrEmptyArgs(string? name, string? chartReference, string? chartVersion) { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); Assert.ThrowsAny<ArgumentException>(() => aks.AddHelmChart(name!, chartReference!, chartVersion!)); } [Fact] public void AksAddHelmChart_RejectsInvalidChartVersion() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); Assert.Throws<ArgumentException>(() => aks.AddHelmChart("test", "oci://example.com/chart", "not-a-semver")); } [Fact] public void AksAddHelmChart_RejectsMaliciousChartReference() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var aks = builder.AddAzureKubernetesEnvironment("aks"); Assert.Throws<ArgumentException>(() => aks.AddHelmChart("test", "evil chart\"", "1.0.0")); } }