Index: src/test/java/org/apache/http/impl/client/cache/TestCachingExec.java =================================================================== --- src/test/java/org/apache/http/impl/client/cache/TestCachingExec.java (revision 1420574) +++ src/test/java/org/apache/http/impl/client/cache/TestCachingExec.java (working copy) @@ -42,6 +42,7 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Date; @@ -74,6 +75,7 @@ import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHttpRequest; import org.apache.http.message.BasicHttpResponse; +import org.apache.http.util.EntityUtils; import org.easymock.Capture; import org.easymock.IExpectationSetters; import org.easymock.classextension.EasyMock; @@ -1526,7 +1528,36 @@ impl.execute(route, request); assertEquals(1, backend.getExecutions()); } + + @Test + public void testNoEntityForIfNoneMatchRequestNotYetInCache() + throws Exception { + Date now = new Date(); + Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); + + impl = new CachingExec(mockBackend, new BasicHttpCache(), CacheConfig.DEFAULT); + HttpRequestWrapper req1 = HttpRequestWrapper.wrap(new HttpGet("http://foo.example.com/")); + req1.addHeader("If-None-Match", "\"etag\""); + + HttpResponse resp1 = new BasicHttpResponse(HttpVersion.HTTP_1_1, + HttpStatus.SC_NOT_MODIFIED, "Not modified"); + resp1.setHeader("Content-Length", "128"); + resp1.setHeader("ETag", "\"etag\""); + resp1.setHeader("Date", DateUtils.formatDate(tenSecondsAgo)); + resp1.setHeader("Cache-Control", "public, max-age=5"); + + + backendExpectsAnyRequestAndReturn(resp1); + replayMocks(); + HttpResponse result = impl.execute(route, req1); + verifyMocks(); + + if (result.getEntity() != null) + result.getEntity().writeTo(new ByteArrayOutputStream()); + } + + private IExpectationSetters backendExpectsAnyRequestAndReturn( HttpResponse response) throws Exception { CloseableHttpResponse resp = mockBackend.execute(