@@ -14,20 +14,25 @@ public class When_incoming_message_handled : NServiceBusAcceptanceTest
1414{
1515 static readonly string HandlerTimeMetricName = "nservicebus.messaging.handler_time" ;
1616 static readonly string CriticalTimeMetricName = "nservicebus.messaging.critical_time" ;
17+ const int NumberOfMessages = 5 ;
1718
1819 [ Test ]
1920 public async Task Should_record_critical_time ( )
2021 {
21- using var metricsListener = await WhenMessagesHandled ( ( ) => new MyMessage ( ) ) ;
22- metricsListener . AssertMetric ( CriticalTimeMetricName , 5 ) ;
22+ using var metricsListener = TestingMetricListener . SetupNServiceBusMetricsListener ( ) ;
23+
24+ await WhenMessagesHandled ( ( ) => new MyMessage ( ) ) ;
25+ metricsListener . AssertMetric ( CriticalTimeMetricName , NumberOfMessages ) ;
2326 AssertMandatoryTags ( metricsListener , CriticalTimeMetricName , typeof ( MyMessage ) ) ;
2427 }
2528
2629 [ Test ]
2730 public async Task Should_record_success_handling_time ( )
2831 {
29- using var metricsListener = await WhenMessagesHandled ( ( ) => new MyMessage ( ) ) ;
30- metricsListener . AssertMetric ( HandlerTimeMetricName , 5 ) ;
32+ using var metricsListener = TestingMetricListener . SetupNServiceBusMetricsListener ( ) ;
33+
34+ await WhenMessagesHandled ( ( ) => new MyMessage ( ) ) ;
35+ metricsListener . AssertMetric ( HandlerTimeMetricName , NumberOfMessages ) ;
3136 AssertMandatoryTags ( metricsListener , HandlerTimeMetricName , typeof ( MyMessage ) ) ;
3237 var handlerType = metricsListener . AssertTagKeyExists ( HandlerTimeMetricName , "nservicebus.message_handler_type" ) ;
3338 Assert . That ( handlerType , Is . EqualTo ( typeof ( MyMessageHandler ) . FullName ) ) ;
@@ -38,8 +43,10 @@ public async Task Should_record_success_handling_time()
3843 [ Test ]
3944 public async Task Should_record_failure_handling_time ( )
4045 {
41- using var metricsListener = await WhenMessagesHandled ( ( ) => new MyExceptionalMessage ( ) ) ;
42- metricsListener . AssertMetric ( HandlerTimeMetricName , 5 ) ;
46+ using var metricsListener = TestingMetricListener . SetupNServiceBusMetricsListener ( ) ;
47+
48+ await WhenMessagesHandled ( ( ) => new MyExceptionalMessage ( ) ) ;
49+ metricsListener . AssertMetric ( HandlerTimeMetricName , NumberOfMessages ) ;
4350 AssertMandatoryTags ( metricsListener , HandlerTimeMetricName , typeof ( MyExceptionalMessage ) ) ;
4451 var handlerType = metricsListener . AssertTagKeyExists ( HandlerTimeMetricName , "nservicebus.message_handler_type" ) ;
4552 Assert . That ( handlerType , Is . EqualTo ( typeof ( MyExceptionalHandler ) . FullName ) ) ;
@@ -52,46 +59,24 @@ public async Task Should_record_failure_handling_time()
5259 [ Test ]
5360 public async Task Should_not_record_critical_time_on_failure ( )
5461 {
55- using var metricsListener = await WhenMessagesHandled ( ( ) => new MyExceptionalMessage ( ) ) ;
62+ using var metricsListener = TestingMetricListener . SetupNServiceBusMetricsListener ( ) ;
63+ await WhenMessagesHandled ( ( ) => new MyExceptionalMessage ( ) ) ;
5664 metricsListener . AssertMetric ( CriticalTimeMetricName , 0 ) ;
5765 }
5866
59- static async Task < TestingMetricListener > WhenMessagesHandled ( Func < IMessage > messageFactory )
60- {
61- TestingMetricListener metricsListener = null ;
62- try
63- {
64- metricsListener = TestingMetricListener . SetupNServiceBusMetricsListener ( ) ;
65-
66- _ = await Scenario . Define < Context > ( )
67- . WithEndpoint < EndpointWithMetrics > ( b =>
68- b . DoNotFailOnErrorMessages ( )
69- . CustomConfig ( c => c . MakeInstanceUniquelyAddressable ( "discriminator" ) )
70- . When ( async ( session , _ ) =>
67+ static Task WhenMessagesHandled ( Func < IMessage > messageFactory ) =>
68+ Scenario . Define < Context > ( )
69+ . WithEndpoint < EndpointWithMetrics > ( b =>
70+ b . DoNotFailOnErrorMessages ( )
71+ . CustomConfig ( c => c . MakeInstanceUniquelyAddressable ( "discriminator" ) )
72+ . When ( async session =>
73+ {
74+ for ( var x = 0 ; x < NumberOfMessages ; x ++ )
7175 {
72- for ( var x = 0 ; x < 5 ; x ++ )
73- {
74- try
75- {
76- await session . SendLocal ( messageFactory . Invoke ( ) ) ;
77- }
78- catch ( Exception e )
79- {
80- Console . WriteLine ( e ) ;
81- }
82- }
83- } ) )
84- . Done ( c => c . TotalHandledMessages == 5 )
85- . Run ( ) ;
86- return metricsListener ;
87- }
88- catch
89- {
90- metricsListener ? . Dispose ( ) ;
91- throw ;
92- }
93- }
94-
76+ await session . SendLocal ( messageFactory . Invoke ( ) ) ;
77+ }
78+ } ) )
79+ . Run ( ) ;
9580
9681 static void AssertMandatoryTags (
9782 TestingMetricListener metricsListener ,
@@ -108,7 +93,9 @@ static void AssertMandatoryTags(
10893
10994 class Context : ScenarioContext
11095 {
111- public int TotalHandledMessages ;
96+ public void MaybeCompleted ( ) => MarkAsCompleted ( Interlocked . Increment ( ref TotalHandledMessages ) == NumberOfMessages ) ;
97+
98+ int TotalHandledMessages ;
11299 }
113100
114101 class EndpointWithMetrics : EndpointConfigurationBuilder
@@ -120,7 +107,7 @@ class MyMessageHandler(Context testContext) : IHandleMessages<MyMessage>
120107 {
121108 public Task Handle ( MyMessage message , IMessageHandlerContext context )
122109 {
123- Interlocked . Increment ( ref testContext . TotalHandledMessages ) ;
110+ testContext . MaybeCompleted ( ) ;
124111 return Task . CompletedTask ;
125112 }
126113 }
@@ -129,7 +116,7 @@ class MyExceptionalHandler(Context testContext) : IHandleMessages<MyExceptionalM
129116 {
130117 public Task Handle ( MyExceptionalMessage message , IMessageHandlerContext context )
131118 {
132- Interlocked . Increment ( ref testContext . TotalHandledMessages ) ;
119+ testContext . MaybeCompleted ( ) ;
133120 throw new Exception ( ) ;
134121 }
135122 }
0 commit comments