@Test public void doesNotRecordLeaderPingSuccess() throws InterruptedException { CompletableFuture<Boolean> pingFuture = CompletableFuture.completedFuture(true); boolean result = electionService.getAndRecordLeaderPingResult(pingFuture); assertThat(result).isTrue(); verifyNoMoreInteractions(recorder); }
private boolean pingLeader() { Optional<PingableLeader> maybeLeader = getSuspectedLeader(true /* use network */); if (!maybeLeader.isPresent()) { return false; } final PingableLeader leader = maybeLeader.get(); MultiplexingCompletionService<PingableLeader, Boolean> multiplexingCompletionService = MultiplexingCompletionService.create(leaderPingExecutors); multiplexingCompletionService.submit(leader, leader::ping); try { Future<Boolean> pingFuture = multiplexingCompletionService.poll( leaderPingResponseWaitMs, TimeUnit.MILLISECONDS); return getAndRecordLeaderPingResult(pingFuture); } catch (InterruptedException ex) { return false; } }
@Test public void recordsLeaderPingFailure() throws InterruptedException { RuntimeException error = new RuntimeException("foo"); CompletableFuture<Boolean> pingFuture = new CompletableFuture<>(); pingFuture.completeExceptionally(error); boolean result = electionService.getAndRecordLeaderPingResult(pingFuture); assertThat(result).isFalse(); verify(recorder).recordLeaderPingFailure(error); verifyNoMoreInteractions(recorder); }
@Test public void recordsLeaderPingReturnedFalse() throws InterruptedException { CompletableFuture<Boolean> pingFuture = CompletableFuture.completedFuture(false); boolean result = electionService.getAndRecordLeaderPingResult(pingFuture); assertThat(result).isFalse(); verify(recorder).recordLeaderPingReturnedFalse(); verifyNoMoreInteractions(recorder); }
@Test public void recordsLeaderPingTimeout() throws InterruptedException { // a null result from ExecutorCompletionService indicates that no results were available before the timeout CompletableFuture<Boolean> pingFuture = null; boolean result = electionService.getAndRecordLeaderPingResult(pingFuture); assertThat(result).isFalse(); verify(recorder).recordLeaderPingTimeout(); verifyNoMoreInteractions(recorder); }
private boolean pingLeader() { Optional<PingableLeader> maybeLeader = getSuspectedLeader(true /* use network */); if (!maybeLeader.isPresent()) { return false; } final PingableLeader leader = maybeLeader.get(); MultiplexingCompletionService<PingableLeader, Boolean> multiplexingCompletionService = MultiplexingCompletionService.create(leaderPingExecutors); multiplexingCompletionService.submit(leader, leader::ping); try { Future<Boolean> pingFuture = multiplexingCompletionService.poll( leaderPingResponseWaitMs, TimeUnit.MILLISECONDS); return getAndRecordLeaderPingResult(pingFuture); } catch (InterruptedException ex) { return false; } }