You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2010/10/01 11:49:15 UTC
svn commit: r1003455 - in
/httpcomponents/httpclient/trunk/httpclient-cache/src:
main/java/org/apache/http/impl/client/cache/
test/java/org/apache/http/impl/client/cache/
Author: olegk
Date: Fri Oct 1 09:49:15 2010
New Revision: 1003455
URL: http://svn.apache.org/viewvc?rev=1003455&view=rev
Log:
HTTPCLIENT-1001: cacheEntryUpdater does not properly update cache entry resource
Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com>
Modified:
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java
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/TestCacheEntryUpdater.java
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java?rev=1003455&r1=1003454&r2=1003455&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryUpdater.java Fri Oct 1 09:49:15 2010
@@ -35,6 +35,7 @@ import java.util.ListIterator;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
import org.apache.http.annotation.Immutable;
import org.apache.http.client.cache.HeaderConstants;
import org.apache.http.client.cache.HttpCacheEntry;
@@ -46,7 +47,7 @@ import org.apache.http.protocol.HTTP;
/**
* Update a {@link HttpCacheEntry} with new or updated information based on the latest
- * 200 or 304 status responses from the Server. Use the {@link HttpResponse} to perform
+ * 304 status response from the Server. Use the {@link HttpResponse} to perform
* the update.
*
* @since 4.1
@@ -66,7 +67,8 @@ class CacheEntryUpdater {
}
/**
- * Update the entry with the new information from the response.
+ * Update the entry with the new information from the response. Should only be used for
+ * 304 responses.
*
* @param request id
* @param entry The cache Entry to be updated
@@ -82,7 +84,8 @@ class CacheEntryUpdater {
Date requestDate,
Date responseDate,
HttpResponse response) throws IOException {
-
+ if (response.getStatusLine().getStatusCode() != HttpStatus.SC_NOT_MODIFIED)
+ throw new IllegalArgumentException("Response must have 304 status code");
Header[] mergedHeaders = mergeHeaders(entry, response);
Resource resource = resourceFactory.copy(requestId, entry.getResource());
return new HttpCacheEntry(
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java?rev=1003455&r1=1003454&r2=1003455&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedResponseSuitabilityChecker.java Fri Oct 1 09:49:15 2010
@@ -147,7 +147,7 @@ class CachedResponseSuitabilityChecker {
}
if (HeaderConstants.CACHE_CONTROL_NO_STORE.equals(elt.getName())) {
- log.debug("Response contained NO SORE directive, cache was not suitable");
+ log.debug("Response contained NO STORE directive, cache was not suitable");
return false;
}
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=1003455&r1=1003454&r2=1003455&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 Fri Oct 1 09:49:15 2010
@@ -558,13 +558,16 @@ public class CachingHttpClient implement
}
}
+ backendResponse.addHeader("Via", generateViaHeader(backendResponse));
int statusCode = backendResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_NOT_MODIFIED || statusCode == HttpStatus.SC_OK) {
cacheUpdates.getAndIncrement();
setResponseStatus(context, CacheResponseStatus.VALIDATED);
- return responseCache.updateCacheEntry(target, request, cacheEntry,
- backendResponse, requestDate, responseDate);
+ if (statusCode == HttpStatus.SC_NOT_MODIFIED) {
+ return responseCache.updateCacheEntry(target, request, cacheEntry,
+ backendResponse, requestDate, responseDate);
+ }
}
return handleBackendResponse(target, conditionalRequest, requestDate, responseDate,
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntryUpdater.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntryUpdater.java?rev=1003455&r1=1003454&r2=1003455&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntryUpdater.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntryUpdater.java Fri Oct 1 09:49:15 2010
@@ -65,7 +65,7 @@ public class TestCacheEntryUpdater {
public void testUpdateCacheEntryReturnsDifferentEntryInstance() throws IOException {
HttpCacheEntry entry =HttpTestUtils.makeCacheEntry();
- BasicHttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK");
+ BasicHttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_NOT_MODIFIED, "");
HttpCacheEntry newEntry = impl.updateCacheEntry(null, entry, requestDate, responseDate, response);
@@ -162,7 +162,7 @@ public class TestCacheEntryUpdater {
HttpCacheEntry entry = HttpTestUtils.makeCacheEntry(tenSecondsAgo, eightSecondsAgo);
- HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK");
+ HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_NOT_MODIFIED, "");
HttpCacheEntry updated = impl.updateCacheEntry(null, entry, twoSecondsAgo, oneSecondAgo, response);
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=1003455&r1=1003454&r2=1003455&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 Fri Oct 1 09:49:15 2010
@@ -432,8 +432,10 @@ public class TestCachingHttpClient {
getCurrentDateReturns(requestDate);
backendCall(validate, originResponse);
getCurrentDateReturns(responseDate);
- EasyMock.expect(mockCache.updateCacheEntry(host, request,
- entry, originResponse, requestDate, responseDate))
+ responsePolicyAllowsCaching(true);
+ responseProtocolValidationIsCalled();
+ EasyMock.expect(mockCache.getCacheEntry(host, validate)).andReturn(null);
+ EasyMock.expect(mockCache.cacheAndReturnResponse(host, validate, originResponse, requestDate, responseDate))
.andReturn(finalResponse);
replayMocks();
@@ -484,8 +486,10 @@ public class TestCachingHttpClient {
final Date responseDate2 = new Date();
getCurrentDateReturns(responseDate2);
- EasyMock.expect(mockCache.updateCacheEntry(host, request,
- entry, originResponse2, requestDate2, responseDate2))
+ responsePolicyAllowsCaching(true);
+ responseProtocolValidationIsCalled();
+ EasyMock.expect(mockCache.getCacheEntry(host, validate)).andReturn(null);
+ EasyMock.expect(mockCache.cacheAndReturnResponse(host, validate, originResponse2, requestDate2, responseDate2))
.andReturn(finalResponse);
replayMocks();
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java?rev=1003455&r1=1003454&r2=1003455&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java Fri Oct 1 09:49:15 2010
@@ -2592,9 +2592,11 @@ public class TestProtocolRequirements ex
EasyMock.expect(
mockBackend.execute(EasyMock.isA(HttpHost.class), EasyMock.capture(cap),
(HttpContext) EasyMock.isNull())).andReturn(validated).times(0, 1);
- EasyMock.expect(mockCache.updateCacheEntry(EasyMock.same(host), EasyMock.same(request), EasyMock.same(entry),
+ EasyMock.expect(mockCache.getCacheEntry(EasyMock.isA(HttpHost.class), EasyMock.isA(HttpRequest.class)))
+ .andReturn(entry).times(0, 1);
+ EasyMock.expect(mockCache.cacheAndReturnResponse(EasyMock.isA(HttpHost.class), EasyMock.isA(HttpRequest.class),
EasyMock.same(validated), EasyMock.isA(Date.class), EasyMock.isA(Date.class)))
- .andReturn(reconstructed).times(0, 1);
+ .andReturn(reconstructed).times(0, 1);
replayMocks();
HttpResponse result = impl.execute(host, request);