1
1
using Microsoft . AspNetCore . Http ;
2
2
using NSubstitute ;
3
+ using Serilog . Core ;
3
4
using Serilog . Events ;
4
5
using System ;
5
6
using Xunit ;
@@ -12,7 +13,7 @@ public class ClientHeaderEnricherTests
12
13
13
14
public ClientHeaderEnricherTests ( )
14
15
{
15
- var httpContext = new DefaultHttpContext ( ) ;
16
+ DefaultHttpContext httpContext = new ( ) ;
16
17
_contextAccessor = Substitute . For < IHttpContextAccessor > ( ) ;
17
18
_contextAccessor . HttpContext . Returns ( httpContext ) ;
18
19
}
@@ -21,15 +22,15 @@ public ClientHeaderEnricherTests()
21
22
public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateNamedHeaderValueProperty ( )
22
23
{
23
24
// Arrange
24
- var headerKey = "RequestId" ;
25
- var propertyName = "HttpRequestId" ;
26
- var headerValue = Guid . NewGuid ( ) . ToString ( ) ;
25
+ string headerKey = "RequestId" ;
26
+ string propertyName = "HttpRequestId" ;
27
+ string headerValue = Guid . NewGuid ( ) . ToString ( ) ;
27
28
_contextAccessor . HttpContext ! . Request ! . Headers [ headerKey ] = headerValue ;
28
29
29
- var clientHeaderEnricher = new ClientHeaderEnricher ( headerKey , propertyName , _contextAccessor ) ;
30
+ ClientHeaderEnricher clientHeaderEnricher = new ( headerKey , propertyName , _contextAccessor ) ;
30
31
31
32
LogEvent evt = null ;
32
- var log = new LoggerConfiguration ( )
33
+ Logger log = new LoggerConfiguration ( )
33
34
. Enrich . With ( clientHeaderEnricher )
34
35
. WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
35
36
. CreateLogger ( ) ;
@@ -48,14 +49,14 @@ public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateN
48
49
public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateHeaderValueProperty ( )
49
50
{
50
51
// Arrange
51
- var headerKey = "RequestId" ;
52
- var headerValue = Guid . NewGuid ( ) . ToString ( ) ;
52
+ string headerKey = "RequestId" ;
53
+ string headerValue = Guid . NewGuid ( ) . ToString ( ) ;
53
54
_contextAccessor ! . HttpContext ! . Request ! . Headers [ headerKey ] = headerValue ;
54
55
55
- var clientHeaderEnricher = new ClientHeaderEnricher ( headerKey , propertyName : string . Empty , _contextAccessor ) ;
56
+ ClientHeaderEnricher clientHeaderEnricher = new ( headerKey , string . Empty , _contextAccessor ) ;
56
57
57
58
LogEvent evt = null ;
58
- var log = new LoggerConfiguration ( )
59
+ Logger log = new LoggerConfiguration ( )
59
60
. Enrich . With ( clientHeaderEnricher )
60
61
. WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
61
62
. CreateLogger ( ) ;
@@ -71,20 +72,21 @@ public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateH
71
72
}
72
73
73
74
[ Fact ]
74
- public void EnrichLogWithMultipleClientHeaderEnricher_WhenHttpRequestContainHeaders_ShouldCreateHeaderValuesProperty ( )
75
+ public void
76
+ EnrichLogWithMultipleClientHeaderEnricher_WhenHttpRequestContainHeaders_ShouldCreateHeaderValuesProperty ( )
75
77
{
76
78
// Arrange
77
- var headerKey1 = "Header1" ;
78
- var headerKey2 = "User-Agent" ;
79
- var headerValue1 = Guid . NewGuid ( ) . ToString ( ) ;
80
- var headerValue2 = Guid . NewGuid ( ) . ToString ( ) ;
79
+ string headerKey1 = "Header1" ;
80
+ string headerKey2 = "User-Agent" ;
81
+ string headerValue1 = Guid . NewGuid ( ) . ToString ( ) ;
82
+ string headerValue2 = Guid . NewGuid ( ) . ToString ( ) ;
81
83
_contextAccessor ! . HttpContext ! . Request ! . Headers [ headerKey1 ] = headerValue1 ;
82
84
_contextAccessor ! . HttpContext ! . Request ! . Headers [ headerKey2 ] = headerValue2 ;
83
- var clientHeaderEnricher1 = new ClientHeaderEnricher ( headerKey1 , propertyName : string . Empty , _contextAccessor ) ;
84
- var clientHeaderEnricher2 = new ClientHeaderEnricher ( headerKey2 , propertyName : string . Empty , _contextAccessor ) ;
85
+ ClientHeaderEnricher clientHeaderEnricher1 = new ( headerKey1 , string . Empty , _contextAccessor ) ;
86
+ ClientHeaderEnricher clientHeaderEnricher2 = new ( headerKey2 , string . Empty , _contextAccessor ) ;
85
87
86
88
LogEvent evt = null ;
87
- var log = new LoggerConfiguration ( )
89
+ Logger log = new LoggerConfiguration ( )
88
90
. Enrich . With ( clientHeaderEnricher1 )
89
91
. Enrich . With ( clientHeaderEnricher2 )
90
92
. WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
@@ -106,11 +108,11 @@ public void EnrichLogWithMultipleClientHeaderEnricher_WhenHttpRequestContainHead
106
108
public void EnrichLogWithClientHeader_WhenHttpRequestNotContainHeader_ShouldCreateHeaderValuePropertyWithNoValue ( )
107
109
{
108
110
// Arrange
109
- var headerKey = "RequestId" ;
110
- var clientHeaderEnricher = new ClientHeaderEnricher ( headerKey , propertyName : string . Empty , _contextAccessor ) ;
111
+ string headerKey = "RequestId" ;
112
+ ClientHeaderEnricher clientHeaderEnricher = new ( headerKey , string . Empty , _contextAccessor ) ;
111
113
112
114
LogEvent evt = null ;
113
- var log = new LoggerConfiguration ( )
115
+ Logger log = new LoggerConfiguration ( )
114
116
. Enrich . With ( clientHeaderEnricher )
115
117
. WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
116
118
. CreateLogger ( ) ;
@@ -125,17 +127,40 @@ public void EnrichLogWithClientHeader_WhenHttpRequestNotContainHeader_ShouldCrea
125
127
Assert . Null ( evt . Properties [ headerKey ] . LiteralValue ( ) ) ;
126
128
}
127
129
130
+ [ Fact ]
131
+ public void EnrichLogWithClientIp_WhenKeyNotInItems_ShouldWorkCorrectly ( )
132
+ {
133
+ // Arrange
134
+ string headerKey = "x-dummy-header" ;
135
+ ClientHeaderEnricher clientHeaderEnricher = new ( headerKey , string . Empty , _contextAccessor ) ;
136
+
137
+ LogEvent evt = null ;
138
+ Logger log = new LoggerConfiguration ( )
139
+ . Enrich . With ( clientHeaderEnricher )
140
+ . WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
141
+ . CreateLogger ( ) ;
142
+
143
+ log . Information ( "Testing log enricher." ) ;
144
+
145
+ // Act - This should work without throwing any exceptions
146
+ Exception exception = Record . Exception ( ( ) => log . Information ( "Test log message" ) ) ;
147
+
148
+ // Assert
149
+ Assert . Null ( exception ) ;
150
+ Assert . NotNull ( evt ) ;
151
+ }
152
+
128
153
[ Fact ]
129
154
public void WithRequestHeader_ThenLoggerIsCalled_ShouldNotThrowException ( )
130
155
{
131
156
// Arrange
132
- var logger = new LoggerConfiguration ( )
157
+ Logger logger = new LoggerConfiguration ( )
133
158
. Enrich . WithRequestHeader ( "HeaderName" )
134
159
. WriteTo . Sink ( new DelegatingSink ( _ => { } ) )
135
160
. CreateLogger ( ) ;
136
161
137
162
// Act
138
- var exception = Record . Exception ( ( ) => logger . Information ( "LOG" ) ) ;
163
+ Exception exception = Record . Exception ( ( ) => logger . Information ( "LOG" ) ) ;
139
164
140
165
// Assert
141
166
Assert . Null ( exception ) ;
0 commit comments