@Test public void testTimeoutSendExceptionWithNeverSendingBackResponse() throws Exception { serviceA.registerHandler( "sayHelloTimeoutNoResponse", new BaseTransportRequestHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void messageReceived(StringMessage request, TransportChannel channel) { System.out.println("got message: " + request.message); assertThat("moshe", equalTo(request.message)); // don't send back a response // try { // channel.sendResponse(new StringMessage("hello " + // request.message)); // } catch (IOException e) { // e.printStackTrace(); // assertThat(e.getMessage(), false, equalTo(true)); // } } }); TransportFuture<StringMessage> res = serviceB.submitRequest( serviceANode, "sayHelloTimeoutNoResponse", new StringMessage("moshe"), options().withTimeout(100), new BaseTransportResponseHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void handleResponse(StringMessage response) { assertThat("got response instead of exception", false, equalTo(true)); } @Override public void handleException(RemoteTransportException exp) { assertThat(exp, instanceOf(ReceiveTimeoutTransportException.class)); } }); try { StringMessage message = res.txGet(); assertThat("exception should be thrown", false, equalTo(true)); } catch (Exception e) { assertThat(e, instanceOf(ReceiveTimeoutTransportException.class)); } serviceA.removeHandler("sayHelloTimeoutNoResponse"); System.out.println("after ..."); }
@Test public void testErrorMessage() { serviceA.registerHandler( "sayHelloException", new BaseTransportRequestHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void messageReceived(StringMessage request, TransportChannel channel) throws Exception { System.out.println("got message: " + request.message); assertThat("moshe", equalTo(request.message)); throw new RuntimeException("bad message !!!"); } }); TransportFuture<StringMessage> res = serviceB.submitRequest( serviceANode, "sayHelloException", new StringMessage("moshe"), new BaseTransportResponseHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void handleResponse(StringMessage response) { assertThat("got response instead of exception", false, equalTo(true)); } @Override public void handleException(RemoteTransportException exp) { assertThat("bad message !!!", equalTo(exp.getCause().getMessage())); } }); try { res.txGet(); assertThat("exception should be thrown", false, equalTo(true)); } catch (Exception e) { assertThat("bad message !!!", equalTo(e.getCause().getMessage())); } serviceA.removeHandler("sayHelloException"); System.out.println("after ..."); }
@Test public void testDisconnectListener() throws Exception { final CountDownLatch latch = new CountDownLatch(1); TransportConnectionListener disconnectListener = new TransportConnectionListener() { @Override public void onNodeConnected(DiscoveryNode node) { throw new RuntimeException("Should not be called"); } @Override public void onNodeDisconnected(DiscoveryNode node) { latch.countDown(); } }; serviceA.addConnectionListener(disconnectListener); serviceB.close(); assertThat(latch.await(5, TimeUnit.SECONDS), equalTo(true)); }
@Test public void testHelloWorld() { serviceA.registerHandler( "sayHello", new BaseTransportRequestHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void messageReceived(StringMessage request, TransportChannel channel) { System.out.println("got message: " + request.message); assertThat("moshe", equalTo(request.message)); try { channel.sendResponse(new StringMessage("hello " + request.message)); } catch (IOException e) { e.printStackTrace(); assertThat(e.getMessage(), false, equalTo(true)); } } }); TransportFuture<StringMessage> res = serviceB.submitRequest( serviceANode, "sayHello", new StringMessage("moshe"), new BaseTransportResponseHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void handleResponse(StringMessage response) { System.out.println("got response: " + response.message); assertThat("hello moshe", equalTo(response.message)); } @Override public void handleException(RemoteTransportException exp) { exp.printStackTrace(); assertThat( "got exception instead of a response: " + exp.getMessage(), false, equalTo(true)); } }); try { StringMessage message = res.get(); assertThat("hello moshe", equalTo(message.message)); } catch (Exception e) { assertThat(e.getMessage(), false, equalTo(true)); } serviceA.removeHandler("sayHello"); System.out.println("after ..."); }
@Test public void testTimeoutSendExceptionWithDelayedResponse() throws Exception { serviceA.registerHandler( "sayHelloTimeoutDelayedResponse", new BaseTransportRequestHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void messageReceived(StringMessage request, TransportChannel channel) { System.out.println("got message: " + request.message); TimeValue sleep = TimeValue.parseTimeValue(request.message, null); try { Thread.sleep(sleep.millis()); } catch (InterruptedException e) { // ignore } try { channel.sendResponse(new StringMessage("hello " + request.message)); } catch (IOException e) { e.printStackTrace(); assertThat(e.getMessage(), false, equalTo(true)); } } }); TransportFuture<StringMessage> res = serviceB.submitRequest( serviceANode, "sayHelloTimeoutDelayedResponse", new StringMessage("300ms"), options().withTimeout(100), new BaseTransportResponseHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void handleResponse(StringMessage response) { assertThat("got response instead of exception", false, equalTo(true)); } @Override public void handleException(RemoteTransportException exp) { assertThat(exp, instanceOf(ReceiveTimeoutTransportException.class)); } }); try { StringMessage message = res.txGet(); assertThat("exception should be thrown", false, equalTo(true)); } catch (Exception e) { assertThat(e, instanceOf(ReceiveTimeoutTransportException.class)); } // sleep for 400 millis to make sure we get back the response Thread.sleep(400); for (int i = 0; i < 10; i++) { final int counter = i; // now, try and send another request, this times, with a short timeout res = serviceB.submitRequest( serviceANode, "sayHelloTimeoutDelayedResponse", new StringMessage(counter + "ms"), options().withTimeout(100), new BaseTransportResponseHandler<StringMessage>() { @Override public StringMessage newInstance() { return new StringMessage(); } @Override public void handleResponse(StringMessage response) { System.out.println("got response: " + response.message); assertThat("hello " + counter + "ms", equalTo(response.message)); } @Override public void handleException(RemoteTransportException exp) { exp.printStackTrace(); assertThat( "got exception instead of a response for " + counter + ": " + exp.getDetailedMessage(), false, equalTo(true)); } }); StringMessage message = res.txGet(); assertThat(message.message, equalTo("hello " + counter + "ms")); } serviceA.removeHandler("sayHelloTimeoutDelayedResponse"); System.out.println("after ..."); }