Commit 956162ed authored by Jesse Wilson's avatar Jesse Wilson Committed by Android (Google) Code Review
Browse files

Merge "Make HTTP implementation details public for CTS tests."

parents e137adb9 ed211506
......@@ -218,7 +218,7 @@ public class HttpEngine {
* headers may forbid network use. In that case, dispose of the network
* response and use a BAD_GATEWAY response instead.
*/
if (requestHeaders.onlyIfCached && responseSource.requiresConnection()) {
if (requestHeaders.isOnlyIfCached() && responseSource.requiresConnection()) {
if (responseSource == ResponseSource.CONDITIONAL_CACHE) {
IoUtils.closeQuietly(cachedResponseBody);
}
......@@ -247,7 +247,7 @@ public class HttpEngine {
}
CacheResponse candidate = responseCache.get(uri, method,
requestHeaders.headers.toMultimap());
requestHeaders.getHeaders().toMultimap());
if (candidate == null) {
return;
}
......@@ -341,9 +341,9 @@ public class HttpEngine {
} else if (sendChunked) {
writeRequestHeaders(-1);
requestBodyOut = new ChunkedOutputStream(requestOut, chunkLength);
} else if (requestHeaders.contentLength != -1) {
writeRequestHeaders(requestHeaders.contentLength);
requestBodyOut = new RetryableOutputStream(requestHeaders.contentLength);
} else if (requestHeaders.getContentLength() != -1) {
writeRequestHeaders(requestHeaders.getContentLength());
requestBodyOut = new RetryableOutputStream(requestHeaders.getContentLength());
} else {
requestBodyOut = new RetryableOutputStream();
}
......@@ -358,7 +358,7 @@ public class HttpEngine {
throw new IllegalStateException();
}
this.responseHeaders = headers;
this.httpMinorVersion = responseHeaders.headers.getHttpMinorVersion();
this.httpMinorVersion = responseHeaders.getHeaders().getHttpMinorVersion();
if (body != null) {
initContentStream(body);
}
......@@ -397,7 +397,7 @@ public class HttpEngine {
if (responseHeaders == null) {
throw new IllegalStateException();
}
return responseHeaders.headers.getResponseCode();
return responseHeaders.getHeaders().getResponseCode();
}
public final InputStream getResponseBody() {
......@@ -527,9 +527,9 @@ public class HttpEngine {
return new ChunkedInputStream(socketIn, cacheRequest, this);
}
if (responseHeaders.contentLength != -1) {
if (responseHeaders.getContentLength() != -1) {
return new FixedLengthInputStream(socketIn, cacheRequest, this,
responseHeaders.contentLength);
responseHeaders.getContentLength());
}
/*
......@@ -555,7 +555,7 @@ public class HttpEngine {
* See RFC 2616 section 4.3.
*/
public final boolean hasResponseBody() {
int responseCode = responseHeaders.headers.getResponseCode();
int responseCode = responseHeaders.getHeaders().getResponseCode();
if (method != HEAD
&& method != CONNECT
&& (responseCode < HTTP_CONTINUE || responseCode >= 200)
......@@ -569,7 +569,7 @@ public class HttpEngine {
* response code, the response is malformed. For best compatibility, we
* honor the headers.
*/
if (responseHeaders.contentLength != -1 || responseHeaders.isChunked()) {
if (responseHeaders.getContentLength() != -1 || responseHeaders.isChunked()) {
return true;
}
......@@ -581,7 +581,7 @@ public class HttpEngine {
* with chunked encoding.
*/
final void readTrailers() throws IOException {
readHeaders(responseHeaders.headers);
readHeaders(responseHeaders.getHeaders());
}
private void readHeaders(RawHeaders headers) throws IOException {
......@@ -638,7 +638,7 @@ public class HttpEngine {
* the connection is using a proxy.
*/
protected RawHeaders getNetworkRequestHeaders() throws IOException {
requestHeaders.headers.setStatusLine(getRequestLine());
requestHeaders.getHeaders().setStatusLine(getRequestLine());
int fixedContentLength = policy.getFixedContentLength();
if (fixedContentLength != -1) {
......@@ -650,7 +650,7 @@ public class HttpEngine {
requestHeaders.setContentLength(contentLength);
}
return requestHeaders.headers;
return requestHeaders.getHeaders();
}
/**
......@@ -660,26 +660,26 @@ public class HttpEngine {
* doesn't know what content types the application is interested in.
*/
private void prepareRawRequestHeaders() throws IOException {
requestHeaders.headers.setStatusLine(getRequestLine());
requestHeaders.getHeaders().setStatusLine(getRequestLine());
if (requestHeaders.userAgent == null) {
if (requestHeaders.getUserAgent() == null) {
requestHeaders.setUserAgent(getDefaultUserAgent());
}
if (requestHeaders.host == null) {
if (requestHeaders.getHost() == null) {
requestHeaders.setHost(getOriginAddress(policy.getURL()));
}
if (httpMinorVersion > 0 && requestHeaders.connection == null) {
if (httpMinorVersion > 0 && requestHeaders.getConnection() == null) {
requestHeaders.setConnection("Keep-Alive");
}
if (requestHeaders.acceptEncoding == null) {
if (requestHeaders.getAcceptEncoding() == null) {
transparentGzip = true;
requestHeaders.setAcceptEncoding("gzip");
}
if (hasRequestBody() && requestHeaders.contentType == null) {
if (hasRequestBody() && requestHeaders.getContentType() == null) {
requestHeaders.setContentType("application/x-www-form-urlencoded");
}
......@@ -690,7 +690,8 @@ public class HttpEngine {
CookieHandler cookieHandler = CookieHandler.getDefault();
if (cookieHandler != null) {
requestHeaders.addCookies(cookieHandler.get(uri, requestHeaders.headers.toMultimap()));
requestHeaders.addCookies(
cookieHandler.get(uri, requestHeaders.getHeaders().toMultimap()));
}
}
......
......@@ -166,7 +166,8 @@ public final class HttpResponseCache extends ResponseCache {
return null;
}
RawHeaders varyHeaders = httpEngine.getRequestHeaders().headers.getAll(response.varyFields);
RawHeaders varyHeaders = httpEngine.getRequestHeaders().getHeaders().getAll(
response.getVaryFields());
Entry entry = new Entry(uri, varyHeaders, httpConnection);
DiskLruCache.Editor editor = null;
try {
......@@ -202,11 +203,11 @@ public final class HttpResponseCache extends ResponseCache {
return cache;
}
synchronized int getWriteAbortCount() {
public synchronized int getWriteAbortCount() {
return writeAbortCount;
}
synchronized int getWriteSuccessCount() {
public synchronized int getWriteSuccessCount() {
return writeSuccessCount;
}
......
......@@ -114,7 +114,7 @@ class HttpURLConnectionImpl extends HttpURLConnection {
*/
@Override public final String getHeaderField(int position) {
try {
return getResponse().getResponseHeaders().headers.getValue(position);
return getResponse().getResponseHeaders().getHeaders().getValue(position);
} catch (IOException e) {
return null;
}
......@@ -127,7 +127,7 @@ class HttpURLConnectionImpl extends HttpURLConnection {
*/
@Override public final String getHeaderField(String fieldName) {
try {
RawHeaders rawHeaders = getResponse().getResponseHeaders().headers;
RawHeaders rawHeaders = getResponse().getResponseHeaders().getHeaders();
return fieldName == null
? rawHeaders.getStatusLine()
: rawHeaders.get(fieldName);
......@@ -138,7 +138,7 @@ class HttpURLConnectionImpl extends HttpURLConnection {
@Override public final String getHeaderFieldKey(int position) {
try {
return getResponse().getResponseHeaders().headers.getFieldName(position);
return getResponse().getResponseHeaders().getHeaders().getFieldName(position);
} catch (IOException e) {
return null;
}
......@@ -146,7 +146,7 @@ class HttpURLConnectionImpl extends HttpURLConnection {
@Override public final Map<String, List<String>> getHeaderFields() {
try {
return getResponse().getResponseHeaders().headers.toMultimap();
return getResponse().getResponseHeaders().getHeaders().toMultimap();
} catch (IOException e) {
return null;
}
......@@ -391,8 +391,8 @@ class HttpURLConnectionImpl extends HttpURLConnection {
// keep asking for username/password until authorized
String challenge = responseCode == HTTP_PROXY_AUTH
? response.proxyAuthenticate
: response.wwwAuthenticate;
? response.getProxyAuthenticate()
: response.getWwwAuthenticate();
if (challenge == null) {
throw new IOException("Received authentication challenge is null");
}
......@@ -472,7 +472,7 @@ class HttpURLConnectionImpl extends HttpURLConnection {
}
@Override public String getResponseMessage() throws IOException {
return getResponse().getResponseHeaders().headers.getResponseMessage();
return getResponse().getResponseHeaders().getHeaders().getResponseMessage();
}
@Override public final int getResponseCode() throws IOException {
......
......@@ -485,7 +485,7 @@ final class HttpsURLConnectionImpl extends HttpsURLConnection {
*/
private void makeTunnel(HttpURLConnectionImpl policy, HttpConnection connection,
RequestHeaders requestHeaders) throws IOException {
RawHeaders rawRequestHeaders = requestHeaders.headers;
RawHeaders rawRequestHeaders = requestHeaders.getHeaders();
while (true) {
HttpEngine connect = new ProxyConnectEngine(policy, rawRequestHeaders, connection);
connect.sendRequest();
......@@ -544,20 +544,20 @@ final class HttpsURLConnectionImpl extends HttpsURLConnection {
+ " HTTP/1.1");
// Always set Host and User-Agent.
String host = privateHeaders.host;
String host = privateHeaders.getHost();
if (host == null) {
host = getOriginAddress(url);
}
result.set("Host", host);
String userAgent = privateHeaders.userAgent;
String userAgent = privateHeaders.getUserAgent();
if (userAgent == null) {
userAgent = getDefaultUserAgent();
}
result.set("User-Agent", userAgent);
// Copy over the Proxy-Authorization header if it exists.
String proxyAuthorization = privateHeaders.proxyAuthorization;
String proxyAuthorization = privateHeaders.getProxyAuthorization();
if (proxyAuthorization != null) {
result.set("Proxy-Authorization", proxyAuthorization);
}
......
......@@ -42,7 +42,7 @@ import java.util.TreeMap;
* <p>This class trims whitespace from values. It never returns values with
* leading or trailing whitespace.
*/
final class RawHeaders {
public final class RawHeaders {
private static final Comparator<String> FIELD_NAME_COMPARATOR = new Comparator<String>() {
@FindBugsSuppressWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ")
@Override public int compare(String a, String b) {
......
......@@ -24,15 +24,15 @@ import java.util.Map;
/**
* Parsed HTTP request headers.
*/
final class RequestHeaders {
final URI uri;
final RawHeaders headers;
public final class RequestHeaders {
private final URI uri;
private final RawHeaders headers;
/** Don't use a cache to satisfy this request. */
boolean noCache;
int maxAgeSeconds = -1;
int maxStaleSeconds = -1;
int minFreshSeconds = -1;
private boolean noCache;
private int maxAgeSeconds = -1;
private int maxStaleSeconds = -1;
private int minFreshSeconds = -1;
/**
* This field's name "only-if-cached" is misleading. It actually means "do
......@@ -41,25 +41,25 @@ final class RequestHeaders {
* would require validation (ie. conditional gets) are not permitted if this
* header is set.
*/
boolean onlyIfCached;
private boolean onlyIfCached;
/**
* True if the request contains an authorization field. Although this isn't
* necessarily a shared cache, it follows the spec's strict requirements for
* shared caches.
*/
boolean hasAuthorization;
int contentLength = -1;
String transferEncoding;
String userAgent;
String host;
String connection;
String acceptEncoding;
String contentType;
String ifModifiedSince;
String ifNoneMatch;
String proxyAuthorization;
private boolean hasAuthorization;
private int contentLength = -1;
private String transferEncoding;
private String userAgent;
private String host;
private String connection;
private String acceptEncoding;
private String contentType;
private String ifModifiedSince;
private String ifNoneMatch;
private String proxyAuthorization;
public RequestHeaders(URI uri, RawHeaders headers) {
this.uri = uri;
......@@ -127,6 +127,78 @@ final class RequestHeaders {
return "close".equalsIgnoreCase(connection);
}
public URI getUri() {
return uri;
}
public RawHeaders getHeaders() {
return headers;
}
public boolean isNoCache() {
return noCache;
}
public int getMaxAgeSeconds() {
return maxAgeSeconds;
}
public int getMaxStaleSeconds() {
return maxStaleSeconds;
}
public int getMinFreshSeconds() {
return minFreshSeconds;
}
public boolean isOnlyIfCached() {
return onlyIfCached;
}
public boolean hasAuthorization() {
return hasAuthorization;
}
public int getContentLength() {
return contentLength;
}
public String getTransferEncoding() {
return transferEncoding;
}
public String getUserAgent() {
return userAgent;
}
public String getHost() {
return host;
}
public String getConnection() {
return connection;
}
public String getAcceptEncoding() {
return acceptEncoding;
}
public String getContentType() {
return contentType;
}
public String getIfModifiedSince() {
return ifModifiedSince;
}
public String getIfNoneMatch() {
return ifNoneMatch;
}
public String getProxyAuthorization() {
return proxyAuthorization;
}
public void setChunked() {
if (this.transferEncoding != null) {
headers.removeAll("Transfer-Encoding");
......
......@@ -30,7 +30,7 @@ import libcore.util.Objects;
/**
* Parsed HTTP response headers.
*/
final class ResponseHeaders {
public final class ResponseHeaders {
/** HTTP header name for the local time when the request was sent. */
private static final String SENT_MILLIS = "X-Android-Sent-Millis";
......@@ -38,32 +38,32 @@ final class ResponseHeaders {
/** HTTP header name for the local time when the response was received. */
private static final String RECEIVED_MILLIS = "X-Android-Received-Millis";
final URI uri;
final RawHeaders headers;
private final URI uri;
private final RawHeaders headers;
/** The server's time when this response was served, if known. */
Date servedDate;
private Date servedDate;
/** The last modified date of the response, if known. */
Date lastModified;
private Date lastModified;
/**
* The expiration date of the response, if known. If both this field and the
* max age are set, the max age is preferred.
*/
Date expires;
private Date expires;
/**
* Extension header set by HttpURLConnectionImpl specifying the timestamp
* when the HTTP request was first initiated.
*/
long sentRequestMillis;
private long sentRequestMillis;
/**
* Extension header set by HttpURLConnectionImpl specifying the timestamp
* when the HTTP response was first received.
*/
long receivedResponseMillis;
private long receivedResponseMillis;
/**
* In the response, this field's name "no-cache" is misleading. It doesn't
......@@ -71,23 +71,23 @@ final class ResponseHeaders {
* the response with the origin server before returning it. We can do this
* with a conditional get.
*/
boolean noCache;
private boolean noCache;
/** If true, this response should not be cached. */
boolean noStore;
private boolean noStore;
/**
* The duration past the response's served date that it can be served
* without validation.
*/
int maxAgeSeconds = -1;
private int maxAgeSeconds = -1;
/**
* The "s-maxage" directive is the max age for shared caches. Not to be
* confused with "max-age" for non-shared caches, As in Firefox and Chrome,
* this directive is not honored by this cache.
*/
int sMaxAgeSeconds = -1;
private int sMaxAgeSeconds = -1;
/**
* This request header field's name "only-if-cached" is misleading. It
......@@ -96,20 +96,20 @@ final class ResponseHeaders {
* Cached responses that would require validation (ie. conditional gets) are
* not permitted if this header is set.
*/
boolean isPublic;
boolean mustRevalidate;
String etag;
int ageSeconds = -1;
private boolean isPublic;
private boolean mustRevalidate;
private String etag;
private int ageSeconds = -1;
/** Case-insensitive set of field names. */
Set<String> varyFields = Collections.emptySet();
private Set<String> varyFields = Collections.emptySet();
String contentEncoding;
String transferEncoding;
int contentLength = -1;
String connection;
String proxyAuthenticate;
String wwwAuthenticate;
private String contentEncoding;
private String transferEncoding;
private int contentLength = -1;
private String connection;
private String proxyAuthenticate;
private String wwwAuthenticate;
public ResponseHeaders(URI uri, RawHeaders headers) {
this.uri = uri;
......@@ -200,6 +200,78 @@ final class ResponseHeaders {
return "close".equalsIgnoreCase(connection);
}
public URI getUri() {
return uri;
}
public RawHeaders getHeaders() {
return headers;
}
public Date getServedDate() {
return servedDate;
}
public Date getLastModified() {
return lastModified;
}
public Date getExpires() {
return expires;
}
public boolean isNoCache() {
return noCache;
}
public boolean isNoStore() {
return noStore;
}
public int getMaxAgeSeconds() {
return maxAgeSeconds;
}
public int getSMaxAgeSeconds() {
return sMaxAgeSeconds;
}
public boolean isPublic() {
return isPublic;
}
public boolean isMustRevalidate() {
return mustRevalidate;
}
public String getEtag() {
return etag;
}
public Set<String> getVaryFields() {
return varyFields;
}
public String getContentEncoding() {
return contentEncoding;
}
public int getContentLength() {
return contentLength;
}
public String getConnection() {
return connection;
}
public String getProxyAuthenticate() {
return proxyAuthenticate;
}
public String getWwwAuthenticate() {
return wwwAuthenticate;
}
public void setLocalTimestamps(long sentRequestMillis, long receivedResponseMillis) {
this.sentRequestMillis = sentRequestMillis;
headers.add(SENT_MILLIS, Long.toString(sentRequestMillis));
......@@ -279,7 +351,7 @@ final class ResponseHeaders {
* Responses to authorized requests aren't cacheable unless they include
* a 'public', 'must-revalidate' or 's-maxage' directive.
*/
if (request.hasAuthorization
if (request.hasAuthorization()
&& !isPublic
&& !mustRevalidate
&& sMaxAgeSeconds == -1) {
......@@ -328,26 +400,26 @@ final class ResponseHeaders {
return ResponseSource.NETWORK;
}
if (request.noCache || request.hasConditions()) {
if (request.isNoCache() || request.hasConditions()) {
return ResponseSource.NETWORK;
}
long ageMillis = computeAge(nowMillis);
long freshMillis = computeFreshnessLifetime();
if (request.maxAgeSeconds != -1) {
if (request.getMaxAgeSeconds() != -1) {
freshMillis = Math.min(freshMillis,
TimeUnit.SECONDS.toMillis(request.maxAgeSeconds));
TimeUnit.SECONDS.toMillis(request.getMaxAgeSeconds()));
}
long minFreshMillis = 0;
if (request.minFreshSeconds != -1) {
minFreshMillis = TimeUnit.SECONDS.toMillis(request.minFreshSeconds);
if (request.getMinFreshSeconds() != -1) {
minFreshMillis = TimeUnit.SECONDS.toMillis(request.getMinFreshSeconds());
}
long maxStaleMillis = 0;
if (!mustRevalidate && request.maxStaleSeconds != -1) {
maxStaleMillis = TimeUnit.SECONDS.toMillis(request.maxStaleSeconds);
if (!mustRevalidate && request.getMaxStaleSeconds() != -1) {
maxStaleMillis = TimeUnit.SECONDS.toMillis(request.getMaxStaleSeconds());
}
if (!noCache && ageMillis + minFreshMillis < freshMillis + maxStaleMillis) {
......
......@@ -38,84 +38,84 @@ public final class ParsedHeadersTest extends TestCase {
headers.add("ETAG", "v1");
headers.add("PRAGMA", "no-cache");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertTrue(parsedHeaders.noStore);
assertEquals(new Date(1000), parsedHeaders.servedDate);
assertEquals(new Date(2000), parsedHeaders.expires);
assertEquals(new Date(3000), parsedHeaders.lastModified);
assertEquals("v1", parsedHeaders.etag);
assertTrue(parsedHeaders.noCache);
assertTrue(parsedHeaders.isNoStore());
assertEquals(new Date(1000), parsedHeaders.getServedDate());
assertEquals(new Date(2000), parsedHeaders.getExpires());
assertEquals(new Date(3000), parsedHeaders.getLastModified());
assertEquals("v1", parsedHeaders.getEtag());
assertTrue(parsedHeaders.isNoCache());
}
public void testCommaSeparatedCacheControlHeaders() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "no-store, max-age=60, public");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertTrue(parsedHeaders.noStore);
assertEquals(60, parsedHeaders.maxAgeSeconds);
assertTrue(parsedHeaders.isPublic);
assertTrue(parsedHeaders.isNoStore());
assertEquals(60, parsedHeaders.getMaxAgeSeconds());
assertTrue(parsedHeaders.isPublic());
}
public void testQuotedFieldName() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "private=\"Set-Cookie\", no-store");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertTrue(parsedHeaders.noStore);
assertTrue(parsedHeaders.isNoStore());
}
public void testUnquotedValue() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "private=Set-Cookie, no-store");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertTrue(parsedHeaders.noStore);
assertTrue(parsedHeaders.isNoStore());
}
public void testQuotedValue() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "private=\" a, no-cache, c \", no-store");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertTrue(parsedHeaders.noStore);
assertFalse(parsedHeaders.noCache);
assertTrue(parsedHeaders.isNoStore());
assertFalse(parsedHeaders.isNoCache());
}
public void testDanglingQuote() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "private=\"a, no-cache, c");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertFalse(parsedHeaders.noCache);
assertFalse(parsedHeaders.isNoCache());
}
public void testTrailingComma() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "public,");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertTrue(parsedHeaders.isPublic);
assertTrue(parsedHeaders.isPublic());
}
public void testTrailingEquals() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "private=");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
new ResponseHeaders(uri, headers);
}
public void testSpaceBeforeEquals() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "max-age =60");
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertEquals(60, parsedHeaders.maxAgeSeconds);
assertEquals(60, parsedHeaders.getMaxAgeSeconds());
}
public void testSpaceAfterEqualsWithQuotes() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "max-age= \"60\"");
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertEquals(60, parsedHeaders.maxAgeSeconds);
assertEquals(60, parsedHeaders.getMaxAgeSeconds());
}
public void testSpaceAfterEqualsWithoutQuotes() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "max-age= 60");
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertEquals(60, parsedHeaders.maxAgeSeconds);
assertEquals(60, parsedHeaders.getMaxAgeSeconds());
}
public void testCacheControlRequestDirectivesAreCaseInsensitive() {
......@@ -126,11 +126,11 @@ public final class ParsedHeadersTest extends TestCase {
headers.add("Cache-Control", "MIN-FRESH=80");
headers.add("Cache-Control", "ONLY-IF-CACHED");
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertTrue(parsedHeaders.noCache);
assertEquals(60, parsedHeaders.maxAgeSeconds);
assertEquals(70, parsedHeaders.maxStaleSeconds);
assertEquals(80, parsedHeaders.minFreshSeconds);
assertTrue(parsedHeaders.onlyIfCached);
assertTrue(parsedHeaders.isNoCache());
assertEquals(60, parsedHeaders.getMaxAgeSeconds());
assertEquals(70, parsedHeaders.getMaxStaleSeconds());
assertEquals(80, parsedHeaders.getMinFreshSeconds());
assertTrue(parsedHeaders.isOnlyIfCached());
}
public void testCacheControlResponseDirectivesAreCaseInsensitive() {
......@@ -142,46 +142,46 @@ public final class ParsedHeadersTest extends TestCase {
headers.add("Cache-Control", "PUBLIC");
headers.add("Cache-Control", "MUST-REVALIDATE");
ResponseHeaders parsedHeaders = new ResponseHeaders(uri, headers);
assertTrue(parsedHeaders.noCache);
assertTrue(parsedHeaders.noStore);
assertEquals(60, parsedHeaders.maxAgeSeconds);
assertEquals(70, parsedHeaders.sMaxAgeSeconds);
assertTrue(parsedHeaders.isPublic);
assertTrue(parsedHeaders.mustRevalidate);
assertTrue(parsedHeaders.isNoCache());
assertTrue(parsedHeaders.isNoStore());
assertEquals(60, parsedHeaders.getMaxAgeSeconds());
assertEquals(70, parsedHeaders.getSMaxAgeSeconds());
assertTrue(parsedHeaders.isPublic());
assertTrue(parsedHeaders.isMustRevalidate());
}
public void testPragmaDirectivesAreCaseInsensitive() {
RawHeaders headers = new RawHeaders();
headers.add("Pragma", "NO-CACHE");
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertTrue(parsedHeaders.noCache);
assertTrue(parsedHeaders.isNoCache());
}
public void testMissingInteger() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "max-age");
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertEquals(-1, parsedHeaders.maxAgeSeconds);
assertEquals(-1, parsedHeaders.getMaxAgeSeconds());
}
public void testInvalidInteger() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "MAX-AGE=pi");
RequestHeaders requestHeaders = new RequestHeaders(uri, headers);
assertEquals(-1, requestHeaders.maxAgeSeconds);
assertEquals(-1, requestHeaders.getMaxAgeSeconds());
}
public void testVeryLargeInteger() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "MAX-AGE=" + (Integer.MAX_VALUE + 1L));
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertEquals(Integer.MAX_VALUE, parsedHeaders.maxAgeSeconds);
assertEquals(Integer.MAX_VALUE, parsedHeaders.getMaxAgeSeconds());
}
public void testNegativeInteger() {
RawHeaders headers = new RawHeaders();
headers.add("Cache-Control", "MAX-AGE=-2");
RequestHeaders parsedHeaders = new RequestHeaders(uri, headers);
assertEquals(0, parsedHeaders.maxAgeSeconds);
assertEquals(0, parsedHeaders.getMaxAgeSeconds());
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment