From 273112101b474d4aa1d5509f8c9cddf8b53deb07 Mon Sep 17 00:00:00 2001 From: Jonathan Halterman Date: Sun, 5 Jul 2015 01:05:45 -0700 Subject: [PATCH] Simplified test Simpplified invocation completion Doc fix --- README.md | 2 +- pom.xml | 2 +- .../java/net/jodah/recurrent/Invocation.java | 22 ++++++++++++------- .../net/jodah/recurrent/RecurrentTest.java | 17 +++++++------- .../util/concurrent/ReentrantCircuitTest.java | 3 --- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 09351805..777d6c49 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Recurrent.get(invocation -> { if (failure == null) invocation.complete(result); else if (!invocation.retry(failure)) - log.error("Connection attempts failed", failure) + log.error("Connection attempts failed", failure); } }, retryPolicy, executor)); ``` diff --git a/pom.xml b/pom.xml index e14eef6e..284bf749 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ net.jodah concurrentunit - 0.3.5 + 0.3.6-SNAPSHOT test diff --git a/src/main/java/net/jodah/recurrent/Invocation.java b/src/main/java/net/jodah/recurrent/Invocation.java index 19f7749e..93b481ba 100644 --- a/src/main/java/net/jodah/recurrent/Invocation.java +++ b/src/main/java/net/jodah/recurrent/Invocation.java @@ -13,7 +13,7 @@ */ public class Invocation { private RetryPolicy retryPolicy; - private RecurrentFuture future; + private RecurrentFuture future; private long startTime; /** Count of retry attempts */ @@ -23,9 +23,10 @@ public class Invocation { /** Indicates whether a retry has been requested */ volatile boolean retryRequested; + @SuppressWarnings("unchecked") Invocation(RetryPolicy retryPolicy, RecurrentFuture future) { this.retryPolicy = retryPolicy; - this.future = future; + this.future = (RecurrentFuture) future; waitTime = retryPolicy.getDelay().toNanos(); startTime = System.nanoTime(); } @@ -33,9 +34,15 @@ public class Invocation { /** * Completes the invocation. */ - @SuppressWarnings("unchecked") + public void complete() { + future.complete(null, null); + } + + /** + * Completes the invocation. + */ public void complete(Object result) { - ((RecurrentFuture) future).complete(result, null); + future.complete(result, null); } /** @@ -62,7 +69,6 @@ public boolean retry(Throwable failure) { return retryInternal(failure); } - @SuppressWarnings("unchecked") private boolean retryInternal(Throwable failure) { if (retryRequested) return true; @@ -73,13 +79,13 @@ private boolean retryInternal(Throwable failure) { retryRequested = true; return true; } - + if (failure == null) failure = new RuntimeException("Retry invocations exceeded"); - ((RecurrentFuture) future).complete(null, failure); + future.complete(null, failure); return false; } - + /** * Returns the wait time. */ diff --git a/src/test/java/net/jodah/recurrent/RecurrentTest.java b/src/test/java/net/jodah/recurrent/RecurrentTest.java index 2f7255a7..fe1dbb56 100644 --- a/src/test/java/net/jodah/recurrent/RecurrentTest.java +++ b/src/test/java/net/jodah/recurrent/RecurrentTest.java @@ -88,7 +88,6 @@ private void assertRunWithExecutor(Object runnable) throws Throwable { : Recurrent.run((ContextualRunnable) runnable, new RetryPolicy(), executor); // Then - waiter.expectResume(); future.whenComplete((result, failure) -> { waiter.assertNull(result); waiter.assertNull(failure); @@ -107,7 +106,6 @@ private void assertRunWithExecutor(Object runnable) throws Throwable { : Recurrent.run((ContextualRunnable) runnable, retryTwice, executor); // Then - waiter.expectResume(); future2.whenComplete((result, failure) -> { waiter.assertNull(result); waiter.assertTrue(failure instanceof SocketException); @@ -162,7 +160,6 @@ private void assertGetWithExecutor(Object callable) throws Throwable { : Recurrent.get((ContextualCallable) callable, new RetryPolicy(), executor); // Then - waiter.expectResume(); future.whenComplete((result, failure) -> { waiter.assertTrue(result); waiter.assertNull(failure); @@ -182,7 +179,6 @@ private void assertGetWithExecutor(Object callable) throws Throwable { : Recurrent.get((ContextualCallable) callable, retryTwice, executor); // Then - waiter.expectResume(); future2.whenComplete((result, failure) -> { waiter.assertNull(result); waiter.assertTrue(failure instanceof SocketException); @@ -223,7 +219,6 @@ private void assertGetFuture(Object callable) throws Throwable { : Recurrent.future((ContextualCallable) callable, new RetryPolicy(), executor); // Then - waiter.expectResume(); future.whenComplete((result, failure) -> { waiter.assertTrue(result); waiter.assertNull(failure); @@ -243,7 +238,6 @@ private void assertGetFuture(Object callable) throws Throwable { : Recurrent.future((ContextualCallable) callable, retryTwice, executor); // Then - waiter.expectResume(); future2.whenComplete((result, failure) -> { waiter.assertNull(result); waiter.assertTrue(matches(failure, CompletionException.class, SocketException.class)); @@ -296,14 +290,19 @@ public void shouldCancelFuture() throws Throwable { future.cancel(true); assertTrue(future.isCancelled()); } - + public void shouldManuallyRetryAndComplete() throws Throwable { Recurrent.get((ctx) -> { if (ctx.getRetryCount() < 2) ctx.retry(); else ctx.complete(true); - return null; - } , retryAlways, executor); + return true; + } , retryAlways, executor).whenComplete((result, failure) -> { + waiter.assertTrue(result); + waiter.assertNull(failure); + waiter.resume(); + }); + waiter.await(3000); } } diff --git a/src/test/java/net/jodah/recurrent/internal/util/concurrent/ReentrantCircuitTest.java b/src/test/java/net/jodah/recurrent/internal/util/concurrent/ReentrantCircuitTest.java index 00f4b62d..8daee564 100644 --- a/src/test/java/net/jodah/recurrent/internal/util/concurrent/ReentrantCircuitTest.java +++ b/src/test/java/net/jodah/recurrent/internal/util/concurrent/ReentrantCircuitTest.java @@ -78,7 +78,6 @@ public void shouldHandleConcurrentWaiters() throws Throwable { circuit.open(); final Waiter waiter = new Waiter(); - waiter.expectResumes(3); for (int i = 0; i < 3; i++) new Thread(new Runnable() { @Override @@ -97,7 +96,6 @@ public void shouldInterruptWaiters() throws Throwable { circuit.open(); final Waiter waiter = new Waiter(); - waiter.expectResumes(3); for (int i = 0; i < 3; i++) new Thread(new Runnable() { @Override @@ -116,7 +114,6 @@ public void shouldNotBlockOpenWhenSyncAcquired() throws Throwable { circuit.open(); final Waiter waiter = new Waiter(); - waiter.expectResume(); new Thread(new Runnable() { @Override public void run() {