Return-Path: Delivered-To: apmail-hc-commits-archive@www.apache.org Received: (qmail 89585 invoked from network); 14 Dec 2010 21:37:55 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 14 Dec 2010 21:37:55 -0000 Received: (qmail 4069 invoked by uid 500); 14 Dec 2010 21:37:55 -0000 Delivered-To: apmail-hc-commits-archive@hc.apache.org Received: (qmail 4048 invoked by uid 500); 14 Dec 2010 21:37:55 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 4041 invoked by uid 99); 14 Dec 2010 21:37:55 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Dec 2010 21:37:55 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Dec 2010 21:37:52 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 89C3B23889E1; Tue, 14 Dec 2010 21:37:31 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1049287 - /httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRecommendations.java Date: Tue, 14 Dec 2010 21:37:31 -0000 To: commits@hc.apache.org From: jonm@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101214213731.89C3B23889E1@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jonm Date: Tue Dec 14 21:37:31 2010 New Revision: 1049287 URL: http://svn.apache.org/viewvc?rev=1049287&view=rev Log: Added additional acceptance test for variant negotiation: "If any of the existing cache entries contains only partial content for the associated entity, its entity-tag SHOULD NOT be included in the If-None-Match header field unless the request is for a range that would be fully satisfied by that entry." (http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6) 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=1049287&r1=1049286&r2=1049287&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 Tue Dec 14 21:37:31 2010 @@ -965,4 +965,63 @@ public class TestProtocolRecommendations verifyMocks(); } + /* "If any of the existing cache entries contains only partial content + * for the associated entity, its entity-tag SHOULD NOT be included in + * the If-None-Match header field unless the request is for a range + * that would be fully satisfied by that entry." + * + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6 + */ + @Test + public void variantNegotiationsDoNotIncludeEtagsForPartialResponses() + throws Exception { + HttpRequest req1 = HttpTestUtils.makeDefaultRequest(); + req1.setHeader("User-Agent", "agent1"); + HttpResponse resp1 = HttpTestUtils.make200Response(); + resp1.setHeader("Cache-Control", "max-age=3600"); + resp1.setHeader("Vary", "User-Agent"); + resp1.setHeader("ETag", "\"etag1\""); + + backendExpectsAnyRequest().andReturn(resp1); + + HttpRequest req2 = HttpTestUtils.makeDefaultRequest(); + req2.setHeader("User-Agent", "agent2"); + req2.setHeader("Range", "bytes=0-49"); + HttpResponse resp2 = new BasicHttpResponse(HttpVersion.HTTP_1_1, + HttpStatus.SC_PARTIAL_CONTENT, "Partial Content"); + resp2.setEntity(HttpTestUtils.makeBody(50)); + resp2.setHeader("Content-Length","50"); + resp2.setHeader("Content-Range","bytes 0-49/100"); + resp2.setHeader("Vary","User-Agent"); + resp2.setHeader("ETag", "\"etag2\""); + resp2.setHeader("Cache-Control","max-age=3600"); + resp2.setHeader("Date", DateUtils.formatDate(new Date())); + + backendExpectsAnyRequest().andReturn(resp2); + + HttpRequest req3 = HttpTestUtils.makeDefaultRequest(); + req3.setHeader("User-Agent", "agent3"); + + HttpResponse resp3 = HttpTestUtils.make200Response(); + resp1.setHeader("Cache-Control", "max-age=3600"); + resp1.setHeader("Vary", "User-Agent"); + resp1.setHeader("ETag", "\"etag3\""); + + Capture cap = new Capture(); + expect(mockBackend.execute(isA(HttpHost.class), capture(cap), + (HttpContext)isNull())).andReturn(resp3); + + replayMocks(); + impl.execute(host, req1); + impl.execute(host, req2); + impl.execute(host, req3); + verifyMocks(); + + HttpRequest captured = cap.getValue(); + for(Header h : captured.getHeaders("If-None-Match")) { + for(HeaderElement elt : h.getElements()) { + assertFalse("\"etag2\"".equals(elt.toString())); + } + } + } }