From ee8a177b66882ef02b2c5545537e02d20b7b6282 Mon Sep 17 00:00:00 2001 From: Tomas Celaya Date: Mon, 31 Jul 2017 15:40:21 -0700 Subject: [PATCH 2/2] ServiceUnavailableRetryExec test case for verifying that first response is returned when HttpEntity#isRepeatable returns false --- .../execchain/TestServiceUnavailableRetryExec.java | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/httpclient/src/test/java/org/apache/http/impl/execchain/TestServiceUnavailableRetryExec.java b/httpclient/src/test/java/org/apache/http/impl/execchain/TestServiceUnavailableRetryExec.java index 8356b6fe..bd4f27b7 100644 --- a/httpclient/src/test/java/org/apache/http/impl/execchain/TestServiceUnavailableRetryExec.java +++ b/httpclient/src/test/java/org/apache/http/impl/execchain/TestServiceUnavailableRetryExec.java @@ -26,12 +26,14 @@ */ package org.apache.http.impl.execchain; +import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.client.ServiceUnavailableRetryStrategy; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpExecutionAware; import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpRequestWrapper; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.conn.routing.HttpRoute; @@ -115,4 +117,34 @@ public class TestServiceUnavailableRetryExec { throw ex; } } + + @Test + public void testNonRepeatableEntityResponseReturnedImmediately() throws Exception { + final HttpRoute route = new HttpRoute(target); + + final HttpEntity entity = Mockito.mock(HttpEntity.class); + Mockito.when(entity.isRepeatable()).thenReturn(Boolean.FALSE); + + final HttpPut put = new HttpPut("/test"); + put.setEntity(entity); + + final HttpRequestWrapper request = HttpRequestWrapper.wrap(put); + final HttpClientContext context = HttpClientContext.create(); + final CloseableHttpResponse response = Mockito.mock(CloseableHttpResponse.class); + + Mockito.when(requestExecutor.execute( + Mockito.eq(route), + Mockito.any(), + Mockito.any(), + Mockito.any())).thenReturn(response); + + Mockito.when(retryStrategy.retryRequest( + Mockito.any(), + Mockito.anyInt(), + Mockito.any())).thenReturn(Boolean.TRUE, Boolean.FALSE); + + retryExec.execute(route, request, context, execAware); + + Mockito.verify(response, Mockito.times(0)).close(); + } } -- 2.13.0