public static final ClassicHttpResponse make200Response(final Date date, final String cacheControl) { final ClassicHttpResponse response = HttpTestUtils.make200Response(); response.setHeader("Date", DateUtils.formatDate(date)); response.setHeader("Cache-Control",cacheControl); response.setHeader("Etag","\"etag\""); return response; }
@Test public void testStaleEntryWithMustRevalidateIsNotUsedWithoutRevalidatingWithOrigin() throws Exception { final ClassicHttpResponse response = HttpTestUtils.make200Response(); final Date now = new Date(); final Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); response.setHeader("Date",DateUtils.formatDate(tenSecondsAgo)); response.setHeader("ETag","\"etag1\""); response.setHeader("Cache-Control","max-age=5, must-revalidate"); testStaleCacheResponseMustBeRevalidatedWithOrigin(response); }
@Test public void testGenerates504IfCannotRevalidateAMustRevalidateEntry() throws Exception { final ClassicHttpResponse resp1 = HttpTestUtils.make200Response(); final Date now = new Date(); final Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); resp1.setHeader("ETag","\"etag\""); resp1.setHeader("Date", DateUtils.formatDate(tenSecondsAgo)); resp1.setHeader("Cache-Control","max-age=5,must-revalidate"); testGenerates504IfCannotRevalidateStaleResponse(resp1); }
public static ClassicHttpResponse make200Response() { final ClassicHttpResponse out = new BasicClassicHttpResponse(HttpStatus.SC_OK, "OK"); out.setHeader("Date", DateUtils.formatDate(new Date())); out.setHeader("Server", "MockOrigin/1.0"); out.setHeader("Content-Length", "128"); out.setEntity(makeBody(128)); return out; }
@Test public void testSharedCacheMustNotNormallyCacheAuthorizedResponses() throws Exception { final ClassicHttpResponse resp = HttpTestUtils.make200Response(); resp.setHeader("Cache-Control","max-age=3600"); resp.setHeader("ETag","\"etag\""); testSharedCacheRevalidatesAuthorizedResponse(resp, 1, 1); }
@Test public void testSharedCacheMustRevalidateAuthorizedResponsesWhenSMaxAgeIsZero() throws Exception { final ClassicHttpResponse resp = HttpTestUtils.make200Response(); resp.setHeader("Cache-Control","s-maxage=0"); resp.setHeader("ETag","\"etag\""); testSharedCacheRevalidatesAuthorizedResponse(resp, 1, 1); }
@Test public void testSharedCacheMayCacheAuthorizedResponsesWithSMaxAgeHeader() throws Exception { final ClassicHttpResponse resp = HttpTestUtils.make200Response(); resp.setHeader("Cache-Control","s-maxage=3600"); resp.setHeader("ETag","\"etag\""); testSharedCacheRevalidatesAuthorizedResponse(resp, 0, 1); }
@Test public void testSharedCacheMayCacheAuthorizedResponsesWithMustRevalidate() throws Exception { final ClassicHttpResponse resp = HttpTestUtils.make200Response(); resp.setHeader("Cache-Control","must-revalidate"); resp.setHeader("ETag","\"etag\""); testSharedCacheRevalidatesAuthorizedResponse(resp, 0, 1); }
@Test public void testDoesNotModifyServerOnResponses() throws Exception { originResponse.setHeader("Server", "SomeServer/1.0"); testDoesNotModifyHeaderOnResponses("Server"); }
@Test public void testDoesNotModifyAcceptRangesOnResponses() throws Exception { final String headerName = "Accept-Ranges"; originResponse.setHeader(headerName,"bytes"); testDoesNotModifyHeaderOnResponses(headerName); }
@Test public void testDoesNotAddNewWarningHeaderIfResponseArrivesStale() throws Exception { originResponse.setHeader("Date", DateUtils.formatDate(tenSecondsAgo)); originResponse.setHeader("Cache-Control","public, max-age=5"); originResponse.setHeader("ETag","\"etag\""); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); assertNull(result.getFirstHeader("Warning")); }
@Test public void testDoesNotModifyVaryOnResponses() throws Exception { request.setHeader("Accept-Encoding","identity"); originResponse.setHeader("Vary", "Accept-Encoding"); testDoesNotModifyHeaderOnResponses("Vary"); }
@Test public void testSharedCacheMayCacheAuthorizedResponsesWithCacheControlPublic() throws Exception { final ClassicHttpResponse resp = HttpTestUtils.make200Response(); resp.setHeader("Cache-Control","public"); testSharedCacheRevalidatesAuthorizedResponse(resp, 0, 1); }
@Test public void testDoesNotModifyContentLengthOnResponses() throws Exception { originResponse.setEntity(HttpTestUtils.makeBody(128)); originResponse.setHeader("Content-Length","128"); testDoesNotModifyHeaderOnResponses("Content-Length"); }
@Test public void testDoesNotModifyLocationOnResponses() throws Exception { originResponse.setCode(HttpStatus.SC_TEMPORARY_REDIRECT); originResponse.setReasonPhrase("Temporary Redirect"); originResponse.setHeader("Location", "http://foo.example.com/bar"); testDoesNotModifyHeaderOnResponses("Location"); }
@Test public void testDoesNotModifyServerResponseHeader() throws Exception { final String server = "MockServer/1.0"; originResponse.setHeader("Server", server); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); Assert.assertEquals(server, result.getFirstHeader("Server").getValue()); }
@Test public void testMustIncludeAllowHeaderFromAnOrigin405Response() throws Exception { originResponse = new BasicClassicHttpResponse(405, "Method Not Allowed"); originResponse.setHeader("Allow", "GET, HEAD"); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); if (result.getCode() == 405) { Assert.assertNotNull(result.getFirstHeader("Allow")); } verifyMocks(); }
@Test public void test302ResponseWithoutExplicitCacheabilityIsNotReturnedFromCache() throws Exception { originResponse = new BasicClassicHttpResponse(302, "Temporary Redirect"); originResponse.setHeader("Location", "http://foo.example.com/other"); originResponse.removeHeaders("Expires"); originResponse.removeHeaders("Cache-Control"); backendExpectsAnyRequest().andReturn(originResponse).times(2); replayMocks(); execute(request); execute(request); verifyMocks(); }
@Test public void testSetsRequestSentInContextOnCacheHit() throws Exception { final DummyBackend backend = new DummyBackend(); final ClassicHttpResponse response = HttpTestUtils.make200Response(); response.setHeader("Cache-Control", "max-age=3600"); backend.setResponse(response); impl = createCachingExecChain(new BasicHttpCache(), CacheConfig.DEFAULT); final HttpClientContext ctx = HttpClientContext.create(); impl.execute(request, new ExecChain.Scope("test", route, request, mockEndpoint, context), backend); impl.execute(request, new ExecChain.Scope("test", route, request, mockEndpoint, ctx), backend); }
@Test public void testDoesNotSetConnectionInContextOnCacheHit() throws Exception { final DummyBackend backend = new DummyBackend(); final ClassicHttpResponse response = HttpTestUtils.make200Response(); response.setHeader("Cache-Control", "max-age=3600"); backend.setResponse(response); impl = createCachingExecChain(new BasicHttpCache(), CacheConfig.DEFAULT); final HttpClientContext ctx = HttpClientContext.create(); impl.execute(request, new ExecChain.Scope("test", route, request, mockEndpoint, context), backend); impl.execute(request, new ExecChain.Scope("test", route, request, mockEndpoint, ctx), backend); }