-
-
Notifications
You must be signed in to change notification settings - Fork 23
/
WhenMaskingDestructuredObject.cs
123 lines (106 loc) · 4.06 KB
/
WhenMaskingDestructuredObject.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System.Collections.Generic;
using Serilog.Core;
using Serilog.Sinks.InMemory;
using Serilog.Sinks.InMemory.Assertions;
using Xunit;
namespace Serilog.Enrichers.Sensitive.Tests.Unit
{
public class WhenMaskingDestructuredObject
{
private readonly InMemorySink _sink;
private readonly Logger _logger;
public WhenMaskingDestructuredObject()
{
_sink = new InMemorySink();
_logger = new LoggerConfiguration()
.WriteTo.Sink(_sink)
.Enrich.WithSensitiveDataMasking(options =>
{
options.MaskingOperators = new List<IMaskingOperator> { new EmailAddressMaskingOperator() };
options.MaskProperties.Add("SensitiveProperty");
})
.CreateLogger();
}
[Fact]
public void GivenLogMessageWithDestructuredObjectPropertyThatHasSensitiveData_SensitiveDataIsMasked()
{
var testObject = new TestObject();
_logger.Information("Test message {@TestObject}", testObject);
_sink
.Should()
.HaveMessage("Test message {@TestObject}")
.Appearing()
.Once()
.WithProperty("TestObject")
.HavingADestructuredObject()
.WithProperty("TestProperty")
.WithValue("***MASKED***");
}
[Fact]
public void GivenLogMessageWithDestructuredObjectPropertyThatHasSensitiveDataInNestedProperty_SensitiveDataIsMasked()
{
var testObject = new TestObject();
_logger.Information("Test message {@TestObject}", testObject);
_sink
.Should()
.HaveMessage("Test message {@TestObject}")
.Appearing()
.Once()
.WithProperty("TestObject")
.HavingADestructuredObject()
.WithProperty("Nested")
.HavingADestructuredObject()
.WithProperty("TestProperty")
.WithValue("***MASKED***");
}
[Fact]
public void GivenLogMessageWithDestructuredObjectPropertyWithoutSensitiveDataInNestedProperty_StructureValueIsUnchanged()
{
var testObject = new TestObject
{
TestProperty = "not sensitive",
Nested = new NestedTestObject
{
TestProperty = "also not sensitive"
}
};
_logger.Information("Test message {@TestObject}", testObject);
_sink
.Should()
.HaveMessage("Test message {@TestObject}")
.Appearing()
.Once()
.WithProperty("TestObject")
.HavingADestructuredObject()
.WithProperty("Nested")
.HavingADestructuredObject()
.WithProperty("TestProperty")
.WithValue("also not sensitive");
}
[Fact]
public void GivenConfigurationToMaskSpecificPropertyAndLoggingADestructuredObject_PropertyOnObjectIsMasked()
{
var testObject = new TestObject();
_logger.Information("Test message {@TestObject}", testObject);
_sink
.Should()
.HaveMessage("Test message {@TestObject}")
.Appearing()
.Once()
.WithProperty("TestObject")
.HavingADestructuredObject()
.WithProperty("SensitiveProperty")
.WithValue("***MASKED***");
}
}
public class TestObject
{
public string TestProperty { get; set; } = "james.bond@universalexports.com";
public string SensitiveProperty { get; set; } = "Super sensitive data";
public NestedTestObject Nested { get; set; } = new NestedTestObject();
}
public class NestedTestObject
{
public string TestProperty { get; set; } = "joe.blogs@example.com";
}
}