public static Header[] getStockHeaders(final Date when) { final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(when)), new BasicHeader("Server", "MockServer/1.0") }; return headers; }
@Test public void testGetFirstHeaderReturnsNullIfNoneMatch() { final Header[] headers = { new BasicHeader("foo", "fooValue"), new BasicHeader("bar", "barValue1"), new BasicHeader("bar", "barValue2") }; entry = makeEntry(headers); assertEquals(null, entry.getFirstHeader("quux")); }
@Test public void testGetHeadersReturnsCorrectHeaders() { final Header[] headers = { new BasicHeader("foo", "fooValue"), new BasicHeader("bar", "barValue1"), new BasicHeader("bar", "barValue2") }; entry = makeEntry(headers); assertEquals(2, entry.getHeaders("bar").length); }
@Test public void testGetHeadersReturnsEmptyArrayIfNoneMatch() { final Header[] headers = { new BasicHeader("foo", "fooValue"), new BasicHeader("bar", "barValue1"), new BasicHeader("bar", "barValue2") }; entry = makeEntry(headers); assertEquals(0, entry.getHeaders("baz").length); }
@Test public void testGetMethodReturnsCorrectRequestMethod() { final Header[] headers = { new BasicHeader("foo", "fooValue"), new BasicHeader("bar", "barValue1"), new BasicHeader("bar", "barValue2") }; entry = makeEntry(headers); assertEquals(HeaderConstants.GET_METHOD, entry.getRequestMethod()); } }
@Test public void testMalformedCacheControlMaxAgeRequestHeaderCausesUnsuitableEntry() { request.addHeader(new BasicHeader("Cache-Control", "max-age=foo")); final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=3600"), new BasicHeader("Content-Length","128") }; entry = getEntry(headers); Assert.assertFalse(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testMalformedCacheControlMinFreshRequestHeaderCausesUnsuitableEntry() { request.addHeader(new BasicHeader("Cache-Control", "min-fresh=foo")); final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=3600"), new BasicHeader("Content-Length","128") }; entry = getEntry(headers); Assert.assertFalse(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@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 testNotSuitableIfContentLengthHeaderIsWrong() { final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=3600"), new BasicHeader("Content-Length","1") }; entry = getEntry(headers); Assert.assertFalse(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testSuitableIfCacheEntryIsFresh() { final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=3600"), new BasicHeader("Content-Length","128") }; entry = getEntry(headers); Assert.assertTrue(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testNotSuitableIfCacheEntryIsNotFresh() { final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=5"), new BasicHeader("Content-Length","128") }; entry = getEntry(headers); Assert.assertFalse(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testNotSuitableIfRequestMethodIsGETAndEntryResourceIsNull() { final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=3600"), new BasicHeader("Content-Length","128") }; entry = HttpTestUtils.makeHeadCacheEntry(headers); Assert.assertFalse(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testFreshnessLifetimeIsMostRestrictiveOfMaxAgeAndSMaxAge() { Header[] headers = new Header[] { new BasicHeader("Cache-Control", "max-age=10"), new BasicHeader("Cache-Control", "s-maxage=20") }; HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertEquals(10, impl.getFreshnessLifetimeSecs(entry)); headers = new Header[] { new BasicHeader("Cache-Control", "max-age=20"), new BasicHeader("Cache-Control", "s-maxage=10") }; entry = HttpTestUtils.makeCacheEntry(headers); assertEquals(10, impl.getFreshnessLifetimeSecs(entry)); }
@Test public void testContentEncodingHeaderIsNotUpdatedByMerge() throws IOException { final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(requestDate)), new BasicHeader("ETag", "\"etag\""), new BasicHeader("Content-Encoding", "identity")}; entry = HttpTestUtils.makeCacheEntry(headers); response.setHeaders(new BasicHeader("Last-Modified", DateUtils.formatDate(responseDate)), new BasicHeader("Cache-Control", "public"), new BasicHeader("Content-Encoding", "gzip")); final HttpCacheEntry updatedEntry = impl.updateCacheEntry(null, entry, new Date(), new Date(), response); final Header[] updatedHeaders = updatedEntry.getHeaders(); headersContain(updatedHeaders, "Content-Encoding", "identity"); headersNotContain(updatedHeaders, "Content-Encoding", "gzip"); }
private HttpCacheStorageEntry makeCacheEntryWithVariantMap(final String key) { final Header[] headers = new Header[5]; for (int i = 0; i < headers.length; i++) { headers[i] = new BasicHeader("header" + i, "value" + i); } final String body = "Lorem ipsum dolor sit amet"; final Map<String,String> variantMap = new HashMap<>(); variantMap.put("test variant 1","true"); variantMap.put("test variant 2","true"); final HttpCacheEntry cacheEntry = new HttpCacheEntry(new Date(), new Date(), HttpStatus.SC_OK, headers, new HeapResource(Base64.decodeBase64(body.getBytes(UTF8))), variantMap); return new HttpCacheStorageEntry(key, cacheEntry); }
@Test public void testSuitableEvenIfStaleButPermittedByRequestMaxStale() { request.addHeader("Cache-Control", "max-stale=10"); final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=5"), new BasicHeader("Content-Length","128") }; entry = getEntry(headers); Assert.assertTrue(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testCacheEntryIsRevalidatableIfHeadersIncludeETag() { final Header[] headers = { new BasicHeader("Expires", DateUtils.formatDate(new Date())), new BasicHeader("ETag", "somevalue")}; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertTrue(impl.isRevalidatable(entry)); }
@Test public void testMayReturnStaleWhileRevalidatingIsFalseWhenPastStaleness() { final Date twentyFiveSecondsAgo = new Date(now.getTime() - 25 * 1000L); final Header[] headers = new Header[] { new BasicHeader("Date", DateUtils.formatDate(twentyFiveSecondsAgo)), new BasicHeader("Cache-Control", "max-age=5, stale-while-revalidate=15") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(now, now, headers); assertFalse(impl.mayReturnStaleWhileRevalidating(entry, now)); }
@Test public void testSuitableIfFreshAndFreshnessLifetimeGreaterThanRequestMinFresh() { request.addHeader("Cache-Control", "min-fresh=10"); final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=3600"), new BasicHeader("Content-Length","128") }; entry = getEntry(headers); Assert.assertTrue(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testCacheEntryIsNotRevalidatableIfNoAppropriateHeaders() { final Header[] headers = { new BasicHeader("Expires", DateUtils.formatDate(new Date())), new BasicHeader("Cache-Control", "public") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertFalse(impl.isRevalidatable(entry)); }