use of com.linkedin.r2.util.Timeout in project rest.li by linkedin.
the class TestClientTimeout method testTimeoutDuringResponse.
@Test(dataProvider = "clients")
public void testTimeoutDuringResponse(Client client) throws Exception {
Future<RestResponse> future = client.restRequest(new RestRequestBuilder(Bootstrap.createHttpURI(PORT, TIMEOUT_DURING_RESPONSE_URI)).build());
try {
RestResponse res = future.get(5000, TimeUnit.MILLISECONDS);
Assert.fail("should have timed out");
} catch (ExecutionException ex) {
Throwable throwable = ExceptionUtils.getRootCause(ex);
Assert.assertTrue(throwable instanceof TimeoutException);
// should fail with timeout while streaming response
Assert.assertEquals(throwable.getMessage(), "Timeout while receiving the response entity.");
}
}
use of com.linkedin.r2.util.Timeout in project rest.li by linkedin.
the class TestClientTimeout method testReadAfterTimeout.
@Test(dataProvider = "clients")
public void testReadAfterTimeout(Client client) throws Exception {
StreamRequest request = new StreamRequestBuilder(Bootstrap.createHttpURI(PORT, NORMAL_URI)).build(EntityStreams.emptyStream());
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<StreamResponse> response = new AtomicReference<StreamResponse>();
client.streamRequest(request, new Callback<StreamResponse>() {
@Override
public void onError(Throwable e) {
latch.countDown();
}
@Override
public void onSuccess(StreamResponse result) {
response.set(result);
latch.countDown();
}
});
latch.await(5000, TimeUnit.MILLISECONDS);
Assert.assertNotNull(response.get());
// let it timeout before we read
Thread.sleep(5000);
final AtomicReference<Throwable> throwable = new AtomicReference<Throwable>();
final CountDownLatch errorLatch = new CountDownLatch(1);
Reader reader = new DrainReader() {
@Override
public void onError(Throwable ex) {
throwable.set(ex);
errorLatch.countDown();
}
};
response.get().getEntityStream().setReader(reader);
errorLatch.await(5000, TimeUnit.MILLISECONDS);
Assert.assertNotNull(throwable.get());
Throwable rootCause = ExceptionUtils.getRootCause(throwable.get());
Assert.assertTrue(rootCause instanceof TimeoutException);
Assert.assertEquals(rootCause.getMessage(), "Timeout while receiving the response entity.");
}
use of com.linkedin.r2.util.Timeout in project rest.li by linkedin.
the class TestDisruptor method testStreamErrorDisrupt.
@Test
public void testStreamErrorDisrupt() throws Exception {
final Map<String, String> properties = new HashMap<>();
properties.put(HttpClientFactory.HTTP_REQUEST_TIMEOUT, String.valueOf(REQUEST_TIMEOUT));
final TransportClientFactory factory = new HttpClientFactory.Builder().build();
final TransportClient client = factory.getClient(properties);
final RequestContext requestContext = new RequestContext();
requestContext.putLocalAttr(DISRUPT_CONTEXT_KEY, DisruptContexts.error(REQUEST_LATENCY));
final CountDownLatch latch = new CountDownLatch(1);
final AtomicBoolean success = new AtomicBoolean(false);
client.streamRequest(new StreamRequestBuilder(new URI(REQUEST_URI)).build(EntityStreams.emptyStream()), requestContext, new HashMap<>(), response -> {
success.set(response.hasError() && response.getError() instanceof DisruptedException);
latch.countDown();
});
Assert.assertTrue(latch.await(TEST_TIMEOUT, TimeUnit.MILLISECONDS), "Test execution timeout");
Assert.assertTrue(success.get(), "Unexpected transport response");
}
use of com.linkedin.r2.util.Timeout in project rest.li by linkedin.
the class TestDisruptor method testStreamNoDisrupt.
@Test
public void testStreamNoDisrupt() throws Exception {
final Map<String, String> properties = new HashMap<>();
final TransportClientFactory factory = new HttpClientFactory.Builder().build();
final TransportClient client = factory.getClient(properties);
final RequestContext requestContext = new RequestContext();
final CountDownLatch latch = new CountDownLatch(1);
final AtomicBoolean success = new AtomicBoolean(false);
client.streamRequest(new StreamRequestBuilder(new URI(REQUEST_URI)).build(EntityStreams.emptyStream()), requestContext, new HashMap<>(), response -> {
success.set(!response.hasError() && response.getResponse() != null);
latch.countDown();
});
Assert.assertTrue(latch.await(TEST_TIMEOUT, TimeUnit.MILLISECONDS), "Test execution timeout");
Assert.assertTrue(success.get(), "Unexpected transport response");
}
use of com.linkedin.r2.util.Timeout in project rest.li by linkedin.
the class TestDisruptor method testRestErrorDisrupt.
@Test
public void testRestErrorDisrupt() throws Exception {
final Map<String, String> properties = new HashMap<>();
properties.put(HttpClientFactory.HTTP_REQUEST_TIMEOUT, String.valueOf(REQUEST_TIMEOUT));
final TransportClientFactory factory = new HttpClientFactory.Builder().build();
final TransportClient client = factory.getClient(properties);
final RequestContext requestContext = new RequestContext();
requestContext.putLocalAttr(DISRUPT_CONTEXT_KEY, DisruptContexts.error(REQUEST_LATENCY));
final CountDownLatch latch = new CountDownLatch(1);
final AtomicBoolean success = new AtomicBoolean(false);
client.restRequest(new RestRequestBuilder(new URI(REQUEST_URI)).build(), requestContext, new HashMap<>(), response -> {
success.set(response.hasError() && response.getError() instanceof DisruptedException);
latch.countDown();
});
Assert.assertTrue(latch.await(TEST_TIMEOUT, TimeUnit.MILLISECONDS), "Test execution timeout");
Assert.assertTrue(success.get(), "Unexpected transport response");
}
Aggregations