static boolean responseAndEntryEtagsDiffer(final HttpResponse response, final HttpCacheEntry entry) { final Header entryEtag = entry.getFirstHeader(HeaderConstants.ETAG); final Header responseEtag = response.getFirstHeader(HeaderConstants.ETAG); if (entryEtag == null || responseEtag == null) { return false; } return (!entryEtag.getValue().equals(responseEtag.getValue())); }
private boolean hasValidDateField(final HttpRequest request, final String headerName) { for(final Header h : request.getHeaders(headerName)) { final Date date = DateUtils.parseDate(h.getValue()); return date != null; } return false; } }
private void requestDidNotExpect100ContinueButResponseIsOne( final HttpRequest originalRequest, final HttpResponse response) throws IOException { if (response.getCode() != HttpStatus.SC_CONTINUE) { return; } final Header header = originalRequest.getFirstHeader(HttpHeaders.EXPECT); if (header != null && header.getValue().equalsIgnoreCase(HeaderElements.CONTINUE)) { return; } throw new ClientProtocolException(UNEXPECTED_100_CONTINUE); }
private void headersNotContain(final Header[] headers, final String name, final String value) { for (final Header header : headers) { if (header.getName().equals(name)) { if (header.getValue().equals(value)) { fail("Header [" + name + ": " + value + "] found in headers where it should not be"); } } } } }
private void headersContain(final Header[] headers, final String name, final String value) { for (final Header header : headers) { if (header.getName().equals(name)) { if (header.getValue().equals(value)) { return; } } } fail("Header [" + name + ": " + value + "] not found in headers."); }
@Test public void testResponseHasContentLength() throws Exception { final byte[] buf = new byte[] { 1, 2, 3, 4, 5 }; final HttpCacheEntry entry1 = HttpTestUtils.makeCacheEntry(buf); final SimpleHttpResponse response = impl.generateResponse(request, entry1); final Header length = response.getFirstHeader("Content-Length"); Assert.assertNotNull("Content-Length Header is missing", length); Assert.assertEquals("Content-Length does not match buffer length", buf.length, Integer .parseInt(length.getValue())); }
@Test public void testAgeHeaderIsPopulatedWithCurrentAgeOfCacheEntryIfNonZero() throws Exception { currentAge(10L); final SimpleHttpResponse response = impl.generateResponse(request, entry); verify(mockValidityPolicy).getCurrentAgeSecs(same(entry), isA(Date.class)); final Header ageHdr = response.getFirstHeader("Age"); Assert.assertNotNull(ageHdr); Assert.assertEquals(10L, Long.parseLong(ageHdr.getValue())); }
private void testDoesNotModifyHeaderOnResponses(final String headerName) throws Exception { final String headerValue = HttpTestUtils .getCanonicalHeaderValue(originResponse, headerName); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); assertEquals(headerValue, result.getFirstHeader(headerName).getValue()); }
@Test public void testBuildUnconditionalRequestCarriesOtherRequestHeaders() throws Exception { request.addHeader("User-Agent","MyBrowser/1.0"); final HttpRequest result = impl.buildUnconditionalRequest(request); Assert.assertEquals("MyBrowser/1.0", result.getFirstHeader("User-Agent").getValue()); }
@Test public void testAgeHeaderIsPopulatedWithMaxAgeIfCurrentAgeTooBig() throws Exception { currentAge(CacheValidityPolicy.MAX_AGE + 1L); final SimpleHttpResponse response = impl.generateResponse(request, entry); verify(mockValidityPolicy).getCurrentAgeSecs(same(entry), isA(Date.class)); final Header ageHdr = response.getFirstHeader("Age"); Assert.assertNotNull(ageHdr); Assert.assertEquals(CacheValidityPolicy.MAX_AGE, Long.parseLong(ageHdr.getValue())); }
private void testDoesNotModifyHeaderFromOrigin(final String header, final String value) throws Exception { originResponse = HttpTestUtils.make200Response(); originResponse.setHeader(header, value); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); Assert.assertEquals(value, result.getFirstHeader(header).getValue()); }
@Test public void testTransmitsAgeHeaderIfIncomingAgeHeaderTooBig() throws Exception { final String reallyOldAge = "1" + Long.MAX_VALUE; originResponse.setHeader("Age",reallyOldAge); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); Assert.assertEquals("2147483648", result.getFirstHeader("Age").getValue()); }
private void testDoesNotModifyHeaderFromOriginResponseWithNoTransform(final String header, final String value) throws Exception { originResponse.addHeader("Cache-Control","no-transform"); originResponse.setHeader(header, value); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); Assert.assertEquals(value, result.getFirstHeader(header).getValue()); }
@Test public void testRetainsWarningHeadersReceivedFromUpstream() throws Exception { originResponse.removeHeaders("Warning"); final String warning = "199 fred \"misc\""; originResponse.addHeader("Warning", warning); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); Assert.assertEquals(warning, result.getFirstHeader("Warning").getValue()); }
@Test public void stripsMaxAgeFromRequestIfNoCachePresent() throws Exception { final HttpRequest req = new BasicHttpRequest("GET", "/"); req.setHeader("Cache-Control", "no-cache, max-age=10"); final HttpRequest wrapper = RequestCopier.INSTANCE.copy(req); impl.makeRequestCompliant(wrapper); assertEquals("no-cache", wrapper.getFirstHeader("Cache-Control").getValue()); }
@Test public void testGetFirstHeaderReturnsCorrectHeader() { final Header[] headers = { new BasicHeader("foo", "fooValue"), new BasicHeader("bar", "barValue1"), new BasicHeader("bar", "barValue2") }; entry = makeEntry(headers); assertEquals("barValue1", entry.getFirstHeader("bar").getValue()); }
@Test public void correctlyStripsMinFreshFromMiddleIfNoCache() throws Exception { final HttpRequest req = new BasicHttpRequest("GET", "/"); req.setHeader("Cache-Control", "no-cache,min-fresh=10,no-store"); final HttpRequest wrapper = RequestCopier.INSTANCE.copy(req); impl.makeRequestCompliant(wrapper); assertEquals("no-cache,no-store", wrapper.getFirstHeader("Cache-Control").getValue()); }
@Test public void stripsMinFreshFromRequestIfNoCachePresent() throws Exception { final HttpRequest req = new BasicHttpRequest("GET", "/"); req.setHeader("Cache-Control", "no-cache, min-fresh=10"); final HttpRequest wrapper = RequestCopier.INSTANCE.copy(req); impl.makeRequestCompliant(wrapper); assertEquals("no-cache", wrapper.getFirstHeader("Cache-Control").getValue()); }
@Test public void stripsMaxFreshFromRequestIfNoCachePresent() throws Exception { final HttpRequest req = new BasicHttpRequest("GET", "/"); req.setHeader("Cache-Control", "no-cache, max-stale=10"); final HttpRequest wrapper = RequestCopier.INSTANCE.copy(req); impl.makeRequestCompliant(wrapper); assertEquals("no-cache", wrapper.getFirstHeader("Cache-Control").getValue()); }
private void testDoesNotModifyHeaderOnCachedResponseWithNoTransform(final String header, final String value) throws Exception { final ClassicHttpRequest req1 = new BasicClassicHttpRequest("GET", "/"); final ClassicHttpRequest req2 = new BasicClassicHttpRequest("GET", "/"); originResponse.addHeader("Cache-Control","max-age=3600, no-transform"); originResponse.setHeader(header, value); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); execute(req1); final ClassicHttpResponse result = execute(req2); verifyMocks(); Assert.assertEquals(value, result.getFirstHeader(header).getValue()); }