11using System ;
22using System . Net ;
3+ using System . Net . Sockets ;
4+ using System . Threading . Tasks ;
35using FluentAssertions ;
4- using Serilog . Core ;
56using Serilog . Formatting ;
67using Serilog . Sinks . Network . Formatters ;
78using Xunit ;
@@ -10,45 +11,43 @@ namespace Serilog.Sinks.Network.Test
1011{
1112 public class JsonFormatter
1213 {
13- private TCPServer _server ;
14- private Logger _logger ;
15-
16-
17- private void ConfigureTestLogger ( ITextFormatter formatter = null )
14+ private static LoggerAndSocket ConfigureTestLogger ( ITextFormatter formatter = null )
1815 {
19- var port = new Random ( ) . Next ( 50003 ) + 10000 ;
20- _server = new TCPServer ( IPAddress . Loopback , port ) ;
21- _server . Start ( ) ;
16+ var socket = new Socket ( AddressFamily . InterNetwork , SocketType . Stream , ProtocolType . Tcp ) ;
17+ socket . Bind ( new IPEndPoint ( IPAddress . Loopback , 0 ) ) ;
18+ socket . Listen ( ) ;
2219
23- _logger = new LoggerConfiguration ( )
24- . WriteTo . TCPSink ( IPAddress . Loopback , port , formatter )
20+ var logger = new LoggerConfiguration ( )
21+ . WriteTo . TCPSink ( IPAddress . Loopback , ( ( IPEndPoint ) socket . LocalEndPoint ! ) . Port , null , null , formatter )
2522 . CreateLogger ( ) ;
23+
24+ return new LoggerAndSocket { Logger = logger , Socket = socket } ;
2625 }
2726
2827 [ Fact ]
29- public void MustNotLogATrailingCommaWhenThereAreNoProperties ( )
28+ public async Task MustNotLogATrailingCommaWhenThereAreNoProperties ( )
3029 {
31- ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
30+ using var fixture = ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
3231 var arbitraryMessage = nameof ( JsonFormatter ) + "MustNotLogATrailingCommaWhenThereAreNoProperties" + Guid . NewGuid ( ) ;
3332
34- _logger . Information ( arbitraryMessage ) ;
33+ fixture . Logger . Information ( arbitraryMessage ) ;
3534
36- var receivedData = ServerPoller . PollForReceivedData ( _server ) ;
35+ var receivedData = await ServerPoller . PollForReceivedData ( fixture . Socket ) ;
3736 var loggedData = receivedData ? . TrimEnd ( '\n ' ) ;
3837
3938 var logMessageWithTrailingComma = $ "\" message\" :\" { arbitraryMessage } \" ,}}";
4039 loggedData . Should ( ) . NotEndWith ( logMessageWithTrailingComma ) ;
4140 }
4241
4342 [ Fact ]
44- public void CanStillLogMessagesWithExceptions ( )
43+ public async Task CanStillLogMessagesWithExceptions ( )
4544 {
46- ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
45+ using var fixture = ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
4746 var arbitraryMessage = nameof ( JsonFormatter ) + "CanStillLogMessagesWithExceptions" + Guid . NewGuid ( ) ;
4847
49- _logger . Information ( new Exception ( "exploding" ) , arbitraryMessage ) ;
48+ fixture . Logger . Information ( new Exception ( "exploding" ) , arbitraryMessage ) ;
5049
51- var receivedData = ServerPoller . PollForReceivedData ( _server ) ;
50+ var receivedData = await ServerPoller . PollForReceivedData ( fixture . Socket ) ;
5251
5352 receivedData . Should ( ) . Contain ( "\" exception\" :\" System.Exception: exploding\" }" ) ;
5453 }
0 commit comments