use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestMockHttpServerFactory method testCreateUsingClassNames.
@Test
public void testCreateUsingClassNames() throws IOException, RemoteInvocationException {
Set<Class<?>> resourceClasses = new HashSet<>();
resourceClasses.add(PhotoResource.class);
resourceClasses.add(AlbumResource.class);
Map<String, Object> beans = getBeans();
boolean[] enableAsyncOptions = { true, false };
for (boolean enableAsync : enableAsyncOptions) {
HttpServer server = MockHttpServerFactory.create(PORT, resourceClasses, beans, enableAsync);
runTest(server);
}
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class RestRestLiServer method handleResourceRequestWithRestLiResponse.
protected void handleResourceRequestWithRestLiResponse(RestRequest request, RoutingResult routingResult, Callback<RestLiResponse> callback) {
DataMap entityDataMap = null;
if (request.getEntity() != null && request.getEntity().length() > 0) {
if (UnstructuredDataUtil.isUnstructuredDataRouting(routingResult)) {
callback.onError(buildPreRoutingError(new RoutingException("Unstructured Data is not supported in non-streaming Rest.li server", HttpStatus.S_400_BAD_REQUEST.getCode()), request));
return;
}
try {
final RequestContext requestContext = routingResult.getContext().getRawRequestContext();
TimingContextUtil.beginTiming(requestContext, FrameworkTimingKeys.SERVER_REQUEST_RESTLI_DESERIALIZATION.key());
entityDataMap = DataMapUtils.readMapWithExceptions(request);
TimingContextUtil.endTiming(requestContext, FrameworkTimingKeys.SERVER_REQUEST_RESTLI_DESERIALIZATION.key());
} catch (IOException e) {
callback.onError(buildPreRoutingError(new RoutingException("Cannot parse request entity", HttpStatus.S_400_BAD_REQUEST.getCode(), e), request));
return;
}
}
handleResourceRequest(request, routingResult, entityDataMap, callback);
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestAsyncMethodInvocationPlanClass method testMultiplexedAsyncGet.
@Test(dataProvider = "multiplexerConfigurations")
public void testMultiplexedAsyncGet(MultiplexerRunMode multiplexerRunMode) throws URISyntaxException, IOException, InterruptedException {
RestLiConfig config = new RestLiConfig();
config.addResourcePackageNames("com.linkedin.restli.server.multiplexer.resources");
config.setMultiplexerRunMode(multiplexerRunMode);
SettablePromise<Trace> traceHolder = Promises.settable();
Engine engine = engine(traceHolder);
RestLiServer server = new RestLiServer(config, resourceFactory(), engine);
IndividualRequest r0 = individualRequest("/users/0", null, Collections.<String, IndividualRequest>emptyMap());
IndividualRequest r1 = individualRequest("/users/1", null, Collections.<String, IndividualRequest>emptyMap());
IndividualRequest r2 = individualRequest("/users/2", null, ImmutableMap.of("0", r0, "1", r1));
// request is seq(par(r0, r1), r2)
RestRequest request = muxRestRequest(ImmutableMap.of("2", r2));
CountDownLatch latch = new CountDownLatch(1);
server.handleRequest(request, new RequestContext(), callback(latch));
assertTrue(latch.await(5, TimeUnit.SECONDS));
assertTrue(traceHolder.await(5, TimeUnit.SECONDS));
if (multiplexerRunMode == MultiplexerRunMode.SINGLE_PLAN) {
// For multiplexed requests in SINGLE_PLAN mode there is only one plan with class "mux"
assertEquals(traceHolder.get().getPlanClass(), "mux");
} else {
// For multiplexed requests in MULTIPLE_PLANS mode there are multiple plans, first one is with class "mux",
// following 3 are with class "resource=users,method=get", last one will have class "resource=users,method=get"
assertEquals(traceHolder.get().getPlanClass(), "resource=users,method=get");
}
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestAsyncMethodInvocationPlanClass method testAsyncGet.
@Test(dataProvider = "requestData")
public void testAsyncGet(String uri, String method, String expectedPlanClass) throws URISyntaxException, IOException, InterruptedException {
RestLiConfig config = new RestLiConfig();
config.addResourcePackageNames("com.linkedin.restli.server.multiplexer.resources");
SettablePromise<Trace> traceHolder = Promises.settable();
Engine engine = engine(traceHolder);
RestLiServer server = new RestLiServer(config, resourceFactory(), engine);
RestRequest request = new RestRequestBuilder(new URI(uri)).setMethod(method).setHeader(RestConstants.HEADER_RESTLI_PROTOCOL_VERSION, AllProtocolVersions.BASELINE_PROTOCOL_VERSION.toString()).build();
CountDownLatch latch = new CountDownLatch(1);
server.handleRequest(request, new RequestContext(), callback(latch));
assertTrue(latch.await(5, TimeUnit.SECONDS));
assertTrue(traceHolder.await(5, TimeUnit.SECONDS));
assertTrue(latch.await(5, TimeUnit.SECONDS));
assertTrue(traceHolder.await(5, TimeUnit.SECONDS));
assertEquals(traceHolder.get().getPlanClass(), expectedPlanClass);
}
use of com.linkedin.r2.transport.common.Server in project rest.li by linkedin.
the class TestRestLiServer method testValidUnstructuredDataRequestMissingHeader.
@Test(dataProvider = "validClientProtocolVersionDataStreamOnly")
public void testValidUnstructuredDataRequestMissingHeader(RestLiServer server, ProtocolVersion clientProtocolVersion, String headerConstant) throws URISyntaxException, IOException {
StreamRequest streamRequest = new StreamRequestBuilder(new URI("/feedDownloads/1")).setHeader(headerConstant, clientProtocolVersion.toString()).build(EntityStreams.emptyStream());
final FeedDownloadResource resource = getMockResource(FeedDownloadResource.class);
resource.get(eq(1L), anyObject(UnstructuredDataWriter.class));
EasyMock.expectLastCall().andDelegateTo(new FeedDownloadResource() {
@Override
public void get(Long key, UnstructuredDataWriter writer) {
// do nothing here, this should cause error
}
}).once();
replay(resource);
@SuppressWarnings("unchecked") Callback<StreamResponse> r2Callback = createMock(Callback.class);
r2Callback.onError(anyObject());
expectLastCall().once();
replay(r2Callback);
RequestContext requestContext = new RequestContext();
server.handleRequest(streamRequest, requestContext, r2Callback);
verify(resource);
verify(r2Callback);
}
Aggregations