use of com.spotify.apollo.route.AsyncHandler in project apollo by spotify.
the class EnvironmentFactoryTest method shouldThrowIfUsedAfterInit.
@Test
public void shouldThrowIfUsedAfterInit() throws Exception {
final EnvironmentFactory factory = sut.build();
final RoutingContext routingContext = factory.createRoutingContext();
final Environment environment = factory.create(SERVICE_NAME, routingContext);
final Route<AsyncHandler<Response<ByteString>>> route = Route.sync("GET", "/f1", handler());
environment.routingEngine().registerRoute(route);
final Iterable<Object> objects = routingContext.endpointObjects();
assertTrue(Iterables.contains(objects, route));
try {
environment.routingEngine().registerRoute(route);
fail("should throw");
} catch (Exception e) {
assertThat(e.getMessage(), containsString("already been initialized"));
}
}
use of com.spotify.apollo.route.AsyncHandler in project apollo by spotify.
the class EnvironmentFactoryTest method shouldCollectRegisteredRoutes.
@Test
public void shouldCollectRegisteredRoutes() throws Exception {
final EnvironmentFactory factory = sut.build();
final RoutingContext routingContext = factory.createRoutingContext();
final Environment environment = factory.create(SERVICE_NAME, routingContext);
final Route<AsyncHandler<Response<ByteString>>> route1 = Route.sync("GET", "/f1", handler());
final Route<AsyncHandler<Response<ByteString>>> route2 = Route.sync("GET", "/2", handler());
final Route<AsyncHandler<Response<ByteString>>> route3 = Route.sync("GET", "/3", handler());
environment.routingEngine().registerRoute(route1).registerRoute(route2);
environment.routingEngine().registerRoute(route3);
final Iterable<Object> objects = routingContext.endpointObjects();
assertTrue(Iterables.contains(objects, route1));
assertTrue(Iterables.contains(objects, route2));
assertTrue(Iterables.contains(objects, route3));
}
use of com.spotify.apollo.route.AsyncHandler in project apollo by spotify.
the class RouteTransformMetricsExampleTest method shouldTrackResponsePayloadSize.
@Test
public void shouldTrackResponsePayloadSize() throws Exception {
Route<AsyncHandler<Response<ByteString>>> testRoute = Route.sync("GET", "/foo/<name>", context -> Response.forPayload(ByteString.encodeUtf8(context.pathArgs().get("name"))));
Route<AsyncHandler<Response<ByteString>>> trackedRoute = withResponsePayloadSizeHistogram(testRoute);
RequestContext context = mock(RequestContext.class);
when(context.pathArgs()).thenReturn(Collections.singletonMap("name", "bar"));
trackedRoute.handler().invoke(context).toCompletableFuture().get();
assertThat(registry.getHistograms().keySet(), containsInAnyOrder(hasProperty("tags", allOf(hasEntry("service", "example"), hasEntry("what", "endpoint-response-size"), hasEntry("endpoint", "GET:/foo/<name>")))));
}
use of com.spotify.apollo.route.AsyncHandler in project apollo by spotify.
the class RouteTransformMetricsExampleTest method responsePayloadSizeHistogram.
/**
* Middleware to track response payload size in a Histogram,
* tagged with an endpoint tag set to the given endpoint name.
*/
public Middleware<AsyncHandler<Response<ByteString>>, AsyncHandler<Response<ByteString>>> responsePayloadSizeHistogram(String endpointName) {
final MetricId histogramId = MetricId.build().tagged("service", serviceName).tagged("endpoint", endpointName).tagged("what", "endpoint-response-size");
final Histogram histogram = registry.histogram(histogramId);
return (inner) -> (requestContext) -> inner.invoke(requestContext).whenComplete((response, t) -> {
if (response != null) {
histogram.update(response.payload().map(ByteString::size).orElse(0));
}
});
}
Aggregations