@Test public void makeResultListFutureResultsTest() throws InterruptedException, ExecutionException { List<String> expectedResults = new ArrayList<>(TEST_QTY); List<ListenableFuture<String>> futures = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { String result = StringUtils.makeRandomString(5); expectedResults.add(result); futures.add(FutureUtils.immediateResultFuture(result)); } List<String> actualResults = FutureUtils.makeResultListFuture(futures, false).get(); assertTrue(actualResults.containsAll(expectedResults)); assertTrue(expectedResults.containsAll(actualResults)); }
@Test public void makeResultListOrderTest() throws InterruptedException, ExecutionException { List<String> expectedResults = new ArrayList<>(TEST_QTY); List<SettableListenableFuture<String>> futures = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { String result = StringUtils.makeRandomString(5); expectedResults.add(result); SettableListenableFuture<String> slf = new SettableListenableFuture<>(); if (i % 2 == 1) { slf.setResult(result); } futures.add(slf); } ListenableFuture<List<String>> collectionFuture = FutureUtils.makeResultListFuture(futures, false); for (int i = 0; i < TEST_QTY; i++) { SettableListenableFuture<String> slf = futures.get(i); if (! slf.isDone()) { slf.setResult(expectedResults.get(i)); } } List<String> actualResults = collectionFuture.get(); for (int i = 0; i < TEST_QTY; i++) { assertEquals(expectedResults.get(i), actualResults.get(i)); } }
@Test public void makeResultListFutureIgnoreFailureTest() throws InterruptedException, ExecutionException { List<ListenableFuture<? extends String>> futures = makeFutures(TEST_QTY, TEST_QTY / 2); ListenableFuture<List<String>> resultFuture = FutureUtils.makeResultListFuture(futures, true); assertTrue(resultFuture.isDone()); assertEquals(TEST_QTY - 1, resultFuture.get().size()); }
@Test public void makeResultListFutureCancelTest() { SettableListenableFuture<?> slf = new SettableListenableFuture<>(); assertTrue(FutureUtils.makeResultListFuture(Collections.singletonList(slf), true).cancel(true)); assertTrue(slf.isCancelled()); }
@Test public void makeResultListFutureAlreadyDoneFuturesTest() throws InterruptedException, ExecutionException { List<ListenableFuture<? extends String>> futures = makeFutures(TEST_QTY, -1); ListenableFuture<List<String>> resultFuture = FutureUtils.makeResultListFuture(futures, false); assertTrue(resultFuture.isDone()); assertEquals(TEST_QTY, resultFuture.get().size()); }
@Test public void makeResultListFutureNullFuturesTest() throws InterruptedException, ExecutionException { ListenableFuture<List<String>> resultFuture = FutureUtils.makeResultListFuture(null, false); assertTrue(resultFuture.isDone()); assertNotNull(resultFuture.get()); assertTrue(resultFuture.get().isEmpty()); }
@Test (expected = ExecutionException.class) public void makeResultListFutureWithFailureTest() throws InterruptedException, ExecutionException { List<ListenableFuture<? extends String>> futures = makeFutures(TEST_QTY, TEST_QTY / 2); ListenableFuture<List<String>> resultFuture = FutureUtils.makeResultListFuture(futures, false); assertTrue(resultFuture.isDone()); resultFuture.get(); fail("Exception should have thrown"); }