OPEN - issue BATCH-777: Parametrise RetryCallback and related interfaces

Revert RetryPolicy.close() to its former signature
This commit is contained in:
dsyer
2008-08-26 07:42:43 +00:00
parent 99f3bd4c6b
commit ca735a43b2
14 changed files with 107 additions and 58 deletions

View File

@@ -29,7 +29,7 @@ public class AlwaysRetryPolicyTests extends TestCase {
assertTrue(policy.canRetry(context));
policy.registerThrowable(context, null);
assertTrue(policy.canRetry(context));
policy.close(context, true);
policy.close(context);
assertTrue(policy.canRetry(context));
}

View File

@@ -77,17 +77,17 @@ public class CompositeRetryPolicyTests extends TestCase {
final List<String> list = new ArrayList<String>();
CompositeRetryPolicy policy = new CompositeRetryPolicy();
policy.setPolicies(new RetryPolicy[] { new MockRetryPolicySupport() {
public void close(RetryContext context, boolean succeeded) {
public void close(RetryContext context) {
list.add("1");
}
}, new MockRetryPolicySupport() {
public void close(RetryContext context, boolean succeeded) {
public void close(RetryContext context) {
list.add("2");
}
} });
RetryContext context = policy.open(null);
assertNotNull(context);
policy.close(context, true);
policy.close(context);
assertEquals(2, list.size());
}
@@ -95,19 +95,19 @@ public class CompositeRetryPolicyTests extends TestCase {
final List<String> list = new ArrayList<String>();
CompositeRetryPolicy policy = new CompositeRetryPolicy();
policy.setPolicies(new RetryPolicy[] { new MockRetryPolicySupport() {
public void close(RetryContext context, boolean succeeded) {
public void close(RetryContext context) {
list.add("1");
throw new RuntimeException("Pah!");
}
}, new MockRetryPolicySupport() {
public void close(RetryContext context, boolean succeeded) {
public void close(RetryContext context) {
list.add("2");
}
} });
RetryContext context = policy.open(null);
assertNotNull(context);
try {
policy.close(context, true);
policy.close(context);
fail("Expected RuntimeException");
} catch (RuntimeException e) {
assertEquals("Pah!", e.getMessage());

View File

@@ -106,7 +106,7 @@ public class ExceptionClassifierRetryPolicyTests extends TestCase {
public void testClose() throws Exception {
policy.setPolicyMap(Collections.singletonMap(ExceptionClassifierSupport.DEFAULT,
(RetryPolicy) new MockRetryPolicySupport() {
public void close(RetryContext context, boolean succeeded) {
public void close(RetryContext context) {
count++;
}
}));
@@ -114,12 +114,12 @@ public class ExceptionClassifierRetryPolicyTests extends TestCase {
// The mapped (child) policy hasn't been used yet, so if we close now
// we don't incur the possible expense of ceating the child context.
policy.close(context, true);
policy.close(context);
assertEquals(0, count); // not classified yet
// This forces a child context to be created and the child policy is
// then closed
policy.registerThrowable(context, new IllegalStateException());
policy.close(context, true);
policy.close(context);
assertEquals(1, count); // now classified
}

View File

@@ -31,7 +31,7 @@ public class NeverRetryPolicyTests extends TestCase {
assertTrue(policy.canRetry(context));
policy.registerThrowable(context, null);
assertFalse(policy.canRetry(context));
policy.close(context, true);
policy.close(context);
assertFalse(policy.canRetry(context));
}

View File

@@ -30,7 +30,7 @@ public class TimeoutRetryPolicyTests extends TestCase {
assertTrue(policy.canRetry(context));
Thread.sleep(200);
assertFalse(policy.canRetry(context));
policy.close(context, true);
policy.close(context);
}
public void testRetryCount() throws Exception {

View File

@@ -16,11 +16,17 @@
package org.springframework.batch.retry.support;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
import java.util.HashSet;
import junit.framework.TestCase;
import org.junit.Test;
import org.springframework.batch.retry.ExhaustedRetryException;
import org.springframework.batch.retry.RecoveryCallback;
import org.springframework.batch.retry.RetryCallback;
import org.springframework.batch.retry.RetryContext;
import org.springframework.batch.retry.backoff.BackOffContext;
@@ -32,14 +38,15 @@ import org.springframework.batch.retry.policy.SimpleRetryPolicy;
/**
* @author Rob Harrop
* @since 2.1
* @author Dave Syer
*/
public class RetryTemplateTests extends TestCase {
public class RetryTemplateTests {
RetryContext context;
int count = 0;
@Test
public void testSuccessfulRetry() throws Exception {
for (int x = 1; x <= 10; x++) {
MockRetryCallback callback = new MockRetryCallback();
@@ -51,6 +58,23 @@ public class RetryTemplateTests extends TestCase {
}
}
@Test
public void testSuccessfulRecovery() throws Exception {
MockRetryCallback callback = new MockRetryCallback();
callback.setAttemptsBeforeSuccess(3);
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setRetryPolicy(new SimpleRetryPolicy(2));
final Object value = new Object();
Object result = retryTemplate.execute(callback, new RecoveryCallback<Object>() {
public Object recover(RetryContext context) throws Exception {
return value;
}
});
assertEquals(2, callback.attempts);
assertEquals(value, result);
}
@Test
public void testAlwaysTryAtLeastOnce() throws Exception {
MockRetryCallback callback = new MockRetryCallback();
RetryTemplate retryTemplate = new RetryTemplate();
@@ -59,6 +83,7 @@ public class RetryTemplateTests extends TestCase {
assertEquals(1, callback.attempts);
}
@Test
public void testNoSuccessRetry() throws Exception {
MockRetryCallback callback = new MockRetryCallback();
// Something that won't be thrown by JUnit...
@@ -79,6 +104,7 @@ public class RetryTemplateTests extends TestCase {
fail("Expected IllegalArgumentException");
}
@Test
public void testDefaultConfigWithExceptionSubclass() throws Exception {
MockRetryCallback callback = new MockRetryCallback();
int attempts = 3;
@@ -91,6 +117,7 @@ public class RetryTemplateTests extends TestCase {
assertEquals(attempts, callback.attempts);
}
@Test
public void testSetExceptions() throws Exception {
RetryTemplate template = new RetryTemplate();
SimpleRetryPolicy policy = new SimpleRetryPolicy();
@@ -119,6 +146,7 @@ public class RetryTemplateTests extends TestCase {
assertEquals(attempts, callback.attempts);
}
@Test
public void testBackOffInvoked() throws Exception {
for (int x = 1; x <= 10; x++) {
MockRetryCallback callback = new MockRetryCallback();
@@ -134,6 +162,7 @@ public class RetryTemplateTests extends TestCase {
}
}
@Test
public void testEarlyTermination() throws Exception {
try {
RetryTemplate retryTemplate = new RetryTemplate();
@@ -152,6 +181,7 @@ public class RetryTemplateTests extends TestCase {
}
}
@Test
public void testNestedContexts() throws Exception {
RetryTemplate outer = new RetryTemplate();
final RetryTemplate inner = new RetryTemplate();
@@ -176,6 +206,7 @@ public class RetryTemplateTests extends TestCase {
assertEquals(2, count);
}
@Test
public void testRethrowError() throws Exception {
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setRetryPolicy(new NeverRetryPolicy());
@@ -192,6 +223,7 @@ public class RetryTemplateTests extends TestCase {
}
}
@Test
public void testBackOffInterrupted() throws Exception {
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setBackOffPolicy(new StatelessBackOffPolicy() {
@@ -211,7 +243,7 @@ public class RetryTemplateTests extends TestCase {
assertEquals("foo", e.getMessage());
}
}
private static class MockRetryCallback implements RetryCallback<Object> {
private int attempts;

View File

@@ -174,13 +174,23 @@ public class StatefulRecoveryRetryTests {
};
try {
// TODO: test this
// retryTemplate.execute(callback, state);
// fail("Expected RetryException");
retryTemplate.execute(callback, state);
fail("Expected RuntimeException");
}
catch (RuntimeException ex) {
String message = ex.getMessage();
assertEquals("Barf!", message);
}
// Only fails second attempt because the algorithm to detect
// inconsistent has codes relies on the cache having been used for this
// item already...
try {
retryTemplate.execute(callback, state);
fail("Expected RetryException");
}
catch (RetryException ex) {
String message = ex.getMessage();
assertTrue("Message doesn't contain 'inconsistent': " + message, message.indexOf("inconsistent") >= 0);
assertTrue("Message doesn't contain 'inconsistent': " + message, message.contains("inconsistent"));
}
RetryContext context = retryTemplate.open(retryPolicy, state);