You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by jo...@apache.org on 2011/01/13 18:00:30 UTC
svn commit: r1058661 -
/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java
Author: jonm
Date: Thu Jan 13 17:00:30 2011
New Revision: 1058661
URL: http://svn.apache.org/viewvc?rev=1058661&view=rev
Log:
Capture acceptance tests for only-if-cached (implementation
already passes these).
"To do this, the client may include the only-if-cached directive
in a request. If it receives this directive, a cache SHOULD
either respond using a cached entry that is consistent with the
other constraints of the request, or respond with a 504 (Gateway
Timeout) status."
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
Modified:
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java?rev=1058661&r1=1058660&r2=1058661&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java Thu Jan 13 17:00:30 2011
@@ -1374,4 +1374,91 @@ public class TestProtocolRecommendations
assertTrue(foundNoCache);
assertFalse(foundDisallowedDirective);
}
+
+ /*
+ * "To do this, the client may include the only-if-cached directive in
+ * a request. If it receives this directive, a cache SHOULD either
+ * respond using a cached entry that is consistent with the other
+ * constraints of the request, or respond with a 504 (Gateway Timeout)
+ * status."
+ *
+ * http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4
+ */
+ @Test
+ public void cacheMissResultsIn504WithOnlyIfCached()
+ throws Exception {
+ HttpRequest req = HttpTestUtils.makeDefaultRequest();
+ req.setHeader("Cache-Control", "only-if-cached");
+
+ replayMocks();
+ HttpResponse result = impl.execute(host, req);
+ verifyMocks();
+
+ assertEquals(HttpStatus.SC_GATEWAY_TIMEOUT,
+ result.getStatusLine().getStatusCode());
+ }
+
+ @Test
+ public void cacheHitOkWithOnlyIfCached()
+ throws Exception {
+ HttpRequest req1 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp1 = HttpTestUtils.make200Response();
+ resp1.setHeader("Cache-Control","max-age=3600");
+
+ backendExpectsAnyRequest().andReturn(resp1);
+
+ HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
+ req2.setHeader("Cache-Control", "only-if-cached");
+
+ replayMocks();
+ impl.execute(host, req1);
+ HttpResponse result = impl.execute(host, req2);
+ verifyMocks();
+
+ assertTrue(HttpTestUtils.semanticallyTransparent(resp1, result));
+ }
+
+ @Test
+ public void returns504ForStaleEntryWithOnlyIfCached()
+ throws Exception {
+ HttpRequest req1 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp1 = HttpTestUtils.make200Response();
+ resp1.setHeader("Date", formatDate(tenSecondsAgo));
+ resp1.setHeader("Cache-Control","max-age=5");
+
+ backendExpectsAnyRequest().andReturn(resp1);
+
+ HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
+ req2.setHeader("Cache-Control", "only-if-cached");
+
+ replayMocks();
+ impl.execute(host, req1);
+ HttpResponse result = impl.execute(host, req2);
+ verifyMocks();
+
+ assertEquals(HttpStatus.SC_GATEWAY_TIMEOUT,
+ result.getStatusLine().getStatusCode());
+ }
+
+ @Test
+ public void returnsStaleCacheEntryWithOnlyIfCachedAndMaxStale()
+ throws Exception {
+
+ HttpRequest req1 = HttpTestUtils.makeDefaultRequest();
+ HttpResponse resp1 = HttpTestUtils.make200Response();
+ resp1.setHeader("Date", formatDate(tenSecondsAgo));
+ resp1.setHeader("Cache-Control","max-age=5");
+
+ backendExpectsAnyRequest().andReturn(resp1);
+
+ HttpRequest req2 = HttpTestUtils.makeDefaultRequest();
+ req2.setHeader("Cache-Control", "max-stale=20, only-if-cached");
+
+ replayMocks();
+ impl.execute(host, req1);
+ HttpResponse result = impl.execute(host, req2);
+ verifyMocks();
+
+ assertTrue(HttpTestUtils.semanticallyTransparent(resp1, result));
+ }
}