@@ -21,52 +21,50 @@ public enum RetryType
2121 Edit
2222 }
2323
24- [ Explicit ]
2524 [ TestCase ( new [ ] { RetryType . NoEdit , RetryType . NoEdit , RetryType . Edit } ) ]
26- [ TestCase ( new [ ] { RetryType . Edit , RetryType . NoEdit , RetryType . Edit } ) ]
27- [ TestCase ( new [ ] { RetryType . NoEdit , RetryType . Edit , RetryType . NoEdit } ) ]
25+ [ TestCase ( new [ ] { RetryType . Edit , RetryType . NoEdit , RetryType . Edit , RetryType . NoEdit } ) ]
26+ [ TestCase ( new [ ] { RetryType . NoEdit , RetryType . Edit , RetryType . NoEdit , RetryType . Edit } ) ]
2827 [ TestCase ( new [ ] { RetryType . Edit , RetryType . Edit , RetryType . NoEdit } ) ]
2928 public async Task WithMixOfRetryTypes ( RetryType [ ] retryTypes )
3029 {
3130 CustomServiceControlPrimarySettings = s => { s . AllowMessageEditing = true ; } ;
3231
33- await Define < MyContext > ( )
32+ await Define < MyContext > ( context => context . NumberOfRetriesToComplete = retryTypes . Length )
3433 . WithEndpoint < FailureEndpoint > ( b =>
3534 b . When ( bus => bus . SendLocal ( new MyMessage ( ) ) ) . DoNotFailOnErrorMessages ( ) )
3635 . Done ( async c =>
3736 {
38- if ( c . RetryCount >= retryTypes . Length ) // Are all retries done?
37+ if ( c . ExceptionsRetried >= c . NumberOfRetriesToComplete ) // Are all retries done?
3938 {
4039 return ! ( await GetAllFailedMessage ( ServiceControlInstanceName , FailedMessageStatus . Unresolved ) )
4140 . HasResult ; // Should return true if all failed messages are no longer unresolved
4241 }
4342
44- if ( retryTypes [ c . RetryCount ] == RetryType . Edit )
43+ if ( c . ExceptionsRetried >= c . ExceptionsThrown )
4544 {
46- var results = await GetAllFailedMessage ( ServiceControlInstanceName ,
47- FailedMessageStatus . Unresolved ) ;
48- if ( ! results . HasResult )
49- {
50- return false ; // No failed messages yet
51- }
52-
53- var result = results . Items . Single ( ) ;
45+ return false ;
46+ }
5447
55- c . MessageId = result . MessageId ;
48+ var results = await GetAllFailedMessage ( ServiceControlInstanceName , FailedMessageStatus . Unresolved ) ;
49+ if ( ! results . HasResult )
50+ {
51+ return false ; // No failed messages yet
5652 }
5753
58- var failedMessage = await GetFailedMessage ( c . UniqueMessageId , ServiceControlInstanceName , FailedMessageStatus . Unresolved ) ;
54+ var mostRecentFailure = results . Items . Single ( ) ;
55+
56+ var failedMessage = await GetFailedMessage ( mostRecentFailure . Id , ServiceControlInstanceName , FailedMessageStatus . Unresolved ) ;
5957 if ( ! failedMessage . HasResult )
6058 {
6159 return false ; // No failed message yet
6260 }
6361
64- if ( retryTypes [ c . RetryCount ] == RetryType . Edit )
62+ if ( retryTypes [ c . ExceptionsThrown - 1 ] == RetryType . Edit )
6563 {
6664 await this . Post < object > ( $ "/api/edit/{ failedMessage . Item . UniqueMessageId } ",
6765 new
6866 {
69- MessageBody = $ "{{ \" Name\" : \" Hello { c . RetryCount } \" }}",
67+ MessageBody = $ "{{ \" Name\" : \" Hello { c . ExceptionsThrown } \" }}",
7068 MessageHeaders = failedMessage . Item . ProcessingAttempts [ ^ 1 ] . Headers
7169 } , null ,
7270 ServiceControlInstanceName ) ;
@@ -76,13 +74,12 @@ await this.Post<object>($"/api/edit/{failedMessage.Item.UniqueMessageId}",
7674 await this . Post < object > ( $ "/api/errors/{ failedMessage . Item . UniqueMessageId } /retry", null , null ,
7775 ServiceControlInstanceName ) ;
7876 }
79-
80- c . RetryCount ++ ;
77+ c . ExceptionsRetried ++ ;
8178
8279 return false ;
8380
8481 } )
85- . Run ( TimeSpan . FromMinutes ( 2 ) ) ;
82+ . Run ( TimeSpan . FromSeconds ( 15 ) ) ;
8683 }
8784
8885 class FailureEndpoint : EndpointConfigurationBuilder
@@ -97,8 +94,9 @@ public Task Handle(MyMessage message, IMessageHandlerContext context)
9794 testContext . MessageId = context . MessageId . Replace ( @"\" , "-" ) ;
9895 testContext . EndpointNameOfReceivingEndpoint = settings . EndpointName ( ) ;
9996
100- if ( testContext . RetryCount < 3 )
97+ if ( testContext . ExceptionsThrown < testContext . NumberOfRetriesToComplete )
10198 {
99+ testContext . ExceptionsThrown ++ ;
102100 Console . Out . WriteLine ( "Throwing exception" ) ;
103101 throw new Exception ( "Simulated exception" ) ;
104102 }
@@ -122,7 +120,9 @@ class MyContext : ScenarioContext
122120 public string EndpointNameOfReceivingEndpoint { get ; set ; }
123121
124122 public string UniqueMessageId => DeterministicGuid . MakeId ( MessageId , EndpointNameOfReceivingEndpoint ) . ToString ( ) ;
125- public int RetryCount { get ; set ; }
123+ public int ExceptionsThrown { get ; set ; }
124+ public int ExceptionsRetried { get ; set ; }
125+ public int NumberOfRetriesToComplete { get ; set ; }
126126 }
127127 }
128128}
0 commit comments