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/05/23 23:55:20 UTC
svn commit: r947501 - in /httpcomponents/httpclient/trunk: ./
httpclient-cache/src/main/java/org/apache/http/impl/client/cache/
httpclient-cache/src/test/java/org/apache/http/impl/client/cache/
Author: olegk
Date: Sun May 23 21:55:20 2010
New Revision: 947501
URL: http://svn.apache.org/viewvc?rev=947501&view=rev
Log:
HTTPCLIENT-937: CacheEntry made immutable; now uses immutable HttpEntity to store cached content
Contributed by David Mays <david_mays at comcast.com>
Added:
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
Modified:
httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.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/CachedHttpResponseGenerator.java
httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.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/TestCachedHttpResponseGenerator.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
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java
httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java
Modified: httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/RELEASE_NOTES.txt?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpclient/trunk/RELEASE_NOTES.txt Sun May 23 21:55:20 2010
@@ -1,3 +1,11 @@
+Changes since 4.1 ALPHA2
+-------------------
+
+* [HTTPCLIENT-937] CacheEntry made immutable; now uses immutable HttpEntity
+ to store cached content.
+ Contributed by David Mays <david_mays at comcast.com> and
+ Oleg Kalnichevski <olegk at apache.org>
+
Release 4.1 ALPHA2
-------------------
Added: 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=947501&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java Sun May 23 21:55:20 2010
@@ -0,0 +1,108 @@
+/*
+ * ====================================================================
+ * 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.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.annotation.Immutable;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.protocol.HTTP;
+
+@Immutable
+class CacheEntity implements HttpEntity, Cloneable, Serializable {
+
+ private static final long serialVersionUID = -3467082284120936233L;
+
+ private final byte[] content;
+ private final String contentType;
+ private final String contentEncoding;
+
+ public CacheEntity(final byte[] b, final String contentType, final String contentEncoding) {
+ super();
+ this.content = b;
+ this.contentType = contentType;
+ this.contentEncoding = contentEncoding;
+ }
+
+ public Header getContentType() {
+ if (this.contentType != null) {
+ return new BasicHeader(HTTP.CONTENT_TYPE, this.contentType);
+ } else {
+ return null;
+ }
+ }
+
+ public Header getContentEncoding() {
+ if (this.contentEncoding != null) {
+ return new BasicHeader(HTTP.CONTENT_ENCODING, this.contentEncoding);
+ } else {
+ return null;
+ }
+ }
+
+ public boolean isChunked() {
+ return false;
+ }
+
+ public boolean isRepeatable() {
+ return true;
+ }
+
+ public long getContentLength() {
+ return this.content.length;
+ }
+
+ public InputStream getContent() {
+ return new ByteArrayInputStream(this.content);
+ }
+
+ public void writeTo(final OutputStream outstream) throws IOException {
+ if (outstream == null) {
+ throw new IllegalArgumentException("Output stream may not be null");
+ }
+ outstream.write(this.content);
+ outstream.flush();
+ }
+
+ public boolean isStreaming() {
+ return false;
+ }
+
+ public void consumeContent() throws IOException {
+ }
+
+ public Object clone() throws CloneNotSupportedException {
+ return super.clone();
+ }
+
+}
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntry.java Sun May 23 21:55:20 2010
@@ -37,6 +37,7 @@ import java.util.Set;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
+import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
@@ -62,9 +63,9 @@ public class CacheEntry implements Seria
private final ProtocolVersion version;
private final int status;
private final String reason;
- private final CachedHeaderGroup responseHeaders = new CachedHeaderGroup();
- private final byte[] body;
- private final Set<String> variantURIs = new HashSet<String>();
+ private final CachedHeaderGroup responseHeaders;
+ private final HttpEntity body;
+ private final Set<String> variantURIs;
/**
*
@@ -85,16 +86,18 @@ public class CacheEntry implements Seria
* @param reason
* String message from HTTP Status Line
*/
- public CacheEntry(Date requestDate, Date responseDate, ProtocolVersion version, Header[] responseHeaders, byte[] responseBytes, int status, String reason){
-
+ public CacheEntry(Date requestDate, Date responseDate, ProtocolVersion version,
+ Header[] responseHeaders, HttpEntity body, int status, String reason) {
super();
this.requestDate = requestDate;
this.responseDate = responseDate;
this.version = version;
+ this.responseHeaders = new CachedHeaderGroup();
this.responseHeaders.setHeaders(responseHeaders);
this.status = status;
this.reason = reason;
- this.body = responseBytes.clone();
+ this.body = body;
+ this.variantURIs = new HashSet<String>();
}
/**
@@ -107,7 +110,7 @@ public class CacheEntry implements Seria
toCopy.getResponseDate(),
toCopy.getProtocolVersion(),
toCopy.getAllHeaders(),
- toCopy.getBody(),
+ toCopy.body,
toCopy.getStatusCode(),
toCopy.getReasonPhrase());
@@ -124,11 +127,11 @@ public class CacheEntry implements Seria
}
public String getReasonPhrase() {
- return this.reason;
+ return reason;
}
public int getStatusCode() {
- return this.status;
+ return status;
}
public Date getRequestDate() {
@@ -136,11 +139,11 @@ public class CacheEntry implements Seria
}
public Date getResponseDate() {
- return this.responseDate;
+ return responseDate;
}
- public byte[] getBody() {
- return body.clone();
+ public HttpEntity getBody() {
+ return body;
}
public Header[] getAllHeaders() {
@@ -190,7 +193,7 @@ public class CacheEntry implements Seria
* @return boolean indicating whether actual length matches Content-Length
*/
protected boolean contentLengthHeaderMatchesActualLength() {
- return getContentLengthValue() == body.length;
+ return getContentLengthValue() == body.getContentLength();
}
/**
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntryGenerator.java Sun May 23 21:55:20 2010
@@ -28,8 +28,10 @@ package org.apache.http.impl.client.cach
import java.util.Date;
+import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.annotation.Immutable;
+import org.apache.http.protocol.HTTP;
/**
* Generates a {@link CacheEntry} from a {@link HttpResponse}
@@ -40,15 +42,19 @@ import org.apache.http.annotation.Immuta
public class CacheEntryGenerator {
public CacheEntry generateEntry(Date requestDate, Date responseDate, HttpResponse response,
- byte[] responseBytes) {
-
+ byte[] body) {
+ Header ct = response.getFirstHeader(HTTP.CONTENT_TYPE);
+ Header ce = response.getFirstHeader(HTTP.CONTENT_ENCODING);
+ CacheEntity entity = new CacheEntity(
+ body,
+ ct != null ? ct.getValue() : null,
+ ce != null ? ce.getValue() : null);
return new CacheEntry(requestDate,
responseDate,
response.getProtocolVersion(),
response.getAllHeaders(),
- responseBytes,
+ entity,
response.getStatusLine().getStatusCode(),
response.getStatusLine().getReasonPhrase());
-
}
}
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=947501&r1=947500&r2=947501&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 Sun May 23 21:55:20 2010
@@ -26,6 +26,7 @@
*/
package org.apache.http.impl.client.cache;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -56,11 +57,15 @@ public class CacheEntryUpdater {
* @param responseDate When the response was gotten
* @param response The HttpResponse from the backend server call
* @return CacheEntry an updated version of the cache entry
+ * @throws java.io.IOException if something bad happens while trying to read the body from the original entry
*/
- public CacheEntry updateCacheEntry(CacheEntry entry, Date requestDate, Date responseDate, HttpResponse response) {
+ public CacheEntry updateCacheEntry(
+ CacheEntry entry,
+ Date requestDate,
+ Date responseDate,
+ HttpResponse response) throws IOException {
Header[] mergedHeaders = mergeHeaders(entry, response);
-
CacheEntry updated = new CacheEntry(requestDate, responseDate,
entry.getProtocolVersion(),
mergedHeaders,
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachedHttpResponseGenerator.java Sun May 23 21:55:20 2010
@@ -31,7 +31,6 @@ import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.annotation.Immutable;
-import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHttpResponse;
@@ -54,7 +53,7 @@ public class CachedHttpResponseGenerator
.getStatusCode(), entry.getReasonPhrase());
if (entry.getStatusCode() != HttpStatus.SC_NOT_MODIFIED) {
- HttpEntity entity = new ByteArrayEntity(entry.getBody());
+ HttpEntity entity = entry.getBody();
response.setEntity(entity);
response.setHeaders(entry.getAllHeaders());
addMissingContentLengthHeader(response, entity);
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/SizeLimitedResponseReader.java Sun May 23 21:55:20 2010
@@ -44,9 +44,9 @@ public class SizeLimitedResponseReader {
private final int maxResponseSizeBytes;
private final HttpResponse response;
- ByteArrayOutputStream outputStream;
- InputStream contentInputStream;
+ private ByteArrayOutputStream outputStream;
+ private InputStream contentInputStream;
private boolean isTooLarge;
private boolean responseIsConsumed;
private byte[] sizeLimitedContent;
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=947501&r1=947500&r2=947501&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 Sun May 23 21:55:20 2010
@@ -31,6 +31,7 @@ import java.util.Set;
import org.apache.http.Header;
import org.apache.http.ProtocolVersion;
+import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.cookie.DateUtils;
import org.apache.http.message.BasicHeader;
import org.junit.Assert;
@@ -106,7 +107,8 @@ public class TestCacheEntry {
}
private CacheEntry getEntry(Date requestDate, Date responseDate, Header[] headers) {
- return new CacheEntry(requestDate,responseDate,HTTP_1_1,headers,new byte[]{},200,"OK");
+ return new CacheEntry(requestDate, responseDate, HTTP_1_1, headers,
+ new ByteArrayEntity(new byte[] {}), 200, "OK");
}
@Test
@@ -125,7 +127,9 @@ public class TestCacheEntry {
@Test
public void testCorrectedReceivedAgeIsAgeHeaderIfLarger() {
Header[] headers = new Header[] { new BasicHeader("Age", "10"), };
- CacheEntry entry = new CacheEntry(new Date(),new Date(),HTTP_1_1,headers, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1,
+ headers, new ByteArrayEntity(new byte[] {}), 200, "OK") {
+
private static final long serialVersionUID = 1L;
@Override
@@ -141,7 +145,8 @@ public class TestCacheEntry {
@Test
public void testCorrectedReceivedAgeIsApparentAgeIfLarger() {
Header[] headers = new Header[] { new BasicHeader("Age", "6"), };
- CacheEntry entry = new CacheEntry(new Date(),new Date(),HTTP_1_1,headers, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1,
+ headers, new ByteArrayEntity(new byte[] {}), 200 ,"OK") {
private static final long serialVersionUID = 1L;
@Override
@@ -161,7 +166,9 @@ public class TestCacheEntry {
Header[] headers = new Header[]{};
- CacheEntry entry = new CacheEntry(tenSecondsAgo,sixSecondsAgo,new ProtocolVersion("HTTP",1,1),headers,new byte[]{},200,"OK");
+ CacheEntry entry = new CacheEntry(tenSecondsAgo, sixSecondsAgo,
+ new ProtocolVersion("HTTP",1,1), headers, new ByteArrayEntity(new byte[] {}),
+ 200, "OK");
Assert.assertEquals(4, entry.getResponseDelaySecs());
@@ -169,7 +176,8 @@ public class TestCacheEntry {
@Test
public void testCorrectedInitialAgeIsCorrectedReceivedAgePlusResponseDelay() {
- CacheEntry entry = new CacheEntry(new Date(),new Date(),HTTP_1_1,new Header[]{}, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1, new Header[] {},
+ new ByteArrayEntity(new byte[] {}), 200, "OK") {
private static final long serialVersionUID = 1L;
@Override
@@ -190,7 +198,8 @@ public class TestCacheEntry {
final Date now = new Date();
Date sixSecondsAgo = new Date(now.getTime() - 6 * 1000L);
- CacheEntry entry = new CacheEntry(new Date(),sixSecondsAgo,HTTP_1_1,new Header[]{}, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), sixSecondsAgo, HTTP_1_1, new Header[]{},
+ new ByteArrayEntity(new byte[] {}), 200, "OK") {
private static final long serialVersionUID = 1L;
@Override
@@ -204,7 +213,8 @@ public class TestCacheEntry {
@Test
public void testCurrentAgeIsCorrectedInitialAgePlusResidentTime() {
- CacheEntry entry = new CacheEntry(new Date(),new Date(),HTTP_1_1,new Header[]{}, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1, new Header[]{},
+ new ByteArrayEntity(new byte[] {}), 200, "OK") {
private static final long serialVersionUID = 1L;
@Override
@@ -288,7 +298,8 @@ public class TestCacheEntry {
@Test
public void testResponseIsFreshIfFreshnessLifetimeExceedsCurrentAge() {
- CacheEntry entry = new CacheEntry(new Date(),new Date(),HTTP_1_1,new Header[]{}, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1, new Header[]{},
+ new ByteArrayEntity(new byte[] {}), 200, "OK") {
private static final long serialVersionUID = 1L;
@Override
@@ -307,7 +318,9 @@ public class TestCacheEntry {
@Test
public void testResponseIsNotFreshIfFreshnessLifetimeEqualsCurrentAge() {
- CacheEntry entry = new CacheEntry(new Date(),new Date(),HTTP_1_1,new Header[]{}, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1, new Header[]{},
+ new ByteArrayEntity(new byte[] {}), 200, "OK") {
+
private static final long serialVersionUID = 1L;
@Override
@@ -326,7 +339,8 @@ public class TestCacheEntry {
@Test
public void testResponseIsNotFreshIfCurrentAgeExceedsFreshnessLifetime() {
- CacheEntry entry = new CacheEntry(new Date(),new Date(),HTTP_1_1,new Header[]{}, new byte[]{},200,"OK") {
+ CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1, new Header[] {},
+ new ByteArrayEntity(new byte[] {}), 200, "OK") {
private static final long serialVersionUID = 1L;
@Override
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=947501&r1=947500&r2=947501&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 Sun May 23 21:55:20 2010
@@ -26,15 +26,11 @@
*/
package org.apache.http.impl.client.cache;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotSame;
-
-import java.util.Date;
-
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ProtocolVersion;
+import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.cookie.DateUtils;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHttpResponse;
@@ -44,6 +40,12 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import java.io.IOException;
+import java.util.Date;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotSame;
+
public class TestCacheEntryUpdater {
@@ -86,7 +88,7 @@ public class TestCacheEntryUpdater {
}
@Test
- public void testUpdateCacheEntryReturnsDifferentEntryInstance() {
+ public void testUpdateCacheEntryReturnsDifferentEntryInstance() throws IOException {
CacheEntry entry = getEntry(new Header[]{});
BasicHttpResponse response = new BasicHttpResponse(HTTP_1_1, 200, "OK");
@@ -102,7 +104,7 @@ public class TestCacheEntryUpdater {
}
@Test
- public void testHeadersAreMergedCorrectly() {
+ public void testHeadersAreMergedCorrectly() throws IOException {
Header[] headers = {
new BasicHeader("Date", DateUtils.formatDate(responseDate)),
@@ -124,7 +126,7 @@ public class TestCacheEntryUpdater {
}
@Test
- public void testNewerHeadersReplaceExistingHeaders() {
+ public void testNewerHeadersReplaceExistingHeaders() throws IOException {
Header[] headers = {
new BasicHeader("Date", DateUtils.formatDate(requestDate)),
@@ -152,7 +154,7 @@ public class TestCacheEntryUpdater {
}
@Test
- public void testNewHeadersAreAddedByMerge() {
+ public void testNewHeadersAreAddedByMerge() throws IOException {
Header[] headers = {
new BasicHeader("Date", DateUtils.formatDate(requestDate)),
@@ -179,7 +181,7 @@ public class TestCacheEntryUpdater {
}
@Test
- public void testUpdatedEntryHasLatestRequestAndResponseDates() {
+ public void testUpdatedEntryHasLatestRequestAndResponseDates() throws IOException {
Date now = new Date();
@@ -191,7 +193,8 @@ public class TestCacheEntryUpdater {
Header[] headers = new Header[]{};
- CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1, headers, new byte[]{}, 200, "OK");
+ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1, headers,
+ new ByteArrayEntity(new byte[] {}), 200, "OK");
HttpResponse response = new BasicHttpResponse(HTTP_1_1, 200, "OK");
@@ -222,6 +225,7 @@ public class TestCacheEntryUpdater {
}
private CacheEntry getEntry(Date requestDate, Date responseDate, Header[] headers) {
- return new CacheEntry(requestDate, responseDate, HTTP_1_1, headers, new byte[]{}, 200, "OK");
+ return new CacheEntry(requestDate, responseDate, HTTP_1_1, headers,
+ new ByteArrayEntity(new byte[] {}), 200, "OK");
}
}
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachedHttpResponseGenerator.java Sun May 23 21:55:20 2010
@@ -31,6 +31,7 @@ import java.util.Date;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
+import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.cookie.DateUtils;
import org.apache.http.message.BasicHeader;
import org.junit.Assert;
@@ -43,7 +44,9 @@ public class TestCachedHttpResponseGener
Header[] hdrs = new Header[] {};
byte[] buf = new byte[] { 1, 2, 3, 4, 5 };
- CacheEntry entry = new CacheEntry(new Date(),new Date(),new ProtocolVersion("HTTP", 1, 1),hdrs,buf,200,"OK");
+ CacheEntry entry = new CacheEntry(
+ new Date(), new Date(), new ProtocolVersion("HTTP", 1, 1), hdrs,
+ new ByteArrayEntity(buf), 200, "OK");
CachedHttpResponseGenerator gen = new CachedHttpResponseGenerator();
HttpResponse response = gen.generateResponse(entry);
@@ -60,7 +63,9 @@ public class TestCachedHttpResponseGener
Header[] hdrs = new Header[] { new BasicHeader("Transfer-Encoding", "chunked") };
byte[] buf = new byte[] { 1, 2, 3, 4, 5 };
- CacheEntry entry = new CacheEntry(new Date(),new Date(),new ProtocolVersion("HTTP", 1, 1),hdrs,buf,200,"OK");
+ CacheEntry entry = new CacheEntry(
+ new Date(), new Date(), new ProtocolVersion("HTTP", 1, 1), hdrs,
+ new ByteArrayEntity(buf), 200, "OK");
CachedHttpResponseGenerator gen = new CachedHttpResponseGenerator();
@@ -145,7 +150,8 @@ public class TestCachedHttpResponseGener
new BasicHeader("Expires", DateUtils.formatDate(tenSecondsFromNow)),
new BasicHeader("Content-Length", "150") };
- return new CacheEntry(tenSecondsAgo,sixSecondsAgo,new ProtocolVersion("HTTP", 1, 1),hdrs,new byte[]{},200,"OK");
+ return new CacheEntry(tenSecondsAgo, sixSecondsAgo, new ProtocolVersion("HTTP", 1, 1),
+ hdrs, new ByteArrayEntity(new byte[] {}), 200, "OK");
}
@@ -160,8 +166,10 @@ public class TestCachedHttpResponseGener
new BasicHeader("Content-Length", "150") };
- return new CacheEntry(tenSecondsAgo,sixSecondsAgo,new ProtocolVersion("HTTP", 1, 1),hdrs,new byte[]{},200,"OK"){
- private static final long serialVersionUID = 1L;
+ return new CacheEntry(tenSecondsAgo, sixSecondsAgo, new ProtocolVersion("HTTP", 1, 1),
+ hdrs, new ByteArrayEntity(new byte[] {}), 200, "OK"){
+
+ private static final long serialVersionUID = 1L;
@Override
public long getCurrentAgeSecs() {
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=947501&r1=947500&r2=947501&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 Sun May 23 21:55:20 2010
@@ -26,24 +26,7 @@
*/
package org.apache.http.impl.client.cache;
-import static junit.framework.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.http.Header;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.ProtocolException;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.RequestLine;
-import org.apache.http.StatusLine;
+import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
@@ -55,6 +38,7 @@ import org.apache.http.conn.scheme.Plain
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.HttpParams;
@@ -65,6 +49,15 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import static junit.framework.Assert.assertTrue;
+
public class TestCachingHttpClient {
private static final ProtocolVersion HTTP_1_1 = new ProtocolVersion("HTTP",1,1);
@@ -313,7 +306,8 @@ public class TestCachingHttpClient {
final String variantURI = "variantURI";
- final CacheEntry entry = new CacheEntry(new Date(), new Date(),HTTP_1_1,new Header[]{},new byte[]{},200,"OK");
+ final CacheEntry entry = new CacheEntry(new Date(), new Date(), HTTP_1_1,
+ new Header[] {}, new ByteArrayEntity(new byte[] {}), 200, "OK");
extractVariantURI(variantURI, entry);
putInCache(variantURI, entry);
@@ -965,7 +959,7 @@ public class TestCachingHttpClient {
org.easymock.EasyMock.expect(mockCacheEntry.isRevalidatable()).andReturn(b);
}
- private void cacheEntryUpdaterCalled() {
+ private void cacheEntryUpdaterCalled() throws IOException {
EasyMock.expect(
mockCacheEntryUpdater.updateCacheEntry(mockCacheEntry, requestDate, responseDate,
mockBackendResponse)).andReturn(mockUpdatedCacheEntry);
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=947501&r1=947500&r2=947501&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 Sun May 23 21:55:20 2010
@@ -32,6 +32,7 @@ import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.ProtocolException;
import org.apache.http.ProtocolVersion;
+import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.cookie.DateUtils;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicHttpRequest;
@@ -61,7 +62,9 @@ public class TestConditionalRequestBuild
new BasicHeader("Date", DateUtils.formatDate(new Date())),
new BasicHeader("Last-Modified", lastModified) };
- CacheEntry cacheEntry = new CacheEntry(new Date(),new Date(),new ProtocolVersion("HTTP",1,1),headers, new byte[]{},200,"OK");
+ CacheEntry cacheEntry = new CacheEntry(new Date(), new Date(),
+ new ProtocolVersion("HTTP",1,1), headers,
+ new ByteArrayEntity(new byte[] {}), 200, "OK");
HttpRequest newRequest = impl.buildConditionalRequest(request, cacheEntry);
Assert.assertNotSame(request, newRequest);
@@ -93,7 +96,9 @@ public class TestConditionalRequestBuild
new BasicHeader("Last-Modified", DateUtils.formatDate(new Date())),
new BasicHeader("ETag", theETag) };
- CacheEntry cacheEntry = new CacheEntry(new Date(),new Date(),new ProtocolVersion("HTTP",1,1),headers, new byte[]{},200,"OK");
+ CacheEntry cacheEntry = new CacheEntry(new Date(), new Date(),
+ new ProtocolVersion("HTTP",1,1), headers, new ByteArrayEntity(new byte[] {}),
+ 200, "OK");
HttpRequest newRequest = impl.buildConditionalRequest(request, cacheEntry);
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestDefaultCacheEntrySerializer.java Sun May 23 21:55:20 2010
@@ -26,11 +26,6 @@
*/
package org.apache.http.impl.client.cache;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.Arrays;
-import java.util.Date;
-
import org.apache.http.Header;
import org.apache.http.HttpVersion;
import org.apache.http.ProtocolVersion;
@@ -39,6 +34,13 @@ import org.apache.http.message.BasicHead
import org.junit.Assert;
import org.junit.Test;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+import java.util.Date;
+
public class TestDefaultCacheEntrySerializer {
@Test
@@ -60,7 +62,7 @@ public class TestDefaultCacheEntrySerial
}
- private CacheEntry newCacheEntry() {
+ private CacheEntry newCacheEntry() throws UnsupportedEncodingException {
Header[] headers = new Header[5];
@@ -70,13 +72,14 @@ public class TestDefaultCacheEntrySerial
ProtocolVersion version = new HttpVersion(1, 1);
String body = "Lorem ipsum dolor sit amet";
- CacheEntry cacheEntry = new CacheEntry(new Date(),new Date(), version, headers, body.getBytes(),200,"OK");
+ CacheEntry cacheEntry = new CacheEntry(new Date(), new Date(), version, headers,
+ new CacheEntity(body.getBytes("US-ASCII"), null, null), 200, "OK");
return cacheEntry;
}
- private boolean areEqual(CacheEntry one, CacheEntry two) {
+ private boolean areEqual(CacheEntry one, CacheEntry two) throws IOException {
if (!one.getRequestDate().equals(two.getRequestDate()))
return false;
@@ -84,7 +87,20 @@ public class TestDefaultCacheEntrySerial
return false;
if (!one.getProtocolVersion().equals(two.getProtocolVersion()))
return false;
- if (!Arrays.equals(one.getBody(), two.getBody()))
+
+ byte[] bytesOne, bytesTwo;
+
+ ByteArrayOutputStream streamOne = new ByteArrayOutputStream();
+ one.getBody().writeTo(streamOne);
+ bytesOne = streamOne.toByteArray();
+
+ ByteArrayOutputStream streamTwo = new ByteArrayOutputStream();
+
+ two.getBody().writeTo(streamTwo);
+ bytesTwo = streamTwo.toByteArray();
+
+
+ if (!Arrays.equals(bytesOne, bytesTwo))
return false;
Header[] oneHeaders = one.getAllHeaders();
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java Sun May 23 21:55:20 2010
@@ -2308,7 +2308,8 @@ public class TestProtocolRequirements {
byte[] bytes = new byte[128];
(new Random()).nextBytes(bytes);
- CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1, headerGroup.getAllHeaders(),bytes,200,"OK");
+ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1,
+ headerGroup.getAllHeaders(), new ByteArrayEntity(bytes), 200, "OK");
mockCache.putEntry(EasyMock.eq("http://foo.example.com/thing"), EasyMock.isA(CacheEntry.class));
@@ -2352,7 +2353,9 @@ public class TestProtocolRequirements {
(new Random()).nextBytes(bytes);
- CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1, headerGroup.getAllHeaders(),bytes,200,"OK");
+ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1,
+ headerGroup.getAllHeaders(),
+ new ByteArrayEntity(bytes), 200, "OK");
impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
@@ -2393,7 +2396,8 @@ public class TestProtocolRequirements {
byte[] bytes = new byte[128];
(new Random()).nextBytes(bytes);
- CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1, headerGroup.getAllHeaders(),bytes,200,"OK");
+ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1,
+ headerGroup.getAllHeaders(), new ByteArrayEntity(bytes), 200, "OK");
@@ -2596,7 +2600,8 @@ public class TestProtocolRequirements {
byte[] bytes = new byte[128];
(new Random()).nextBytes(bytes);
- CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1, headerGroup.getAllHeaders(),bytes,200,"OK");
+ CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, HTTP_1_1,
+ headerGroup.getAllHeaders(), new ByteArrayEntity(bytes), 200, "OK");
impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
@@ -2639,8 +2644,8 @@ public class TestProtocolRequirements {
byte[] bytes = new byte[128];
(new Random()).nextBytes(bytes);
- CacheEntry entry = new CacheEntry(requestTime, responseTime, HTTP_1_1, headerGroup.getAllHeaders(),bytes,200,"OK");
-
+ CacheEntry entry = new CacheEntry(requestTime, responseTime, HTTP_1_1,
+ headerGroup.getAllHeaders(), new ByteArrayEntity(bytes), 200, "OK");
impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java?rev=947501&r1=947500&r2=947501&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java Sun May 23 21:55:20 2010
@@ -28,12 +28,16 @@ package org.apache.http.impl.client.cach
import org.apache.http.client.cache.HttpCacheOperationException;
import org.apache.http.client.cache.HttpCacheUpdateCallback;
+import org.apache.http.entity.ByteArrayEntity;
import org.easymock.classextension.EasyMock;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
public class TestResponseCache {
private BasicHttpCache cache;
@@ -133,7 +137,7 @@ public class TestResponseCache {
@Test
@Ignore
- public void testCacheEntryCallbackUpdatesCacheEntry() throws HttpCacheOperationException {
+ public void testCacheEntryCallbackUpdatesCacheEntry() throws HttpCacheOperationException, IOException {
final byte[] expectedArray = new byte[] { 1, 2, 3, 4, 5 };
@@ -151,7 +155,7 @@ public class TestResponseCache {
existing.getRequestDate(),
existing.getProtocolVersion(),
existing.getAllHeaders(),
- expectedArray,
+ new ByteArrayEntity(expectedArray),
existing.getStatusCode(),
existing.getReasonPhrase());
cache.removeEntry("bar");
@@ -164,7 +168,12 @@ public class TestResponseCache {
Assert.assertNull(bar);
- Assert.assertArrayEquals(expectedArray, afterUpdate.getBody());
+ byte[] bytes;
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ afterUpdate.getBody().writeTo(stream);
+ bytes = stream.toByteArray();
+
+ Assert.assertArrayEquals(expectedArray,bytes);
}
}
Re: svn commit: r947501 - in /httpcomponents/httpclient/trunk: ./
httpclient-cache/src/main/java/org/apache/http/impl/client/cache/
httpclient-cache/src/test/java/org/apache/http/impl/client/cache/
Posted by sebb <se...@gmail.com>.
On 23/05/2010, olegk@apache.org <ol...@apache.org> wrote:
> Author: olegk
> Date: Sun May 23 21:55:20 2010
> New Revision: 947501
>
> URL: http://svn.apache.org/viewvc?rev=947501&view=rev
> Log:
> HTTPCLIENT-937: CacheEntry made immutable; now uses immutable HttpEntity to store cached content
> Contributed by David Mays <david_mays at comcast.com>
>
> Added:
> httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
No props? What happened to svn:eol-style?
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org