File: Latency\Internal\MeasureTrackerTests.cs
Web Access
Project: src\test\Libraries\Microsoft.Extensions.Telemetry.Tests\Microsoft.Extensions.Telemetry.Tests.csproj (Microsoft.Extensions.Telemetry.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.Linq;
using Microsoft.Extensions.Diagnostics.Latency.Internal;
using Xunit;
 
namespace Microsoft.Extensions.Diagnostics.Latency.Test.Internal;
 
public class MeasureTrackerTests
{
    private static readonly Registry _measureNames = new(new[] { "a", "b", "c", "d" }, false);
 
    [Fact]
    public void MeasureTracker_AddUnregisteredName()
    {
        MeasureTracker mt = new MeasureTracker(_measureNames);
        mt.AddLong(mt.GetToken("e"), 10);
        Assert.True(mt.Measures.Count == 0);
        mt.SetLong(mt.GetToken("e"), 10);
        Assert.True(mt.Measures.Count == 0);
    }
 
    [Fact]
    public void MeasureTracker_AddRegisteredNames()
    {
        MeasureTracker mt = new MeasureTracker(_measureNames);
        string[] names = { "a", "b", "c" };
        int times = 3;
 
        for (int i = 0; i < names.Length; i++)
        {
            for (int j = 0; j < times; j++)
            {
                mt.AddLong(mt.GetToken(names[i]), i);
            }
        }
 
        var measures = mt.Measures.ToList();
        Assert.True(measures.Count == names.Length);
 
        // Verify measures have correct values.
        for (int i = 0; i < names.Length; i++)
        {
            var m = measures.Where(m => m.Name == names[i]).ToList();
            Assert.True(m.Count == 1);
            Assert.True(m[0].Name == names[i]);
            Assert.True(m[0].Value == i * times);
        }
    }
 
    [Fact]
    public void MeasureTracker_SetRegisteredNames()
    {
        MeasureTracker mt = new MeasureTracker(_measureNames);
        string[] names = { "a", "b", "c" };
        int times = 3;
 
        for (int i = 0; i < names.Length; i++)
        {
            for (int j = 0; j < times; j++)
            {
                mt.SetLong(mt.GetToken(names[i]), i);
            }
        }
 
        var measures = mt.Measures.ToArray();
        Assert.True(measures.Length == names.Length);
 
        for (int i = 0; i < names.Length; i++)
        {
            var m = measures.Where(m => m.Name == names[i]).ToList();
            Assert.True(m.Count == 1);
            Assert.True(m[0].Name == names[i]);
            Assert.True(m[0].Value == i);
        }
    }
 
    [Fact]
    public void MeasureTracker_Set_LasetSetWins()
    {
        MeasureTracker mt = new MeasureTracker(_measureNames);
        mt.AddLong(mt.GetToken("a"), 5);
        mt.SetLong(mt.GetToken("a"), 10);
        var measures = mt.Measures.ToList();
        Assert.NotNull(measures);
        Assert.True(measures.Count == 1);
        Assert.True(measures[0].Name == "a");
        Assert.True(measures[0].Value == 10);
 
        mt.SetLong(mt.GetToken("a"), 41);
        measures = mt.Measures.ToList();
        Assert.True(measures.Count == 1);
        Assert.True(measures[0].Name == "a");
        Assert.True(measures[0].Value == 41);
    }
 
    [Fact]
    public void MeasureTracker_CheckReset()
    {
        MeasureTracker mt = new MeasureTracker(_measureNames);
        mt.AddLong(mt.GetToken("a"), 5);
        mt.AddLong(mt.GetToken("b"), 3);
        mt.SetLong(mt.GetToken("c"), 10);
 
        Assert.True(mt.Measures.Count == 3);
        _ = mt.TryReset();
        Assert.True(mt.Measures.Count == 0);
 
        mt.AddLong(mt.GetToken("b"), 6);
        Assert.True(mt.Measures.Count == 1);
        var measures = mt.Measures.ToList();
        Assert.True(measures[0].Name == "b");
        Assert.True(measures[0].Value == 6);
 
        _ = mt.TryReset();
        Assert.True(mt.Measures.Count == 0);
 
        mt.AddLong(mt.GetToken("b"), 2);
        Assert.True(mt.Measures.Count == 1);
        measures = mt.Measures.ToList();
        Assert.True(measures[0].Name == "b");
        Assert.True(measures[0].Value == 2);
    }
}