88using System . Diagnostics . CodeAnalysis ;
99using System . Linq ;
1010using Xunit ;
11+ using System . Net ;
12+ using System . Runtime . CompilerServices ;
1113
1214
1315namespace Test . AMT . Extensions . Logging . IP
@@ -19,30 +21,31 @@ public class UdpLoggerTests
1921 [ Fact ]
2022 public void verify_each_loglevel ( )
2123 {
22- // Prepare listener to receive messages
23- var opts = new Ext . UdpLoggerOptions ( ) ;
24+ // Prepare listener to receive messages; isolate port for message count
25+ var opts = new Ext . UdpLoggerOptions ( new IPEndPoint ( IPAddress . Loopback , 17460 ) ) ;
2426
2527 using ( _receiver = new UdpReceiver ( ) )
2628 {
2729 _receiver . Start ( opts ) ;
2830
2931 // Add options to provider before create logger
30- _provider = new Ext . UdpLoggerProvider ( opts ) ;
31- var logger = _provider . CreateLogger ( "test" ) as Ext . UdpLogger ;
32-
33- // Log a message of each LogLevel
34- foreach ( int level in _logLevels )
35- {
36- logger . Log ( ( LogLevel ) level , DEFAULT_EVENTID , DEFAULT_STATE , DEFAULT_EXCEPTION , setStringFormatter ) ;
32+ using ( _provider = new Ext . UdpLoggerProvider ( opts ) ) {
33+ _logger = _provider . CreateLogger ( "test" ) as Ext . UdpLogger ;
34+
35+ // Log a message of each LogLevel
36+ foreach ( int level in _logLevels )
37+ {
38+ _logger . Log ( ( LogLevel ) level , DEFAULT_EVENTID , DEFAULT_STATE , DEFAULT_EXCEPTION , setStringFormatter ) ;
39+ }
40+
41+ // Brief wait, then stop listener
42+ System . Threading . Thread . Sleep ( 100 ) ;
43+ _receiver . Stop ( ) ;
44+
45+ // NOTE: RetrieveMessages returns a _consuming_ enumerator, so it can only be used once.
46+ // LogLevel.None filtered, so reduce by 1.
47+ _receiver . RetrieveMessages ( ) . Count ( ) . Should ( ) . Be ( _logLevels . Length - 1 ) ;
3748 }
38-
39- // Brief wait, then stop listener
40- System . Threading . Thread . Sleep ( 100 ) ;
41- _receiver . Stop ( ) ;
42-
43- // NOTE: RetrieveMessages returns a _consuming_ enumerator, so it can only be used once.
44- // 2024.09.17, JB: previously None was filtered, but it seems that changed in logging fx.
45- _receiver . RetrieveMessages ( ) . Count ( ) . Should ( ) . Be ( _logLevels . Length ) ;
4649 }
4750 }
4851
@@ -119,6 +122,36 @@ public void verify_few_log_messages()
119122 }
120123
121124
125+ [ Fact ]
126+ public void verify_begin_scope ( )
127+ {
128+ // Prepare listener to receive messages
129+ var opts = new Ext . UdpLoggerOptions ( ) ;
130+
131+ using ( _receiver = new UdpReceiver ( ) )
132+ {
133+ _receiver . Start ( opts ) ;
134+
135+ // Add options to provider before create logger
136+ using ( _provider = new Ext . UdpLoggerProvider ( opts ) ) {
137+ _logger = _provider . CreateLogger ( "test" ) as Ext . UdpLogger ;
138+
139+ using ( _logger . BeginScope ( "SCOPE L1: " , null ) )
140+ {
141+ _logger . Log ( LogLevel . Trace , "some log message" ) ;
142+ using ( _logger . BeginScope ( "SCOPE L2: " , null ) )
143+ {
144+ _logger . Log ( LogLevel . Trace , "some log message" ) ;
145+ }
146+
147+ // TODO: confirm scope messages?
148+ }
149+
150+ }
151+ }
152+ }
153+
154+
122155 private LogLevel GetRandomLogLevel ( bool excludeNone = true )
123156 {
124157 return ( LogLevel ) _randomizer . Next ( 0 , excludeNone ? _logLevels . Length - 1 : _logLevels . Length ) ;
@@ -139,6 +172,7 @@ public UdpLoggerTests(Xunit.Abstractions.ITestOutputHelper outputHelper)
139172
140173
141174 private ILoggerProvider _provider ;
175+ private ILogger _logger ;
142176 private UdpReceiver _receiver ;
143177 private readonly object DEFAULT_STATE = "### Default state for testing ###" ;
144178 private readonly object NULL_STATE = "[null-state]" ; // TODO: use null;
0 commit comments