@Test public void testDoesNotInvalidateHEADCacheEntryIfSubsequentHEADRequestsAreMadeToTheSameURI() throws Exception { final URI uri = new URI("http://foo.example.com:80/"); final String key = uri.toASCIIString(); final HttpRequest request = new BasicHttpRequest("HEAD", uri); cacheReturnsEntryForUri(key); impl.flushCacheEntriesInvalidatedByRequest(host, request, cacheKeyResolver, mockStorage); verify(mockStorage).getEntry(key); verifyNoMoreInteractions(mockStorage); }
@Test public void testDoesNotInvalidateRequestsWithClientPragmaHeaders() throws Exception { final HttpRequest request = new BasicHttpRequest("GET","/"); request.setHeader("Pragma","no-cache"); impl.flushCacheEntriesInvalidatedByRequest(host, request, cacheKeyResolver, mockStorage, operationCallback); verify(mockStorage).getEntry(ArgumentMatchers.eq("http://foo.example.com:80/"), ArgumentMatchers.<FutureCallback<HttpCacheEntry>>any()); verifyNoMoreInteractions(mockStorage); }
@Test public void doesNotFlushForResponsesWithoutContentLocation() throws Exception { final HttpRequest request = new BasicHttpRequest("POST","/"); final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_OK); impl.flushCacheEntriesInvalidatedByExchange(host, request, response, cacheKeyResolver, mockStorage); verifyNoMoreInteractions(mockStorage); }
@Test public void testEquivalentPathEncodingsAreEquivalent() { final HttpHost host = new HttpHost("foo.example.com"); final HttpRequest req1 = new BasicHttpRequest("GET", "/~smith/home.html"); final HttpRequest req2 = new BasicHttpRequest("GET", "/%7Esmith/home.html"); Assert.assertEquals(extractor.generateKey(host, req1), extractor.generateKey(host, req2)); }
@Test public void testEquivalentExtraPathEncodingsAreEquivalent() { final HttpHost host = new HttpHost("foo.example.com"); final HttpRequest req1 = new BasicHttpRequest("GET", "/~smith/home.html"); final HttpRequest req2 = new BasicHttpRequest("GET", "/%7Esmith%2Fhome.html"); Assert.assertEquals(extractor.generateKey(host, req1), extractor.generateKey(host, req2)); }
@Test public void testIsGetServableFromCache() { final BasicHttpRequest request = new BasicHttpRequest("GET", "someUri"); Assert.assertTrue(policy.isServableFromCache(request)); }
@Test public void testResponsesToHEADWithQueryParamsButNoExplicitCachingAreNotCacheable() { request = new BasicHttpRequest("HEAD", "/foo?s=bar"); Assert.assertFalse(policy.isResponseCacheable(request, response)); }
@Test public void getsWithQueryParametersFrom1_0OriginsViaProxiesAreNotCacheable() { request = new BasicHttpRequest("GET", "/foo?s=bar"); response.setHeader("Via", "1.0 someproxy"); Assert.assertFalse(policy.isResponseCacheable(request, response)); }
@Test public void headsWithQueryParametersFrom1_0OriginsViaProxiesAreNotCacheable() { request = new BasicHttpRequest("HEAD", "/foo?s=bar"); response.setHeader("Via", "1.0 someproxy"); Assert.assertFalse(policy.isResponseCacheable(request, response)); }
@Test public void testAuthorizedResponsesWithCacheControlMaxAgeAreNotCacheable() { request = new BasicHttpRequest("GET","/"); request.setHeader("Authorization","Basic dXNlcjpwYXNzd2Q="); response.setHeader("Cache-Control","max-age=3600"); Assert.assertFalse(policy.isResponseCacheable(request,response)); }
@Test public void getsWithQueryParametersDirectlyFrom1_0OriginsAreNotCacheable() { request = new BasicHttpRequest("GET", "/foo?s=bar"); response = new BasicHttpResponse(HttpStatus.SC_OK, "OK"); response.setVersion(HttpVersion.HTTP_1_0); Assert.assertFalse(policy.isResponseCacheable(request, response)); }
@Test public void testNotProvidedPortEquivalentToDefaultPortForHttp() { final HttpHost host1 = new HttpHost("foo.example.com"); final HttpHost host2 = new HttpHost("foo.example.com:80"); final HttpRequest req = new BasicHttpRequest("GET", "/"); Assert.assertEquals(extractor.generateKey(host1, req), extractor.generateKey(host2, req)); }
@Test public void getsWithQueryParametersDirectlyFrom1_0OriginsAreNotCacheableEvenWithSetting() { policy = new ResponseCachingPolicy(0, true, true, false); request = new BasicHttpRequest("GET", "/foo?s=bar"); response = new BasicHttpResponse(HttpStatus.SC_OK, "OK"); response.setVersion(HttpVersion.HTTP_1_0); Assert.assertFalse(policy.isResponseCacheable(request, response)); }
@Test public void testSchemeNameComparisonsAreCaseInsensitive() { final HttpHost host1 = new HttpHost("http", "foo.example.com", -1); final HttpHost host2 = new HttpHost("HTTP", "foo.example.com", -1); final HttpRequest req = new BasicHttpRequest("GET", "/"); Assert.assertEquals(extractor.generateKey(host1, req), extractor.generateKey(host2, req)); }
@Test public void testEmptyAbsPathIsEquivalentToSlash() { final HttpHost host = new HttpHost("foo.example.com"); final HttpRequest req1 = new BasicHttpRequest("GET", "/"); final HttpRequest req2 = new HttpGet("http://foo.example.com"); Assert.assertEquals(extractor.generateKey(host, req1), extractor.generateKey(host, req2)); }
@Test public void testExtraDotDotSegmentsAreIgnored() { final HttpHost host = new HttpHost("foo.example.com"); final HttpRequest req1 = new BasicHttpRequest("GET", "/"); final HttpRequest req2 = new HttpGet("http://foo.example.com/.././../"); Assert.assertEquals(extractor.generateKey(host, req1), extractor.generateKey(host, req2)); }
@Test public void testResponsesToGETWithQueryParamsAndExplicitCachingAreCacheable() { request = new BasicHttpRequest("GET", "/foo?s=bar"); response.setHeader("Date", DateUtils.formatDate(now)); response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow)); Assert.assertTrue(policy.isResponseCacheable(request, response)); }
@Test public void doesNotStripMinFreshFromRequestWithoutNoCache() throws Exception { final HttpRequest req = new BasicHttpRequest("GET", "/"); req.setHeader("Cache-Control", "min-fresh=10"); final HttpRequest wrapper = RequestCopier.INSTANCE.copy(req); impl.makeRequestCompliant(wrapper); assertEquals("min-fresh=10", wrapper.getFirstHeader("Cache-Control").getValue()); }
@Test public void testResponsesToHEADWithQueryParamsAndExplicitCachingAreCacheableEvenWhen1_0QueryCachingDisabled() { policy = new ResponseCachingPolicy(0, true, true, false); request = new BasicHttpRequest("HEAD", "/foo?s=bar"); response.setHeader("Date", DateUtils.formatDate(now)); response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow)); Assert.assertTrue(policy.isResponseCacheable(request, response)); }
@Test public void getsWithQueryParametersFrom1_0OriginsViaExplicitProxiesAreCacheableWithExpires() { request = new BasicHttpRequest("GET", "/foo?s=bar"); response.setHeader("Date", DateUtils.formatDate(now)); response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow)); response.setHeader("Via", "HTTP/1.0 someproxy"); Assert.assertTrue(policy.isResponseCacheable(request, response)); }