@Test public void cancelIncompleteFuturesIfAnyFailCancelTest() { List<SettableListenableFuture<?>> futures = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { futures.add(new SettableListenableFuture<>()); } FutureUtils.cancelIncompleteFuturesIfAnyFail(false, futures, false); // cancel one future assertTrue(futures.get(1).cancel(false)); for (int i = 0; i < TEST_QTY; i++) { assertTrue(futures.get(i).isCancelled()); } }
@Test public void cancelIncompleteFuturesIfAnyFailCopyTest() { List<SettableListenableFuture<?>> futures = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { futures.add(new SettableListenableFuture<>()); } FutureUtils.cancelIncompleteFuturesIfAnyFail(true, futures, false); // copy and clear futures List<SettableListenableFuture<?>> futuresCopy = new ArrayList<>(futures); futures.clear(); // cancel one future assertTrue(futuresCopy.get(1).cancel(false)); for (int i = 0; i < TEST_QTY; i++) { assertTrue(futuresCopy.get(i).isCancelled()); } }
@Test public void makeFailurePropagatingCompleteFutureCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeFailurePropagatingCompleteFuture(Collections.singletonList(slf)).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeCompleteFutureCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeCompleteFuture(Collections.singletonList(slf)).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeResultListFutureCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeResultListFuture(Collections.singletonList(slf), true).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeCompleteFutureWithResultCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeCompleteFuture(Collections.singletonList(slf), null).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeSuccessListFutureCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeSuccessListFuture(Collections.singletonList(slf)).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeFailurePropagatingCompleteFutureWithResultCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeFailurePropagatingCompleteFuture(Collections.singletonList(slf), null).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeCompleteListFutureCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeCompleteListFuture(Collections.singletonList(slf)).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeFailureListFutureCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeFailureListFuture(Collections.singletonList(slf)).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void rescheduledFutureCheckTest() throws InterruptedException { long delayTime = 100; // longer than constants DELAY_TIME to ensure we can tick BEFORE the second future times out watchdog = new Watchdog(scheduler, delayTime * 2, true); SettableListenableFuture<?> slf1 = new SettableListenableFuture<>(); watchdog.watch(slf1); TestUtils.sleep(delayTime); SettableListenableFuture<?> slf2 = new SettableListenableFuture<>(); watchdog.watch(slf2); assertEquals(1, scheduler.blockingTick(null)); assertTrue(slf1.isCancelled()); assertFalse(slf2.isCancelled()); assertEquals(1, scheduler.blockingTick(null)); assertTrue(slf1.isCancelled()); assertTrue(slf2.isCancelled()); } }
@Test public void cancelIncompleteFuturesTest() throws InterruptedException, ExecutionException { List<SettableListenableFuture<?>> futures = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); futures.add(slf); if (i % 2 == 0) { slf.setResult(null); } } FutureUtils.cancelIncompleteFutures(futures, false); for (int i = 0; i < TEST_QTY; i++) { SettableListenableFuture<?> slf = futures.get(i); assertTrue(slf.isDone()); if (i % 2 == 0) { slf.get(); // should not throw as was completed normally } else { assertTrue(slf.isCancelled()); } } }
@Test public void cancelIncompleteFuturesIfAnyFailTest() throws InterruptedException, ExecutionException { List<SettableListenableFuture<?>> futures = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); futures.add(slf); if (i % 2 == 0) { slf.setResult(null); } } FutureUtils.cancelIncompleteFuturesIfAnyFail(false, futures, false); // fail one future futures.get(1).setFailure(null); for (int i = 0; i < TEST_QTY; i++) { SettableListenableFuture<?> slf = futures.get(i); assertTrue(slf.isDone()); if (i % 2 == 0) { slf.get(); // should not throw as was completed normally } else if (i != 1) { // skip manually failed future assertTrue(slf.isCancelled()); } } }
@Test public void expiredFutureTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); watchdog.watch(slf); TestUtils.blockTillClockAdvances(); assertEquals(1, scheduler.tick(null)); assertTrue(slf.isCancelled()); assertTrue(watchdog.futures.isEmpty()); }
@Test public void chainCanceledFutureTest() { SettableListenableFuture<String> canceledSlf = new SettableListenableFuture<>(); assertTrue(canceledSlf.cancel(false)); canceledSlf.addCallback(slf); assertTrue(slf.isCancelled()); }
@Test public void cancelChainedFutureTest() { SettableListenableFuture<String> canceledSlf = new SettableListenableFuture<>(); canceledSlf.addCallback(slf); assertTrue(canceledSlf.cancel(false)); assertTrue(slf.isCancelled()); }
@Test public void expiredFutureTest() { SettableListenableFuture<Object> slf = new SettableListenableFuture<>(); watchdog.watch(slf, TIMEOUT); TestUtils.blockTillClockAdvances(); assertEquals(1, scheduler.tick()); assertTrue(slf.isCancelled()); }
@Test public void cancelTest() { assertTrue(slf.cancel(false)); assertFalse(slf.cancel(false)); assertTrue(slf.isCancelled()); assertTrue(slf.isDone()); }
@Test public void cancelFlatMappedAsyncFutureTest() { SettableListenableFuture<Void> asyncSLF = new SettableListenableFuture<>(); ListenableFuture<Void> mappedLF = slf.flatMap(asyncSLF); slf.setResult(null); // complete source future before cancel assertFalse(mappedLF.isDone()); assertTrue(mappedLF.cancel(false)); // no interrupt needed, delegate future not started assertTrue(asyncSLF.isCancelled()); }
@Test public void cancelFlatMappedAsyncFutureTest() { ListenableFutureTask<Object> future = makeFutureTask(DoNothingRunnable.instance(), null); SettableListenableFuture<Void> asyncSLF = new SettableListenableFuture<>(); ListenableFuture<Void> mappedLF = future.flatMap(asyncSLF); future.run(); // complete source future before cancel assertFalse(mappedLF.isDone()); assertTrue(mappedLF.cancel(false)); // no interrupt needed, delegate future not started assertTrue(asyncSLF.isCancelled()); }