| File: Telemetry\ComponentTelemetryContextTests.cs | Web Access |
| Project: src\tests\Aspire.Dashboard.Tests\Aspire.Dashboard.Tests.csproj (Aspire.Dashboard.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.Dashboard.Components.Pages; using Aspire.Dashboard.Telemetry; using Microsoft.Extensions.Logging.Abstractions; using Xunit; namespace Aspire.Dashboard.Tests.Telemetry; public class ComponentTelemetryContextTests { [Fact] public void ComponentTelemetryContext_TelemetryEnabled_RecordsLifecycleAndPropertyUpdates() { var telemetryContext = new ComponentTelemetryContext(ComponentType.Page, nameof(ComponentTelemetryContextTests)); using var fixture = new DashboardTelemetryFixture(); var telemetryService = fixture.Telemetry; var telemetryContextProvider = new ComponentTelemetryContextProvider(telemetryService); telemetryContextProvider.SetBrowserUserAgent("mozilla"); var logger = NullLogger<ComponentTelemetryContextTests>.Instance; telemetryContextProvider.Initialize(telemetryContext); Assert.True(fixture.LogChannel.Reader.TryRead(out var initializeEvent)); Assert.Equal(TelemetryEventKeys.ComponentInitialize, initializeEvent.Message); Assert.Equal(nameof(ComponentTelemetryContextTests), initializeEvent.Attributes.Single(p => p.Key == TelemetryPropertyKeys.DashboardComponentId).Value); Assert.Equal(nameof(ComponentType.Page), initializeEvent.Attributes.Single(p => p.Key == TelemetryPropertyKeys.DashboardComponentType).Value); Assert.True(telemetryContext.UpdateTelemetryProperties([new ComponentTelemetryProperty(TelemetryPropertyKeys.MetricsSelectedView, new AspireTelemetryProperty("Graph"))], logger)); Assert.True(fixture.LogChannel.Reader.TryRead(out var parametersUpdateEvent)); Assert.Equal(TelemetryEventKeys.ParametersSet, parametersUpdateEvent.Message); Assert.Equal("Graph", parametersUpdateEvent.Attributes.Single(p => p.Key == TelemetryPropertyKeys.MetricsSelectedView).Value); Assert.False(telemetryContext.UpdateTelemetryProperties([new ComponentTelemetryProperty(TelemetryPropertyKeys.MetricsSelectedView, new AspireTelemetryProperty("Graph"))], logger)); Assert.False(fixture.LogChannel.Reader.TryPeek(out _)); Assert.True(telemetryContext.UpdateTelemetryProperties([new ComponentTelemetryProperty(TelemetryPropertyKeys.MetricsSelectedView, new AspireTelemetryProperty("Table"))], logger)); Assert.True(fixture.LogChannel.Reader.TryRead(out parametersUpdateEvent)); Assert.Equal(TelemetryEventKeys.ParametersSet, parametersUpdateEvent.Message); Assert.Equal("Table", parametersUpdateEvent.Attributes.Single(p => p.Key == TelemetryPropertyKeys.MetricsSelectedView).Value); telemetryContext.Dispose(); Assert.True(fixture.LogChannel.Reader.TryRead(out var disposeEvent)); Assert.Equal(TelemetryEventKeys.ComponentDispose, disposeEvent.Message); Assert.False(fixture.LogChannel.Reader.TryPeek(out _)); Assert.False(fixture.ActivityChannel.Reader.TryPeek(out _)); } [Fact] public void ComponentTelemetryContext_TelemetryDisabled_EndToEnd() { // Arrange var telemetryContext = new ComponentTelemetryContext(ComponentType.Page, nameof(ComponentTelemetryContextTests)); using var fixture = new DashboardTelemetryFixture(reportedTelemetryEnabled: false); var telemetryService = fixture.Telemetry; var telemetryContextProvider = new ComponentTelemetryContextProvider(telemetryService); telemetryContextProvider.SetBrowserUserAgent("mozilla"); var logger = NullLogger<ComponentTelemetryContextTests>.Instance; // Act & assert initialize telemetryContextProvider.Initialize(telemetryContext); Assert.False(fixture.LogChannel.Reader.TryRead(out _)); // Act & assert update properties telemetryContext.UpdateTelemetryProperties([new ComponentTelemetryProperty("Test", new AspireTelemetryProperty("Value"))], logger); Assert.Collection(telemetryContext.Properties.OrderBy(p => p.Key, StringComparer.Ordinal), kvp => { Assert.Equal("Test", kvp.Key); Assert.Equal("Value", kvp.Value.Value); }, kvp => { Assert.Equal("aspire.dashboard.component.id", kvp.Key); Assert.Equal("ComponentTelemetryContextTests", kvp.Value.Value); }, kvp => { Assert.Equal("aspire.dashboard.component.type", kvp.Key); Assert.Equal("Page", kvp.Value.Value); }, kvp => { Assert.Equal("user_agent.original", kvp.Key); Assert.Equal("mozilla", kvp.Value.Value); }); Assert.False(fixture.LogChannel.Reader.TryRead(out _)); // Act & assert dispose telemetryContext.Dispose(); Assert.False(fixture.LogChannel.Reader.TryRead(out _)); Assert.False(fixture.ActivityChannel.Reader.TryPeek(out _)); } [Fact] public void ComponentTelemetryContext_DisposeWithoutInitialize_NoThrow() { // Arrange var telemetryContext = new ComponentTelemetryContext(ComponentType.Page, nameof(ComponentTelemetryContextTests)); // Act telemetryContext.Dispose(); } }