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/08/04 13:34:49 UTC
svn commit: r982219 - in
/httpcomponents/httpclient/trunk/httpclient-cache/src:
main/java/org/apache/http/client/cache/
main/java/org/apache/http/impl/client/cache/
test/java/org/apache/http/impl/client/cache/
Author: olegk
Date: Wed Aug 4 11:34:48 2010
New Revision: 982219
URL: http://svn.apache.org/viewvc?rev=982219&view=rev
Log:
HTTP cache entry implementation backed by a temporary file
Added:
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java (with props)
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java (with props)
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java (with props)
Modified:
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntryFactory.java
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
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/CachingHttpClient.java
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntry.java
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntry.java
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntryFactory.java
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntry.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
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntryFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntryFactory.java?rev=982219&r1=982218&r2=982219&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntryFactory.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntryFactory.java Wed Aug 4 11:34:48 2010
@@ -40,6 +40,7 @@ import org.apache.http.StatusLine;
public interface HttpCacheEntryFactory {
HttpCacheEntry generate(
+ String requestId,
Date requestDate,
Date responseDate,
StatusLine statusLine,
@@ -47,6 +48,7 @@ public interface HttpCacheEntryFactory {
byte[] body) throws IOException;
HttpCacheEntry copyVariant(
+ String requestId,
HttpCacheEntry entry,
String variantURI) throws IOException;
Added: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java?rev=982219&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java Wed Aug 4 11:34:48 2010
@@ -0,0 +1,79 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.impl.client.cache;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.Formatter;
+import java.util.Locale;
+
+import org.apache.http.annotation.Immutable;
+
+/**
+ * Should produce reasonably unique tokens.
+ */
+@Immutable
+class BasicIdGenerator {
+
+ private final String hostname;
+ private final SecureRandom rnd;
+
+ private long count;
+
+ public BasicIdGenerator() {
+ super();
+ String hostname;
+ try {
+ hostname = InetAddress.getLocalHost().getHostName();
+ } catch (UnknownHostException ex) {
+ hostname = "localhost";
+ }
+ this.hostname = hostname;
+ try {
+ this.rnd = SecureRandom.getInstance("SHA1PRNG");
+ } catch (NoSuchAlgorithmException ex) {
+ throw new Error(ex);
+ }
+ this.rnd.setSeed(System.currentTimeMillis());
+ }
+
+ public synchronized String generate() {
+ this.count++;
+ int rndnum = this.rnd.nextInt();
+ StringBuilder buffer = new StringBuilder();
+ buffer.append(System.currentTimeMillis());
+ buffer.append('.');
+ Formatter formatter = new Formatter(buffer, Locale.US);
+ formatter.format("%1$016x-%2$08x", this.count, rndnum);
+ buffer.append('.');
+ buffer.append(this.hostname);
+ return buffer.toString();
+ }
+
+}
\ No newline at end of file
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/BasicIdGenerator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java?rev=982219&r1=982218&r2=982219&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java Wed Aug 4 11:34:48 2010
@@ -78,10 +78,10 @@ class CacheEntity implements HttpEntity,
throw new IllegalArgumentException("Output stream may not be null");
}
InputStream instream = this.cacheEntry.getBody();
- byte[] buf = new byte[2048];
- int len;
- while ((len = instream.read(buf)) != -1) {
- outstream.write(buf, 0, len);
+ try {
+ IOUtils.copy(instream, outstream);
+ } finally {
+ instream.close();
}
}
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=982219&r1=982218&r2=982219&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 Wed Aug 4 11:34:48 2010
@@ -69,6 +69,7 @@ class CacheEntryUpdater {
/**
* Update the entry with the new information from the response.
*
+ * @param request id
* @param entry The cache Entry to be updated
* @param requestDate When the request was performed
* @param responseDate When the response was gotten
@@ -77,6 +78,7 @@ class CacheEntryUpdater {
* @throws java.io.IOException if something bad happens while trying to read the body from the original entry
*/
public HttpCacheEntry updateCacheEntry(
+ String requestId,
HttpCacheEntry entry,
Date requestDate,
Date responseDate,
@@ -91,6 +93,7 @@ class CacheEntryUpdater {
outstream.write(buf, 0, len);
}
HttpCacheEntry updated = cacheEntryFactory.generate(
+ requestId,
requestDate,
responseDate,
entry.getStatusLine(),
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=982219&r1=982218&r2=982219&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 Wed Aug 4 11:34:48 2010
@@ -524,7 +524,12 @@ public class CachingHttpClient implement
int statusCode = backendResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_NOT_MODIFIED || statusCode == HttpStatus.SC_OK) {
cacheUpdates.getAndIncrement();
- HttpCacheEntry updatedEntry = cacheEntryUpdater.updateCacheEntry(cacheEntry, requestDate, responseDate, backendResponse);
+ HttpCacheEntry updatedEntry = cacheEntryUpdater.updateCacheEntry(
+ request.getRequestLine().getUri(),
+ cacheEntry,
+ requestDate,
+ responseDate,
+ backendResponse);
storeInCache(target, request, updatedEntry);
return responseGenerator.generateResponse(updatedEntry);
}
@@ -552,27 +557,30 @@ public class CachingHttpClient implement
final HttpHost target,
final HttpRequest req,
final HttpCacheEntry entry) throws IOException {
+ final String parentURI = uriExtractor.getURI(target, req);
final String variantURI = uriExtractor.getVariantURI(target, req, entry);
responseCache.putEntry(variantURI, entry);
HttpCacheUpdateCallback callback = new HttpCacheUpdateCallback() {
public HttpCacheEntry update(HttpCacheEntry existing) throws IOException {
- return doGetUpdatedParentEntry(existing, entry, variantURI);
+ return doGetUpdatedParentEntry(
+ req.getRequestLine().getUri(), existing, entry, variantURI);
}
};
- String parentURI = uriExtractor.getURI(target, req);
responseCache.updateEntry(parentURI, callback);
}
HttpCacheEntry doGetUpdatedParentEntry(
- HttpCacheEntry existing,
- HttpCacheEntry entry, String variantURI) throws IOException {
+ final String requestId,
+ final HttpCacheEntry existing,
+ final HttpCacheEntry entry,
+ final String variantURI) throws IOException {
if (existing != null) {
- return cacheEntryFactory.copyVariant(existing, variantURI);
+ return cacheEntryFactory.copyVariant(requestId, existing, variantURI);
} else {
- return cacheEntryFactory.copyVariant(entry, variantURI);
+ return cacheEntryFactory.copyVariant(requestId, entry, variantURI);
}
}
@@ -629,6 +637,7 @@ public class CachingHttpClient implement
int correctedStatus = corrected.getStatusLine().getStatusCode();
if (HttpStatus.SC_BAD_GATEWAY != correctedStatus) {
HttpCacheEntry entry = cacheEntryFactory.generate(
+ request.getRequestLine().getUri(),
requestDate,
responseDate,
corrected.getStatusLine(),
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntry.java?rev=982219&r1=982218&r2=982219&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntry.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntry.java Wed Aug 4 11:34:48 2010
@@ -62,6 +62,10 @@ class FileCacheEntry extends HttpCacheEn
this.resource = new FileResource(file);
}
+ File getRawBody() {
+ return this.file;
+ }
+
@Override
public long getBodyLength() {
return this.file.length();
Added: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java?rev=982219&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java Wed Aug 4 11:34:48 2010
@@ -0,0 +1,105 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.impl.client.cache;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.http.Header;
+import org.apache.http.StatusLine;
+import org.apache.http.annotation.Immutable;
+import org.apache.http.client.cache.HttpCacheEntry;
+import org.apache.http.client.cache.HttpCacheEntryFactory;
+
+/**
+ * Generates {@link HttpCacheEntry} instances whose body is stored in a temporary file.
+ *
+ * @since 4.1
+ */
+@Immutable
+public class FileCacheEntryFactory implements HttpCacheEntryFactory {
+
+ private final File cacheDir;
+ private final BasicIdGenerator idgen;
+
+ public FileCacheEntryFactory(final File cacheDir) {
+ super();
+ this.cacheDir = cacheDir;
+ this.idgen = new BasicIdGenerator();
+ }
+
+ public HttpCacheEntry generate(
+ final String requestId,
+ final Date requestDate,
+ final Date responseDate,
+ final StatusLine statusLine,
+ final Header[] headers,
+ byte[] body) throws IOException {
+
+ String uid = this.idgen.generate();
+ File file = new File(this.cacheDir, uid + "." + requestId);
+ return new FileCacheEntry(
+ requestDate,
+ responseDate,
+ statusLine,
+ headers,
+ file,
+ null);
+ }
+
+ public HttpCacheEntry copyVariant(
+ final String requestId,
+ final HttpCacheEntry entry,
+ final String variantURI) throws IOException {
+
+ String uid = this.idgen.generate();
+ File file = new File(this.cacheDir, uid + "-" + requestId);
+
+ Set<String> variants = new HashSet<String>(entry.getVariantURIs());
+ variants.add(variantURI);
+
+ if (entry instanceof FileCacheEntry) {
+ File src = ((FileCacheEntry) entry).getRawBody();
+ IOUtils.copyFile(src, file);
+ } else {
+ FileOutputStream out = new FileOutputStream(file);
+ IOUtils.copyAndClose(entry.getBody(), out);
+ }
+ return new FileCacheEntry(
+ entry.getRequestDate(),
+ entry.getResponseDate(),
+ entry.getStatusLine(),
+ entry.getAllHeaders(),
+ file,
+ variants);
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/FileCacheEntryFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java?rev=982219&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java Wed Aug 4 11:34:48 2010
@@ -0,0 +1,96 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.impl.client.cache;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.RandomAccessFile;
+import java.nio.channels.FileChannel;
+
+import org.apache.http.annotation.Immutable;
+
+@Immutable
+class IOUtils {
+
+ static void copy(final InputStream in, final OutputStream out) throws IOException {
+ byte[] buf = new byte[2048];
+ int len;
+ while ((len = in.read(buf)) != -1) {
+ out.write(buf, 0, len);
+ }
+ }
+
+ static void closeSilently(final Closeable closable) {
+ try {
+ closable.close();
+ } catch (IOException ignore) {
+ }
+ }
+
+ static void copyAndClose(final InputStream in, final OutputStream out) throws IOException {
+ try {
+ copy(in, out);
+ in.close();
+ out.close();
+ } catch (IOException ex) {
+ closeSilently(in);
+ closeSilently(out);
+ // Propagate the original exception
+ throw ex;
+ }
+ }
+
+ static void copyFile(final File in, final File out) throws IOException {
+ RandomAccessFile f1 = new RandomAccessFile(in, "r");
+ RandomAccessFile f2 = new RandomAccessFile(out, "w");
+ try {
+ FileChannel c1 = f1.getChannel();
+ FileChannel c2 = f2.getChannel();
+ try {
+ c1.transferTo(0, f1.length(), c2);
+ c1.close();
+ c2.close();
+ } catch (IOException ex) {
+ closeSilently(c1);
+ closeSilently(c2);
+ // Propagate the original exception
+ throw ex;
+ }
+ f1.close();
+ f2.close();
+ } catch (IOException ex) {
+ closeSilently(f1);
+ closeSilently(f2);
+ // Propagate the original exception
+ throw ex;
+ }
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/IOUtils.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntry.java?rev=982219&r1=982218&r2=982219&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntry.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntry.java Wed Aug 4 11:34:48 2010
@@ -59,6 +59,10 @@ class MemCacheEntry extends HttpCacheEnt
this.body = body;
}
+ byte[] getRawBody() {
+ return this.body;
+ }
+
@Override
public long getBodyLength() {
return this.body.length;
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntryFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntryFactory.java?rev=982219&r1=982218&r2=982219&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntryFactory.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/MemCacheEntryFactory.java Wed Aug 4 11:34:48 2010
@@ -28,7 +28,6 @@ package org.apache.http.impl.client.cach
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
@@ -41,18 +40,18 @@ import org.apache.http.client.cache.Http
import org.apache.http.client.cache.HttpCacheEntryFactory;
/**
- * Generates {@link MemCacheEntry}s.
+ * Generates {@link HttpCacheEntry} instances stored entirely in memory.
*
* @since 4.1
*/
@Immutable
-class MemCacheEntryFactory implements HttpCacheEntryFactory {
+public class MemCacheEntryFactory implements HttpCacheEntryFactory {
public HttpCacheEntry generateEntry(
- Date requestDate,
- Date responseDate,
- HttpResponse response,
- byte[] body) {
+ final Date requestDate,
+ final Date responseDate,
+ final HttpResponse response,
+ final byte[] body) {
return new MemCacheEntry(requestDate,
responseDate,
response.getStatusLine(),
@@ -62,6 +61,7 @@ class MemCacheEntryFactory implements Ht
}
public HttpCacheEntry generate(
+ final String requestId,
final Date requestDate,
final Date responseDate,
final StatusLine statusLine,
@@ -76,23 +76,28 @@ class MemCacheEntryFactory implements Ht
}
public HttpCacheEntry copyVariant(
- final HttpCacheEntry entry, final String variantURI) throws IOException {
+ final String requestId,
+ final HttpCacheEntry entry,
+ final String variantURI) throws IOException {
+ byte[] body;
+ if (entry instanceof MemCacheEntry) {
+ body = ((MemCacheEntry) entry).getRawBody();
+ } else {
+ ByteArrayOutputStream outstream = new ByteArrayOutputStream();
+ IOUtils.copyAndClose(entry.getBody(), outstream);
+ body = outstream.toByteArray();
+ }
+
Set<String> variants = new HashSet<String>(entry.getVariantURIs());
variants.add(variantURI);
- ByteArrayOutputStream outstream = new ByteArrayOutputStream();
- InputStream instream = entry.getBody();
- byte[] buf = new byte[2048];
- int len;
- while ((len = instream.read(buf)) != -1) {
- outstream.write(buf, 0, len);
- }
+
return new MemCacheEntry(
entry.getRequestDate(),
entry.getResponseDate(),
entry.getStatusLine(),
entry.getAllHeaders(),
- outstream.toByteArray(),
+ body,
variants);
- }
+ }
}
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntry.java?rev=982219&r1=982218&r2=982219&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntry.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCacheEntry.java Wed Aug 4 11:34:48 2010
@@ -110,8 +110,8 @@ public class TestCacheEntry {
MemCacheEntryFactory entryGenerator = new MemCacheEntryFactory();
- HttpCacheEntry addedOne = entryGenerator.copyVariant(entry, "foo");
- HttpCacheEntry addedTwo = entryGenerator.copyVariant(addedOne, "bar");
+ HttpCacheEntry addedOne = entryGenerator.copyVariant(null, entry, "foo");
+ HttpCacheEntry addedTwo = entryGenerator.copyVariant(null, addedOne, "bar");
Set<String> variants = addedTwo.getVariantURIs();
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=982219&r1=982218&r2=982219&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 Wed Aug 4 11:34:48 2010
@@ -67,7 +67,7 @@ public class TestCacheEntryUpdater {
CacheEntry entry = new CacheEntry();
BasicHttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK");
- HttpCacheEntry newEntry = impl.updateCacheEntry(entry, requestDate, responseDate, response);
+ HttpCacheEntry newEntry = impl.updateCacheEntry(null, entry, requestDate, responseDate, response);
assertNotSame(newEntry, entry);
}
@@ -85,7 +85,7 @@ public class TestCacheEntryUpdater {
"http", 1, 1), HttpStatus.SC_NOT_MODIFIED, ""));
response.setHeaders(new Header[]{});
- HttpCacheEntry updatedEntry = impl.updateCacheEntry(cacheEntry, new Date(), new Date(), response);
+ HttpCacheEntry updatedEntry = impl.updateCacheEntry(null, cacheEntry, new Date(), new Date(), response);
Assert.assertEquals(2, updatedEntry.getAllHeaders().length);
@@ -110,7 +110,7 @@ public class TestCacheEntryUpdater {
new BasicHeader("Last-Modified", DateUtils.formatDate(responseDate)),
new BasicHeader("Cache-Control", "public"),});
- HttpCacheEntry updatedEntry = impl.updateCacheEntry(cacheEntry, new Date(), new Date(), response);
+ HttpCacheEntry updatedEntry = impl.updateCacheEntry(null, cacheEntry, new Date(), new Date(), response);
Assert.assertEquals(4, updatedEntry.getAllHeaders().length);
@@ -136,7 +136,7 @@ public class TestCacheEntryUpdater {
new BasicHeader("Last-Modified", DateUtils.formatDate(responseDate)),
new BasicHeader("Cache-Control", "public"),});
- HttpCacheEntry updatedEntry = impl.updateCacheEntry(cacheEntry, new Date(), new Date(), response);
+ HttpCacheEntry updatedEntry = impl.updateCacheEntry(null, cacheEntry, new Date(), new Date(), response);
Assert.assertEquals(4, updatedEntry.getAllHeaders().length);
@@ -164,7 +164,7 @@ public class TestCacheEntryUpdater {
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK");
- HttpCacheEntry updated = impl.updateCacheEntry(entry, twoSecondsAgo, oneSecondAgo, response);
+ HttpCacheEntry updated = impl.updateCacheEntry(null, entry, twoSecondsAgo, oneSecondAgo, response);
assertEquals(twoSecondsAgo, updated.getRequestDate());
assertEquals(oneSecondAgo, updated.getResponseDate());
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=982219&r1=982218&r2=982219&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 Wed Aug 4 11:34:48 2010
@@ -52,7 +52,9 @@ import org.apache.http.client.cache.Http
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.message.BasicHttpRequest;
import org.apache.http.message.BasicHttpResponse;
+import org.apache.http.message.BasicRequestLine;
import org.apache.http.message.BasicStatusLine;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;
@@ -78,6 +80,7 @@ public class TestCachingHttpClient {
private static final String GET_RESPONSE_READER = "getResponseReader";
private static final StatusLine SC_OK = new BasicStatusLine(HttpVersion.HTTP_1_1, 200, "OK");
+ private static final RequestLine GET_STUFF = new BasicRequestLine("GET", "/stuff", HttpVersion.HTTP_1_1);
private static final Header[] HEADERS = new Header[] {};
private CachingHttpClient impl;
@@ -90,7 +93,6 @@ public class TestCachingHttpClient {
private HttpCache mockCache;
private CachedResponseSuitabilityChecker mockSuitabilityChecker;
private ResponseCachingPolicy mockResponsePolicy;
- private HttpRequest mockRequest;
private HttpResponse mockBackendResponse;
private CacheEntry mockCacheEntry;
private CacheEntry mockVariantCacheEntry;
@@ -98,9 +100,7 @@ public class TestCachingHttpClient {
private URIExtractor mockExtractor;
private HttpCacheEntryFactory mockEntryGenerator;
private CachedHttpResponseGenerator mockResponseGenerator;
-
private SizeLimitedResponseReader mockResponseReader;
- private HttpHost host;
private ClientConnectionManager mockConnectionManager;
private HttpContext mockContext;
private ResponseHandler<Object> mockHandler;
@@ -108,19 +108,17 @@ public class TestCachingHttpClient {
private HttpUriRequest mockUriRequest;
private HttpResponse mockCachedResponse;
private HttpResponse mockReconstructedResponse;
-
private ConditionalRequestBuilder mockConditionalRequestBuilder;
-
private HttpRequest mockConditionalRequest;
-
private StatusLine mockStatusLine;
- private Date requestDate;
- private Date responseDate;
-
private CacheEntryUpdater mockCacheEntryUpdater;
private ResponseProtocolCompliance mockResponseProtocolCompliance;
private RequestProtocolCompliance mockRequestProtocolCompliance;
- private RequestLine mockRequestLine;
+
+ private Date requestDate;
+ private Date responseDate;
+ private HttpHost host;
+ private HttpRequest request;
@SuppressWarnings("unchecked")
@Before
@@ -137,7 +135,6 @@ public class TestCachingHttpClient {
mockContext = EasyMock.createMock(HttpContext.class);
mockHandler = EasyMock.createMock(ResponseHandler.class);
mockParams = EasyMock.createMock(HttpParams.class);
- mockRequest = EasyMock.createMock(HttpRequest.class);
mockBackendResponse = EasyMock.createMock(HttpResponse.class);
mockUriRequest = EasyMock.createMock(HttpUriRequest.class);
mockCacheEntry = EasyMock.createMock(CacheEntry.class);
@@ -155,12 +152,11 @@ public class TestCachingHttpClient {
mockReconstructedResponse = EasyMock.createMock(HttpResponse.class);
mockResponseProtocolCompliance = EasyMock.createMock(ResponseProtocolCompliance.class);
mockRequestProtocolCompliance = EasyMock.createMock(RequestProtocolCompliance.class);
- mockRequestLine = EasyMock.createMock(RequestLine.class);
-
requestDate = new Date(System.currentTimeMillis() - 1000);
responseDate = new Date();
host = new HttpHost("foo.example.com");
+ request = new BasicHttpRequest(GET_STUFF);
impl = new CachingHttpClient(mockBackend, mockValidityPolicy, mockResponsePolicy, mockEntryGenerator,
mockExtractor, mockCache, mockResponseGenerator, mockInvalidator,
mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder,
@@ -186,7 +182,6 @@ public class TestCachingHttpClient {
EasyMock.replay(mockContext);
EasyMock.replay(mockHandler);
EasyMock.replay(mockParams);
- EasyMock.replay(mockRequest);
EasyMock.replay(mockBackendResponse);
EasyMock.replay(mockUriRequest);
EasyMock.replay(mockCachedResponse);
@@ -220,7 +215,6 @@ public class TestCachingHttpClient {
EasyMock.verify(mockContext);
EasyMock.verify(mockHandler);
EasyMock.verify(mockParams);
- EasyMock.verify(mockRequest);
EasyMock.verify(mockBackendResponse);
EasyMock.verify(mockUriRequest);
EasyMock.verify(mockCachedResponse);
@@ -256,7 +250,7 @@ public class TestCachingHttpClient {
responseDoesNotHaveExplicitContentLength();
replayMocks();
- HttpResponse result = impl.handleBackendResponse(host, mockRequest, requestDate,
+ HttpResponse result = impl.handleBackendResponse(host, request, requestDate,
responseDate, mockBackendResponse);
verifyMocks();
@@ -272,26 +266,21 @@ public class TestCachingHttpClient {
callBackendReturnsResponse(mockBackendResponse);
requestProtocolValidationIsCalled();
requestIsFatallyNonCompliant(null);
- requestInspectsRequestLine();
replayMocks();
- HttpResponse result = impl.execute(host, mockRequest, mockContext);
+ HttpResponse result = impl.execute(host, request, mockContext);
verifyMocks();
Assert.assertSame(mockBackendResponse, result);
}
- private void requestInspectsRequestLine() {
- EasyMock.expect(mockRequest.getRequestLine()).andReturn(mockRequestLine);
- }
-
private void requestIsFatallyNonCompliant(RequestProtocolError error) {
List<RequestProtocolError> errors = new ArrayList<RequestProtocolError>();
if (error != null) {
errors.add(error);
}
EasyMock.expect(
- mockRequestProtocolCompliance.requestIsFatallyNonCompliant(mockRequest)).andReturn(
+ mockRequestProtocolCompliance.requestIsFatallyNonCompliant(request)).andReturn(
errors);
}
@@ -305,7 +294,7 @@ public class TestCachingHttpClient {
putInCache(theURI);
replayMocks();
- impl.storeInCache(host, mockRequest, mockCacheEntry);
+ impl.storeInCache(host, request, mockCacheEntry);
verifyMocks();
}
@@ -315,7 +304,7 @@ public class TestCachingHttpClient {
final CacheEntry entry = new CacheEntry();
copyCacheEntry(entry, variantURI);
replayMocks();
- impl.doGetUpdatedParentEntry(null, entry, variantURI);
+ impl.doGetUpdatedParentEntry(GET_STUFF.getUri(), null, entry, variantURI);
verifyMocks();
}
@@ -328,12 +317,11 @@ public class TestCachingHttpClient {
getCacheEntryReturns(null);
requestProtocolValidationIsCalled();
requestIsFatallyNonCompliant(null);
- requestInspectsRequestLine();
callBackendReturnsResponse(mockBackendResponse);
replayMocks();
- HttpResponse result = impl.execute(host, mockRequest, mockContext);
+ HttpResponse result = impl.execute(host, request, mockContext);
verifyMocks();
Assert.assertSame(mockBackendResponse, result);
@@ -349,7 +337,6 @@ public class TestCachingHttpClient {
requestPolicyAllowsCaching(true);
requestProtocolValidationIsCalled();
requestIsFatallyNonCompliant(null);
- requestInspectsRequestLine();
getCacheEntryReturns(mockCacheEntry);
cacheEntrySuitable(false);
@@ -357,7 +344,7 @@ public class TestCachingHttpClient {
callBackendReturnsResponse(mockBackendResponse);
replayMocks();
- HttpResponse result = impl.execute(host, mockRequest, mockContext);
+ HttpResponse result = impl.execute(host, request, mockContext);
verifyMocks();
Assert.assertSame(mockBackendResponse, result);
@@ -373,7 +360,6 @@ public class TestCachingHttpClient {
requestPolicyAllowsCaching(true);
requestProtocolValidationIsCalled();
requestIsFatallyNonCompliant(null);
- requestInspectsRequestLine();
getCacheEntryReturns(mockCacheEntry);
cacheEntrySuitable(false);
@@ -381,7 +367,7 @@ public class TestCachingHttpClient {
revalidateCacheEntryReturns(mockBackendResponse);
replayMocks();
- HttpResponse result = impl.execute(host, mockRequest, mockContext);
+ HttpResponse result = impl.execute(host, request, mockContext);
verifyMocks();
Assert.assertSame(mockBackendResponse, result);
@@ -407,7 +393,7 @@ public class TestCachingHttpClient {
replayMocks();
- HttpResponse result = impl.revalidateCacheEntry(host, mockRequest, mockContext,
+ HttpResponse result = impl.revalidateCacheEntry(host, request, mockContext,
mockCacheEntry);
verifyMocks();
@@ -435,7 +421,7 @@ public class TestCachingHttpClient {
replayMocks();
- HttpResponse result = impl.revalidateCacheEntry(host, mockRequest, mockContext, mockCacheEntry);
+ HttpResponse result = impl.revalidateCacheEntry(host, request, mockContext, mockCacheEntry);
verifyMocks();
@@ -455,10 +441,9 @@ public class TestCachingHttpClient {
cacheEntrySuitable(true);
responseIsGeneratedFromCache();
requestIsFatallyNonCompliant(null);
- requestInspectsRequestLine();
replayMocks();
- HttpResponse result = impl.execute(host, mockRequest, mockContext);
+ HttpResponse result = impl.execute(host, request, mockContext);
verifyMocks();
Assert.assertSame(mockCachedResponse, result);
@@ -468,13 +453,13 @@ public class TestCachingHttpClient {
public void testCallBackendMakesBackEndRequestAndHandlesResponse() throws Exception {
mockImplMethods(GET_CURRENT_DATE, HANDLE_BACKEND_RESPONSE);
getCurrentDateReturns(requestDate);
- backendCallWasMadeWithRequest(mockRequest);
+ backendCallWasMadeWithRequest(request);
getCurrentDateReturns(responseDate);
- handleBackendResponseReturnsResponse(mockRequest, mockBackendResponse);
+ handleBackendResponseReturnsResponse(request, mockBackendResponse);
replayMocks();
- impl.callBackend(host, mockRequest, mockContext);
+ impl.callBackend(host, request, mockContext);
verifyMocks();
}
@@ -490,7 +475,7 @@ public class TestCachingHttpClient {
removeFromCache(theURI);
replayMocks();
- HttpResponse result = impl.handleBackendResponse(host, mockRequest, currentDate,
+ HttpResponse result = impl.handleBackendResponse(host, request, currentDate,
currentDate, mockBackendResponse);
verifyMocks();
@@ -505,7 +490,7 @@ public class TestCachingHttpClient {
gotCacheMiss(theURI);
replayMocks();
- HttpCacheEntry result = impl.getCacheEntry(host, mockRequest);
+ HttpCacheEntry result = impl.getCacheEntry(host, request);
verifyMocks();
Assert.assertNull(result);
}
@@ -519,7 +504,7 @@ public class TestCachingHttpClient {
cacheEntryHasVariants(false);
replayMocks();
- HttpCacheEntry result = impl.getCacheEntry(host, mockRequest);
+ HttpCacheEntry result = impl.getCacheEntry(host, request);
verifyMocks();
Assert.assertSame(mockCacheEntry, result);
}
@@ -536,7 +521,7 @@ public class TestCachingHttpClient {
gotCacheMiss(variantURI);
replayMocks();
- HttpCacheEntry result = impl.getCacheEntry(host, mockRequest);
+ HttpCacheEntry result = impl.getCacheEntry(host, request);
verifyMocks();
Assert.assertNull(result);
}
@@ -553,7 +538,7 @@ public class TestCachingHttpClient {
gotCacheHit(variantURI, mockVariantCacheEntry);
replayMocks();
- HttpCacheEntry result = impl.getCacheEntry(host, mockRequest);
+ HttpCacheEntry result = impl.getCacheEntry(host, request);
verifyMocks();
Assert.assertSame(mockVariantCacheEntry, result);
}
@@ -562,7 +547,7 @@ public class TestCachingHttpClient {
public void testTooLargeResponsesAreNotCached() throws Exception {
mockImplMethods(GET_CURRENT_DATE, GET_RESPONSE_READER, STORE_IN_CACHE);
getCurrentDateReturns(requestDate);
- backendCallWasMadeWithRequest(mockRequest);
+ backendCallWasMadeWithRequest(request);
responseProtocolValidationIsCalled();
getCurrentDateReturns(responseDate);
@@ -573,7 +558,7 @@ public class TestCachingHttpClient {
replayMocks();
- impl.callBackend(host, mockRequest, mockContext);
+ impl.callBackend(host, request, mockContext);
verifyMocks();
}
@@ -586,7 +571,7 @@ public class TestCachingHttpClient {
getCurrentDateReturns(requestDate);
responseProtocolValidationIsCalled();
- backendCallWasMadeWithRequest(mockRequest);
+ backendCallWasMadeWithRequest(request);
getCurrentDateReturns(responseDate);
responsePolicyAllowsCaching(true);
getMockResponseReader();
@@ -601,7 +586,7 @@ public class TestCachingHttpClient {
replayMocks();
- impl.callBackend(host, mockRequest, mockContext);
+ impl.callBackend(host, request, mockContext);
verifyMocks();
}
@@ -610,7 +595,7 @@ public class TestCachingHttpClient {
public void testCallsSelfForExecuteOnHostRequestWithNullContext() throws Exception {
final Counter c = new Counter();
final HttpHost theHost = host;
- final HttpRequest theRequest = mockRequest;
+ final HttpRequest theRequest = request;
final HttpResponse theResponse = mockBackendResponse;
impl = new CachingHttpClient(mockBackend, mockValidityPolicy, mockResponsePolicy, mockEntryGenerator,
mockExtractor, mockCache, mockResponseGenerator, mockInvalidator,
@@ -628,7 +613,7 @@ public class TestCachingHttpClient {
};
replayMocks();
- HttpResponse result = impl.execute(host, mockRequest);
+ HttpResponse result = impl.execute(host, request);
verifyMocks();
Assert.assertSame(mockBackendResponse, result);
Assert.assertEquals(1, c.getCount());
@@ -640,7 +625,7 @@ public class TestCachingHttpClient {
final Counter c = new Counter();
final HttpHost theHost = host;
- final HttpRequest theRequest = mockRequest;
+ final HttpRequest theRequest = request;
final HttpResponse theResponse = mockBackendResponse;
final ResponseHandler<Object> theHandler = mockHandler;
final Object value = new Object();
@@ -669,7 +654,7 @@ public class TestCachingHttpClient {
value);
replayMocks();
- Object result = impl.execute(host, mockRequest, mockHandler);
+ Object result = impl.execute(host, request, mockHandler);
verifyMocks();
Assert.assertSame(value, result);
@@ -681,7 +666,7 @@ public class TestCachingHttpClient {
final Counter c = new Counter();
final HttpHost theHost = host;
- final HttpRequest theRequest = mockRequest;
+ final HttpRequest theRequest = request;
final HttpResponse theResponse = mockBackendResponse;
final HttpContext theContext = mockContext;
impl = new CachingHttpClient(mockBackend, mockValidityPolicy, mockResponsePolicy, mockEntryGenerator,
@@ -705,7 +690,7 @@ public class TestCachingHttpClient {
theObject);
replayMocks();
- Object result = impl.execute(host, mockRequest, mockHandler, mockContext);
+ Object result = impl.execute(host, request, mockHandler, mockContext);
verifyMocks();
Assert.assertEquals(1, c.getCount());
Assert.assertSame(theObject, result);
@@ -864,7 +849,6 @@ public class TestCachingHttpClient {
final String theURI = "http://foo";
requestIsFatallyNonCompliant(null);
- requestInspectsRequestLine();
requestProtocolValidationIsCalled();
cacheInvalidatorWasCalled();
requestPolicyAllowsCaching(true);
@@ -875,7 +859,7 @@ public class TestCachingHttpClient {
cacheEntryHasVariants(false);
replayMocks();
- impl.execute(host, mockRequest, mockContext);
+ impl.execute(host, request, mockContext);
verifyMocks();
}
@@ -884,14 +868,13 @@ public class TestCachingHttpClient {
ProtocolException expected = new ProtocolException("ouch");
- requestInspectsRequestLine();
requestIsFatallyNonCompliant(null);
requestCannotBeMadeCompliantThrows(expected);
boolean gotException = false;
replayMocks();
try {
- impl.execute(host, mockRequest, mockContext);
+ impl.execute(host, request, mockContext);
} catch (ClientProtocolException ex) {
Assert.assertTrue(ex.getCause().getMessage().equals(expected.getMessage()));
gotException = true;
@@ -1016,18 +999,18 @@ public class TestCachingHttpClient {
}
private void cacheInvalidatorWasCalled() throws IOException {
- mockInvalidator.flushInvalidatedCacheEntries(host, mockRequest);
+ mockInvalidator.flushInvalidatedCacheEntries(host, request);
}
private void callBackendReturnsResponse(HttpResponse response) throws IOException {
- EasyMock.expect(impl.callBackend(host, mockRequest, mockContext)).andReturn(
+ EasyMock.expect(impl.callBackend(host, request, mockContext)).andReturn(
response);
}
private void revalidateCacheEntryReturns(HttpResponse response) throws IOException,
ProtocolException {
EasyMock.expect(
- impl.revalidateCacheEntry(host, mockRequest, mockContext, mockCacheEntry))
+ impl.revalidateCacheEntry(host, request, mockContext, mockCacheEntry))
.andReturn(response);
}
@@ -1037,12 +1020,13 @@ public class TestCachingHttpClient {
private void cacheEntryUpdaterCalled() throws IOException {
EasyMock.expect(
- mockCacheEntryUpdater.updateCacheEntry(mockCacheEntry, requestDate, responseDate,
- mockBackendResponse)).andReturn(mockUpdatedCacheEntry);
+ mockCacheEntryUpdater.updateCacheEntry(
+ request.getRequestLine().getUri(),
+ mockCacheEntry, requestDate, responseDate, mockBackendResponse)).andReturn(mockUpdatedCacheEntry);
}
private void getCacheEntryReturns(CacheEntry entry) throws IOException {
- EasyMock.expect(impl.getCacheEntry(host, mockRequest)).andReturn(entry);
+ EasyMock.expect(impl.getCacheEntry(host, request)).andReturn(entry);
}
private void backendResponseCodeIs(int code) {
@@ -1052,7 +1036,7 @@ public class TestCachingHttpClient {
private void conditionalRequestBuilderCalled() throws ProtocolException {
EasyMock.expect(
- mockConditionalRequestBuilder.buildConditionalRequest(mockRequest, mockCacheEntry))
+ mockConditionalRequestBuilder.buildConditionalRequest(request, mockCacheEntry))
.andReturn(mockConditionalRequest);
}
@@ -1070,7 +1054,7 @@ public class TestCachingHttpClient {
}
private void requestPolicyAllowsCaching(boolean allow) {
- EasyMock.expect(mockRequestPolicy.isServableFromCache(mockRequest)).andReturn(
+ EasyMock.expect(mockRequestPolicy.isServableFromCache(request)).andReturn(
allow);
}
@@ -1101,7 +1085,7 @@ public class TestCachingHttpClient {
private void responsePolicyAllowsCaching(boolean allow) {
EasyMock.expect(
- mockResponsePolicy.isResponseCacheable(mockRequest, mockBackendResponse))
+ mockResponsePolicy.isResponseCacheable(request, mockBackendResponse))
.andReturn(allow);
}
@@ -1111,7 +1095,7 @@ public class TestCachingHttpClient {
private void cacheEntrySuitable(boolean suitable) {
EasyMock.expect(
- mockSuitabilityChecker.canCachedResponseBeUsed(host, mockRequest, mockCacheEntry))
+ mockSuitabilityChecker.canCachedResponseBeUsed(host, request, mockCacheEntry))
.andReturn(suitable);
}
@@ -1150,7 +1134,7 @@ public class TestCachingHttpClient {
}
private void extractTheURI(String theURI) {
- EasyMock.expect(mockExtractor.getURI(host, mockRequest)).andReturn(theURI);
+ EasyMock.expect(mockExtractor.getURI(host, request)).andReturn(theURI);
}
private void extractVariantURI(String variantURI) {
@@ -1159,7 +1143,7 @@ public class TestCachingHttpClient {
private void extractVariantURI(String variantURI, CacheEntry entry){
EasyMock
- .expect(mockExtractor.getVariantURI(host, mockRequest, entry)).andReturn(
+ .expect(mockExtractor.getVariantURI(host, request, entry)).andReturn(
variantURI);
}
@@ -1173,13 +1157,15 @@ public class TestCachingHttpClient {
private void generateCacheEntry(Date requestDate, Date responseDate, byte[] bytes) throws IOException {
EasyMock.expect(
- mockEntryGenerator.generate(requestDate, responseDate, SC_OK, HEADERS,
- bytes)).andReturn(mockCacheEntry);
+ mockEntryGenerator.generate(
+ request.getRequestLine().getUri(),
+ requestDate, responseDate, SC_OK, HEADERS, bytes)).andReturn(mockCacheEntry);
}
private void copyCacheEntry(CacheEntry entry, String variantURI) throws IOException {
EasyMock.expect(
- mockEntryGenerator.copyVariant(entry, variantURI)).andReturn(entry);
+ mockEntryGenerator.copyVariant(
+ request.getRequestLine().getUri(), entry, variantURI)).andReturn(entry);
}
private void handleBackendResponseReturnsResponse(HttpRequest request, HttpResponse response)
@@ -1190,26 +1176,26 @@ public class TestCachingHttpClient {
}
private void storeInCacheWasCalled() throws IOException {
- impl.storeInCache(host, mockRequest, mockCacheEntry);
+ impl.storeInCache(host, request, mockCacheEntry);
}
private void storeInCacheWasCalled(CacheEntry entry) throws IOException {
- impl.storeInCache(host, mockRequest, entry);
+ impl.storeInCache(host, request, entry);
}
private void responseProtocolValidationIsCalled() throws ClientProtocolException {
- mockResponseProtocolCompliance.ensureProtocolCompliance(mockRequest, mockBackendResponse);
+ mockResponseProtocolCompliance.ensureProtocolCompliance(request, mockBackendResponse);
}
private void requestProtocolValidationIsCalled() throws Exception {
EasyMock.expect(
- mockRequestProtocolCompliance.makeRequestCompliant(mockRequest)).andReturn(
- mockRequest);
+ mockRequestProtocolCompliance.makeRequestCompliant(request)).andReturn(
+ request);
}
private void requestCannotBeMadeCompliantThrows(ProtocolException exception) throws Exception {
EasyMock.expect(
- mockRequestProtocolCompliance.makeRequestCompliant(mockRequest))
+ mockRequestProtocolCompliance.makeRequestCompliant(request))
.andThrow(exception);
}