11using Microsoft . AspNetCore . Http ;
22using NSubstitute ;
3+ using Serilog . Core ;
34using Serilog . Events ;
45using System ;
56using Xunit ;
@@ -12,7 +13,7 @@ public class ClientHeaderEnricherTests
1213
1314 public ClientHeaderEnricherTests ( )
1415 {
15- var httpContext = new DefaultHttpContext ( ) ;
16+ DefaultHttpContext httpContext = new ( ) ;
1617 _contextAccessor = Substitute . For < IHttpContextAccessor > ( ) ;
1718 _contextAccessor . HttpContext . Returns ( httpContext ) ;
1819 }
@@ -21,15 +22,15 @@ public ClientHeaderEnricherTests()
2122 public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateNamedHeaderValueProperty ( )
2223 {
2324 // 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 ( ) ;
2728 _contextAccessor . HttpContext ! . Request ! . Headers [ headerKey ] = headerValue ;
2829
29- var clientHeaderEnricher = new ClientHeaderEnricher ( headerKey , propertyName , _contextAccessor ) ;
30+ ClientHeaderEnricher clientHeaderEnricher = new ( headerKey , propertyName , _contextAccessor ) ;
3031
3132 LogEvent evt = null ;
32- var log = new LoggerConfiguration ( )
33+ Logger log = new LoggerConfiguration ( )
3334 . Enrich . With ( clientHeaderEnricher )
3435 . WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
3536 . CreateLogger ( ) ;
@@ -48,14 +49,14 @@ public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateN
4849 public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateHeaderValueProperty ( )
4950 {
5051 // Arrange
51- var headerKey = "RequestId" ;
52- var headerValue = Guid . NewGuid ( ) . ToString ( ) ;
52+ string headerKey = "RequestId" ;
53+ string headerValue = Guid . NewGuid ( ) . ToString ( ) ;
5354 _contextAccessor ! . HttpContext ! . Request ! . Headers [ headerKey ] = headerValue ;
5455
55- var clientHeaderEnricher = new ClientHeaderEnricher ( headerKey , propertyName : string . Empty , _contextAccessor ) ;
56+ ClientHeaderEnricher clientHeaderEnricher = new ( headerKey , string . Empty , _contextAccessor ) ;
5657
5758 LogEvent evt = null ;
58- var log = new LoggerConfiguration ( )
59+ Logger log = new LoggerConfiguration ( )
5960 . Enrich . With ( clientHeaderEnricher )
6061 . WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
6162 . CreateLogger ( ) ;
@@ -71,20 +72,21 @@ public void EnrichLogWithClientHeader_WhenHttpRequestContainHeader_ShouldCreateH
7172 }
7273
7374 [ Fact ]
74- public void EnrichLogWithMultipleClientHeaderEnricher_WhenHttpRequestContainHeaders_ShouldCreateHeaderValuesProperty ( )
75+ public void
76+ EnrichLogWithMultipleClientHeaderEnricher_WhenHttpRequestContainHeaders_ShouldCreateHeaderValuesProperty ( )
7577 {
7678 // 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 ( ) ;
8183 _contextAccessor ! . HttpContext ! . Request ! . Headers [ headerKey1 ] = headerValue1 ;
8284 _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 ) ;
8587
8688 LogEvent evt = null ;
87- var log = new LoggerConfiguration ( )
89+ Logger log = new LoggerConfiguration ( )
8890 . Enrich . With ( clientHeaderEnricher1 )
8991 . Enrich . With ( clientHeaderEnricher2 )
9092 . WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
@@ -106,11 +108,11 @@ public void EnrichLogWithMultipleClientHeaderEnricher_WhenHttpRequestContainHead
106108 public void EnrichLogWithClientHeader_WhenHttpRequestNotContainHeader_ShouldCreateHeaderValuePropertyWithNoValue ( )
107109 {
108110 // 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 ) ;
111113
112114 LogEvent evt = null ;
113- var log = new LoggerConfiguration ( )
115+ Logger log = new LoggerConfiguration ( )
114116 . Enrich . With ( clientHeaderEnricher )
115117 . WriteTo . Sink ( new DelegatingSink ( e => evt = e ) )
116118 . CreateLogger ( ) ;
@@ -125,17 +127,40 @@ public void EnrichLogWithClientHeader_WhenHttpRequestNotContainHeader_ShouldCrea
125127 Assert . Null ( evt . Properties [ headerKey ] . LiteralValue ( ) ) ;
126128 }
127129
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+
128153 [ Fact ]
129154 public void WithRequestHeader_ThenLoggerIsCalled_ShouldNotThrowException ( )
130155 {
131156 // Arrange
132- var logger = new LoggerConfiguration ( )
157+ Logger logger = new LoggerConfiguration ( )
133158 . Enrich . WithRequestHeader ( "HeaderName" )
134159 . WriteTo . Sink ( new DelegatingSink ( _ => { } ) )
135160 . CreateLogger ( ) ;
136161
137162 // Act
138- var exception = Record . Exception ( ( ) => logger . Information ( "LOG" ) ) ;
163+ Exception exception = Record . Exception ( ( ) => logger . Information ( "LOG" ) ) ;
139164
140165 // Assert
141166 Assert . Null ( exception ) ;
0 commit comments