File: Latency\RequestCheckpointExtensionsTests.cs
Web Access
Project: src\test\Libraries\Microsoft.AspNetCore.Diagnostics.Middleware.Tests\Microsoft.AspNetCore.Diagnostics.Middleware.Tests.csproj (Microsoft.AspNetCore.Diagnostics.Middleware.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.Latency;
using Microsoft.Extensions.Diagnostics.Latency.Internal;
using Moq;
using Xunit;
 
namespace Microsoft.AspNetCore.Diagnostics.Latency.Test;
 
public class RequestCheckpointExtensionsTests
{
    [Fact]
    public void AddRequestCheckpoint_Throws_WhenNullBuilder()
    {
        Assert.Throws<ArgumentNullException>(() => Extensions.DependencyInjection.RequestLatencyTelemetryServiceCollectionExtensions.AddRequestCheckpoint(null!));
    }
 
    [Fact]
    public void UseRequestCheckpoint_Throws_WhenNullBuilder()
    {
        Assert.Throws<ArgumentNullException>(() => Builder.RequestLatencyTelemetryApplicationBuilderExtensions.UseRequestCheckpoint(null!));
    }
 
    [Fact]
    public void AddPipelineEntryCheckpoint_Throws_WhenNullBuilder()
    {
        Assert.Throws<ArgumentNullException>(() => Extensions.DependencyInjection.RequestLatencyTelemetryServiceCollectionExtensions.AddPipelineEntryCheckpoint(null!));
    }
 
    [Fact]
    public void AddRequestCheckpoint_LatencyContextNotRegistered_RegistersLatencyContext()
    {
        using var serviceProvider = new ServiceCollection()
            .AddRequestCheckpoint()
            .BuildServiceProvider(new ServiceProviderOptions { ValidateOnBuild = true, ValidateScopes = true });
 
        Assert.IsType<LatencyContextTokenIssuer>(serviceProvider.GetRequiredService<ILatencyContextTokenIssuer>());
        Assert.IsType<LatencyContextProvider>(serviceProvider.GetRequiredService<ILatencyContextProvider>());
 
        using var scope = serviceProvider.CreateScope();
        Assert.NotNull(scope.ServiceProvider.GetService<ILatencyContext>());
    }
 
    [Fact]
    public void AddRequestCheckpoint_CustomLatencyContextRegisteredFirst_KeepsCustomLatencyContext()
    {
        var tokenIssuer = Mock.Of<ILatencyContextTokenIssuer>();
        var latencyContextProvider = Mock.Of<ILatencyContextProvider>();
        var latencyContext = Mock.Of<ILatencyContext>();
 
        using var serviceProvider = new ServiceCollection()
            .AddSingleton(tokenIssuer)
            .AddSingleton(latencyContextProvider)
            .AddScoped(_ => latencyContext)
            .AddRequestCheckpoint()
            .BuildServiceProvider();
 
        Assert.Same(tokenIssuer, serviceProvider.GetRequiredService<ILatencyContextTokenIssuer>());
        Assert.Same(latencyContextProvider, serviceProvider.GetRequiredService<ILatencyContextProvider>());
 
        using var scope = serviceProvider.CreateScope();
        Assert.Same(latencyContext, scope.ServiceProvider.GetRequiredService<ILatencyContext>());
    }
}