public void testReconnect() { List<DiscoveryNode> nodes = generateNodes(); NodeConnectionsService service = new NodeConnectionsService(Settings.EMPTY, THREAD_POOL, transportService); ClusterState current = clusterStateFromNodes(Collections.emptyList()); ClusterChangedEvent event = new ClusterChangedEvent("test", clusterStateFromNodes(randomSubsetOf(nodes)), current); transport.randomConnectionExceptions = true; service.connectToNodes(event.nodesDelta().addedNodes()); for (int i = 0; i < 3; i++) { // simulate disconnects for (DiscoveryNode node : randomSubsetOf(nodes)) { transport.disconnectFromNode(node); } service.new ConnectionChecker().run(); } // disable exceptions so things can be restored transport.randomConnectionExceptions = false; service.new ConnectionChecker().run(); assertConnectedExactlyToNodes(event.state()); }