### Question:
PeerDiscoveryController { public CompletableFuture<?> stop() { if (!started.compareAndSet(true, false)) { return CompletableFuture.completedFuture(null); } tableRefreshTimerId.ifPresent(timerUtil::cancelTimer); tableRefreshTimerId = OptionalLong.empty(); cleanTableTimerId.ifPresent(timerUtil::cancelTimer); cleanTableTimerId = OptionalLong.empty(); inflightInteractions.values().forEach(PeerInteractionState::cancelTimers); inflightInteractions.clear(); return CompletableFuture.completedFuture(null); } private  PeerDiscoveryController(
      final NodeKey nodeKey,
      final DiscoveryPeer localPeer,
      final PeerTable peerTable,
      final Collection<DiscoveryPeer> bootstrapNodes,
      final OutboundMessageHandler outboundMessageHandler,
      final TimerUtil timerUtil,
      final AsyncExecutor workerExecutor,
      final long tableRefreshIntervalMs,
      final long cleanPeerTableIntervalMs,
      final PeerRequirement peerRequirement,
      final PeerPermissions peerPermissions,
      final Subscribers<PeerBondedObserver> peerBondedObservers,
      final MetricsSystem metricsSystem); static Builder builder(); void start(); CompletableFuture<?> stop(); void dropPeer(final PeerId peer); void onMessage(final Packet packet, final DiscoveryPeer sender); Stream<DiscoveryPeer> streamDiscoveredPeers(); void setRetryDelayFunction(final RetryDelayFunction retryDelayFunction); void handleBondingRequest(final DiscoveryPeer peer);  }### Answer:
@Test public void stopTwice() { startPeerDiscoveryController(); controller.stop(); controller.stop(); }