private CompletableFuture<Void> delay() { val result = Futures.delayedFuture(this.config.getSegmentMetadataExpiration(), this.executor); this.stopToken.register(result); return result; } }
/** * Verifies that CancellationToken.NONE has no effect. */ @Test public void testNonCancellableToken() { final int futureCount = 10; CancellationToken token = CancellationToken.NONE; ArrayList<CompletableFuture<Void>> futures = new ArrayList<>(); Predicate<Integer> isAlreadyCompleted = i -> i % 2 == 0; // Every other future is already completed. for (int i = 0; i < futureCount; i++) { val f = new CompletableFuture<Void>(); if (isAlreadyCompleted.test(i)) { f.complete(null); } futures.add(f); token.register(f); } token.requestCancellation(); for (int i = 0; i < futures.size(); i++) { if (isAlreadyCompleted.test(i)) { Assert.assertTrue("Already completed future was cancelled.", Futures.isSuccessful(futures.get(i))); } else { Assert.assertFalse("Non-completed future was completed.", futures.get(i).isDone()); } } } }
/** * Tests that RequestCancellation cancels futures. */ @Test public void testRequestCancellation() { final int futureCount = 10; CancellationToken token = new CancellationToken(); ArrayList<CompletableFuture<Void>> futures = new ArrayList<>(); Predicate<Integer> isAlreadyCompleted = i -> i % 2 == 0; // Every other future is already completed. for (int i = 0; i < futureCount; i++) { val f = new CompletableFuture<Void>(); if (isAlreadyCompleted.test(i)) { f.complete(null); } futures.add(f); token.register(f); } token.requestCancellation(); for (int i = 0; i < futures.size(); i++) { if (isAlreadyCompleted.test(i)) { Assert.assertTrue("Already completed future was cancelled.", Futures.isSuccessful(futures.get(i))); } else { AssertExtensions.assertThrows( "Future was not cancelled.", futures.get(i)::join, ex -> ex instanceof CancellationException); } } }