File: SensitiveRecordTests.cs
Web Access
Project: src\test\Generators\Microsoft.Gen.Logging\Generated\Microsoft.Gen.Logging.Generated.Tests.csproj (Microsoft.Gen.Logging.Generated.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.Collections.Generic;
using Microsoft.Extensions.Logging.Testing;
using TestClasses;
using Xunit;
 
namespace Microsoft.Gen.Logging.Test;
 
public class SensitiveRecordTests
{
    [Fact]
    public void TestRecordInTemplate()
    {
        using var logger = Utils.GetLogger();
        SensitiveRecordExtensions.LogInTemplate(logger, new());
 
        var logRecord = Assert.Single(logger.FakeLogCollector.GetSnapshot());
        Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, logRecord.Message);
        Assert.NotNull(logRecord.StructuredState);
        Assert.All(logRecord.StructuredState, x => Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, x.Value));
    }
 
    [Fact]
    public void TestRecordStructured()
    {
        using var logger = Utils.GetLogger();
        SensitiveRecordExtensions.LogFullyStructured(logger, new());
 
        var logRecord = Assert.Single(logger.FakeLogCollector.GetSnapshot());
        Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, logRecord.Message);
        Assert.NotNull(logRecord.StructuredState);
        Assert.All(logRecord.StructuredState, x => Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, x.Value));
    }
 
    [Fact]
    public void TestSensitiveRecordWithLogPropsAndTemplate()
    {
        using var logger = Utils.GetLogger();
        var dataToLog = new SensitiveRecordExtensions.RecordWithSensitiveMembers(SensitiveRecordExtensions.Sensitive, SensitiveRecordExtensions.Sensitive)
        {
            PropGetSet = SensitiveRecordExtensions.Sensitive
        };
 
        SensitiveRecordExtensions.LogPropertiesWithTemplate(logger, dataToLog);
 
        var logRecord = Assert.Single(logger.FakeLogCollector.GetSnapshot());
        Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, logRecord.Message);
        Assert.NotNull(logRecord.StructuredState);
        Assert.All(logRecord.StructuredState, x => Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, x.Value));
    }
 
    [Fact]
    public void TestSensitiveRecordWithLogPropsNoTemplate()
    {
        using var logger = Utils.GetLogger();
        var dataToLog = new SensitiveRecordExtensions.RecordWithSensitiveMembers(SensitiveRecordExtensions.Sensitive, SensitiveRecordExtensions.Sensitive)
        {
            PropGetSet = SensitiveRecordExtensions.Sensitive
        };
 
        SensitiveRecordExtensions.LogPropertiesFullyStructured(logger, dataToLog);
 
        var logRecord = Assert.Single(logger.FakeLogCollector.GetSnapshot());
        Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, logRecord.Message);
        Assert.NotNull(logRecord.StructuredState);
        Assert.All(logRecord.StructuredState, x => Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, x.Value));
    }
 
    [Fact]
    public void TestSensitiveRecordWithInlineAnnotation()
    {
        using var logger = Utils.GetLogger();
        var dataToLog = new SensitiveRecordExtensions.RecordWithSensitiveMembers(SensitiveRecordExtensions.Sensitive, SensitiveRecordExtensions.Sensitive)
        {
            PropGetSet = SensitiveRecordExtensions.Sensitive
        };
 
        SensitiveRecordExtensions.LogInTemplateWithAnnotation(logger, dataToLog);
 
        var logRecord = Assert.Single(logger.FakeLogCollector.GetSnapshot());
        Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, logRecord.Message);
        Assert.NotNull(logRecord.StructuredState);
        Assert.All(logRecord.StructuredState, x => Assert.DoesNotContain(SensitiveRecordExtensions.Sensitive, x.Value));
    }
}