@Before public void setUp() { entry = HttpTestUtils.makeCacheEntry(new HashMap<String, String>()); request = HttpRequestWrapper.wrap(HttpTestUtils.makeDefaultRequest()); mockValidityPolicy = mock(CacheValidityPolicy.class); impl = new CachedHttpResponseGenerator(mockValidityPolicy); }
@Test public void testUpdateCacheEntryReturnsDifferentEntryInstance() throws IOException { entry = HttpTestUtils.makeCacheEntry(); HttpCacheEntry newEntry = impl.updateCacheEntry(null, entry, requestDate, responseDate, response); assertNotSame(newEntry, entry); }
@Test public void testNewHeadersAreAddedByMerge() throws IOException { Header[] headers = { new BasicHeader("Date", formatDate(requestDate)), new BasicHeader("ETag", "\"etag\"") }; entry = HttpTestUtils.makeCacheEntry(headers); response.setHeaders( new Header[] { new BasicHeader("Last-Modified", formatDate(responseDate)), new BasicHeader("Cache-Control", "public"), }); HttpCacheEntry updatedEntry = impl.updateCacheEntry(null, entry, new Date(), new Date(), response); Header[] updatedHeaders = updatedEntry.getAllHeaders(); assertEquals(4, updatedHeaders.length); headersContain(updatedHeaders, "Date", formatDate(requestDate)); headersContain(updatedHeaders, "ETag", "\"etag\""); headersContain(updatedHeaders, "Last-Modified", formatDate(responseDate)); headersContain(updatedHeaders, "Cache-Control", "public"); }
public static final HttpResponse make200Response(Date date, String cacheControl) { HttpResponse response = HttpTestUtils.make200Response(); response.setHeader("Date", DateUtils.formatDate(date)); response.setHeader("Cache-Control", cacheControl); response.setHeader("Etag", "\"etag\""); return response; }
@Test public void testUpdatedEntryHasLatestRequestAndResponseDates() throws IOException { entry = HttpTestUtils.makeCacheEntry(tenSecondsAgo, eightSecondsAgo); HttpCacheEntry updated = impl.updateCacheEntry(null, entry, twoSecondsAgo, oneSecondAgo, response); assertEquals(twoSecondsAgo, updated.getRequestDate()); assertEquals(oneSecondAgo, updated.getResponseDate()); }
@Test public void testResponseDoesNotContainEntityToServeHEADRequestIfEntryContainsResource() throws Exception { final HttpRequestWrapper headRequest = HttpRequestWrapper.wrap(HttpTestUtils.makeDefaultHEADRequest()); final HttpResponse response = impl.generateResponse(headRequest, entry); Assert.assertNull(response.getEntity()); }
@Test public void cannotUpdateFromANon304OriginResponse() throws Exception { entry = HttpTestUtils.makeCacheEntry(); response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); try { impl.updateCacheEntry("A", entry, new Date(), new Date(), response); fail("should have thrown exception"); } catch (IllegalArgumentException expected) { } }
@Test public void entryWithMalformedDateIsStillUpdated() throws Exception { Header[] headers = {new BasicHeader("ETag", "\"old\""), new BasicHeader("Date", "bad-date")}; entry = HttpTestUtils.makeCacheEntry(tenSecondsAgo, eightSecondsAgo, headers); response.setHeader("ETag", "\"new\""); response.setHeader("Date", formatDate(twoSecondsAgo)); HttpCacheEntry updated = impl.updateCacheEntry(null, entry, twoSecondsAgo, oneSecondAgo, response); assertEquals("\"new\"", updated.getFirstHeader("ETag").getValue()); }
@Test public void oldHeadersRetainedIfResponseOlderThanEntry() throws Exception { Header[] headers = { new BasicHeader("Date", formatDate(oneSecondAgo)), new BasicHeader("ETag", "\"new-etag\"") }; entry = HttpTestUtils.makeCacheEntry(twoSecondsAgo, now, headers); response.setHeader("Date", formatDate(tenSecondsAgo)); response.setHeader("ETag", "\"old-etag\""); HttpCacheEntry result = impl.updateCacheEntry("A", entry, new Date(), new Date(), response); assertEquals(2, result.getAllHeaders().length); headersContain(result.getAllHeaders(), "Date", formatDate(oneSecondAgo)); headersContain(result.getAllHeaders(), "ETag", "\"new-etag\""); }
@Test public void testContentLengthIsNotAddedWhenTransferEncodingIsPresent() { final Header[] hdrs = new Header[] {new BasicHeader("Transfer-Encoding", "chunked")}; final byte[] buf = new byte[] {1, 2, 3, 4, 5}; final HttpCacheEntry entry1 = HttpTestUtils.makeCacheEntry(hdrs, buf); final HttpResponse response = impl.generateResponse(request, entry1); final Header length = response.getFirstHeader("Content-Length"); Assert.assertNull(length); }
@Test public void entry1xxWarningsAreRemovedOnUpdate() throws Exception { Header[] headers = { new BasicHeader("Warning", "110 fred \"Response is stale\""), new BasicHeader("ETag", "\"old\""), new BasicHeader("Date", formatDate(eightSecondsAgo)) }; entry = HttpTestUtils.makeCacheEntry(tenSecondsAgo, eightSecondsAgo, headers); response.setHeader("ETag", "\"new\""); response.setHeader("Date", formatDate(twoSecondsAgo)); HttpCacheEntry updated = impl.updateCacheEntry(null, entry, twoSecondsAgo, oneSecondAgo, response); assertEquals(0, updated.getHeaders("Warning").length); }
@Test public void testResponseHasContentLength() { final byte[] buf = new byte[] {1, 2, 3, 4, 5}; final HttpCacheEntry entry1 = HttpTestUtils.makeCacheEntry(buf); final HttpResponse 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 testHeadersAreMergedCorrectly() throws IOException { Header[] headers = { new BasicHeader("Date", formatDate(responseDate)), new BasicHeader("ETag", "\"etag\"") }; entry = HttpTestUtils.makeCacheEntry(headers); response.setHeaders(new Header[] {}); HttpCacheEntry updatedEntry = impl.updateCacheEntry(null, entry, new Date(), new Date(), response); Header[] updatedHeaders = updatedEntry.getAllHeaders(); assertEquals(2, updatedHeaders.length); headersContain(updatedHeaders, "Date", formatDate(responseDate)); headersContain(updatedHeaders, "ETag", "\"etag\""); }
@Test(expected = MemcachedSerializationException.class) public void cannotReconstituteFromGarbage() { impl = new MemcachedCacheEntryImpl(); byte[] bytes = HttpTestUtils.getRandomBytes(128); impl.set(bytes); }
@Before public void setUp() { entry = HttpTestUtils.makeCacheEntry(); impl = new MemcachedCacheEntryImpl("foo", entry); }