@Test public void setStrictNoCache() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Cache-Control", "public,max-age=100") .addHeader("Expires", "some time stamp normally goes here") .setStrictNoCache(); Multimap<String, String> headers = builder.getHeaders(); assertFalse("Expires header not removed.", headers.containsKey("Expires")); assertEquals("no-cache", headers.get("Cache-Control").iterator().next()); assertEquals("no-cache", headers.get("Pragma").iterator().next()); }
@Test public void setExpirationTime() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Pragma", "no-cache") .addHeader("Cache-Control", "public,max-age=100") .setExpirationTime(100); Multimap<String, String> headers = builder.getHeaders(); assertTrue("No Expires header added.", headers.containsKey("Expires")); assertFalse("Pragma header not removed", headers.containsKey("Pragma")); assertFalse("Cache-Control header not removed", headers.containsKey("Cache-Control")); }
@Test public void setCacheControlMaxAge() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Cache-Control", "public,max-age=100") .setCacheControlMaxAge(12345); Multimap<String, String> headers = builder.getHeaders(); assertEquals("public,max-age=12345", headers.get("Cache-Control").iterator().next()); }
@Test public void setCacheControlMaxAgeWithSpacesInCacheControlHeader() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Cache-Control", "public, max-age=123, no-transform ") .setCacheControlMaxAge(12345); Multimap<String, String> headers = builder.getHeaders(); assertEquals("public,no-transform,max-age=12345", headers.get("Cache-Control").iterator().next()); }
@Test public void setEncodingEmpty() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Content-Type", "text/html") .setEncoding(Charsets.UTF_8); Multimap<String, String> headers = builder.getHeaders(); assertEquals("text/html; charset=UTF-8", headers.get("Content-Type").iterator().next()); }
@Test public void setEncoding() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Content-Type", "text/html; charset=Big5") .setEncoding(Charsets.UTF_8); Multimap<String, String> headers = builder.getHeaders(); assertEquals("text/html; charset=UTF-8", headers.get("Content-Type").iterator().next()); }
private RequestContext createRequestContext(String resource, String mimeType) throws Exception { HttpRequest request = null; Uri uri = UriBuilder.parse(resource).toUri(); request = ImageAttributeVisitor.buildHttpRequest(gadget(), uri); byte[] bytes = IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(resource)); HttpResponse response = new HttpResponseBuilder().addHeader("Content-Type", mimeType) .setResponse(bytes).create(); return new RequestContext(request, response, null); } }
private RequestContext createRequestContext(Uri uri, String content, String mimeType) throws IOException { HttpRequest request = new HttpRequest(uri); HttpResponse response = new HttpResponseBuilder().addHeader("Content-Type", mimeType) .setResponse(content.getBytes()).create(); return new RequestContext(request, response, null); }
@Test public void testNullHeaderNamesStripped() { HttpResponse response = new HttpResponseBuilder() .addHeader(null, "dummy") .create(); for (String key : response.getHeaders().keySet()) { assertNotNull("Null header not removed.", key); } }
@Test public void setResponseStringWithContentType() { HttpResponse resp = new HttpResponseBuilder() .addHeader("Content-Type", "text/html") .setResponseString("foo") .create(); Multimap<String, String> headers = resp.getHeaders(); assertEquals("text/html; charset=UTF-8", headers.get("Content-Type").iterator().next()); assertEquals("foo", resp.getResponseAsString()); }
@Test public void testEncodingDetectionLatin1NoCharsetSpecified() throws Exception { HttpResponse response = new HttpResponseBuilder() .addHeader("Content-Type", "text/plain;") .setResponse(LATIN1_DATA) .create(); assertEquals("ISO-8859-1", response.getEncoding().toUpperCase()); assertEquals(LATIN1_STRING, response.getResponseAsString()); }
@Test public void testCacheExpirationForStrictNoCacheResponsePrivateHighMaxAge() throws Exception { assertEquals(-1, new HttpResponseBuilder() .addHeader("Cache-Control", "private, max-age=20000") .setRefetchStrictNoCacheAfterMs(10000) .create() .getCacheExpiration()); }
@Test public void testShouldRefetchForStrictNoCacheResponseCurrentTimePrivateLowMaxAge() throws Exception { assertEquals(false, new HttpResponseBuilder() .addHeader("Cache-Control", "private, max-age=5000") .setRefetchStrictNoCacheAfterMs(10000) .create() .shouldRefetch()); }
@Test public void testIsHtmlWithoutHtmlTagContext() throws Exception { HttpRequest req = new HttpRequest(Uri.parse("http://www.example.org/")); HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Content-Type", "text/html"); assertTrue(RewriterUtils.isHtml(req, builder)); }
@Test public void testImgWithCacheControlNoCacheReservedAndFetchNotTriggered() throws Exception { cache.addResponse(new HttpRequest(Uri.parse(IMG_URL)), new HttpResponseBuilder().setResponseString("test") .addHeader("Cache-Control", "no-cache").create()); checkVisitBypassedAndFetchTriggered("img", IMG_URL, false, false); }
@Test public void testEncodingDetectionUtf8WithBom() throws Exception { HttpResponse response = new HttpResponseBuilder() .addHeader("Content-Type", "text/plain; charset=UTF-8") .setResponse(UTF8_DATA) .create(); assertEquals(UTF8_STRING, response.getResponseAsString()); assertEquals("UTF-8", response.getEncoding()); }
@Test public void testImgWithPragmaNoCacheReservedAndFetchNotTriggered() throws Exception { cache.addResponse(new HttpRequest(Uri.parse(IMG_URL)), new HttpResponseBuilder().setResponseString("test") .addHeader("Pragma", "no-cache").create()); checkVisitBypassedAndFetchTriggered("img", IMG_URL, false, false); }
@Test public void testSetNoCache() { int time = roundToSeconds(timeSource.currentTimeMillis()); HttpResponse response = new HttpResponseBuilder() .addHeader("Expires", DateUtil.formatRfc1123Date(1000L * time)) .setStrictNoCache() .create(); assertNull(response.getHeader("Expires")); assertEquals("no-cache", response.getHeader("Pragma")); assertEquals("no-cache", response.getHeader("Cache-Control")); }
@Test public void testStrictPragmaJunk() throws Exception { HttpResponse response = new HttpResponseBuilder() .addHeader("Pragma", "junk") .create(); assertFalse(response.isStrictNoCache()); int expected = roundToSeconds(timeSource.currentTimeMillis() + response.getDefaultTtl()); int expires = roundToSeconds(response.getCacheExpiration()); assertEquals(expected, expires); assertTrue(response.getCacheTtl() <= response.getDefaultTtl() && response.getCacheTtl() > 0); }
@Test public void testFixedDate() throws Exception { int time = roundToSeconds(timeSource.currentTimeMillis()); HttpResponse response = new HttpResponseBuilder() .addHeader("Date", DateUtil.formatRfc1123Date(1000L * time)) .create(); assertEquals(time + roundToSeconds(response.getDefaultTtl()), roundToSeconds(response.getCacheExpiration())); assertEquals(DateUtil.formatRfc1123Date(timeSource.currentTimeMillis()), response.getHeader("Date")); assertTtlOk(roundToSeconds(response.getDefaultTtl()), response); }