RequestBuilder request = client.newRequestBuilder()
.method(Request.METHOD.GET)
.uri(unreachableUrl + "/suspend")
.transport(transport());
final Socket socket = client.create();
IOException ioException = null;
try {
socket.on(new Function<ConnectException>() {
@Override
public void on(ConnectException t) {
socket.close(); // I close it here, remove this close, issue will not happen
response.set(t);
latch.countDown();
}
}).on(new Function<IOException>() {
@Override
public void on(IOException t) {
response2.set(t);
latch.countDown();
}
}).open(request.build());
} catch (IOException ex) {
ioException = ex;
}
socket.fire("echo");
latch.await(5, TimeUnit.SECONDS);
assertEquals(response.get().getClass(), ConnectException.class);
assertTrue(IOException.class.isAssignableFrom(response2.get().getClass()));
assertTrue(IOException.class.isAssignableFrom(ioException.getClass()));