1
1
using System ;
2
2
using System . Net ;
3
+ using System . Net . Sockets ;
4
+ using System . Threading . Tasks ;
3
5
using FluentAssertions ;
4
- using Serilog . Core ;
5
6
using Serilog . Formatting ;
6
7
using Serilog . Sinks . Network . Formatters ;
7
8
using Xunit ;
@@ -10,45 +11,43 @@ namespace Serilog.Sinks.Network.Test
10
11
{
11
12
public class JsonFormatter
12
13
{
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 )
18
15
{
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 ( ) ;
22
19
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 )
25
22
. CreateLogger ( ) ;
23
+
24
+ return new LoggerAndSocket { Logger = logger , Socket = socket } ;
26
25
}
27
26
28
27
[ Fact ]
29
- public void MustNotLogATrailingCommaWhenThereAreNoProperties ( )
28
+ public async Task MustNotLogATrailingCommaWhenThereAreNoProperties ( )
30
29
{
31
- ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
30
+ using var fixture = ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
32
31
var arbitraryMessage = nameof ( JsonFormatter ) + "MustNotLogATrailingCommaWhenThereAreNoProperties" + Guid . NewGuid ( ) ;
33
32
34
- _logger . Information ( arbitraryMessage ) ;
33
+ fixture . Logger . Information ( arbitraryMessage ) ;
35
34
36
- var receivedData = ServerPoller . PollForReceivedData ( _server ) ;
35
+ var receivedData = await ServerPoller . PollForReceivedData ( fixture . Socket ) ;
37
36
var loggedData = receivedData ? . TrimEnd ( '\n ' ) ;
38
37
39
38
var logMessageWithTrailingComma = $ "\" message\" :\" { arbitraryMessage } \" ,}}";
40
39
loggedData . Should ( ) . NotEndWith ( logMessageWithTrailingComma ) ;
41
40
}
42
41
43
42
[ Fact ]
44
- public void CanStillLogMessagesWithExceptions ( )
43
+ public async Task CanStillLogMessagesWithExceptions ( )
45
44
{
46
- ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
45
+ using var fixture = ConfigureTestLogger ( new LogstashJsonFormatter ( ) ) ;
47
46
var arbitraryMessage = nameof ( JsonFormatter ) + "CanStillLogMessagesWithExceptions" + Guid . NewGuid ( ) ;
48
47
49
- _logger . Information ( new Exception ( "exploding" ) , arbitraryMessage ) ;
48
+ fixture . Logger . Information ( new Exception ( "exploding" ) , arbitraryMessage ) ;
50
49
51
- var receivedData = ServerPoller . PollForReceivedData ( _server ) ;
50
+ var receivedData = await ServerPoller . PollForReceivedData ( fixture . Socket ) ;
52
51
53
52
receivedData . Should ( ) . Contain ( "\" exception\" :\" System.Exception: exploding\" }" ) ;
54
53
}
0 commit comments