[prev in list] [next in list] [prev in thread] [next in thread]
List: httpcomponents-commits
Subject: svn commit: r1024383 - in
From: olegk () apache ! org
Date: 2010-10-19 19:54:29
Message-ID: 20101019195429.C4D6323889F1 () eris ! apache ! org
[Download RAW message or body]
Author: olegk
Date: Tue Oct 19 19:54:29 2010
New Revision: 1024383
URL: http://svn.apache.org/viewvc?rev=1024383&view=rev
Log:
HTTPCLIENT-1015: Support only-if-cached directive
Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com>
Modified:
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java?rev=1024383&r1=1024382&r2=1024383&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java \
(original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java \
Tue Oct 19 19:54:29 2010 @@ -407,6 +407,11 @@ public class CachingHttpClient \
implement
log.debug("Cache miss [host: " + target + "; uri: " + rl.getUri() + \
"]"); }
+ if (!mayCallBackend(request)) {
+ return new BasicHttpResponse(HttpVersion.HTTP_1_1, \
HttpStatus.SC_GATEWAY_TIMEOUT, + "Gateway Timeout");
+ }
+
Set<HttpCacheEntry> variantEntries = null;
try {
responseCache.getVariantCacheEntries(target, request);
@@ -447,6 +452,11 @@ public class CachingHttpClient implement
return cachedResponse;
}
+ if (!mayCallBackend(request)) {
+ return new BasicHttpResponse(HttpVersion.HTTP_1_1, \
HttpStatus.SC_GATEWAY_TIMEOUT, + "Gateway Timeout");
+ }
+
if (validityPolicy.isRevalidatable(entry)) {
log.debug("Revalidating the cache entry");
@@ -472,6 +482,17 @@ public class CachingHttpClient implement
return callBackend(target, request, context);
}
+ private boolean mayCallBackend(HttpRequest request) {
+ for (Header h: request.getHeaders("Cache-Control")) {
+ for (HeaderElement elt : h.getElements()) {
+ if ("only-if-cached".equals(elt.getName())) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
private boolean explicitFreshnessRequest(HttpRequest request, HttpCacheEntry \
entry, Date now) { for(Header h : request.getHeaders("Cache-Control")) {
for(HeaderElement elt : h.getElements()) {
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java?rev=1024383&r1=1024382&r2=1024383&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java \
(original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java \
Tue Oct 19 19:54:29 2010 @@ -1931,6 +1931,59 @@ public class TestCachingHttpClient {
Assert.assertSame(resp, result);
}
+ @Test
+ public void testIfOnlyIfCachedAndNoCacheEntryBackendNotCalled() throws \
IOException { + impl = new CachingHttpClient(mockBackend);
+
+ request.addHeader("Cache-Control", "only-if-cached");
+
+ HttpResponse resp = impl.execute(host, request);
+
+ Assert.assertEquals(HttpStatus.SC_GATEWAY_TIMEOUT, \
resp.getStatusLine().getStatusCode()); + }
+
+ @Test
+ public void testIfOnlyIfCachedAndEntryNotSuitableBackendNotCalled() throws \
Exception { +
+ request.setHeader("Cache-Control", "only-if-cached");
+
+ entry = HttpTestUtils.makeCacheEntry(new Header[]{new \
BasicHeader("Cache-Control", "must-revalidate")}); +
+ requestIsFatallyNonCompliant(null);
+ requestProtocolValidationIsCalled();
+ cacheInvalidatorWasCalled();
+ requestPolicyAllowsCaching(true);
+ getCacheEntryReturns(entry);
+ cacheEntrySuitable(false);
+
+ replayMocks();
+ HttpResponse resp = impl.execute(host, request);
+ verifyMocks();
+
+ Assert.assertEquals(HttpStatus.SC_GATEWAY_TIMEOUT, \
resp.getStatusLine().getStatusCode()); + }
+
+ @Test
+ public void testIfOnlyIfCachedAndEntryExistsAndIsSuitableReturnsEntry() throws \
Exception { +
+ request.setHeader("Cache-Control", "only-if-cached");
+
+ requestIsFatallyNonCompliant(null);
+ requestProtocolValidationIsCalled();
+ cacheInvalidatorWasCalled();
+ requestPolicyAllowsCaching(true);
+ getCacheEntryReturns(entry);
+ cacheEntrySuitable(true);
+ responseIsGeneratedFromCache();
+ entryHasStaleness(0);
+
+ replayMocks();
+ HttpResponse resp = impl.execute(host, request);
+ verifyMocks();
+
+ Assert.assertSame(mockCachedResponse, resp);
+ }
+
private void getCacheEntryReturns(HttpCacheEntry result) throws IOException {
EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(result);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic