| File: MauiOtlpTemplateTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Maui.Tests\Aspire.Hosting.Maui.Tests.csproj (Aspire.Hosting.Maui.Tests) |
// 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.Maui; using Aspire.Hosting.Tests.Utils; namespace Aspire.Hosting.Tests; /// <summary> /// Tests that OTLP environment variables do not contain DCP template placeholders ({{...}}) /// after evaluation. MAUI resources resolve these templates eagerly because Android/iOS /// environment files are generated before DCP's template replacement happens. /// </summary> public class MauiOtlpTemplateTests(ITestOutputHelper outputHelper) { [Theory] [InlineData("Windows", "net10.0-windows10.0.19041.0")] [InlineData("Android", "net10.0-android")] [InlineData("iOS", "net10.0-ios")] [InlineData("MacCatalyst", "net10.0-maccatalyst")] public async Task PlatformResource_OtelServiceName_DoesNotContainDcpPlaceholders(string platform, string tfm) { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent(tfm)); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var platformResource = AddPlatformByName(maui, platform); var envVars = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync( platformResource.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance); Assert.True(envVars.ContainsKey("OTEL_SERVICE_NAME"), "Expected OTEL_SERVICE_NAME to be set on MAUI platform resource"); var serviceName = envVars["OTEL_SERVICE_NAME"]; Assert.DoesNotContain("{{", serviceName); Assert.DoesNotContain("}}", serviceName); } [Theory] [InlineData("Windows", "net10.0-windows10.0.19041.0")] [InlineData("Android", "net10.0-android")] [InlineData("iOS", "net10.0-ios")] [InlineData("MacCatalyst", "net10.0-maccatalyst")] public async Task PlatformResource_OtelResourceAttributes_DoesNotContainDcpPlaceholders(string platform, string tfm) { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent(tfm)); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var platformResource = AddPlatformByName(maui, platform); var envVars = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync( platformResource.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance); Assert.True(envVars.ContainsKey("OTEL_RESOURCE_ATTRIBUTES"), "Expected OTEL_RESOURCE_ATTRIBUTES to be set on MAUI platform resource"); var resourceAttrs = envVars["OTEL_RESOURCE_ATTRIBUTES"]; Assert.DoesNotContain("{{", resourceAttrs); Assert.DoesNotContain("}}", resourceAttrs); } [Fact] public async Task PlatformResource_HasOtelExporterEndpoint() { using var workspace = TemporaryWorkspace.Create(outputHelper); var tempFile = Path.Combine(workspace.Path, "TempMauiProject.csproj"); File.WriteAllText(tempFile, MauiTestHelper.CreateProjectContent("net10.0-android")); var appBuilder = DistributedApplication.CreateBuilder(); var maui = appBuilder.AddMauiProject("mauiapp", tempFile); var androidDevice = maui.AddAndroidDevice(); var envVars = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync( androidDevice.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance); // OTEL_EXPORTER_OTLP_ENDPOINT should be present (set by WithOtlpExporter) Assert.True(envVars.ContainsKey("OTEL_EXPORTER_OTLP_ENDPOINT"), "Expected OTEL_EXPORTER_OTLP_ENDPOINT to be set on MAUI platform resource"); } private static IResourceBuilder<IResource> AddPlatformByName( IResourceBuilder<MauiProjectResource> maui, string platform) { return platform switch { "Windows" => maui.AddWindowsDevice(), "Android" => maui.AddAndroidDevice(), "iOS" => maui.AddiOSDevice(), "MacCatalyst" => maui.AddMacCatalystDevice(), _ => throw new ArgumentException($"Unknown platform: {platform}") }; } }