@@ -68,6 +68,12 @@ void configureRetryTemplate() {
68
68
retryTemplate .setRetryListener (retryListener );
69
69
}
70
70
71
+ @ Test
72
+ void checkRetryTemplateConfiguration () {
73
+ assertThat (retryTemplate .getRetryPolicy ()).isSameAs (retryPolicy );
74
+ assertThat (retryTemplate .getRetryListener ()).isSameAs (retryListener );
75
+ }
76
+
71
77
@ Test
72
78
void retryWithImmediateSuccess () throws Exception {
73
79
AtomicInteger invocationCount = new AtomicInteger ();
@@ -99,10 +105,9 @@ void retryWithInitialFailureAndZeroRetriesRetryPolicy() {
99
105
.withMessageMatching ("Retry policy for operation '.+?' exhausted; aborting execution" )
100
106
.withCause (exception )
101
107
.satisfies (throwable -> assertThat (throwable .getSuppressed ()).isEmpty ())
102
- .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isZero ());
108
+ .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isZero ())
109
+ .satisfies (throwable -> inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , throwable ));
103
110
104
- // RetryListener interactions:
105
- inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , exception );
106
111
verifyNoMoreInteractions (retryListener );
107
112
}
108
113
@@ -122,10 +127,9 @@ void retryWithInitialFailureAndZeroRetriesFixedBackOffPolicy() {
122
127
.withMessageMatching ("Retry policy for operation '.+?' exhausted; aborting execution" )
123
128
.withCause (exception )
124
129
.satisfies (throwable -> assertThat (throwable .getSuppressed ()).isEmpty ())
125
- .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isZero ());
130
+ .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isZero ())
131
+ .satisfies (throwable -> inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , throwable ));
126
132
127
- // RetryListener interactions:
128
- inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , exception );
129
133
verifyNoMoreInteractions (retryListener );
130
134
}
131
135
@@ -145,10 +149,9 @@ void retryWithInitialFailureAndZeroRetriesBackOffPolicyFromBuilder() {
145
149
.withMessageMatching ("Retry policy for operation '.+?' exhausted; aborting execution" )
146
150
.withCause (exception )
147
151
.satisfies (throwable -> assertThat (throwable .getSuppressed ()).isEmpty ())
148
- .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isZero ());
152
+ .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isZero ())
153
+ .satisfies (throwable -> inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , throwable ));
149
154
150
- // RetryListener interactions:
151
- inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , exception );
152
155
verifyNoMoreInteractions (retryListener );
153
156
}
154
157
@@ -194,18 +197,19 @@ public String getName() {
194
197
assertThatExceptionOfType (RetryException .class )
195
198
.isThrownBy (() -> retryTemplate .execute (retryable ))
196
199
.withMessage ("Retry policy for operation 'test' exhausted; aborting execution" )
197
- .withCause (new CustomException ("Boom 4" ));
200
+ .withCause (new CustomException ("Boom 4" ))
201
+ .satisfies (throwable -> {
202
+ invocationCount .set (1 );
203
+ repeat (3 , () -> {
204
+ inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
205
+ inOrder .verify (retryListener ).onRetryFailure (retryPolicy , retryable ,
206
+ new CustomException ("Boom " + invocationCount .incrementAndGet ()));
207
+ });
208
+ inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , throwable );
209
+ });
198
210
// 4 = 1 initial invocation + 3 retry attempts
199
211
assertThat (invocationCount ).hasValue (4 );
200
212
201
- // RetryListener interactions:
202
- invocationCount .set (1 );
203
- repeat (3 , () -> {
204
- inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
205
- inOrder .verify (retryListener ).onRetryFailure (retryPolicy , retryable ,
206
- new CustomException ("Boom " + invocationCount .incrementAndGet ()));
207
- });
208
- inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , new CustomException ("Boom 4" ));
209
213
verifyNoMoreInteractions (retryListener );
210
214
}
211
215
@@ -240,16 +244,17 @@ public String getName() {
240
244
assertThatExceptionOfType (RetryException .class )
241
245
.isThrownBy (() -> retryTemplate .execute (retryable ))
242
246
.withMessage ("Retry policy for operation 'always fails' exhausted; aborting execution" )
243
- .withCause (exception );
247
+ .withCause (exception )
248
+ .satisfies (throwable -> {
249
+ repeat (5 , () -> {
250
+ inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
251
+ inOrder .verify (retryListener ).onRetryFailure (retryPolicy , retryable , exception );
252
+ });
253
+ inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , throwable );
254
+ });
244
255
// 6 = 1 initial invocation + 5 retry attempts
245
256
assertThat (invocationCount ).hasValue (6 );
246
257
247
- // RetryListener interactions:
248
- repeat (5 , () -> {
249
- inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
250
- inOrder .verify (retryListener ).onRetryFailure (retryPolicy , retryable , exception );
251
- });
252
- inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , exception );
253
258
verifyNoMoreInteractions (retryListener );
254
259
}
255
260
@@ -291,17 +296,17 @@ public String getName() {
291
296
suppressed1 -> assertThat (suppressed1 ).isExactlyInstanceOf (FileNotFoundException .class ),
292
297
suppressed2 -> assertThat (suppressed2 ).isExactlyInstanceOf (IOException .class )
293
298
))
294
- .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isEqualTo (2 ));
299
+ .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isEqualTo (2 ))
300
+ .satisfies (throwable -> {
301
+ repeat (2 , () -> {
302
+ inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
303
+ inOrder .verify (retryListener ).onRetryFailure (eq (retryPolicy ), eq (retryable ), any (Exception .class ));
304
+ });
305
+ inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , throwable );
306
+ });
295
307
// 3 = 1 initial invocation + 2 retry attempts
296
308
assertThat (invocationCount ).hasValue (3 );
297
309
298
- // RetryListener interactions:
299
- repeat (2 , () -> {
300
- inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
301
- inOrder .verify (retryListener ).onRetryFailure (eq (retryPolicy ), eq (retryable ), any (Exception .class ));
302
- });
303
- inOrder .verify (retryListener ).onRetryPolicyExhaustion (
304
- eq (retryPolicy ), eq (retryable ), any (IllegalStateException .class ));
305
310
verifyNoMoreInteractions (retryListener );
306
311
}
307
312
@@ -354,17 +359,17 @@ public String getName() {
354
359
suppressed1 -> assertThat (suppressed1 ).isExactlyInstanceOf (IOException .class ),
355
360
suppressed2 -> assertThat (suppressed2 ).isExactlyInstanceOf (IOException .class )
356
361
))
357
- .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isEqualTo (2 ));
362
+ .satisfies (throwable -> assertThat (throwable .getRetryCount ()).isEqualTo (2 ))
363
+ .satisfies (throwable -> {
364
+ repeat (2 , () -> {
365
+ inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
366
+ inOrder .verify (retryListener ).onRetryFailure (eq (retryPolicy ), eq (retryable ), any (IOException .class ));
367
+ });
368
+ inOrder .verify (retryListener ).onRetryPolicyExhaustion (retryPolicy , retryable , throwable );
369
+ });
358
370
// 3 = 1 initial invocation + 2 retry attempts
359
371
assertThat (invocationCount ).hasValue (3 );
360
372
361
- // RetryListener interactions:
362
- repeat (2 , () -> {
363
- inOrder .verify (retryListener ).beforeRetry (retryPolicy , retryable );
364
- inOrder .verify (retryListener ).onRetryFailure (eq (retryPolicy ), eq (retryable ), any (IOException .class ));
365
- });
366
- inOrder .verify (retryListener ).onRetryPolicyExhaustion (
367
- eq (retryPolicy ), eq (retryable ), any (CustomFileNotFoundException .class ));
368
373
verifyNoMoreInteractions (retryListener );
369
374
}
370
375
0 commit comments