public static ClassicHttpResponse make500Response() { return new BasicClassicHttpResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Internal Server Error"); }
private ClassicHttpResponse handleCacheMiss( final HttpHost target, final ClassicHttpRequest request, final ExecChain.Scope scope, final ExecChain chain) throws IOException, HttpException { recordCacheMiss(target, request); if (!mayCallBackend(request)) { return new BasicClassicHttpResponse(HttpStatus.SC_GATEWAY_TIMEOUT, "Gateway Timeout"); } final Map<String, Variant> variants = responseCache.getVariantCacheEntriesWithEtags(target, request); if (variants != null && !variants.isEmpty()) { return negotiateResponseFromVariants(target, request, scope, chain, variants); } return callBackend(target, request, scope, chain); }
private void testRequestIsWrittenThroughToOrigin(final ClassicHttpRequest req) throws Exception { final ClassicHttpResponse resp = new BasicClassicHttpResponse(HttpStatus.SC_NO_CONTENT, "No Content"); final ClassicHttpRequest wrapper = req; EasyMock.expect( mockExecChain.proceed( eqRequest(wrapper), EasyMock.isA(ExecChain.Scope.class))).andReturn(resp); replayMocks(); execute(wrapper); verifyMocks(); }
private 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.setEntity(makeBody(128)); return out; }
@Test public void testOrderOfMultipleAllowHeadersIsPreservedOnResponses() throws Exception { originResponse = new BasicClassicHttpResponse(405, "Method Not Allowed"); originResponse.addHeader("Allow", "HEAD"); originResponse.addHeader("Allow", "DELETE"); testOrderOfMultipleHeadersIsPreservedOnResponses("Allow"); }
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 testPassesOnOrigin405WithoutAllowHeader() throws Exception { originResponse = new BasicClassicHttpResponse(405, "Method Not Allowed"); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); final HttpResponse result = execute(request); verifyMocks(); Assert.assertSame(originResponse, result); }
@Test public void testPassesOnOrigin401ResponseWithoutWWWAuthenticateHeader() throws Exception { originResponse = new BasicClassicHttpResponse(401, "Unauthorized"); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); final HttpResponse result = execute(request); verifyMocks(); Assert.assertSame(originResponse, result); }
@Test public void testPassesOnOrigin407WithoutAProxyAuthenticateHeader() throws Exception { originResponse = new BasicClassicHttpResponse(407, "Proxy Authentication Required"); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); final HttpResponse result = execute(request); verifyMocks(); Assert.assertSame(originResponse, result); }
@Test public void test204ResponsesDoNotContainMessageBodies() throws Exception { originResponse = new BasicClassicHttpResponse(HttpStatus.SC_NO_CONTENT, "No Content"); originResponse.setEntity(HttpTestUtils.makeBody(entityLength)); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); }
@Test public void testDoesNotModifyContentRangeHeaderFromOriginResponseWithNoTransform() throws Exception { request.setHeader("If-Range","\"etag\""); request.setHeader("Range","bytes=0-49"); originResponse = new BasicClassicHttpResponse(206, "Partial Content"); originResponse.setEntity(HttpTestUtils.makeBody(50)); testDoesNotModifyHeaderFromOriginResponseWithNoTransform("Content-Range","bytes 0-49/128"); }
@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 testCallBackendMakesBackEndRequestAndHandlesResponse() throws Exception { mockImplMethods(GET_CURRENT_DATE, HANDLE_BACKEND_RESPONSE); final ClassicHttpResponse resp = new BasicClassicHttpResponse(HttpStatus.SC_OK, "OK"); getCurrentDateReturns(requestDate); backendExpectsRequestAndReturn(request, resp); getCurrentDateReturns(responseDate); handleBackendResponseReturnsResponse(request, resp); replayMocks(); impl.callBackend(host, request, scope, mockExecChain); verifyMocks(); }
@Test public void testCanCacheAResponseWithoutABody() throws Exception { final ClassicHttpResponse response = new BasicClassicHttpResponse(HttpStatus.SC_NO_CONTENT, "No Content"); response.setHeader("Date", DateUtils.formatDate(new Date())); response.setHeader("Cache-Control", "max-age=300"); final DummyBackend backend = new DummyBackend(); backend.setResponse(response); impl = createCachingExecChain(new BasicHttpCache(), CacheConfig.DEFAULT); impl.execute(request, new ExecChain.Scope("test", route, request, mockEndpoint, context), backend); impl.execute(request, new ExecChain.Scope("test", route, request, mockEndpoint, context), backend); assertEquals(1, backend.getExecutions()); }
@Test public void testSetsCacheMissContextIfRequestNotServableFromCache() throws Exception { impl = createCachingExecChain(new BasicHttpCache(), CacheConfig.DEFAULT); final ClassicHttpRequest req = new HttpGet("http://foo.example.com/"); req.setHeader("Cache-Control", "no-cache"); final ClassicHttpResponse resp = new BasicClassicHttpResponse(HttpStatus.SC_NO_CONTENT, "No Content"); backendExpectsAnyRequestAndReturn(resp); replayMocks(); execute(req); verifyMocks(); Assert.assertEquals(CacheResponseStatus.CACHE_MISS, context.getCacheResponseStatus()); }
@Test public void testSetsViaHeaderOnResponseIfRequestNotServableFromCache() throws Exception { impl = createCachingExecChain(new BasicHttpCache(), CacheConfig.DEFAULT); final ClassicHttpRequest req = new HttpGet("http://foo.example.com/"); req.setHeader("Cache-Control", "no-cache"); final ClassicHttpResponse resp = new BasicClassicHttpResponse(HttpStatus.SC_NO_CONTENT, "No Content"); backendExpectsAnyRequestAndReturn(resp); replayMocks(); final ClassicHttpResponse result = execute(req); verifyMocks(); Assert.assertNotNull(result.getFirstHeader("Via")); }
@Test public void responseToGetWithQueryFrom1_0OriginAndNoExpiresIsNotCached() throws Exception { final ClassicHttpRequest req2 = new HttpGet("http://foo.example.com/bar?baz=quux"); final ClassicHttpResponse resp2 = new BasicClassicHttpResponse(HttpStatus.SC_OK, "OK"); resp2.setVersion(HttpVersion.HTTP_1_0); resp2.setEntity(HttpTestUtils.makeBody(200)); resp2.setHeader("Content-Length","200"); resp2.setHeader("Date", DateUtils.formatDate(now)); backendExpectsAnyRequestAndReturn(resp2); replayMocks(); execute(req2); verifyMocks(); }
private void shouldStripEntityHeaderFromOrigin304ResponseToStrongValidation( final String entityHeader, final String entityHeaderValue) throws Exception { final ClassicHttpRequest req = HttpTestUtils.makeDefaultRequest(); req.setHeader("If-None-Match", "\"etag\""); final ClassicHttpResponse resp = new BasicClassicHttpResponse(HttpStatus.SC_NOT_MODIFIED, "Not Modified"); resp.setHeader("Date", DateUtils.formatDate(now)); resp.setHeader("Etag", "\"etag\""); resp.setHeader(entityHeader, entityHeaderValue); backendExpectsAnyRequestAndReturn(resp); replayMocks(); final ClassicHttpResponse result = execute(req); verifyMocks(); assertNull(result.getFirstHeader(entityHeader)); }
@Test public void responseToGetWithQueryFrom1_0OriginVia1_1ProxyAndNoExpiresIsNotCached() throws Exception { final ClassicHttpRequest req2 = new HttpGet("http://foo.example.com/bar?baz=quux"); final ClassicHttpResponse resp2 = new BasicClassicHttpResponse(HttpStatus.SC_OK, "OK"); resp2.setVersion(HttpVersion.HTTP_1_0); resp2.setEntity(HttpTestUtils.makeBody(200)); resp2.setHeader("Content-Length","200"); resp2.setHeader("Date", DateUtils.formatDate(now)); resp2.setHeader("Via","1.0 someproxy"); backendExpectsAnyRequestAndReturn(resp2); replayMocks(); execute(req2); verifyMocks(); }