@Test public void testRemovesWarningHeaderIfAllWarnValuesAreBadlyDated() throws Exception { final Date now = new Date(); final Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); originResponse.setHeader("Date", DateUtils.formatDate(now)); originResponse.addHeader("Warning", "110 wilma \"stale\" \"" + DateUtils.formatDate(tenSecondsAgo) + "\""); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); final Header[] warningHeaders = result.getHeaders("Warning"); Assert.assertTrue(warningHeaders == null || warningHeaders.length == 0); }
@Override public Header[] getHeaders(final String name) { return response.getHeaders(name); }
@Test public void testStripsBadlyDatedWarningsFromForwardedResponses() throws Exception { final Date now = new Date(); final Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); originResponse.setHeader("Date", DateUtils.formatDate(now)); originResponse.addHeader("Warning", "110 fred \"stale\", 110 wilma \"stale\" \"" + DateUtils.formatDate(tenSecondsAgo) + "\""); originResponse.setHeader("Cache-Control","no-cache,no-store"); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); for(final Header h : result.getHeaders("Warning")) { Assert.assertFalse(h.getValue().contains("wilma")); } }
@Test public void testStripsBadlyDatedWarningsFromStoredResponses() throws Exception { final Date now = new Date(); final Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); originResponse.setHeader("Date", DateUtils.formatDate(now)); originResponse.addHeader("Warning", "110 fred \"stale\", 110 wilma \"stale\" \"" + DateUtils.formatDate(tenSecondsAgo) + "\""); originResponse.setHeader("Cache-Control","public,max-age=3600"); backendExpectsAnyRequest().andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); for(final Header h : result.getHeaders("Warning")) { Assert.assertFalse(h.getValue().contains("wilma")); } }
@Test public void testUnknownHeadersOnResponsesAreForwarded() throws Exception { originResponse.addHeader("X-Unknown-Header", "blahblah"); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); final ClassicHttpResponse result = execute(request); verifyMocks(); final Header[] hdrs = result.getHeaders("X-Unknown-Header"); Assert.assertEquals(1, hdrs.length); Assert.assertEquals("blahblah", hdrs[0].getValue()); }
if (status == 200) { boolean foundWarning = false; for (final Header h : result.getHeaders("Warning")) { if (h.getValue().split(" ")[0].equals("111")) { foundWarning = true;
for(final Header h : result.getHeaders("Warning")) { for(final String warnValue : h.getValue().split("\\s*,\\s*")) { if (oldWarning.equals(warnValue)) {
@Override protected void onResponseReceived(final ClassicHttpResponse response) { if (response != null && this.headerLog.isDebugEnabled()) { this.headerLog.debug(this.id + " << " + new StatusLine(response)); final Header[] headers = response.getHeaders(); for (final Header header : headers) { this.headerLog.debug(this.id + " << " + header.toString()); } } }
@Override protected void onResponseReceived(final ClassicHttpResponse response) { if (response != null && this.headerLog.isDebugEnabled()) { this.headerLog.debug(this.id + " << " + new StatusLine(response)); final Header[] headers = response.getHeaders(); for (final Header header : headers) { this.headerLog.debug(this.id + " << " + header.toString()); } } }
@Override protected void onResponseSubmitted(final ClassicHttpResponse response) { if (response != null && this.headerLog.isDebugEnabled()) { this.headerLog.debug(this.id + " << " + new StatusLine(response)); final Header[] headers = response.getHeaders(); for (final Header header : headers) { this.headerLog.debug(this.id + " << " + header.toString()); } } }
boolean warningFound = false; final String targetWarning = origWarning + " \"" + dateHdr + "\""; for(final Header h : result.getHeaders("Warning")) { for(final String warning : h.getValue().split("\\s*,\\s*")) { if (targetWarning.equals(warning)) {
@Override protected void onResponseReceived(final ClassicHttpResponse response) { if (response != null && this.headerLog.isDebugEnabled()) { this.headerLog.debug(this.id + " << " + new StatusLine(response)); final Header[] headers = response.getHeaders(); for (final Header header : headers) { this.headerLog.debug(this.id + " << " + header.toString()); } } }
@Override protected void onResponseSubmitted(final ClassicHttpResponse response) { if (response != null && this.headerLog.isDebugEnabled()) { this.headerLog.debug(this.id + " << " + new StatusLine(response)); final Header[] headers = response.getHeaders(); for (final Header header : headers) { this.headerLog.debug(this.id + " << " + header.toString()); } } }
@Test public void testStaleWhileRevalidateReturnsStaleNonRevalidatableEntryWithWarning() throws Exception { config = CacheConfig.custom().setMaxCacheEntries(MAX_ENTRIES).setMaxObjectSize(MAX_BYTES) .setAsynchronousWorkers(1).build(); impl = new CachingExec(cache, executorService, ImmediateSchedulingStrategy.INSTANCE, config); final ClassicHttpRequest req1 = new BasicClassicHttpRequest("GET", "/"); final ClassicHttpResponse resp1 = HttpTestUtils.make200Response(); final Date now = new Date(); final Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); resp1.setHeader("Cache-Control", "public, max-age=5, stale-while-revalidate=15"); resp1.setHeader("Date", DateUtils.formatDate(tenSecondsAgo)); backendExpectsAnyRequestAndReturn(resp1).times(1, 2); final ClassicHttpRequest req2 = new BasicClassicHttpRequest("GET", "/"); replayMocks(); execute(req1); final ClassicHttpResponse result = execute(req2); verifyMocks(); assertEquals(HttpStatus.SC_OK, result.getCode()); boolean warning110Found = false; for (final Header h : result.getHeaders("Warning")) { for (final WarningValue wv : WarningValue.getWarningValues(h)) { if (wv.getWarnCode() == 110) { warning110Found = true; break; } } } assertTrue(warning110Found); }
for(final Header h : result.getHeaders("Warning")) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { if (wv.getWarnCode() == 110) {
for(final Header h : result.getHeaders("Warning")) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { if (wv.getWarnCode() == 110) {
@Test public void testReturnsCachedResponsesAppropriatelyWhenNoOriginCommunication() throws Exception { final ClassicHttpRequest req1 = new BasicClassicHttpRequest("GET", "/"); final ClassicHttpResponse resp1 = HttpTestUtils.make200Response(); resp1.setHeader("Cache-Control", "public, max-age=5"); resp1.setHeader("ETag","\"etag\""); resp1.setHeader("Date", DateUtils.formatDate(tenSecondsAgo)); backendExpectsAnyRequestAndReturn(resp1); final ClassicHttpRequest req2 = new BasicClassicHttpRequest("GET", "/"); backendExpectsAnyRequest().andThrow(new IOException()).anyTimes(); replayMocks(); execute(req1); final ClassicHttpResponse result = execute(req2); verifyMocks(); assertEquals(HttpStatus.SC_OK, result.getCode()); boolean warning111Found = false; for(final Header h : result.getHeaders("Warning")) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { if (wv.getWarnCode() == 111) { warning111Found = true; break; } } } assertTrue(warning111Found); }
for(final Header h : result.getHeaders("Warning")) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { if (wv.getWarnCode() == 110) {
for(final Header h : result.getHeaders("Warning")) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { if (wv.getWarnCode() == 110) {
for(final Header h : result.getHeaders("Warning")) { for(final WarningValue wv : WarningValue.getWarningValues(h)) { if (wv.getWarnCode() == 110) {