private void writeClientRequest(ChannelHandlerContext ctx, Client client, Request request) { Optional<ChannelFuture> optionalFuture = client.write(request); optionalFuture.ifPresent( channelFuture ->
@Test public void testConnectinFailed() throws Exception { when(connectionManager.connectionState()).thenReturn(ClientConnectionState.CLOSED_CONNECTION); Request request1 = requestFactory("req1"); Optional<ChannelFuture> result1Future = subject.write(request1); assertFalse(result1Future.isPresent()); } }
@Test public void testAlreadyConnectedWrites() throws Exception { when(connectionManager.connectionState()).thenReturn(ClientConnectionState.CONNECTED); Request request1 = requestFactory("req1"); Request request2 = requestFactory("req2"); Optional<ChannelFuture> result1Future = subject.write(request1); Optional<ChannelFuture> result2Future = subject.write(request2); Request proxiedRequest1 = channel.readOutbound(); Request proxiedRequest2 = channel.readOutbound(); assertEquals(proxiedRequest1.path(), request1.path()); assertEquals(proxiedRequest2.path(), request2.path()); assertTrue(result1Future.get().isDone() && result1Future.get().isSuccess()); assertTrue(result2Future.get().isDone() && result2Future.get().isSuccess()); }
@Test public void testInitialConnectedWrites() throws Exception { ChannelPromise connectPromise = channel.newPromise(); when(connectionManager.connectionState()).thenReturn(ClientConnectionState.NOT_CONNECTED); when(connectionManager.connect()).thenReturn(connectPromise); Request request1 = requestFactory("req1"); Optional<ChannelFuture> result1Future = subject.write(request1); verify(connectionManager).connect(); Request proxiedRequest1BeforeConnection = channel.readOutbound(); assertNull(proxiedRequest1BeforeConnection); connectPromise.setSuccess(); Request proxiedRequest1AfterConnectionComplete = channel.readOutbound(); assertEquals(proxiedRequest1AfterConnectionComplete.path(), request1.path()); assertTrue(result1Future.get().isDone() && result1Future.get().isSuccess()); }
@Test public void testConnectionInProcessWrites() throws Exception { ChannelPromise connectPromise = channel.newPromise(); when(connectionManager.connectionState()).thenReturn(ClientConnectionState.NOT_CONNECTED); when(connectionManager.connect()).thenReturn(connectPromise); Request request1 = requestFactory("req1"); Request request2 = requestFactory("req2"); Request request3 = requestFactory("req3"); Optional<ChannelFuture> result1Future = subject.write(request1); when(connectionManager.connectionState()).thenReturn(ClientConnectionState.CONNECTING); Optional<ChannelFuture> result2Future = subject.write(request2); Optional<ChannelFuture> result3Future = subject.write(request3); // shouldn't get anything written on the channel at all Request proxiedRequest1BeforeConnection = channel.readOutbound(); assertNull(proxiedRequest1BeforeConnection); connectPromise.setSuccess(); Request proxiedRequest1AfterConnectionComplete = channel.readOutbound(); Request proxiedRequest2AfterConnectionComplete = channel.readOutbound(); Request proxiedRequest3AfterConnectionComplete = channel.readOutbound(); assertEquals(proxiedRequest1AfterConnectionComplete.path(), request1.path()); assertEquals(proxiedRequest2AfterConnectionComplete.path(), request2.path()); assertEquals(proxiedRequest3AfterConnectionComplete.path(), request3.path()); assertTrue(result1Future.get().isDone() && result1Future.get().isSuccess()); assertTrue(result2Future.get().isDone() && result2Future.get().isSuccess()); assertTrue(result3Future.get().isDone() && result3Future.get().isSuccess()); }
@Test public void testOutBoundAndInboundSpan() throws Exception { TracingConfig tracingConfig = new TracingConfig( "tracingHandlerClientIntegrationTest", config().getConfig("settings.tracing")); val client = newClient(new FakeTracer(tracingConfig)); val request = DefaultSegmentedRequest.builder() .method(GET) .path("/v1/authinit") .host("127.0.0.1" + ":" + server.getPort()) .build(); client.write(request); // We wait on the local future because this signals the full roundtrip between outbound and // return trip from the Application Handler out and then back in. local.get(); assertEquals(reportedSpans.size(), 1); val responseHex = ByteBufUtil.hexDump(((SegmentedData) response).content()); byte[] bytes = Hex.decodeHex(responseHex.toCharArray()); assertEquals(expectedResponse, new String(bytes, "UTF-8")); } }