use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestRequestCompression method tearDown.
@Override
protected void tearDown(Client client, Server server) throws Exception {
for (Client compressionClient : _clients) {
final FutureCallback<None> clientShutdownCallback = new FutureCallback<>();
compressionClient.shutdown(clientShutdownCallback);
clientShutdownCallback.get();
}
super.tearDown(client, server);
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestServerTimeout method testServerThrowButShouldNotTimeout.
@Test
public void testServerThrowButShouldNotTimeout() throws Exception {
RestRequest request = new RestRequestBuilder(getHttpUri(THROW_BUT_SHOULD_NOT_TIMEOUT_URI)).setEntity(new byte[10240]).build();
_client.restRequest(request);
Future<RestResponse> futureResponse = _client.restRequest(request);
// if server times out, our second request would fail with TimeoutException because it's blocked by first one
try {
futureResponse.get(SERVER_IOHANDLER_TIMEOUT / 2, TimeUnit.MILLISECONDS);
Assert.fail("Should fail with ExecutionException");
} catch (ExecutionException ex) {
Assert.assertTrue(ex.getCause() instanceof RestException);
RestException restException = (RestException) ex.getCause();
Assert.assertTrue(restException.getResponse().getEntity().asString("UTF8").contains("Server throw for test."));
}
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestStreamResponse method testBackpressure.
@Test(groups = { "ci-flaky" })
public void testBackpressure() throws Exception {
StreamRequestBuilder builder = new StreamRequestBuilder(_clientProvider.createHttpURI(_port, SMALL_URI));
StreamRequest request = builder.build(EntityStreams.emptyStream());
final AtomicInteger status = new AtomicInteger(-1);
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<Throwable> error = new AtomicReference<>();
final Callback<None> readerCallback = getReaderCallback(latch, error);
final TimedBytesReader reader = new TimedBytesReader(BYTE, readerCallback) {
int count = 0;
@Override
protected void requestMore(final ReadHandle rh) {
count++;
if (count % 16 == 0) {
_scheduler.schedule(new Runnable() {
@Override
public void run() {
rh.request(1);
}
}, INTERVAL, TimeUnit.MILLISECONDS);
} else {
rh.request(1);
}
}
};
Callback<StreamResponse> callback = getCallback(status, readerCallback, reader);
_client.streamRequest(request, callback);
latch.await(60000, TimeUnit.MILLISECONDS);
Assert.assertNull(error.get());
Assert.assertEquals(status.get(), RestStatus.OK);
long serverSendTimespan = _smallHandler.getWriter().getStopTime() - _smallHandler.getWriter().getStartTime();
long clientReceiveTimespan = reader.getStopTime() - reader.getStartTime();
Assert.assertTrue(clientReceiveTimespan > 1000);
double diff = Math.abs(clientReceiveTimespan - serverSendTimespan);
double diffRatio = diff / serverSendTimespan;
// make it generous to reduce the chance occasional test failures
System.out.println("client=" + clientReceiveTimespan + " server=" + serverSendTimespan + " diff=" + diffRatio);
Assert.assertTrue(diffRatio < 0.2);
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestServerTimeoutAsyncEvent method testServerThrowButShouldNotTimeout.
@Test
public void testServerThrowButShouldNotTimeout() throws Exception {
RestRequest request = new RestRequestBuilder(getHttpUri(THROW_BUT_SHOULD_NOT_TIMEOUT_URI)).setEntity(new byte[10240]).build();
_client.restRequest(request);
Future<RestResponse> futureResponse = _client.restRequest(request);
// if server times out, our second request would fail with TimeoutException because it's blocked by first one
try {
futureResponse.get(ASYNC_EVENT_TIMEOUT / 2, TimeUnit.MILLISECONDS);
Assert.fail("Should fail with ExecutionException");
} catch (ExecutionException ex) {
Assert.assertTrue(ex.getCause() instanceof RestException);
RestException restException = (RestException) ex.getCause();
Assert.assertTrue(restException.getResponse().getEntity().asString("UTF8").contains("Server throw for test."));
}
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestServerTimeoutAsyncEvent method testFilterNotCancelButShouldNotTimeout.
@Test
public void testFilterNotCancelButShouldNotTimeout() throws Exception {
RestRequest request = new RestRequestBuilder(getHttpUri(STREAM_EXCEPTION_FILTER_URI)).setEntity(new byte[10240]).build();
_client.restRequest(request);
Future<RestResponse> futureResponse = _client.restRequest(request);
// if server times out, our second request would fail with TimeoutException because it's blocked by first one
try {
futureResponse.get(ASYNC_EVENT_TIMEOUT / 2, TimeUnit.MILLISECONDS);
Assert.fail("Should fail with ExecutionException");
} catch (ExecutionException ex) {
Assert.assertTrue(ex.getCause() instanceof RestException);
RestException restException = (RestException) ex.getCause();
Assert.assertTrue(restException.getResponse().getEntity().asString("UTF8").contains("StreamException in filter."));
}
}
Aggregations