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 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 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 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)); }
@Test public void testMayReturnStaleWhileRevalidatingIsTrueWhenWithinStaleness() { final Header[] headers = new Header[] { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=5, stale-while-revalidate=15") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(now, now, headers); assertTrue(impl.mayReturnStaleWhileRevalidating(entry, now)); }
@Test public void testMayReturnStaleWhileRevalidatingIsFalseWhenDirectiveEmpty() { final Header[] headers = new Header[] { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=5, stale-while-revalidate=") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(now, now, headers); assertFalse(impl.mayReturnStaleWhileRevalidating(entry, now)); } }
@Test public void testSuitableForGETIfEntryDoesNotSpecifyARequestMethodButContainsEntity() { impl = new CachedResponseSuitabilityChecker(CacheConfig.custom().build()); final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Cache-Control", "max-age=3600"), new BasicHeader("Content-Length","128") }; entry = HttpTestUtils.makeCacheEntryWithNoRequestMethod(headers); Assert.assertTrue(impl.canCachedResponseBeUsed(host, request, entry, now)); }
@Test public void testFreshnessLifetimeIsFromExpiresHeaderIfNoMaxAge() { final Header[] headers = new Header[] { new BasicHeader("Date", DateUtils.formatDate(tenSecondsAgo)), new BasicHeader("Expires", DateUtils.formatDate(sixSecondsAgo)) }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertEquals(4, impl.getFreshnessLifetimeSecs(entry)); }
@Test public void testHeuristicFreshnessLifetimeIsNonNegative() { final Header[] headers = new Header[] { new BasicHeader("Date", DateUtils.formatDate(elevenSecondsAgo)), new BasicHeader("Last-Modified", DateUtils.formatDate(oneSecondAgo)) }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertTrue(impl.getHeuristicFreshnessLifetimeSecs(entry, 0.1f, 10) >= 0); }
@Test public void testHeuristicFreshnessLifetime() { final Header[] headers = new Header[] { new BasicHeader("Date", DateUtils.formatDate(oneSecondAgo)), new BasicHeader("Last-Modified", DateUtils.formatDate(elevenSecondsAgo)) }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertEquals(1, impl.getHeuristicFreshnessLifetimeSecs(entry, 0.1f, 0)); }
@Test public void testNullResourceInvalidatesEntry() { final int contentLength = 128; final Header[] headers = {new BasicHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(contentLength))}; final HttpCacheEntry entry = HttpTestUtils.makeHeadCacheEntry(headers); assertFalse(impl.contentLengthHeaderMatchesActualLength(entry)); }
@Test public void testHeadersAreMergedCorrectly() throws IOException { final Header[] headers = { new BasicHeader("Date", DateUtils.formatDate(responseDate)), new BasicHeader("ETag", "\"etag\"")}; entry = HttpTestUtils.makeCacheEntry(headers); response.setHeaders(); final HttpCacheEntry updatedEntry = impl.updateCacheEntry(null, entry, new Date(), new Date(), response); assertThat(updatedEntry, ContainsHeaderMatcher.contains("Date", DateUtils.formatDate(responseDate))); assertThat(updatedEntry, ContainsHeaderMatcher.contains("ETag", "\"etag\"")); }
@Test public void testApparentAgeIsMaxIntIfDateHeaderNotPresent() { final Header[] headers = { new BasicHeader("Server", "MockServer/1.0") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertEquals(2147483648L, impl.getApparentAgeSecs(entry)); }
@Test public void testFreshnessLifetimeIsMaxAgeIfPresent() { final Header[] headers = new Header[] { new BasicHeader("Cache-Control", "max-age=10") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertEquals(10, impl.getFreshnessLifetimeSecs(entry)); }
@Test public void testMalformedAgeHeaderValueReturnsMaxAge() { final Header[] headers = new Header[] { new BasicHeader("Age", "asdf") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertEquals(CacheValidityPolicy.MAX_AGE, impl.getAgeValue(entry)); }
@Test public void testProxyRevalidateIsFalseIfDirectiveNotPresent() { final Header[] headers = new Header[] { new BasicHeader("Cache-Control","public") }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(headers); assertFalse(impl.proxyRevalidate(entry)); }
@Test public void testApparentAgeIsResponseReceivedTimeLessDateHeader() { final Header[] headers = new Header[] { new BasicHeader("Date", DateUtils .formatDate(tenSecondsAgo)) }; final HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(now, sixSecondsAgo, headers); assertEquals(4, impl.getApparentAgeSecs(entry)); }
@Test public void testParseSingleWarnValue() { final Header h = new BasicHeader("Warning","110 fred \"stale\""); final WarningValue[] result = WarningValue.getWarningValues(h); Assert.assertEquals(1, result.length); final WarningValue wv = result[0]; Assert.assertEquals(110, wv.getWarnCode()); Assert.assertEquals("fred", wv.getWarnAgent()); Assert.assertEquals("\"stale\"", wv.getWarnText()); Assert.assertNull(wv.getWarnDate()); }