use of cn.taketoday.retry.RetryListener in project today-infrastructure by TAKETODAY.
the class RetryListenerTests method testCloseInterceptors.
@Test
public void testCloseInterceptors() throws Throwable {
template.setListeners(new RetryListener[] { new RetryListener() {
public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable t) {
count++;
list.add("1:" + count);
}
}, new RetryListener() {
public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable t) {
count++;
list.add("2:" + count);
}
} });
template.execute(new RetryCallback<String, Exception>() {
public String doWithRetry(RetryContext context) throws Exception {
return null;
}
});
assertEquals(2, count);
assertEquals(2, list.size());
// interceptors are called in reverse order on close...
assertEquals("2:1", list.get(0));
}
use of cn.taketoday.retry.RetryListener in project today-infrastructure by TAKETODAY.
the class RetryListenerTests method testOpenInterceptors.
@Test
public void testOpenInterceptors() throws Throwable {
template.setListeners(new RetryListener[] { new RetryListener() {
public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
count++;
list.add("1:" + count);
return true;
}
}, new RetryListener() {
public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
count++;
list.add("2:" + count);
return true;
}
} });
template.execute(new RetryCallback<String, Exception>() {
public String doWithRetry(RetryContext context) throws Exception {
return null;
}
});
assertEquals(2, count);
assertEquals(2, list.size());
assertEquals("1:1", list.get(0));
}
use of cn.taketoday.retry.RetryListener in project today-infrastructure by TAKETODAY.
the class RetryTemplateBuilderTests method testBasicCustomization.
@Test
public void testBasicCustomization() {
RetryListener listener1 = mock(RetryListener.class);
RetryListener listener2 = mock(RetryListener.class);
RetryTemplate template = RetryTemplate.builder().maxAttempts(10).exponentialBackoff(99, 1.5, 1717).retryOn(IOException.class).retryOn(Collections.<Class<? extends Throwable>>singletonList(IllegalArgumentException.class)).traversingCauses().withListener(listener1).withListeners(Collections.singletonList(listener2)).build();
PolicyTuple policyTuple = PolicyTuple.extractWithAsserts(template);
BinaryExceptionClassifier classifier = policyTuple.exceptionClassifierRetryPolicy.getExceptionClassifier();
Assert.assertTrue(classifier.classify(new FileNotFoundException()));
Assert.assertTrue(classifier.classify(new IllegalArgumentException()));
Assert.assertFalse(classifier.classify(new RuntimeException()));
Assert.assertFalse(classifier.classify(new OutOfMemoryError()));
Assert.assertTrue(policyTuple.baseRetryPolicy instanceof MaxAttemptsRetryPolicy);
Assert.assertEquals(10, ((MaxAttemptsRetryPolicy) policyTuple.baseRetryPolicy).getMaxAttempts());
List<RetryListener> listeners = Arrays.asList(getPropertyValue(template, "listeners", RetryListener[].class));
Assert.assertEquals(2, listeners.size());
Assert.assertTrue(listeners.contains(listener1));
Assert.assertTrue(listeners.contains(listener2));
Assert.assertTrue(getPropertyValue(template, "backOffPolicy") instanceof ExponentialBackOffPolicy);
}
Aggregations