use of com.palantir.dialogue.EndpointChannel in project dialogue by palantir.
the class RetryingChannelTest method final_exhausted_failure_response_body_is_not_closed.
@Test
public void final_exhausted_failure_response_body_is_not_closed() throws Exception {
TestResponse response1 = new TestResponse().code(503);
TestResponse response2 = new TestResponse().code(503);
TestResponse response3 = new TestResponse().code(503);
when(channel.execute(any())).thenReturn(Futures.immediateFuture(response1)).thenReturn(Futures.immediateFuture(response2)).thenReturn(Futures.immediateFuture(response3));
EndpointChannel retryer = new RetryingChannel(channel, TestEndpoint.POST, "my-channel", 2, Duration.ZERO, ClientConfiguration.ServerQoS.AUTOMATIC_RETRY, ClientConfiguration.RetryOnTimeout.DISABLED);
ListenableFuture<Response> response = retryer.execute(REQUEST);
assertThat(response.get(1, TimeUnit.SECONDS).code()).isEqualTo(503);
assertThat(response1.isClosed()).isTrue();
assertThat(response2.isClosed()).isTrue();
assertThat(response3.isClosed()).describedAs("The last response must be left open so we can read the body" + " and deserialize it into a structured error").isFalse();
}
use of com.palantir.dialogue.EndpointChannel in project dialogue by palantir.
the class RetryingChannelTest method testRetriesUpToMaxRetries.
@Test
public void testRetriesUpToMaxRetries() throws ExecutionException, InterruptedException {
when(channel.execute(any())).thenReturn(FAILED).thenReturn(SUCCESS);
// One retry allows an initial request (not a retry) and a single retry.
EndpointChannel retryer = new RetryingChannel(channel, TestEndpoint.POST, "my-channel", 1, Duration.ZERO, ClientConfiguration.ServerQoS.AUTOMATIC_RETRY, ClientConfiguration.RetryOnTimeout.DISABLED);
ListenableFuture<Response> response = retryer.execute(REQUEST);
assertThat(response).isDone();
assertThat(response.get()).isEqualTo(EXPECTED_RESPONSE);
}
use of com.palantir.dialogue.EndpointChannel in project dialogue by palantir.
the class RetryingChannelTest method retriesSocketTimeout_connectionTimeout.
@Test
public void retriesSocketTimeout_connectionTimeout() throws ExecutionException, InterruptedException {
when(channel.execute(any())).thenReturn(Futures.immediateFailedFuture(new SocketTimeoutException("connect timed out"))).thenReturn(SUCCESS);
EndpointChannel retryer = new RetryingChannel(channel, TestEndpoint.POST, "my-channel", 1, Duration.ZERO, ClientConfiguration.ServerQoS.AUTOMATIC_RETRY, ClientConfiguration.RetryOnTimeout.DISABLED);
ListenableFuture<Response> response = retryer.execute(REQUEST);
assertThat(response.get()).isEqualTo(EXPECTED_RESPONSE);
}
use of com.palantir.dialogue.EndpointChannel in project dialogue by palantir.
the class RetryingChannelTest method testRetriesMax.
@Test
public void testRetriesMax() {
when(channel.execute(any())).thenReturn(FAILED);
EndpointChannel retryer = new RetryingChannel(channel, TestEndpoint.POST, "my-channel", 3, Duration.ZERO, ClientConfiguration.ServerQoS.AUTOMATIC_RETRY, ClientConfiguration.RetryOnTimeout.DISABLED);
ListenableFuture<Response> response = retryer.execute(REQUEST);
assertThatThrownBy(response::get).hasCauseInstanceOf(SafeIoException.class);
verify(channel, times(4)).execute(REQUEST);
}
use of com.palantir.dialogue.EndpointChannel in project dialogue by palantir.
the class RetryingChannelTest method response_bodies_are_closed.
@Test
public void response_bodies_are_closed() throws Exception {
Response response1 = mockResponse(503);
Response response2 = mockResponse(503);
Response eventualSuccess = mockResponse(200);
when(channel.execute(any())).thenReturn(Futures.immediateFuture(response1)).thenReturn(Futures.immediateFuture(response2)).thenReturn(Futures.immediateFuture(eventualSuccess));
EndpointChannel retryer = new RetryingChannel(channel, TestEndpoint.POST, "my-channel", 3, Duration.ZERO, ClientConfiguration.ServerQoS.AUTOMATIC_RETRY, ClientConfiguration.RetryOnTimeout.DISABLED);
ListenableFuture<Response> response = retryer.execute(REQUEST);
assertThat(response.get(1, TimeUnit.SECONDS).code()).isEqualTo(200);
verify(response1, times(1)).close();
verify(response2, times(1)).close();
}
Aggregations