HTTPCLIENT-937: CacheEntry made immutable; now uses immutable HttpEntity to store cached content
Contributed by David Mays <david_mays at comcast.com> git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@947501 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ec44b2c26e
commit
ef2839b770
|
@ -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
|
Release 4.1 ALPHA2
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
|
108
httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
vendored
Normal file
108
httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheEntity.java
vendored
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -37,6 +37,7 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.apache.http.Header;
|
import org.apache.http.Header;
|
||||||
import org.apache.http.HeaderElement;
|
import org.apache.http.HeaderElement;
|
||||||
|
import org.apache.http.HttpEntity;
|
||||||
import org.apache.http.HttpRequest;
|
import org.apache.http.HttpRequest;
|
||||||
import org.apache.http.HttpResponse;
|
import org.apache.http.HttpResponse;
|
||||||
import org.apache.http.ProtocolVersion;
|
import org.apache.http.ProtocolVersion;
|
||||||
|
@ -62,9 +63,9 @@ public class CacheEntry implements Serializable {
|
||||||
private final ProtocolVersion version;
|
private final ProtocolVersion version;
|
||||||
private final int status;
|
private final int status;
|
||||||
private final String reason;
|
private final String reason;
|
||||||
private final CachedHeaderGroup responseHeaders = new CachedHeaderGroup();
|
private final CachedHeaderGroup responseHeaders;
|
||||||
private final byte[] body;
|
private final HttpEntity body;
|
||||||
private final Set<String> variantURIs = new HashSet<String>();
|
private final Set<String> variantURIs;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -85,16 +86,18 @@ public class CacheEntry implements Serializable {
|
||||||
* @param reason
|
* @param reason
|
||||||
* String message from HTTP Status Line
|
* 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();
|
super();
|
||||||
this.requestDate = requestDate;
|
this.requestDate = requestDate;
|
||||||
this.responseDate = responseDate;
|
this.responseDate = responseDate;
|
||||||
this.version = version;
|
this.version = version;
|
||||||
|
this.responseHeaders = new CachedHeaderGroup();
|
||||||
this.responseHeaders.setHeaders(responseHeaders);
|
this.responseHeaders.setHeaders(responseHeaders);
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.reason = reason;
|
this.reason = reason;
|
||||||
this.body = responseBytes.clone();
|
this.body = body;
|
||||||
|
this.variantURIs = new HashSet<String>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -107,7 +110,7 @@ public class CacheEntry implements Serializable {
|
||||||
toCopy.getResponseDate(),
|
toCopy.getResponseDate(),
|
||||||
toCopy.getProtocolVersion(),
|
toCopy.getProtocolVersion(),
|
||||||
toCopy.getAllHeaders(),
|
toCopy.getAllHeaders(),
|
||||||
toCopy.getBody(),
|
toCopy.body,
|
||||||
toCopy.getStatusCode(),
|
toCopy.getStatusCode(),
|
||||||
toCopy.getReasonPhrase());
|
toCopy.getReasonPhrase());
|
||||||
|
|
||||||
|
@ -124,11 +127,11 @@ public class CacheEntry implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getReasonPhrase() {
|
public String getReasonPhrase() {
|
||||||
return this.reason;
|
return reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStatusCode() {
|
public int getStatusCode() {
|
||||||
return this.status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getRequestDate() {
|
public Date getRequestDate() {
|
||||||
|
@ -136,11 +139,11 @@ public class CacheEntry implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getResponseDate() {
|
public Date getResponseDate() {
|
||||||
return this.responseDate;
|
return responseDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getBody() {
|
public HttpEntity getBody() {
|
||||||
return body.clone();
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Header[] getAllHeaders() {
|
public Header[] getAllHeaders() {
|
||||||
|
@ -190,7 +193,7 @@ public class CacheEntry implements Serializable {
|
||||||
* @return boolean indicating whether actual length matches Content-Length
|
* @return boolean indicating whether actual length matches Content-Length
|
||||||
*/
|
*/
|
||||||
protected boolean contentLengthHeaderMatchesActualLength() {
|
protected boolean contentLengthHeaderMatchesActualLength() {
|
||||||
return getContentLengthValue() == body.length;
|
return getContentLengthValue() == body.getContentLength();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -28,8 +28,10 @@ package org.apache.http.impl.client.cache;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.apache.http.Header;
|
||||||
import org.apache.http.HttpResponse;
|
import org.apache.http.HttpResponse;
|
||||||
import org.apache.http.annotation.Immutable;
|
import org.apache.http.annotation.Immutable;
|
||||||
|
import org.apache.http.protocol.HTTP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a {@link CacheEntry} from a {@link HttpResponse}
|
* Generates a {@link CacheEntry} from a {@link HttpResponse}
|
||||||
|
@ -40,15 +42,19 @@ import org.apache.http.annotation.Immutable;
|
||||||
public class CacheEntryGenerator {
|
public class CacheEntryGenerator {
|
||||||
|
|
||||||
public CacheEntry generateEntry(Date requestDate, Date responseDate, HttpResponse response,
|
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,
|
return new CacheEntry(requestDate,
|
||||||
responseDate,
|
responseDate,
|
||||||
response.getProtocolVersion(),
|
response.getProtocolVersion(),
|
||||||
response.getAllHeaders(),
|
response.getAllHeaders(),
|
||||||
responseBytes,
|
entity,
|
||||||
response.getStatusLine().getStatusCode(),
|
response.getStatusLine().getStatusCode(),
|
||||||
response.getStatusLine().getReasonPhrase());
|
response.getStatusLine().getReasonPhrase());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.http.impl.client.cache;
|
package org.apache.http.impl.client.cache;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -56,11 +57,15 @@ public class CacheEntryUpdater {
|
||||||
* @param responseDate When the response was gotten
|
* @param responseDate When the response was gotten
|
||||||
* @param response The HttpResponse from the backend server call
|
* @param response The HttpResponse from the backend server call
|
||||||
* @return CacheEntry an updated version of the cache entry
|
* @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);
|
Header[] mergedHeaders = mergeHeaders(entry, response);
|
||||||
|
|
||||||
CacheEntry updated = new CacheEntry(requestDate, responseDate,
|
CacheEntry updated = new CacheEntry(requestDate, responseDate,
|
||||||
entry.getProtocolVersion(),
|
entry.getProtocolVersion(),
|
||||||
mergedHeaders,
|
mergedHeaders,
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.apache.http.HttpEntity;
|
||||||
import org.apache.http.HttpResponse;
|
import org.apache.http.HttpResponse;
|
||||||
import org.apache.http.HttpStatus;
|
import org.apache.http.HttpStatus;
|
||||||
import org.apache.http.annotation.Immutable;
|
import org.apache.http.annotation.Immutable;
|
||||||
import org.apache.http.entity.ByteArrayEntity;
|
|
||||||
import org.apache.http.message.BasicHeader;
|
import org.apache.http.message.BasicHeader;
|
||||||
import org.apache.http.message.BasicHttpResponse;
|
import org.apache.http.message.BasicHttpResponse;
|
||||||
|
|
||||||
|
@ -54,7 +53,7 @@ public class CachedHttpResponseGenerator {
|
||||||
.getStatusCode(), entry.getReasonPhrase());
|
.getStatusCode(), entry.getReasonPhrase());
|
||||||
|
|
||||||
if (entry.getStatusCode() != HttpStatus.SC_NOT_MODIFIED) {
|
if (entry.getStatusCode() != HttpStatus.SC_NOT_MODIFIED) {
|
||||||
HttpEntity entity = new ByteArrayEntity(entry.getBody());
|
HttpEntity entity = entry.getBody();
|
||||||
response.setEntity(entity);
|
response.setEntity(entity);
|
||||||
response.setHeaders(entry.getAllHeaders());
|
response.setHeaders(entry.getAllHeaders());
|
||||||
addMissingContentLengthHeader(response, entity);
|
addMissingContentLengthHeader(response, entity);
|
||||||
|
|
|
@ -44,9 +44,9 @@ public class SizeLimitedResponseReader {
|
||||||
|
|
||||||
private final int maxResponseSizeBytes;
|
private final int maxResponseSizeBytes;
|
||||||
private final HttpResponse response;
|
private final HttpResponse response;
|
||||||
ByteArrayOutputStream outputStream;
|
|
||||||
InputStream contentInputStream;
|
|
||||||
|
|
||||||
|
private ByteArrayOutputStream outputStream;
|
||||||
|
private InputStream contentInputStream;
|
||||||
private boolean isTooLarge;
|
private boolean isTooLarge;
|
||||||
private boolean responseIsConsumed;
|
private boolean responseIsConsumed;
|
||||||
private byte[] sizeLimitedContent;
|
private byte[] sizeLimitedContent;
|
||||||
|
|
|
@ -31,6 +31,7 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.apache.http.Header;
|
import org.apache.http.Header;
|
||||||
import org.apache.http.ProtocolVersion;
|
import org.apache.http.ProtocolVersion;
|
||||||
|
import org.apache.http.entity.ByteArrayEntity;
|
||||||
import org.apache.http.impl.cookie.DateUtils;
|
import org.apache.http.impl.cookie.DateUtils;
|
||||||
import org.apache.http.message.BasicHeader;
|
import org.apache.http.message.BasicHeader;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
@ -106,7 +107,8 @@ public class TestCacheEntry {
|
||||||
}
|
}
|
||||||
|
|
||||||
private CacheEntry getEntry(Date requestDate, Date responseDate, Header[] headers) {
|
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
|
@Test
|
||||||
|
@ -125,7 +127,9 @@ public class TestCacheEntry {
|
||||||
@Test
|
@Test
|
||||||
public void testCorrectedReceivedAgeIsAgeHeaderIfLarger() {
|
public void testCorrectedReceivedAgeIsAgeHeaderIfLarger() {
|
||||||
Header[] headers = new Header[] { new BasicHeader("Age", "10"), };
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -141,7 +145,8 @@ public class TestCacheEntry {
|
||||||
@Test
|
@Test
|
||||||
public void testCorrectedReceivedAgeIsApparentAgeIfLarger() {
|
public void testCorrectedReceivedAgeIsApparentAgeIfLarger() {
|
||||||
Header[] headers = new Header[] { new BasicHeader("Age", "6"), };
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -161,7 +166,9 @@ public class TestCacheEntry {
|
||||||
|
|
||||||
Header[] headers = new Header[]{};
|
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());
|
Assert.assertEquals(4, entry.getResponseDelaySecs());
|
||||||
|
@ -169,7 +176,8 @@ public class TestCacheEntry {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCorrectedInitialAgeIsCorrectedReceivedAgePlusResponseDelay() {
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -190,7 +198,8 @@ public class TestCacheEntry {
|
||||||
final Date now = new Date();
|
final Date now = new Date();
|
||||||
Date sixSecondsAgo = new Date(now.getTime() - 6 * 1000L);
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -204,7 +213,8 @@ public class TestCacheEntry {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCurrentAgeIsCorrectedInitialAgePlusResidentTime() {
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -288,7 +298,8 @@ public class TestCacheEntry {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testResponseIsFreshIfFreshnessLifetimeExceedsCurrentAge() {
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -307,7 +318,9 @@ public class TestCacheEntry {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testResponseIsNotFreshIfFreshnessLifetimeEqualsCurrentAge() {
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -326,7 +339,8 @@ public class TestCacheEntry {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testResponseIsNotFreshIfCurrentAgeExceedsFreshnessLifetime() {
|
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;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -26,15 +26,11 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.http.impl.client.cache;
|
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.Header;
|
||||||
import org.apache.http.HttpResponse;
|
import org.apache.http.HttpResponse;
|
||||||
import org.apache.http.HttpStatus;
|
import org.apache.http.HttpStatus;
|
||||||
import org.apache.http.ProtocolVersion;
|
import org.apache.http.ProtocolVersion;
|
||||||
|
import org.apache.http.entity.ByteArrayEntity;
|
||||||
import org.apache.http.impl.cookie.DateUtils;
|
import org.apache.http.impl.cookie.DateUtils;
|
||||||
import org.apache.http.message.BasicHeader;
|
import org.apache.http.message.BasicHeader;
|
||||||
import org.apache.http.message.BasicHttpResponse;
|
import org.apache.http.message.BasicHttpResponse;
|
||||||
|
@ -44,6 +40,12 @@ import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
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 {
|
public class TestCacheEntryUpdater {
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,7 +88,7 @@ public class TestCacheEntryUpdater {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateCacheEntryReturnsDifferentEntryInstance() {
|
public void testUpdateCacheEntryReturnsDifferentEntryInstance() throws IOException {
|
||||||
|
|
||||||
CacheEntry entry = getEntry(new Header[]{});
|
CacheEntry entry = getEntry(new Header[]{});
|
||||||
BasicHttpResponse response = new BasicHttpResponse(HTTP_1_1, 200, "OK");
|
BasicHttpResponse response = new BasicHttpResponse(HTTP_1_1, 200, "OK");
|
||||||
|
@ -102,7 +104,7 @@ public class TestCacheEntryUpdater {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHeadersAreMergedCorrectly() {
|
public void testHeadersAreMergedCorrectly() throws IOException {
|
||||||
|
|
||||||
Header[] headers = {
|
Header[] headers = {
|
||||||
new BasicHeader("Date", DateUtils.formatDate(responseDate)),
|
new BasicHeader("Date", DateUtils.formatDate(responseDate)),
|
||||||
|
@ -124,7 +126,7 @@ public class TestCacheEntryUpdater {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNewerHeadersReplaceExistingHeaders() {
|
public void testNewerHeadersReplaceExistingHeaders() throws IOException {
|
||||||
|
|
||||||
Header[] headers = {
|
Header[] headers = {
|
||||||
new BasicHeader("Date", DateUtils.formatDate(requestDate)),
|
new BasicHeader("Date", DateUtils.formatDate(requestDate)),
|
||||||
|
@ -152,7 +154,7 @@ public class TestCacheEntryUpdater {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNewHeadersAreAddedByMerge() {
|
public void testNewHeadersAreAddedByMerge() throws IOException {
|
||||||
|
|
||||||
Header[] headers = {
|
Header[] headers = {
|
||||||
new BasicHeader("Date", DateUtils.formatDate(requestDate)),
|
new BasicHeader("Date", DateUtils.formatDate(requestDate)),
|
||||||
|
@ -179,7 +181,7 @@ public class TestCacheEntryUpdater {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdatedEntryHasLatestRequestAndResponseDates() {
|
public void testUpdatedEntryHasLatestRequestAndResponseDates() throws IOException {
|
||||||
|
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
|
|
||||||
|
@ -191,7 +193,8 @@ public class TestCacheEntryUpdater {
|
||||||
|
|
||||||
Header[] headers = new Header[]{};
|
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");
|
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) {
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import java.util.Date;
|
||||||
import org.apache.http.Header;
|
import org.apache.http.Header;
|
||||||
import org.apache.http.HttpResponse;
|
import org.apache.http.HttpResponse;
|
||||||
import org.apache.http.ProtocolVersion;
|
import org.apache.http.ProtocolVersion;
|
||||||
|
import org.apache.http.entity.ByteArrayEntity;
|
||||||
import org.apache.http.impl.cookie.DateUtils;
|
import org.apache.http.impl.cookie.DateUtils;
|
||||||
import org.apache.http.message.BasicHeader;
|
import org.apache.http.message.BasicHeader;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
@ -43,7 +44,9 @@ public class TestCachedHttpResponseGenerator {
|
||||||
|
|
||||||
Header[] hdrs = new Header[] {};
|
Header[] hdrs = new Header[] {};
|
||||||
byte[] buf = new byte[] { 1, 2, 3, 4, 5 };
|
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();
|
CachedHttpResponseGenerator gen = new CachedHttpResponseGenerator();
|
||||||
HttpResponse response = gen.generateResponse(entry);
|
HttpResponse response = gen.generateResponse(entry);
|
||||||
|
@ -60,7 +63,9 @@ public class TestCachedHttpResponseGenerator {
|
||||||
|
|
||||||
Header[] hdrs = new Header[] { new BasicHeader("Transfer-Encoding", "chunked") };
|
Header[] hdrs = new Header[] { new BasicHeader("Transfer-Encoding", "chunked") };
|
||||||
byte[] buf = new byte[] { 1, 2, 3, 4, 5 };
|
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();
|
CachedHttpResponseGenerator gen = new CachedHttpResponseGenerator();
|
||||||
|
@ -145,7 +150,8 @@ public class TestCachedHttpResponseGenerator {
|
||||||
new BasicHeader("Expires", DateUtils.formatDate(tenSecondsFromNow)),
|
new BasicHeader("Expires", DateUtils.formatDate(tenSecondsFromNow)),
|
||||||
new BasicHeader("Content-Length", "150") };
|
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 TestCachedHttpResponseGenerator {
|
||||||
new BasicHeader("Content-Length", "150") };
|
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),
|
||||||
private static final long serialVersionUID = 1L;
|
hdrs, new ByteArrayEntity(new byte[] {}), 200, "OK"){
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getCurrentAgeSecs() {
|
public long getCurrentAgeSecs() {
|
||||||
|
|
|
@ -26,24 +26,7 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.http.impl.client.cache;
|
package org.apache.http.impl.client.cache;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertTrue;
|
import org.apache.http.*;
|
||||||
|
|
||||||
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.client.ClientProtocolException;
|
import org.apache.http.client.ClientProtocolException;
|
||||||
import org.apache.http.client.HttpClient;
|
import org.apache.http.client.HttpClient;
|
||||||
import org.apache.http.client.ResponseHandler;
|
import org.apache.http.client.ResponseHandler;
|
||||||
|
@ -55,6 +38,7 @@ import org.apache.http.conn.scheme.PlainSocketFactory;
|
||||||
import org.apache.http.conn.scheme.Scheme;
|
import org.apache.http.conn.scheme.Scheme;
|
||||||
import org.apache.http.conn.scheme.SchemeRegistry;
|
import org.apache.http.conn.scheme.SchemeRegistry;
|
||||||
import org.apache.http.conn.ssl.SSLSocketFactory;
|
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.client.DefaultHttpClient;
|
||||||
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
|
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
|
||||||
import org.apache.http.params.HttpParams;
|
import org.apache.http.params.HttpParams;
|
||||||
|
@ -65,6 +49,15 @@ import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
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 {
|
public class TestCachingHttpClient {
|
||||||
|
|
||||||
private static final ProtocolVersion HTTP_1_1 = new ProtocolVersion("HTTP",1,1);
|
private static final ProtocolVersion HTTP_1_1 = new ProtocolVersion("HTTP",1,1);
|
||||||
|
@ -313,7 +306,8 @@ public class TestCachingHttpClient {
|
||||||
|
|
||||||
final String variantURI = "variantURI";
|
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);
|
extractVariantURI(variantURI, entry);
|
||||||
putInCache(variantURI, entry);
|
putInCache(variantURI, entry);
|
||||||
|
@ -965,7 +959,7 @@ public class TestCachingHttpClient {
|
||||||
org.easymock.EasyMock.expect(mockCacheEntry.isRevalidatable()).andReturn(b);
|
org.easymock.EasyMock.expect(mockCacheEntry.isRevalidatable()).andReturn(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cacheEntryUpdaterCalled() {
|
private void cacheEntryUpdaterCalled() throws IOException {
|
||||||
EasyMock.expect(
|
EasyMock.expect(
|
||||||
mockCacheEntryUpdater.updateCacheEntry(mockCacheEntry, requestDate, responseDate,
|
mockCacheEntryUpdater.updateCacheEntry(mockCacheEntry, requestDate, responseDate,
|
||||||
mockBackendResponse)).andReturn(mockUpdatedCacheEntry);
|
mockBackendResponse)).andReturn(mockUpdatedCacheEntry);
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.apache.http.Header;
|
||||||
import org.apache.http.HttpRequest;
|
import org.apache.http.HttpRequest;
|
||||||
import org.apache.http.ProtocolException;
|
import org.apache.http.ProtocolException;
|
||||||
import org.apache.http.ProtocolVersion;
|
import org.apache.http.ProtocolVersion;
|
||||||
|
import org.apache.http.entity.ByteArrayEntity;
|
||||||
import org.apache.http.impl.cookie.DateUtils;
|
import org.apache.http.impl.cookie.DateUtils;
|
||||||
import org.apache.http.message.BasicHeader;
|
import org.apache.http.message.BasicHeader;
|
||||||
import org.apache.http.message.BasicHttpRequest;
|
import org.apache.http.message.BasicHttpRequest;
|
||||||
|
@ -61,7 +62,9 @@ public class TestConditionalRequestBuilder {
|
||||||
new BasicHeader("Date", DateUtils.formatDate(new Date())),
|
new BasicHeader("Date", DateUtils.formatDate(new Date())),
|
||||||
new BasicHeader("Last-Modified", lastModified) };
|
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);
|
HttpRequest newRequest = impl.buildConditionalRequest(request, cacheEntry);
|
||||||
|
|
||||||
Assert.assertNotSame(request, newRequest);
|
Assert.assertNotSame(request, newRequest);
|
||||||
|
@ -93,7 +96,9 @@ public class TestConditionalRequestBuilder {
|
||||||
new BasicHeader("Last-Modified", DateUtils.formatDate(new Date())),
|
new BasicHeader("Last-Modified", DateUtils.formatDate(new Date())),
|
||||||
new BasicHeader("ETag", theETag) };
|
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);
|
HttpRequest newRequest = impl.buildConditionalRequest(request, cacheEntry);
|
||||||
|
|
|
@ -26,11 +26,6 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.http.impl.client.cache;
|
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.Header;
|
||||||
import org.apache.http.HttpVersion;
|
import org.apache.http.HttpVersion;
|
||||||
import org.apache.http.ProtocolVersion;
|
import org.apache.http.ProtocolVersion;
|
||||||
|
@ -39,6 +34,13 @@ import org.apache.http.message.BasicHeader;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
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 {
|
public class TestDefaultCacheEntrySerializer {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -60,7 +62,7 @@ public class TestDefaultCacheEntrySerializer {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private CacheEntry newCacheEntry() {
|
private CacheEntry newCacheEntry() throws UnsupportedEncodingException {
|
||||||
|
|
||||||
|
|
||||||
Header[] headers = new Header[5];
|
Header[] headers = new Header[5];
|
||||||
|
@ -70,13 +72,14 @@ public class TestDefaultCacheEntrySerializer {
|
||||||
ProtocolVersion version = new HttpVersion(1, 1);
|
ProtocolVersion version = new HttpVersion(1, 1);
|
||||||
String body = "Lorem ipsum dolor sit amet";
|
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;
|
return cacheEntry;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean areEqual(CacheEntry one, CacheEntry two) {
|
private boolean areEqual(CacheEntry one, CacheEntry two) throws IOException {
|
||||||
|
|
||||||
if (!one.getRequestDate().equals(two.getRequestDate()))
|
if (!one.getRequestDate().equals(two.getRequestDate()))
|
||||||
return false;
|
return false;
|
||||||
|
@ -84,7 +87,20 @@ public class TestDefaultCacheEntrySerializer {
|
||||||
return false;
|
return false;
|
||||||
if (!one.getProtocolVersion().equals(two.getProtocolVersion()))
|
if (!one.getProtocolVersion().equals(two.getProtocolVersion()))
|
||||||
return false;
|
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;
|
return false;
|
||||||
|
|
||||||
Header[] oneHeaders = one.getAllHeaders();
|
Header[] oneHeaders = one.getAllHeaders();
|
||||||
|
|
|
@ -2308,7 +2308,8 @@ public class TestProtocolRequirements {
|
||||||
byte[] bytes = new byte[128];
|
byte[] bytes = new byte[128];
|
||||||
(new Random()).nextBytes(bytes);
|
(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));
|
mockCache.putEntry(EasyMock.eq("http://foo.example.com/thing"), EasyMock.isA(CacheEntry.class));
|
||||||
|
|
||||||
|
@ -2352,7 +2353,9 @@ public class TestProtocolRequirements {
|
||||||
(new Random()).nextBytes(bytes);
|
(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);
|
impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
|
||||||
|
@ -2393,7 +2396,8 @@ public class TestProtocolRequirements {
|
||||||
byte[] bytes = new byte[128];
|
byte[] bytes = new byte[128];
|
||||||
(new Random()).nextBytes(bytes);
|
(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];
|
byte[] bytes = new byte[128];
|
||||||
(new Random()).nextBytes(bytes);
|
(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);
|
impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
|
||||||
|
|
||||||
|
@ -2639,8 +2644,8 @@ public class TestProtocolRequirements {
|
||||||
byte[] bytes = new byte[128];
|
byte[] bytes = new byte[128];
|
||||||
(new Random()).nextBytes(bytes);
|
(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);
|
impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
|
||||||
|
|
||||||
|
|
|
@ -28,12 +28,16 @@ package org.apache.http.impl.client.cache;
|
||||||
|
|
||||||
import org.apache.http.client.cache.HttpCacheOperationException;
|
import org.apache.http.client.cache.HttpCacheOperationException;
|
||||||
import org.apache.http.client.cache.HttpCacheUpdateCallback;
|
import org.apache.http.client.cache.HttpCacheUpdateCallback;
|
||||||
|
import org.apache.http.entity.ByteArrayEntity;
|
||||||
import org.easymock.classextension.EasyMock;
|
import org.easymock.classextension.EasyMock;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
public class TestResponseCache {
|
public class TestResponseCache {
|
||||||
|
|
||||||
private BasicHttpCache cache;
|
private BasicHttpCache cache;
|
||||||
|
@ -133,7 +137,7 @@ public class TestResponseCache {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void testCacheEntryCallbackUpdatesCacheEntry() throws HttpCacheOperationException {
|
public void testCacheEntryCallbackUpdatesCacheEntry() throws HttpCacheOperationException, IOException {
|
||||||
|
|
||||||
final byte[] expectedArray = new byte[] { 1, 2, 3, 4, 5 };
|
final byte[] expectedArray = new byte[] { 1, 2, 3, 4, 5 };
|
||||||
|
|
||||||
|
@ -151,7 +155,7 @@ public class TestResponseCache {
|
||||||
existing.getRequestDate(),
|
existing.getRequestDate(),
|
||||||
existing.getProtocolVersion(),
|
existing.getProtocolVersion(),
|
||||||
existing.getAllHeaders(),
|
existing.getAllHeaders(),
|
||||||
expectedArray,
|
new ByteArrayEntity(expectedArray),
|
||||||
existing.getStatusCode(),
|
existing.getStatusCode(),
|
||||||
existing.getReasonPhrase());
|
existing.getReasonPhrase());
|
||||||
cache.removeEntry("bar");
|
cache.removeEntry("bar");
|
||||||
|
@ -164,7 +168,12 @@ public class TestResponseCache {
|
||||||
|
|
||||||
Assert.assertNull(bar);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue