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 2010/12/13 12:55:36 UTC

svn commit: r1045084 - in /httpcomponents/httpclient/trunk/httpclient-cache/src: main/java/org/apache/http/impl/client/cache/ test/java/org/apache/http/impl/client/cache/

Author: jonm
Date: Mon Dec 13 11:55:36 2010
New Revision: 1045084

URL: http://svn.apache.org/viewvc?rev=1045084&view=rev
Log:
HTTPCLIENT-1032: renamed HttpCache#getVariantCacheEntries to
HttpCache#getVariantCacheEntriesWithEtags and had it return a
Map of etags to cache entries. Doing the filtering here makes
it simpler downstream, and returning a map makes it easier to
find the appropriate entry when handling a 304 indicating we
should use an existing variant.

Modified:
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCache.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HttpCache.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/AbstractProtocolTest.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestBasicHttpCache.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/TestConditionalRequestBuilder.java

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCache.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCache.java?rev=1045084&r1=1045083&r2=1045084&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCache.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicHttpCache.java Mon Dec 13 11:55:36 2010
@@ -29,10 +29,7 @@ package org.apache.http.impl.client.cach
 import java.io.IOException;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.http.Header;
@@ -41,6 +38,7 @@ import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
+import org.apache.http.client.cache.HeaderConstants;
 import org.apache.http.client.cache.HttpCacheEntry;
 import org.apache.http.client.cache.HttpCacheStorage;
 import org.apache.http.client.cache.HttpCacheUpdateCallback;
@@ -241,13 +239,17 @@ class BasicHttpCache implements HttpCach
         cacheInvalidator.flushInvalidatedCacheEntries(host, request);
     }
 
-    public Set<HttpCacheEntry> getVariantCacheEntries(HttpHost host, HttpRequest request)
+    public Map<String, HttpCacheEntry> getVariantCacheEntriesWithEtags(HttpHost host, HttpRequest request)
             throws IOException {
-        Set<HttpCacheEntry> variants = new HashSet<HttpCacheEntry>();
+        Map<String,HttpCacheEntry> variants = new HashMap<String,HttpCacheEntry>();
         HttpCacheEntry root = storage.getEntry(uriExtractor.getURI(host, request));
         if (root == null || !root.hasVariants()) return variants;
         for(String variantCacheKey : root.getVariantMap().values()) {
-            variants.add(storage.getEntry(variantCacheKey));
+            HttpCacheEntry entry = storage.getEntry(variantCacheKey);
+            Header etagHeader = entry.getFirstHeader(HeaderConstants.ETAG);
+            if (etagHeader != null) {
+                variants.put(etagHeader.getValue(), entry);
+            }
         }
         return variants;
     }

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=1045084&r1=1045083&r2=1045084&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 Mon Dec 13 11:55:36 2010
@@ -30,7 +30,7 @@ import java.io.IOException;
 import java.net.URI;
 import java.util.Date;
 import java.util.List;
-import java.util.Set;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.commons.logging.Log;
@@ -412,9 +412,9 @@ public class CachingHttpClient implement
                         "Gateway Timeout");
             }
 
-            Set<HttpCacheEntry> variantEntries = null;
+            Map<String,HttpCacheEntry> variantEntries = null;
             try {
-                variantEntries = responseCache.getVariantCacheEntries(target, request);
+                variantEntries = responseCache.getVariantCacheEntriesWithEtags(target, request);
             } catch (IOException ioe) {
                 log.warn("Unable to retrieve variant entries from cache", ioe);
             }
@@ -575,7 +575,7 @@ public class CachingHttpClient implement
 
     HttpResponse negotiateResponseFromVariants(HttpHost target,
             HttpRequest request, HttpContext context,
-            Set<HttpCacheEntry> variantEntries) throws IOException, ProtocolException {
+            Map<String, HttpCacheEntry> variantEntries) throws IOException, ProtocolException {
         HttpRequest conditionalRequest = conditionalRequestBuilder.buildConditionalRequestFromVariants(request, variantEntries);
 
         Date requestDate = getCurrentDate();
@@ -594,19 +594,9 @@ public class CachingHttpClient implement
             return callBackend(target, request, context);
         }
 
-        HttpCacheEntry matchedEntry = null;
 
         String resultEtag = resultEtagHeader.getValue();
-        for (HttpCacheEntry variantEntry : variantEntries) {
-            Header variantEtagHeader = variantEntry.getFirstHeader(HeaderConstants.ETAG);
-            if (variantEtagHeader != null) {
-                String variantEtag = variantEtagHeader.getValue();
-                if (resultEtag.equals(variantEtag)) {
-                    matchedEntry = variantEntry;
-                    break;
-                }
-            }
-        }
+        HttpCacheEntry matchedEntry = variantEntries.get(resultEtag);
 
         if (matchedEntry == null) {
             log.debug("304 response did not contain ETag matching one sent in If-None-Match");
@@ -626,7 +616,7 @@ public class CachingHttpClient implement
                     //  request.  It would get the same result whether it went through our
                     //  cache or not...
                     HttpRequest unconditional = conditionalRequestBuilder
-                    .buildUnconditionalRequest(request, matchedEntry);
+                        .buildUnconditionalRequest(request, matchedEntry);
                     return callBackend(target, unconditional, context);
                 }
             } catch (DateParseException e) {

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java?rev=1045084&r1=1045083&r2=1045084&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ConditionalRequestBuilder.java Mon Dec 13 11:55:36 2010
@@ -26,8 +26,7 @@
  */
 package org.apache.http.impl.client.cache;
 
-import java.util.Set;
-
+import java.util.Map;
 import org.apache.http.Header;
 import org.apache.http.HeaderElement;
 import org.apache.http.HttpRequest;
@@ -93,33 +92,24 @@ class ConditionalRequestBuilder {
      * @return the wrapped request
      * @throws ProtocolException when I am unable to build a new origin request.
      */
-    public HttpRequest buildConditionalRequestFromVariants(HttpRequest request, Set<HttpCacheEntry> variantEntries)
-            throws ProtocolException {
+    public HttpRequest buildConditionalRequestFromVariants(HttpRequest request,
+            Map<String, HttpCacheEntry> variantEntries)
+                throws ProtocolException {
         RequestWrapper wrapperRequest = new RequestWrapper(request);
         wrapperRequest.resetHeaders();
 
         // we do not support partial content so all etags are used
         StringBuilder etags = new StringBuilder();
         boolean first = true;
-        for (HttpCacheEntry entry : variantEntries) {
-            Header etagHeader = entry.getFirstHeader(HeaderConstants.ETAG);
-            if (etagHeader != null) {
-                if (first) {
-                    etags.append(etagHeader.getValue());
-                    first = false;
-                } else {
-                    etags.append(",").append(etagHeader.getValue());
-                }
+        for(String etag : variantEntries.keySet()) {
+            if (!first) {
+                etags.append(",");
             }
+            first = false;
+            etags.append(etag);
         }
-        // if first is still true than no variants had a cache entry, return
-        //  unmodified wrapped request
-        if(first) {
-            return wrapperRequest;
-        }
-
+        
         wrapperRequest.setHeader(HeaderConstants.IF_NONE_MATCH, etags.toString());
-
         return wrapperRequest;
     }
 

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HttpCache.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HttpCache.java?rev=1045084&r1=1045083&r2=1045084&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HttpCache.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/HttpCache.java Mon Dec 13 11:55:36 2010
@@ -28,8 +28,7 @@ package org.apache.http.impl.client.cach
 
 import java.io.IOException;
 import java.util.Date;
-import java.util.Set;
-
+import java.util.Map;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
@@ -69,14 +68,14 @@ interface HttpCache {
         throws IOException;
 
     /**
-     * Retrieve all variants from the cache, if there are no variants than an empty
-     * {@link Set} is returned
+     * Retrieve all variants from the cache, if there are no variants then an empty
+     * {@link Map} is returned
      * @param host
      * @param request
-     * @return
+     * @return a <code>Map</code> mapping Etags to variant cache entries
      * @throws IOException
      */
-    Set<HttpCacheEntry> getVariantCacheEntries(HttpHost host, HttpRequest request)
+    Map<String,HttpCacheEntry> getVariantCacheEntriesWithEtags(HttpHost host, HttpRequest request)
         throws IOException;
 
     /**

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/AbstractProtocolTest.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/AbstractProtocolTest.java?rev=1045084&r1=1045083&r2=1045084&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/AbstractProtocolTest.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/AbstractProtocolTest.java Mon Dec 13 11:55:36 2010
@@ -26,8 +26,7 @@
  */
 package org.apache.http.impl.client.cache;
 
-import java.util.HashSet;
-
+import java.util.HashMap;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
@@ -104,8 +103,8 @@ public abstract class AbstractProtocolTe
 
         EasyMock.expect(mockCache.getCacheEntry(EasyMock.isA(HttpHost.class), EasyMock.isA(HttpRequest.class)))
             .andReturn(null).anyTimes();
-        EasyMock.expect(mockCache.getVariantCacheEntries(EasyMock.isA(HttpHost.class), EasyMock.isA(HttpRequest.class)))
-            .andReturn(new HashSet<HttpCacheEntry>()).anyTimes();
+        EasyMock.expect(mockCache.getVariantCacheEntriesWithEtags(EasyMock.isA(HttpHost.class), EasyMock.isA(HttpRequest.class)))
+            .andReturn(new HashMap<String,HttpCacheEntry>()).anyTimes();
 
         mockCache.flushCacheEntriesFor(EasyMock.isA(HttpHost.class), EasyMock.isA(HttpRequest.class));
         EasyMock.expectLastCall().anyTimes();

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestBasicHttpCache.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestBasicHttpCache.java?rev=1045084&r1=1045083&r2=1045084&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestBasicHttpCache.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestBasicHttpCache.java Mon Dec 13 11:55:36 2010
@@ -37,8 +37,6 @@ import java.io.InputStream;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
-
 import org.apache.http.Header;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpHost;
@@ -340,7 +338,7 @@ public class TestBasicHttpCache {
         HttpHost host = new HttpHost("foo.example.com");
         HttpRequest request = new HttpGet("http://foo.example.com/bar");
 
-        Set<HttpCacheEntry> variants = impl.getVariantCacheEntries(host, request);
+        Map<String,HttpCacheEntry> variants = impl.getVariantCacheEntriesWithEtags(host, request);
 
         assertNotNull(variants);
         assertEquals(0, variants.size());
@@ -366,7 +364,7 @@ public class TestBasicHttpCache {
         HttpResponse resp2 = HttpTestUtils.make200Response();
         resp2.setHeader("Date", DateUtils.formatDate(new Date()));
         resp2.setHeader("Cache-Control", "max-age=3600, public");
-        resp2.setHeader("ETag", "\"etag1\"");
+        resp2.setHeader("ETag", "\"etag2\"");
         resp2.setHeader("Vary", "Accept-Encoding");
         resp2.setHeader("Content-Encoding","gzip");
         resp2.setHeader("Vary", "Accept-Encoding");
@@ -374,7 +372,7 @@ public class TestBasicHttpCache {
         impl.cacheAndReturnResponse(host, req1, resp1, new Date(), new Date());
         impl.cacheAndReturnResponse(host, req2, resp2, new Date(), new Date());
 
-        Set<HttpCacheEntry> variants = impl.getVariantCacheEntries(host, req1);
+        Map<String,HttpCacheEntry> variants = impl.getVariantCacheEntriesWithEtags(host, req1);
 
         assertNotNull(variants);
         assertEquals(2, variants.size());

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=1045084&r1=1045083&r2=1045084&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 Mon Dec 13 11:55:36 2010
@@ -30,10 +30,9 @@ import java.io.IOException;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashSet;
+import java.util.HashMap;
 import java.util.List;
-import java.util.Set;
-
+import java.util.Map;
 import org.apache.http.Header;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
@@ -301,7 +300,7 @@ public class TestCachingHttpClient {
         cacheInvalidatorWasCalled();
         requestPolicyAllowsCaching(true);
         getCacheEntryReturns(null);
-        getVariantCacheEntriesReturns(new HashSet<HttpCacheEntry>());
+        getVariantCacheEntriesReturns(new HashMap<String,HttpCacheEntry>());
 
         requestProtocolValidationIsCalled();
         requestIsFatallyNonCompliant(null);
@@ -1586,57 +1585,28 @@ public class TestCachingHttpClient {
     }
 
     @Test
-    public void testNegotiateResponseFromVariantsForwardsCallIfNoVariantETags() throws ProtocolException, IOException {
-        impl = new CachingHttpClient(mockBackend);
-
-        HttpResponse originResponse = HttpTestUtils.make200Response();
-
-        Set<HttpCacheEntry> variants = new HashSet<HttpCacheEntry>();
-        variants.add(HttpTestUtils.makeCacheEntry());
-        variants.add(HttpTestUtils.makeCacheEntry());
-        variants.add(HttpTestUtils.makeCacheEntry());
-
-        Capture<HttpRequest> cap = new Capture<HttpRequest>();
-
-        EasyMock.expect(mockBackend.execute(EasyMock.isA(HttpHost.class),
-                EasyMock.capture(cap), EasyMock.isA(HttpContext.class)))
-                .andReturn(originResponse);
-
-        replayMocks();
-        HttpResponse resp = impl.negotiateResponseFromVariants(host, request, context, variants);
-        verifyMocks();
-
-        Assert.assertTrue(cap.hasCaptured());
-
-        HttpRequest captured = cap.getValue();
-        Assert.assertNull(captured.getFirstHeader(HeaderConstants.IF_NONE_MATCH));
-
-        Assert.assertEquals(resp.getStatusLine().getStatusCode(), HttpStatus.SC_OK);
-    }
-
-    @Test
     public void testNegotiateResponseFromVariantsReturnsVariantAndUpdatesEntryOnBackend304() throws Exception {
         HttpCacheEntry variant1 = HttpTestUtils
-                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "etag1") });
+                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "\"etag1\"") });
         HttpCacheEntry variant2 = HttpTestUtils
-                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "etag2") });
+                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "\"etag2\"") });
         HttpCacheEntry variant3 = HttpTestUtils
-                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "etag3") });
+                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "\"etag3\"") });
 
-        Set<HttpCacheEntry> variants = new HashSet<HttpCacheEntry>();
-        variants.add(variant1);
-        variants.add(variant2);
-        variants.add(variant3);
+        Map<String,HttpCacheEntry> variants = new HashMap<String,HttpCacheEntry>();
+        variants.put("\"etag1\"", variant1);
+        variants.put("\"etag2\"", variant2);
+        variants.put("\"etag3\"", variant3);
 
         HttpRequest variantConditionalRequest = new BasicHttpRequest("GET", "http://foo.com/bar", HttpVersion.HTTP_1_1);
         variantConditionalRequest.addHeader(new BasicHeader(HeaderConstants.IF_NONE_MATCH, "etag1, etag2, etag3"));
 
         HttpResponse originResponse = new BasicHttpResponse(HttpVersion.HTTP_1_1,
                 HttpStatus.SC_NOT_MODIFIED, "Not Modified");
-        originResponse.addHeader(HeaderConstants.ETAG, "etag2");
+        originResponse.addHeader(HeaderConstants.ETAG, "\"etag2\"");
 
         HttpCacheEntry updatedMatchedEntry =  HttpTestUtils
-                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "etag2") });
+                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "\"etag2\"") });
 
         HttpResponse matchedResponse = HttpTestUtils.make200Response();
         HttpResponse response = HttpTestUtils.make200Response();
@@ -1663,18 +1633,18 @@ public class TestCachingHttpClient {
     @Test
     public void testNegotiateResponseFromVariantsReturns200OnBackend200() throws Exception {
         HttpCacheEntry variant1 = HttpTestUtils
-                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "etag1") });
+                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "\"etag1\"") });
         HttpCacheEntry variant2 = HttpTestUtils
-                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "etag2") });
+                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "\"etag2\"") });
         HttpCacheEntry variant3 = HttpTestUtils
-                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "etag3") });
+                .makeCacheEntry(new Header[] {new BasicHeader(HeaderConstants.ETAG, "\"etag3\"") });
 
         HttpCacheEntry cacheEntry = null;
 
-        Set<HttpCacheEntry> variants = new HashSet<HttpCacheEntry>();
-        variants.add(variant1);
-        variants.add(variant2);
-        variants.add(variant3);
+        Map<String,HttpCacheEntry> variants = new HashMap<String,HttpCacheEntry>();
+        variants.put("\"etag1\"", variant1);
+        variants.put("\"etag2\"", variant2);
+        variants.put("\"etag3\"", variant3);
 
         HttpRequest variantConditionalRequest = new BasicHttpRequest("GET", "http://foo.com/bar", HttpVersion.HTTP_1_1);
         variantConditionalRequest.addHeader(new BasicHeader(HeaderConstants.IF_NONE_MATCH, "etag1, etag2, etag3"));
@@ -1914,7 +1884,7 @@ public class TestCachingHttpClient {
         EasyMock.expect(mockCache.getCacheEntry(EasyMock.same(host),
                 EasyMock.isA(HttpRequest.class)))
             .andThrow(new IOException()).anyTimes();
-        EasyMock.expect(mockCache.getVariantCacheEntries(EasyMock.same(host),
+        EasyMock.expect(mockCache.getVariantCacheEntriesWithEtags(EasyMock.same(host),
                 EasyMock.isA(HttpRequest.class)))
             .andThrow(new IOException()).anyTimes();
         EasyMock.expect(mockCache.cacheAndReturnResponse(EasyMock.same(host),
@@ -1988,8 +1958,8 @@ public class TestCachingHttpClient {
         EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(result);
     }
 
-    private void getVariantCacheEntriesReturns(Set<HttpCacheEntry> result) throws IOException {
-        EasyMock.expect(mockCache.getVariantCacheEntries(host, request)).andReturn(result);
+    private void getVariantCacheEntriesReturns(Map<String,HttpCacheEntry> result) throws IOException {
+        EasyMock.expect(mockCache.getVariantCacheEntriesWithEtags(host, request)).andReturn(result);
     }
 
     private void cacheInvalidatorWasCalled()  throws IOException {
@@ -2020,7 +1990,7 @@ public class TestCachingHttpClient {
                 EasyMock.<HttpCacheEntry>anyObject())).andReturn(b);
     }
 
-    private void conditionalVariantRequestBuilderReturns(Set<HttpCacheEntry> variantEntries, HttpRequest validate)
+    private void conditionalVariantRequestBuilderReturns(Map<String,HttpCacheEntry> variantEntries, HttpRequest validate)
             throws Exception {
         EasyMock.expect(mockConditionalRequestBuilder.buildConditionalRequestFromVariants(request, variantEntries))
             .andReturn(validate);

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestConditionalRequestBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestConditionalRequestBuilder.java?rev=1045084&r1=1045083&r2=1045084&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestConditionalRequestBuilder.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestConditionalRequestBuilder.java Mon Dec 13 11:55:36 2010
@@ -27,9 +27,8 @@
 package org.apache.http.impl.client.cache;
 
 import java.util.Date;
-import java.util.HashSet;
-import java.util.Set;
-
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.http.Header;
 import org.apache.http.HeaderElement;
 import org.apache.http.HttpRequest;
@@ -304,14 +303,14 @@ public class TestConditionalRequestBuild
 
     @Test
     public void testBuildConditionalRequestFromVariants() throws Exception {
-        String etag1 = "123";
-        String etag2 = "456";
-        String etag3 = "789";
-
-        Set<HttpCacheEntry> variantEntries = new HashSet<HttpCacheEntry>();
-        variantEntries.add(HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag1) }));
-        variantEntries.add(HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag2) }));
-        variantEntries.add(HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag3) }));
+        String etag1 = "\"123\"";
+        String etag2 = "\"456\"";
+        String etag3 = "\"789\"";
+
+        Map<String,HttpCacheEntry> variantEntries = new HashMap<String,HttpCacheEntry>();
+        variantEntries.put(etag1, HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag1) }));
+        variantEntries.put(etag2, HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag2) }));
+        variantEntries.put(etag3, HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag3) }));
 
         HttpRequest conditional = impl.buildConditionalRequestFromVariants(request, variantEntries);
 
@@ -328,38 +327,4 @@ public class TestConditionalRequestBuild
         Assert.assertEquals(ifNoneMatch, "");
     }
 
-    @Test
-    public void testBuildConditionalRequestFromVariantsWithNoETags() throws Exception {
-        Set<HttpCacheEntry> variantEntries = new HashSet<HttpCacheEntry>();
-        variantEntries.add(HttpTestUtils.makeCacheEntry());
-        variantEntries.add(HttpTestUtils.makeCacheEntry());
-        variantEntries.add(HttpTestUtils.makeCacheEntry());
-
-        HttpRequest conditional = impl.buildConditionalRequestFromVariants(request, variantEntries);
-
-        Assert.assertNull(conditional.getFirstHeader(HeaderConstants.IF_NONE_MATCH));
-    }
-
-    @Test
-    public void testBuildConditionalRequestFromVariantsMixedETagPresence() throws Exception {
-        String etag1 = "123";
-        String etag2 = "456";
-
-        Set<HttpCacheEntry> variantEntries = new HashSet<HttpCacheEntry>();
-        variantEntries.add(HttpTestUtils.makeCacheEntry());
-        variantEntries.add(HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag1) }));
-        variantEntries.add(HttpTestUtils.makeCacheEntry(new Header[] { new BasicHeader("ETag", etag2) }));
-
-        HttpRequest conditional = impl.buildConditionalRequestFromVariants(request, variantEntries);
-
-        // seems like a lot of work, but necessary, check for existence and exclusiveness
-        String ifNoneMatch = conditional.getFirstHeader(HeaderConstants.IF_NONE_MATCH).getValue();
-        Assert.assertTrue(ifNoneMatch.contains(etag1));
-        Assert.assertTrue(ifNoneMatch.contains(etag2));
-        ifNoneMatch = ifNoneMatch.replace(etag1, "");
-        ifNoneMatch = ifNoneMatch.replace(etag2, "");
-        ifNoneMatch = ifNoneMatch.replace(",","");
-        ifNoneMatch = ifNoneMatch.replace(" ", "");
-        Assert.assertEquals(ifNoneMatch, "");
-    }
 }