### Eclipse Workspace Patch 1.0 #P httpcomponents-client Index: httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java =================================================================== --- httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java (revision 1056326) +++ httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java (working copy) @@ -60,6 +60,11 @@ public class TestProtocolRecommendations extends AbstractProtocolTest { private Date now; + private Date oneSecondAgo; + private Date twoSecondsAgo; + private Date threeSecondsAgo; + private Date fourSecondsAgo; + private Date fiveSecondsAgo; private Date tenSecondsAgo; @Override @@ -67,6 +72,11 @@ public void setUp() { super.setUp(); now = new Date(); + oneSecondAgo = new Date(now.getTime() - 1 * 1000L); + twoSecondsAgo = new Date(now.getTime() - 2 * 1000L); + threeSecondsAgo = new Date(now.getTime() - 3 * 1000L); + fourSecondsAgo = new Date(now.getTime() - 4 * 1000L); + fiveSecondsAgo = new Date(now.getTime() - 5 * 1000L); tenSecondsAgo = new Date(now.getTime() - 10 * 1000L); } @@ -1078,4 +1088,98 @@ impl.execute(host, req3); verifyMocks(); } + + @Test + public void thorstenTestCaseWithConditionalRequests() throws Exception { + HttpRequest req1 = HttpTestUtils.makeDefaultRequest(); + HttpResponse resp1 = HttpTestUtils.make200Response(); + resp1.setHeader("Cache-Control","max-age=0"); + resp1.setHeader("Date", formatDate(fiveSecondsAgo)); + resp1.setHeader("Last-Modified", formatDate(tenSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp1); + + HttpRequest req2 = HttpTestUtils.makeDefaultRequest(); + req2.setHeader("If-Modified-Since", formatDate(fiveSecondsAgo)); + HttpResponse resp2 = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_NOT_MODIFIED, "Not Modified"); + resp2.setHeader("Date", formatDate(fourSecondsAgo)); + resp2.setHeader("Last-Modified", formatDate(tenSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp2); + + HttpRequest req3 = HttpTestUtils.makeDefaultRequest(); + req3.setHeader("If-Modified-Since", formatDate(fiveSecondsAgo)); + HttpResponse resp3 = HttpTestUtils.make200Response(); + resp3.setHeader("Cache-Control", "max-age=0"); + resp3.setHeader("Last-Modified", formatDate(threeSecondsAgo)); + resp3.setHeader("Date", formatDate(twoSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp3); + + HttpRequest req4 = HttpTestUtils.makeDefaultRequest(); + req4.setHeader("If-Modified-Since", formatDate(threeSecondsAgo)); + HttpResponse resp4 = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_NOT_MODIFIED, "Not Modified"); + resp4.setHeader("Date", formatDate(oneSecondAgo)); + resp4.setHeader("Last-Modified", formatDate(threeSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp4); + + replayMocks(); + HttpResponse result1 = impl.execute(host, req1); + HttpResponse result2 = impl.execute(host, req2); + HttpResponse result3 = impl.execute(host, req3); + HttpResponse result4 = impl.execute(host, req4); + verifyMocks(); + + assertEquals(HttpStatus.SC_OK, result1.getStatusLine().getStatusCode()); + assertEquals(HttpStatus.SC_NOT_MODIFIED, result2.getStatusLine().getStatusCode()); + assertEquals(HttpStatus.SC_OK, result3.getStatusLine().getStatusCode()); + assertEquals(HttpStatus.SC_NOT_MODIFIED, result4.getStatusLine().getStatusCode()); + } + + @Test + public void thorstenTestCaseWithUnconditionalRequests() throws Exception { + HttpRequest req1 = HttpTestUtils.makeDefaultRequest(); + HttpResponse resp1 = HttpTestUtils.make200Response(); + resp1.setHeader("Cache-Control","max-age=0"); + resp1.setHeader("Date", formatDate(fiveSecondsAgo)); + resp1.setHeader("Last-Modified", formatDate(tenSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp1); + + HttpRequest req2 = HttpTestUtils.makeDefaultRequest(); + HttpResponse resp2 = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_NOT_MODIFIED, "Not Modified"); + resp2.setHeader("Date", formatDate(fourSecondsAgo)); + resp2.setHeader("Last-Modified", formatDate(tenSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp2); + + HttpRequest req3 = HttpTestUtils.makeDefaultRequest(); + HttpResponse resp3 = HttpTestUtils.make200Response(); + resp3.setHeader("Cache-Control", "max-age=0"); + resp3.setHeader("Last-Modified", formatDate(threeSecondsAgo)); + resp3.setHeader("Date", formatDate(twoSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp3); + + HttpRequest req4 = HttpTestUtils.makeDefaultRequest(); + HttpResponse resp4 = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_NOT_MODIFIED, "Not Modified"); + resp4.setHeader("Date", formatDate(oneSecondAgo)); + resp4.setHeader("Last-Modified", formatDate(threeSecondsAgo)); + + backendExpectsAnyRequest().andReturn(resp4); + + replayMocks(); + HttpResponse result1 = impl.execute(host, req1); + HttpResponse result2 = impl.execute(host, req2); + HttpResponse result3 = impl.execute(host, req3); + HttpResponse result4 = impl.execute(host, req4); + verifyMocks(); + + assertEquals(HttpStatus.SC_OK, result1.getStatusLine().getStatusCode()); + assertEquals(HttpStatus.SC_OK, result2.getStatusLine().getStatusCode()); + assertEquals(HttpStatus.SC_OK, result3.getStatusLine().getStatusCode()); + assertEquals(HttpStatus.SC_OK, result4.getStatusLine().getStatusCode()); + } + }