@Override public <T> ListenableFuture<T> makeWithResult(T result) { SettableListenableFuture<T> slf = new SettableListenableFuture<>(); slf.handleResult(result); return slf; } }
@Test (expected = TimeoutException.class) public void blockTillAllCompleteWithTimeoutTimeoutTest() throws InterruptedException, TimeoutException { List<? extends ListenableFuture<?>> futures = Collections.singletonList(new SettableListenableFuture<>()); FutureUtils.blockTillAllComplete(futures, 100); fail("Exception should have thrown"); }
@Test public void makeFailurePropagatingCompleteFutureAlreadyDoneFuturesTest() { List<ListenableFuture<?>> futures = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { SettableListenableFuture<?> future = new SettableListenableFuture<>(); future.setResult(null); futures.add(future); } ListenableFuture<?> f = FutureUtils.makeFailurePropagatingCompleteFuture(futures); assertTrue(f.isDone()); }
@Test public void cacheCleanTest() { SettableListenableFuture<Object> slf = new SettableListenableFuture<>(); watchdog.watch(slf, TIMEOUT); assertFalse(watchdog.cachedDogs.isEmpty()); TestUtils.blockTillClockAdvances(); assertEquals(2, scheduler.advance(WatchdogCache.INSPECTION_INTERVAL_MILLIS)); assertTrue(watchdog.cachedDogs.isEmpty()); }
@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 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 resolutionTest() { watchdog = new WatchdogCache(scheduler, true); SettableListenableFuture<Object> slf = new SettableListenableFuture<>(); watchdog.watch(slf, WatchdogCache.DEFAULT_RESOLUTION_MILLIS); watchdog.watch(slf, WatchdogCache.DEFAULT_RESOLUTION_MILLIS / 2); watchdog.watch(slf, WatchdogCache.DEFAULT_RESOLUTION_MILLIS / 4); assertEquals(1, watchdog.cachedDogs.size()); watchdog.watch(slf, WatchdogCache.DEFAULT_RESOLUTION_MILLIS + 1); assertEquals(2, watchdog.cachedDogs.size()); } }
@Test public void invokeAfterAllCompleteTest() { List<SettableListenableFuture<Void>> futures = Collections.singletonList(new SettableListenableFuture<>()); TestRunnable tr = new TestRunnable(); FutureUtils.invokeAfterAllComplete(futures, tr); assertEquals(0, tr.getRunCount()); futures.get(0).setResult(null); assertTrue(tr.ranOnce()); }
@Test public void setResultFailureTest() { slf = new SettableListenableFuture<>(false); assertTrue(slf.setResult(null)); assertFalse(slf.setFailure(null)); }
@Test public void setFailureFailureTest() { slf = new SettableListenableFuture<>(false); assertTrue(slf.setFailure(null)); assertFalse(slf.setFailure(null)); }
@Test public void cancelSetResultTest() { slf = new SettableListenableFuture<>(false); assertTrue(slf.cancel(false)); assertFalse(slf.setResult(null)); }
@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 resultTest() { SettableListenableFuture<Object> future = new SettableListenableFuture<>(); TestFutureCallback callback = new TestFutureCallback(); Object result = new Object(); future.setResult(result); RunnableFutureCallbackAdapter<?> rfca = new RunnableFutureCallbackAdapter<>(future, callback); rfca.run(); assertTrue(callback.getLastResult() == result); assertNull(callback.getLastFailure()); }
@Test public void watchIncompleteFutureWithResultTest() throws InterruptedException, ExecutionException { poller = new Poller(scheduler, POLL_INTERVAL, POLL_INTERVAL * 2); // must have timeout to avoid just casting SLF Object objResult = new Object(); SettableListenableFuture<Object> slf = new SettableListenableFuture<>(); ListenableFuture<Object> lfResult = poller.watch(slf); assertFalse(lfResult.isDone()); slf.setResult(objResult); assertEquals(1, scheduler.advance(POLL_INTERVAL)); assertTrue(lfResult.isDone()); assertTrue(objResult == lfResult.get()); }
@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()); }
@Test public void watchIncompleteCanceledFutureTest() { poller = new Poller(scheduler, POLL_INTERVAL, POLL_INTERVAL * 2); // must have timeout to avoid just casting SLF SettableListenableFuture<Object> slf = new SettableListenableFuture<>(); ListenableFuture<Object> lfResult = poller.watch(slf); assertFalse(lfResult.isDone()); slf.cancel(false); assertEquals(1, scheduler.advance(POLL_INTERVAL)); assertTrue(lfResult.isDone()); assertTrue(lfResult.isCancelled()); }