use of io.servicetalk.transport.api.HostAndPort in project servicetalk by apple.
the class HttpProxyTest method testBuilderReuseEachClientUsesOwnProxy.
@Test
void testBuilderReuseEachClientUsesOwnProxy() throws Exception {
final SingleAddressHttpClientBuilder<HostAndPort, InetSocketAddress> builder = HttpClients.forSingleAddress(serverAddress);
final BlockingHttpClient client = builder.proxyAddress(proxyAddress).buildBlocking();
final HttpClient otherProxyClient = HttpClients.forMultiAddressUrl().build();
final AtomicInteger otherProxyRequestCount = new AtomicInteger();
try (ServerContext otherProxyContext = HttpServers.forAddress(localAddress(0)).listenAndAwait((ctx, request, responseFactory) -> {
otherProxyRequestCount.incrementAndGet();
return otherProxyClient.request(request);
});
BlockingHttpClient otherClient = builder.proxyAddress(serverHostAndPort(otherProxyContext)).appendConnectionFactoryFilter(new TargetAddressCheckConnectionFactoryFilter(targetAddress, false)).buildBlocking()) {
final HttpResponse httpResponse = otherClient.request(client.get("/path"));
assertThat(httpResponse.status(), is(OK));
assertThat(otherProxyRequestCount.get(), is(1));
assertThat(httpResponse.payloadBody().toString(US_ASCII), is("host: " + serverAddress));
}
final HttpResponse httpResponse = client.request(client.get("/path"));
assertThat(httpResponse.status(), is(OK));
assertThat(proxyRequestCount.get(), is(1));
assertThat(httpResponse.payloadBody().toString(US_ASCII), is("host: " + serverAddress));
assertThat(targetAddress.get(), is(equalTo(serverAddress.toString())));
}
use of io.servicetalk.transport.api.HostAndPort in project servicetalk by apple.
the class TrailersOnlyErrorTest method testServiceSingleThrows.
@Test
void testServiceSingleThrows() throws Exception {
final BlockingQueue<Throwable> asyncErrors = new LinkedBlockingDeque<>();
final TesterService service = mockTesterService();
setupServiceSingleThrows(service);
try (ServerContext serverContext = GrpcServers.forAddress(localAddress(0)).listenAndAwait(new Tester.ServiceFactory(service))) {
final GrpcClientBuilder<HostAndPort, InetSocketAddress> clientBuilder = GrpcClients.forAddress(serverHostAndPort(serverContext)).initializeHttp(builder -> builder.appendClientFilter(__ -> true, setupResponseVerifierFilter(asyncErrors)));
try (TesterClient client = clientBuilder.build(new Tester.ClientFactory())) {
verifyException(client.test(TestRequest.newBuilder().build()).toFuture(), UNKNOWN);
assertNoAsyncErrors(asyncErrors);
}
}
}
use of io.servicetalk.transport.api.HostAndPort in project servicetalk by apple.
the class TrailersOnlyErrorTest method testRouteThrows.
@Test
void testRouteThrows() throws Exception {
final BlockingQueue<Throwable> asyncErrors = new LinkedBlockingDeque<>();
try (ServerContext serverContext = GrpcServers.forAddress(localAddress(0)).listenAndAwait(new Tester.ServiceFactory(mockTesterService()))) {
final GrpcClientBuilder<HostAndPort, InetSocketAddress> clientBuilder = GrpcClients.forAddress(serverHostAndPort(serverContext)).initializeHttp(builder -> builder.appendClientFilter(__ -> true, setupResponseVerifierFilter(asyncErrors)));
// thus no route is found and it should result in UNIMPLEMENTED.
try (GreeterClient client = clientBuilder.build(new Greeter.ClientFactory())) {
verifyException(client.sayHello(HelloRequest.newBuilder().build()).toFuture(), UNIMPLEMENTED);
assertNoAsyncErrors(asyncErrors);
}
}
}
use of io.servicetalk.transport.api.HostAndPort in project servicetalk by apple.
the class TrailersOnlyErrorTest method testServiceFilterThrows.
@Test
void testServiceFilterThrows() throws Exception {
final BlockingQueue<Throwable> asyncErrors = new LinkedBlockingDeque<>();
final TesterService service = mockTesterService();
final GrpcServerBuilder serverBuilder = GrpcServers.forAddress(localAddress(0)).initializeHttp(builder -> builder.appendServiceFilter(svc -> new StreamingHttpServiceFilter(svc) {
@Override
public Single<StreamingHttpResponse> handle(final HttpServiceContext ctx, final StreamingHttpRequest request, final StreamingHttpResponseFactory responseFactory) {
throw DELIBERATE_EXCEPTION;
}
}));
try (ServerContext serverContext = serverBuilder.listenAndAwait(new Tester.ServiceFactory(service))) {
final GrpcClientBuilder<HostAndPort, InetSocketAddress> clientBuilder = GrpcClients.forAddress(serverHostAndPort(serverContext)).initializeHttp(builder -> builder.appendClientFilter(__ -> true, setupResponseVerifierFilter(asyncErrors)));
try (TesterClient client = clientBuilder.build(new Tester.ClientFactory())) {
verifyException(client.test(TestRequest.newBuilder().build()).toFuture(), UNKNOWN);
assertNoAsyncErrors(asyncErrors);
verifyException(client.testRequestStream(Publisher.from(TestRequest.newBuilder().build())).toFuture(), UNKNOWN);
assertNoAsyncErrors(asyncErrors);
verifyException(client.testResponseStream(TestRequest.newBuilder().build()).toFuture(), UNKNOWN);
assertNoAsyncErrors(asyncErrors);
verifyException(client.testBiDiStream(from(TestRequest.newBuilder().build()).concat(never())).toFuture(), UNKNOWN);
assertNoAsyncErrors(asyncErrors);
verifyException(client.testBiDiStream(from(TestRequest.newBuilder().build())).toFuture(), UNKNOWN);
assertNoAsyncErrors(asyncErrors);
}
}
}
use of io.servicetalk.transport.api.HostAndPort in project servicetalk by apple.
the class AbstractJerseyStreamingHttpServiceTest method setUp.
protected void setUp(final RouterApi api) throws Exception {
this.api = api;
HttpServerBuilder serverBuilder = HttpServers.forAddress(localAddress(0));
HttpJerseyRouterBuilder routerBuilder = new HttpJerseyRouterBuilder();
configureBuilders(serverBuilder, routerBuilder);
DefaultJerseyStreamingHttpRouter router = routerBuilder.from(application());
final Configuration config = router.configuration();
streamingJsonEnabled = getValue(config.getProperties(), config.getRuntimeType(), JSON_FEATURE, "", String.class).toLowerCase().contains("servicetalk");
HttpServerBuilder httpServerBuilder = serverBuilder.ioExecutor(serverCtx.ioExecutor()).bufferAllocator(serverCtx.bufferAllocator());
switch(api) {
case ASYNC_AGGREGATED:
serverContext = buildRouter(httpServerBuilder, toAggregated(router));
break;
case ASYNC_STREAMING:
serverContext = buildRouter(httpServerBuilder, router);
break;
case BLOCKING_AGGREGATED:
serverContext = buildRouter(httpServerBuilder, toBlocking(router));
break;
case BLOCKING_STREAMING:
serverContext = buildRouter(httpServerBuilder, toBlockingStreaming(router));
break;
default:
throw new IllegalArgumentException(api.name());
}
final HostAndPort hostAndPort = serverHostAndPort(serverContext);
httpClient = HttpClients.forSingleAddress(hostAndPort).buildStreaming();
hostHeader = hostHeader(hostAndPort);
}
Aggregations