| File: Sampling\RandomProbabilisticSamplerTests.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; using System.Collections.Generic; using Microsoft.Extensions.Diagnostics.Sampling; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Xunit; using static Microsoft.Extensions.Logging.Test.ExtendedLoggerTests; namespace Microsoft.Extensions.Telemetry.Sampling; public class RandomProbabilisticSamplerTests { private readonly InvalidOperationException _dummyException = new("test."); private readonly IReadOnlyList<KeyValuePair<string, object?>> _dummyState = []; private readonly Func<IReadOnlyList<KeyValuePair<string, object?>>, Exception?, string> _dummyFormatter = (_, _) => string.Empty; private readonly LogSamplingRuleSelector<RandomProbabilisticSamplerFilterRule> _ruleSelector = new(); [Theory] [InlineData(1.0, true)] [InlineData(0.0, false)] public void SamplesAsConfigured(double probability, bool expectedSamplingDecision) { // Arrange RandomProbabilisticSamplerOptions options = new(); options.Rules.Add(new RandomProbabilisticSamplerFilterRule(probability: probability, logLevel: LogLevel.Trace)); using var sampler = new RandomProbabilisticSampler(_ruleSelector, new StaticOptionsMonitor<RandomProbabilisticSamplerOptions>(options)); // Act bool actualDecision = sampler.ShouldSample( new LogEntry<IReadOnlyList<KeyValuePair<string, object?>>>( LogLevel.Trace, nameof(SamplesAsConfigured), 0, _dummyState, _dummyException, _dummyFormatter)); // Assert Assert.Equal(expectedSamplingDecision, actualDecision); } [Fact] public void WhenParametersNotMatch_AlwaysSamples() { // Arrange const double Probability = 0.0; var logEntry = new LogEntry<IReadOnlyList<KeyValuePair<string, object?>>>( LogLevel.Warning, nameof(WhenParametersNotMatch_AlwaysSamples), 0, _dummyState, _dummyException, _dummyFormatter); RandomProbabilisticSamplerOptions options = new(); options.Rules.Add(new RandomProbabilisticSamplerFilterRule(probability: Probability, logLevel: LogLevel.Information)); using var sampler = new RandomProbabilisticSampler(_ruleSelector, new StaticOptionsMonitor<RandomProbabilisticSamplerOptions>(options)); // Act bool actualDecision = sampler.ShouldSample(logEntry); // Assert Assert.True(actualDecision); } [Fact] public void WhenParametersMatch_UsesProvidedProbability() { // Arrange const double Probability = 0.0; var logEntry = new LogEntry<IReadOnlyList<KeyValuePair<string, object?>>>( LogLevel.Information, nameof(WhenParametersMatch_UsesProvidedProbability), 0, _dummyState, _dummyException, _dummyFormatter); RandomProbabilisticSamplerOptions options = new(); options.Rules.Add(new RandomProbabilisticSamplerFilterRule(probability: Probability, logLevel: LogLevel.Information)); using var sampler = new RandomProbabilisticSampler(_ruleSelector, new StaticOptionsMonitor<RandomProbabilisticSamplerOptions>(options)); // Act bool actualDecision = sampler.ShouldSample(logEntry); // Assert Assert.False(actualDecision); } }