@Override public void failed(Throwable e, Description desc) { System.out.println("FAILED TEST " + desc.getMethodName() + ": " + e.getMessage()); e.printStackTrace(System.err); if (Debug.isDebug() && !(e instanceof OutOfMemoryError)) { Debug.record( 0, "EXCEPTION IN THREAD " + Thread.currentThread().getName() + ": " + e + " - " + Arrays.toString(e.getStackTrace())); Debug.dumpRecorder("~/quasar.dump"); } }
@Test @SuppressWarnings("unchecked") public void testTransportHandlers() throws NoSuchFieldException, IllegalAccessException, InterruptedException { InternalTestCluster internalCluster = backwardsCluster().internalCluster(); TransportService transportService = internalCluster.getInstance(TransportService.class); ImmutableMap<String, TransportRequestHandler> requestHandlers = transportService.serverHandlers; DiscoveryNodes nodes = client().admin().cluster().prepareState().get().getState().nodes(); DiscoveryNode selectedNode = null; for (DiscoveryNode node : nodes) { if (node.getVersion().before(Version.CURRENT)) { selectedNode = node; break; } } assertThat(selectedNode, notNullValue()); final TransportRequest transportRequest = new TransportRequest() {}; for (String action : requestHandlers.keySet()) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<TransportException> failure = new AtomicReference<>(); transportService.sendRequest( selectedNode, action, transportRequest, new TransportResponseHandler<TransportResponse>() { @Override public TransportResponse newInstance() { return new TransportResponse() {}; } @Override public void handleResponse(TransportResponse response) { latch.countDown(); } @Override public void handleException(TransportException exp) { failure.set(exp); latch.countDown(); } @Override public String executor() { return ThreadPool.Names.SAME; } }); assertThat(latch.await(5, TimeUnit.SECONDS), equalTo(true)); if (failure.get() != null) { Throwable cause = failure.get().unwrapCause(); if (isActionNotFoundExpected(selectedNode.version(), action)) { assertThat(cause, instanceOf(ActionNotFoundTransportException.class)); } else { assertThat(cause, not(instanceOf(ActionNotFoundTransportException.class))); if (!(cause instanceof IndexOutOfBoundsException)) { cause.printStackTrace(); } } } } }