1
0
mirror of https://github.com/square/okhttp.git synced 2025-11-26 06:43:09 +03:00

Use 'Headers' in recorded response.

This commit is contained in:
Jake Wharton
2015-01-05 22:16:25 -08:00
parent 5f44ca768e
commit c46b61d565
12 changed files with 130 additions and 215 deletions

View File

@@ -618,7 +618,7 @@ public final class MockWebServer {
// Adapt the request and response into our Request and Response domain model. // Adapt the request and response into our Request and Response domain model.
final Request fancyRequest = new Request.Builder() final Request fancyRequest = new Request.Builder()
.get().url(request.getPath()) .get().url(request.getPath())
.headers(request.getNewHeaders()) .headers(request.getHeaders())
.build(); .build();
final Response fancyResponse = new Response.Builder() final Response fancyResponse = new Response.Builder()
.code(Integer.parseInt(response.getStatus().split(" ")[1])) .code(Integer.parseInt(response.getStatus().split(" ")[1]))

View File

@@ -20,7 +20,6 @@ import com.squareup.okhttp.TlsVersion;
import com.squareup.okhttp.internal.Internal; import com.squareup.okhttp.internal.Internal;
import com.squareup.okhttp.Headers; import com.squareup.okhttp.Headers;
import java.net.Socket; import java.net.Socket;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocket;
import okio.Buffer; import okio.Buffer;
@@ -73,33 +72,16 @@ public final class RecordedRequest {
} }
/** Returns all headers. */ /** Returns all headers. */
public List<String> getHeaders() { public Headers getHeaders() {
int size = headers.size();
List<String> headerList = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
headerList.add(headers.name(i) + ": " + headers.value(i));
}
return headerList;
}
Headers getNewHeaders() {
return headers; return headers;
} }
/** /** Returns the first header named {@code name}, or null if no such header exists. */
* Returns the first header named {@code name}, or null if no such header
* exists.
*/
public String getHeader(String name) { public String getHeader(String name) {
List<String> values = headers.values(name); List<String> values = headers.values(name);
return values.isEmpty() ? null : values.get(0); return values.isEmpty() ? null : values.get(0);
} }
/** Returns the headers named {@code name}. */
public List<String> getHeaders(String name) {
return headers.values(name);
}
/** /**
* Returns the sizes of the chunks of this request's body, or an empty list * Returns the sizes of the chunks of this request's body, or an empty list
* if the request's body was empty or unchunked. * if the request's body was empty or unchunked.

View File

@@ -27,10 +27,8 @@ import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import okio.Buffer;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
@@ -43,27 +41,6 @@ import static org.junit.Assert.fail;
public final class MockWebServerTest { public final class MockWebServerTest {
@Rule public final MockWebServerRule server = new MockWebServerRule(); @Rule public final MockWebServerRule server = new MockWebServerRule();
@Test public void recordedRequestAccessors() {
Headers headers = new Headers.Builder()
.add("User-Agent", "okhttp")
.add("Cookie", "s=square")
.add("Cookie", "a=android")
.add("X-Whitespace", " left")
.add("X-Whitespace", "right ")
.add("X-Whitespace", " both ")
.build();
List<Integer> chunkSizes = Collections.emptyList();
Buffer body = new Buffer().writeUtf8("ABC");
String requestLine = "GET / HTTP/1.1";
RecordedRequest request = new RecordedRequest(
requestLine, headers, chunkSizes, body.size(), body, 0, null);
assertEquals("s=square", request.getHeader("cookie"));
assertEquals(Arrays.asList("s=square", "a=android"), request.getHeaders("cookie"));
assertEquals("left", request.getHeader("x-whitespace"));
assertEquals(Arrays.asList("left", "right", "both"), request.getHeaders("x-whitespace"));
assertEquals("ABC", request.getBody().readUtf8());
}
@Test public void defaultMockResponse() { @Test public void defaultMockResponse() {
MockResponse response = new MockResponse(); MockResponse response = new MockResponse();
assertEquals(Arrays.asList("Content-Length: 0"), headersToList(response)); assertEquals(Arrays.asList("Content-Length: 0"), headersToList(response));
@@ -108,7 +85,7 @@ public final class MockWebServerTest {
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertEquals("GET / HTTP/1.1", request.getRequestLine()); assertEquals("GET / HTTP/1.1", request.getRequestLine());
assertTrue(request.getHeaders().contains("Accept-Language: en-US")); assertEquals("en-US", request.getHeader("Accept-Language"));
} }
@Test public void redirect() throws Exception { @Test public void redirect() throws Exception {

View File

@@ -562,8 +562,7 @@ public final class CacheTest {
RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse() RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse()
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS))); .addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception { @Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception {
@@ -600,8 +599,7 @@ public final class CacheTest {
RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse() RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse()
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception { @Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception {
@@ -627,8 +625,7 @@ public final class CacheTest {
.addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS)) .addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS))
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Cache-Control: max-age=60")); .addHeader("Cache-Control: max-age=60"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception { @Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception {
@@ -809,7 +806,7 @@ public final class CacheTest {
@Test public void etag() throws Exception { @Test public void etag() throws Exception {
RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse() RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse()
.addHeader("ETag: v1")); .addHeader("ETag: v1"));
assertTrue(conditionalRequest.getHeaders().contains("If-None-Match: v1")); assertEquals("v1", conditionalRequest.getHeader("If-None-Match"));
} }
@Test public void etagAndExpirationDateInThePast() throws Exception { @Test public void etagAndExpirationDateInThePast() throws Exception {
@@ -818,9 +815,8 @@ public final class CacheTest {
.addHeader("ETag: v1") .addHeader("ETag: v1")
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals("v1", conditionalRequest.getHeader("If-None-Match"));
assertTrue(headers.contains("If-None-Match: v1")); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void etagAndExpirationDateInTheFuture() throws Exception { @Test public void etagAndExpirationDateInTheFuture() throws Exception {
@@ -841,8 +837,7 @@ public final class CacheTest {
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Cache-Control: no-cache")); .addHeader("Cache-Control: no-cache"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void pragmaNoCache() throws Exception { @Test public void pragmaNoCache() throws Exception {
@@ -856,8 +851,7 @@ public final class CacheTest {
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Pragma: no-cache")); .addHeader("Pragma: no-cache"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void cacheControlNoStore() throws Exception { @Test public void cacheControlNoStore() throws Exception {
@@ -1224,9 +1218,8 @@ public final class CacheTest {
String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS); String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS);
RecordedRequest request = RecordedRequest request =
assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate); assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate);
List<String> headers = request.getHeaders(); assertEquals(ifModifiedSinceDate, request.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + ifModifiedSinceDate)); assertNull(request.getHeader("If-None-Match"));
assertFalse(headers.contains("If-None-Match: v3"));
} }
@Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception { @Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception {
@@ -1236,9 +1229,8 @@ public final class CacheTest {
.addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES)) .addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES))
.addHeader("Cache-Control: max-age=0"); .addHeader("Cache-Control: max-age=0");
RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1"); RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1");
List<String> headers = request.getHeaders(); assertEquals("v1", request.getHeader("If-None-Match"));
assertTrue(headers.contains("If-None-Match: v1")); assertNull(request.getHeader("If-Modified-Since"));
assertFalse(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName, private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName,

View File

@@ -489,7 +489,7 @@ public final class CallTest {
assertEquals("Already Executed", e.getMessage()); assertEquals("Already Executed", e.getMessage());
} }
assertTrue(server.takeRequest().getHeaders().contains("User-Agent: SyncApiTest")); assertEquals("SyncApiTest", server.takeRequest().getHeader("User-Agent"));
} }
@Test public void illegalToExecuteTwice_Async() throws Exception { @Test public void illegalToExecuteTwice_Async() throws Exception {
@@ -519,7 +519,7 @@ public final class CallTest {
assertEquals("Already Executed", e.getMessage()); assertEquals("Already Executed", e.getMessage());
} }
assertTrue(server.takeRequest().getHeaders().contains("User-Agent: SyncApiTest")); assertEquals("SyncApiTest", server.takeRequest().getHeader("User-Agent"));
} }
@Test public void get_Async() throws Exception { @Test public void get_Async() throws Exception {
@@ -538,7 +538,7 @@ public final class CallTest {
.assertHeader("Content-Type", "text/plain") .assertHeader("Content-Type", "text/plain")
.assertBody("abc"); .assertBody("abc");
assertTrue(server.takeRequest().getHeaders().contains("User-Agent: AsyncApiTest")); assertEquals("AsyncApiTest", server.takeRequest().getHeader("User-Agent"));
} }
@Test public void exceptionThrownByOnResponseIsRedactedAndLogged() throws Exception { @Test public void exceptionThrownByOnResponseIsRedactedAndLogged() throws Exception {
@@ -1223,12 +1223,14 @@ public final class CallTest {
assertEquals("Page 2", response.body().string()); assertEquals("Page 2", response.body().string());
RecordedRequest request1 = server.takeRequest(); RecordedRequest request1 = server.takeRequest();
assertContains(request1.getHeaders(), assertEquals("$Version=\"1\"; c=\"cookie\";$Path=\"/\";$Domain=\""
"Cookie: $Version=\"1\"; " + "c=\"cookie\";$Path=\"/\";$Domain=\"" + server.get() + server.get().getCookieDomain()
.getCookieDomain() + "\";$Port=\"" + portList + "\""); + "\";$Port=\""
+ portList
+ "\"", request1.getHeader("Cookie"));
RecordedRequest request2 = server2.takeRequest(); RecordedRequest request2 = server2.takeRequest();
assertContainsNoneMatching(request2.getHeaders(), "Cookie.*"); assertNull(request2.getHeader("Cookie"));
} }
@Test public void redirectsDoNotIncludeTooManyAuthHeaders() throws Exception { @Test public void redirectsDoNotIncludeTooManyAuthHeaders() throws Exception {
@@ -1246,7 +1248,7 @@ public final class CallTest {
assertEquals("Page 2", response.body().string()); assertEquals("Page 2", response.body().string());
RecordedRequest redirectRequest = server2.takeRequest(); RecordedRequest redirectRequest = server2.takeRequest();
assertContainsNoneMatching(redirectRequest.getHeaders(), "Authorization.*"); assertNull(redirectRequest.getHeader("Authorization"));
assertEquals("/b", redirectRequest.getPath()); assertEquals("/b", redirectRequest.getPath());
} }

View File

@@ -319,7 +319,7 @@ public final class InterceptorTest {
RecordedRequest recordedRequest = server.takeRequest(); RecordedRequest recordedRequest = server.takeRequest();
assertEquals(Arrays.asList("Android", "Bob"), assertEquals(Arrays.asList("Android", "Bob"),
recordedRequest.getHeaders("Request-Interceptor")); recordedRequest.getHeaders().values("Request-Interceptor"));
} }
@Test public void asyncApplicationInterceptors() throws Exception { @Test public void asyncApplicationInterceptors() throws Exception {

View File

@@ -40,6 +40,7 @@ import org.junit.Test;
import static java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER; import static java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
@@ -204,10 +205,13 @@ public class CookiesTest {
get(server, "/"); get(server, "/");
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
List<String> receivedHeaders = request.getHeaders(); assertEquals("$Version=\"1\"; "
assertContains(receivedHeaders, "Cookie: $Version=\"1\"; " + "a=\"android\";$Path=\"/\";$Domain=\""
+ "a=\"android\";$Path=\"/\";$Domain=\"" + server.getCookieDomain() + "\"; " + server.getCookieDomain()
+ "b=\"banana\";$Path=\"/\";$Domain=\"" + server.getCookieDomain() + "\""); + "\"; "
+ "b=\"banana\";$Path=\"/\";$Domain=\""
+ server.getCookieDomain()
+ "\"", request.getHeader("Cookie"));
} }
@Test public void testRedirectsDoNotIncludeTooManyCookies() throws Exception { @Test public void testRedirectsDoNotIncludeTooManyCookies() throws Exception {
@@ -233,11 +237,14 @@ public class CookiesTest {
get(redirectSource, "/"); get(redirectSource, "/");
RecordedRequest request = redirectSource.takeRequest(); RecordedRequest request = redirectSource.takeRequest();
assertContains(request.getHeaders(), "Cookie: $Version=\"1\"; " assertEquals("$Version=\"1\"; "
+ "c=\"cookie\";$Path=\"/\";$Domain=\"" + redirectSource.getCookieDomain() + "c=\"cookie\";$Path=\"/\";$Domain=\""
+ "\";$Port=\"" + portList + "\""); + redirectSource.getCookieDomain()
+ "\";$Port=\""
+ portList
+ "\"", request.getHeader("Cookie"));
for (String header : redirectTarget.takeRequest().getHeaders()) { for (String header : redirectTarget.takeRequest().getHeaders().names()) {
if (header.startsWith("Cookie")) { if (header.startsWith("Cookie")) {
fail(header); fail(header);
} }
@@ -300,8 +307,10 @@ public class CookiesTest {
} catch (IllegalStateException expected) { } catch (IllegalStateException expected) {
} }
assertContainsAll(request.getHeaders(), "Foo: foo", "Cookie: Bar=bar", "Cookie2: Baz=baz"); assertEquals("foo", request.getHeader("Foo"));
assertFalse(request.getHeaders().contains("Quux: quux")); assertEquals("Bar=bar", request.getHeader("Cookie"));
assertEquals("Baz=baz", request.getHeader("Cookie2"));
assertNull(request.getHeader("Quux"));
} }
@Test public void testCookiesSentIgnoresCase() throws Exception { @Test public void testCookiesSentIgnoresCase() throws Exception {
@@ -321,8 +330,9 @@ public class CookiesTest {
get(server, "/"); get(server, "/");
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContainsAll(request.getHeaders(), "COOKIE: Bar=bar", "cooKIE2: Baz=baz"); assertEquals("Bar=bar", request.getHeader("Cookie"));
assertFalse(request.getHeaders().contains("Quux: quux")); assertEquals("Baz=baz", request.getHeader("Cookie2"));
assertNull(request.getHeader("Quux"));
} }
private void assertContains(Collection<String> collection, String element) { private void assertContains(Collection<String> collection, String element) {

View File

@@ -20,7 +20,6 @@ import com.squareup.okhttp.Protocol;
import com.squareup.okhttp.mockwebserver.MockResponse; import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.PushPromise; import com.squareup.okhttp.mockwebserver.PushPromise;
import com.squareup.okhttp.mockwebserver.RecordedRequest; import com.squareup.okhttp.mockwebserver.RecordedRequest;
import java.util.Arrays;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -48,13 +47,12 @@ public class HttpOverHttp20Draft16Test extends HttpOverSpdyTest {
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertEquals("GET /foo HTTP/1.1", request.getRequestLine()); assertEquals("GET /foo HTTP/1.1", request.getRequestLine());
assertContains(request.getHeaders(), ":scheme: https"); assertEquals("https", request.getHeader(":scheme"));
assertContains(request.getHeaders(), assertEquals(server.getHostName() + ":" + server.getPort(), request.getHeader(hostHeader));
hostHeader + ": " + server.getHostName() + ":" + server.getPort());
RecordedRequest pushedRequest = server.takeRequest(); RecordedRequest pushedRequest = server.takeRequest();
assertEquals("GET /foo/bar HTTP/1.1", pushedRequest.getRequestLine()); assertEquals("GET /foo/bar HTTP/1.1", pushedRequest.getRequestLine());
assertEquals(Arrays.asList("foo: bar"), pushedRequest.getHeaders()); assertEquals("bar", pushedRequest.getHeader("foo"));
} }
@Test public void serverSendsPushPromise_HEAD() throws Exception { @Test public void serverSendsPushPromise_HEAD() throws Exception {
@@ -73,12 +71,11 @@ public class HttpOverHttp20Draft16Test extends HttpOverSpdyTest {
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertEquals("GET /foo HTTP/1.1", request.getRequestLine()); assertEquals("GET /foo HTTP/1.1", request.getRequestLine());
assertContains(request.getHeaders(), ":scheme: https"); assertEquals("https", request.getHeader(":scheme"));
assertContains(request.getHeaders(), assertEquals(server.getHostName() + ":" + server.getPort(), request.getHeader(hostHeader));
hostHeader + ": " + server.getHostName() + ":" + server.getPort());
RecordedRequest pushedRequest = server.takeRequest(); RecordedRequest pushedRequest = server.takeRequest();
assertEquals("HEAD /foo/bar HTTP/1.1", pushedRequest.getRequestLine()); assertEquals("HEAD /foo/bar HTTP/1.1", pushedRequest.getRequestLine());
assertEquals(Arrays.asList("foo: bar"), pushedRequest.getHeaders()); assertEquals("bar", pushedRequest.getHeader("foo"));
} }
} }

View File

@@ -34,7 +34,6 @@ import java.net.CookieManager;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -60,7 +59,6 @@ import static java.util.concurrent.TimeUnit.SECONDS;
import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
/** Test how SPDY interacts with HTTP features. */ /** Test how SPDY interacts with HTTP features. */
@@ -111,9 +109,8 @@ public abstract class HttpOverSpdyTest {
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertEquals("GET /foo HTTP/1.1", request.getRequestLine()); assertEquals("GET /foo HTTP/1.1", request.getRequestLine());
assertContains(request.getHeaders(), ":scheme: https"); assertEquals("https", request.getHeader(":scheme"));
assertContains(request.getHeaders(), hostHeader + ": " assertEquals(server.getHostName() + ":" + server.getPort(), request.getHeader(hostHeader));
+ server.getHostName() + ":" + server.getPort());
} }
@Test public void emptyResponse() throws IOException { @Test public void emptyResponse() throws IOException {
@@ -231,11 +228,11 @@ public abstract class HttpOverSpdyTest {
assertEquals("Successful auth!", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); assertEquals("Successful auth!", readAscii(connection.getInputStream(), Integer.MAX_VALUE));
RecordedRequest denied = server.takeRequest(); RecordedRequest denied = server.takeRequest();
assertContainsNoneMatching(denied.getHeaders(), "authorization: Basic .*"); assertNull(denied.getHeader("Authorization"));
RecordedRequest accepted = server.takeRequest(); RecordedRequest accepted = server.takeRequest();
assertEquals("GET / HTTP/1.1", accepted.getRequestLine()); assertEquals("GET / HTTP/1.1", accepted.getRequestLine());
assertContains(accepted.getHeaders(), assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS,
"authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); accepted.getHeader("Authorization"));
} }
@Test public void redirect() throws Exception { @Test public void redirect() throws Exception {
@@ -396,9 +393,9 @@ public abstract class HttpOverSpdyTest {
assertContent("B", client.open(url), Integer.MAX_VALUE); assertContent("B", client.open(url), Integer.MAX_VALUE);
RecordedRequest requestA = server.takeRequest(); RecordedRequest requestA = server.takeRequest();
assertContainsNoneMatching(requestA.getHeaders(), "Cookie.*"); assertNull(requestA.getHeader("Cookie"));
RecordedRequest requestB = server.takeRequest(); RecordedRequest requestB = server.takeRequest();
assertContains(requestB.getHeaders(), "cookie: c=oreo"); assertEquals("c=oreo", requestB.getHeader("Cookie"));
} }
/** https://github.com/square/okhttp/issues/1191 */ /** https://github.com/square/okhttp/issues/1191 */
@@ -420,24 +417,12 @@ public abstract class HttpOverSpdyTest {
assertEquals(0, server.takeRequest().getSequenceNumber()); assertEquals(0, server.takeRequest().getSequenceNumber());
} }
<T> void assertContains(Collection<T> collection, T value) {
assertTrue(collection.toString(), collection.contains(value));
}
void assertContent(String expected, HttpURLConnection connection, int limit) void assertContent(String expected, HttpURLConnection connection, int limit)
throws IOException { throws IOException {
connection.connect(); connection.connect();
assertEquals(expected, readAscii(connection.getInputStream(), limit)); assertEquals(expected, readAscii(connection.getInputStream(), limit));
} }
private void assertContainsNoneMatching(List<String> headers, String pattern) {
for (String header : headers) {
if (header.matches(pattern)) {
fail("Header " + header + " matches " + pattern);
}
}
}
private String readAscii(InputStream in, int count) throws IOException { private String readAscii(InputStream in, int count) throws IOException {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {

View File

@@ -180,12 +180,11 @@ public final class URLConnectionTest {
connection.getResponseCode(); connection.getResponseCode();
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContains(request.getHeaders(), "D: e"); assertEquals(Arrays.asList("e", "f"), request.getHeaders().values("D"));
assertContains(request.getHeaders(), "D: f"); assertNull(request.getHeader("NullValue"));
assertContainsNoneMatching(request.getHeaders(), "NullValue.*"); assertNull(request.getHeader("AnotherNullValue"));
assertContainsNoneMatching(request.getHeaders(), "AnotherNullValue.*"); assertNull(request.getHeader("G"));
assertContainsNoneMatching(request.getHeaders(), "G:.*"); assertNull(request.getHeader("null"));
assertContainsNoneMatching(request.getHeaders(), "null:.*");
try { try {
connection.addRequestProperty("N", "o"); connection.addRequestProperty("N", "o");
@@ -687,7 +686,7 @@ public final class URLConnectionTest {
RecordedRequest request = server.get().takeRequest(); RecordedRequest request = server.get().takeRequest();
assertEquals("GET http://android.com/foo HTTP/1.1", request.getRequestLine()); assertEquals("GET http://android.com/foo HTTP/1.1", request.getRequestLine());
assertContains(request.getHeaders(), "Host: android.com"); assertEquals("android.com", request.getHeader("Host"));
} }
@Test public void contentDisagreesWithContentLengthHeader() throws IOException { @Test public void contentDisagreesWithContentLengthHeader() throws IOException {
@@ -814,11 +813,11 @@ public final class URLConnectionTest {
RecordedRequest connect = server.takeRequest(); RecordedRequest connect = server.takeRequest();
assertEquals("Connect line failure on proxy", "CONNECT android.com:443 HTTP/1.1", assertEquals("Connect line failure on proxy", "CONNECT android.com:443 HTTP/1.1",
connect.getRequestLine()); connect.getRequestLine());
assertContains(connect.getHeaders(), "Host: android.com"); assertEquals("android.com", connect.getHeader("Host"));
RecordedRequest get = server.takeRequest(); RecordedRequest get = server.takeRequest();
assertEquals("GET /foo HTTP/1.1", get.getRequestLine()); assertEquals("GET /foo HTTP/1.1", get.getRequestLine());
assertContains(get.getHeaders(), "Host: android.com"); assertEquals("android.com", get.getHeader("Host"));
assertEquals(Arrays.asList("verify android.com"), hostnameVerifier.calls); assertEquals(Arrays.asList("verify android.com"), hostnameVerifier.calls);
} }
@@ -848,7 +847,7 @@ public final class URLConnectionTest {
RecordedRequest connect = server.takeRequest(); RecordedRequest connect = server.takeRequest();
assertEquals("CONNECT android.com:443 HTTP/1.1", connect.getRequestLine()); assertEquals("CONNECT android.com:443 HTTP/1.1", connect.getRequestLine());
assertContains(connect.getHeaders(), "Host: android.com"); assertEquals("android.com", connect.getHeader("Host"));
} }
private void initResponseCache() throws IOException { private void initResponseCache() throws IOException {
@@ -878,14 +877,14 @@ public final class URLConnectionTest {
assertContent("encrypted response from the origin server", connection); assertContent("encrypted response from the origin server", connection);
RecordedRequest connect = server.takeRequest(); RecordedRequest connect = server.takeRequest();
assertContainsNoneMatching(connect.getHeaders(), "Private.*"); assertNull(connect.getHeader("Private"));
assertContains(connect.getHeaders(), "Proxy-Authorization: bar"); assertEquals("bar", connect.getHeader("Proxy-Authorization"));
assertContains(connect.getHeaders(), "User-Agent: baz"); assertEquals("baz", connect.getHeader("User-Agent"));
assertContains(connect.getHeaders(), "Host: android.com"); assertEquals("android.com", connect.getHeader("Host"));
assertContains(connect.getHeaders(), "Proxy-Connection: Keep-Alive"); assertEquals("Keep-Alive", connect.getHeader("Proxy-Connection"));
RecordedRequest get = server.takeRequest(); RecordedRequest get = server.takeRequest();
assertContains(get.getHeaders(), "Private: Secret"); assertEquals("Secret", get.getHeader("Private"));
assertEquals(Arrays.asList("verify android.com"), hostnameVerifier.calls); assertEquals(Arrays.asList("verify android.com"), hostnameVerifier.calls);
} }
@@ -908,16 +907,16 @@ public final class URLConnectionTest {
RecordedRequest connect1 = server.takeRequest(); RecordedRequest connect1 = server.takeRequest();
assertEquals("CONNECT android.com:443 HTTP/1.1", connect1.getRequestLine()); assertEquals("CONNECT android.com:443 HTTP/1.1", connect1.getRequestLine());
assertContainsNoneMatching(connect1.getHeaders(), "Proxy\\-Authorization.*"); assertNull(connect1.getHeader("Proxy-Authorization"));
RecordedRequest connect2 = server.takeRequest(); RecordedRequest connect2 = server.takeRequest();
assertEquals("CONNECT android.com:443 HTTP/1.1", connect2.getRequestLine()); assertEquals("CONNECT android.com:443 HTTP/1.1", connect2.getRequestLine());
assertContains(connect2.getHeaders(), assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS,
"Proxy-Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); connect2.getHeader("Proxy-Authorization"));
RecordedRequest get = server.takeRequest(); RecordedRequest get = server.takeRequest();
assertEquals("GET /foo HTTP/1.1", get.getRequestLine()); assertEquals("GET /foo HTTP/1.1", get.getRequestLine());
assertContainsNoneMatching(get.getHeaders(), "Proxy\\-Authorization.*"); assertNull(get.getHeader("Proxy-Authorization"));
} }
// Don't disconnect after building a tunnel with CONNECT // Don't disconnect after building a tunnel with CONNECT
@@ -1106,7 +1105,7 @@ public final class URLConnectionTest {
assertEquals(-1, connection.getContentLength()); assertEquals(-1, connection.getContentLength());
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContains(request.getHeaders(), "Accept-Encoding: gzip"); assertEquals("gzip", request.getHeader("Accept-Encoding"));
} }
@Test public void clientConfiguredGzipContentEncoding() throws Exception { @Test public void clientConfiguredGzipContentEncoding() throws Exception {
@@ -1122,7 +1121,7 @@ public final class URLConnectionTest {
assertEquals(bodyBytes.size(), connection.getContentLength()); assertEquals(bodyBytes.size(), connection.getContentLength());
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContains(request.getHeaders(), "Accept-Encoding: gzip"); assertEquals("gzip", request.getHeader("Accept-Encoding"));
} }
@Test public void gzipAndConnectionReuseWithFixedLength() throws Exception { @Test public void gzipAndConnectionReuseWithFixedLength() throws Exception {
@@ -1149,7 +1148,7 @@ public final class URLConnectionTest {
assertEquals("ABCDE", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); assertEquals("ABCDE", readAscii(connection.getInputStream(), Integer.MAX_VALUE));
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContains(request.getHeaders(), "Accept-Encoding: custom"); assertEquals("custom", request.getHeader("Accept-Encoding"));
} }
/** /**
@@ -1329,7 +1328,7 @@ public final class URLConnectionTest {
// no authorization header for the request... // no authorization header for the request...
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); assertNull(request.getHeader("Authorization"));
assertEquals("ABCD", request.getBody().readUtf8()); assertEquals("ABCD", request.getBody().readUtf8());
} }
@@ -1639,14 +1638,14 @@ public final class URLConnectionTest {
// no authorization header for the first request... // no authorization header for the first request...
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); assertNull(request.getHeader("Authorization"));
// ...but the three requests that follow include an authorization header // ...but the three requests that follow include an authorization header
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
request = server.takeRequest(); request = server.takeRequest();
assertEquals("POST / HTTP/1.1", request.getRequestLine()); assertEquals("POST / HTTP/1.1", request.getRequestLine());
assertContains(request.getHeaders(), assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS,
"Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); request.getHeader("Authorization"));
assertEquals("ABCD", request.getBody().readUtf8()); assertEquals("ABCD", request.getBody().readUtf8());
} }
} }
@@ -1668,14 +1667,14 @@ public final class URLConnectionTest {
// no authorization header for the first request... // no authorization header for the first request...
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); assertNull(request.getHeader("Authorization"));
// ...but the three requests that follow requests include an authorization header // ...but the three requests that follow requests include an authorization header
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
request = server.takeRequest(); request = server.takeRequest();
assertEquals("GET / HTTP/1.1", request.getRequestLine()); assertEquals("GET / HTTP/1.1", request.getRequestLine());
assertContains(request.getHeaders(), assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS,
"Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); request.getHeader("Authorization"));
} }
} }
@@ -1700,14 +1699,14 @@ public final class URLConnectionTest {
// no authorization header for the first request... // no authorization header for the first request...
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); assertNull(request.getHeader("Authorization"));
// ...but the three requests that follow requests include an authorization header // ...but the three requests that follow requests include an authorization header
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
request = server.takeRequest(); request = server.takeRequest();
assertEquals("GET / HTTP/1.1", request.getRequestLine()); assertEquals("GET / HTTP/1.1", request.getRequestLine());
assertContains(request.getHeaders(), assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS,
"Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); request.getHeader("Authorization"));
} }
} }
@@ -1869,8 +1868,8 @@ public final class URLConnectionTest {
String server1Host = server.get().getHostName() + ":" + server.getPort(); String server1Host = server.get().getHostName() + ":" + server.getPort();
String server2Host = server2.get().getHostName() + ":" + server2.getPort(); String server2Host = server2.get().getHostName() + ":" + server2.getPort();
assertContains(server.takeRequest().getHeaders(), "Host: " + server1Host); assertEquals(server1Host, server.takeRequest().getHeader("Host"));
assertContains(server2.takeRequest().getHeaders(), "Host: " + server2Host); assertEquals(server2Host, server2.takeRequest().getHeader("Host"));
assertEquals("Expected connection reuse", 1, server.takeRequest().getSequenceNumber()); assertEquals("Expected connection reuse", 1, server.takeRequest().getSequenceNumber());
assertEquals("Expected connection reuse", 1, server2.takeRequest().getSequenceNumber()); assertEquals("Expected connection reuse", 1, server2.takeRequest().getSequenceNumber());
} }
@@ -1915,7 +1914,7 @@ public final class URLConnectionTest {
assertContent("Page 2", client.open(server.getUrl("/a"))); assertContent("Page 2", client.open(server.getUrl("/a")));
RecordedRequest redirectRequest = server2.takeRequest(); RecordedRequest redirectRequest = server2.takeRequest();
assertContainsNoneMatching(redirectRequest.getHeaders(), "Authorization.*"); assertNull(redirectRequest.getHeader("Authorization"));
assertEquals("/b", redirectRequest.getPath()); assertEquals("/b", redirectRequest.getPath());
} }
@@ -1988,9 +1987,9 @@ public final class URLConnectionTest {
RecordedRequest page2 = server.takeRequest(); RecordedRequest page2 = server.takeRequest();
assertEquals("GET /page2 HTTP/1.1", page2.getRequestLine()); assertEquals("GET /page2 HTTP/1.1", page2.getRequestLine());
assertContainsNoneMatching(page2.getHeaders(), "Content-Length.*"); assertNull(page2.getHeader("Content-Length"));
assertContainsNoneMatching(page2.getHeaders(), "Content-Type.*"); assertNull(page2.getHeader("Content-Type"));
assertContainsNoneMatching(page2.getHeaders(), "Transfer-Encoding.*"); assertNull(page2.getHeader("Transfer-Encoding"));
} }
@Test public void response305UseProxy() throws Exception { @Test public void response305UseProxy() throws Exception {
@@ -2475,7 +2474,7 @@ public final class URLConnectionTest {
out.close(); out.close();
assertEquals("A", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); assertEquals("A", readAscii(connection.getInputStream(), Integer.MAX_VALUE));
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertContains(request.getHeaders(), "Content-Length: 3"); assertEquals("3", request.getHeader("Content-Length"));
} }
@Test public void getContentLengthConnects() throws Exception { @Test public void getContentLengthConnects() throws Exception {
@@ -2740,9 +2739,8 @@ public final class URLConnectionTest {
client.client().setAuthenticator(authenticator); client.client().setAuthenticator(authenticator);
assertContent("A", client.open(server.getUrl("/private"))); assertContent("A", client.open(server.getUrl("/private")));
assertContainsNoneMatching(server.takeRequest().getHeaders(), "Authorization: .*"); assertNull(server.takeRequest().getHeader("Authorization"));
assertContains(server.takeRequest().getHeaders(), assertEquals(credential, server.takeRequest().getHeader("Authorization"));
"Authorization: " + credential);
assertEquals(Proxy.NO_PROXY, authenticator.onlyProxy()); assertEquals(Proxy.NO_PROXY, authenticator.onlyProxy());
Response response = authenticator.onlyResponse(); Response response = authenticator.onlyResponse();
@@ -2761,8 +2759,8 @@ public final class URLConnectionTest {
client.client().setAuthenticator(authenticator); client.client().setAuthenticator(authenticator);
assertContent("A", client.open(server.getUrl("/private"))); assertContent("A", client.open(server.getUrl("/private")));
assertContainsNoneMatching(server.takeRequest().getHeaders(), "Authorization: .*"); assertNull(server.takeRequest().getHeader("Authorization"));
assertContains(server.takeRequest().getHeaders(), "Authorization: oauthed abc123"); assertEquals("oauthed abc123", server.takeRequest().getHeader("Authorization"));
Response response = authenticator.onlyResponse(); Response response = authenticator.onlyResponse();
assertEquals("/private", response.request().url().getPath()); assertEquals("/private", response.request().url().getPath());
@@ -3078,18 +3076,6 @@ public final class URLConnectionTest {
assertContent(expected, connection, Integer.MAX_VALUE); assertContent(expected, connection, Integer.MAX_VALUE);
} }
private void assertContains(List<String> headers, String header) {
assertTrue(headers.toString(), headers.contains(header));
}
private void assertContainsNoneMatching(List<String> headers, String pattern) {
for (String header : headers) {
if (header.matches(pattern)) {
fail("Header " + header + " matches " + pattern);
}
}
}
private Set<String> newSet(String... elements) { private Set<String> newSet(String... elements) {
return new HashSet<String>(Arrays.asList(elements)); return new HashSet<String>(Arrays.asList(elements));
} }

View File

@@ -484,8 +484,7 @@ public final class UrlConnectionCacheTest {
RecordedRequest conditionalRequest = assertConditionallyCached( RecordedRequest conditionalRequest = assertConditionallyCached(
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS))); .addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception { @Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception {
@@ -521,8 +520,7 @@ public final class UrlConnectionCacheTest {
RecordedRequest conditionalRequest = assertConditionallyCached( RecordedRequest conditionalRequest = assertConditionallyCached(
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception { @Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception {
@@ -545,8 +543,7 @@ public final class UrlConnectionCacheTest {
new MockResponse().addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS)) new MockResponse().addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS))
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Cache-Control: max-age=60")); .addHeader("Cache-Control: max-age=60"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception { @Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception {
@@ -701,7 +698,7 @@ public final class UrlConnectionCacheTest {
@Test public void etag() throws Exception { @Test public void etag() throws Exception {
RecordedRequest conditionalRequest = RecordedRequest conditionalRequest =
assertConditionallyCached(new MockResponse().addHeader("ETag: v1")); assertConditionallyCached(new MockResponse().addHeader("ETag: v1"));
assertTrue(conditionalRequest.getHeaders().contains("If-None-Match: v1")); assertEquals("v1", conditionalRequest.getHeader("If-None-Match"));
} }
@Test public void etagAndExpirationDateInThePast() throws Exception { @Test public void etagAndExpirationDateInThePast() throws Exception {
@@ -710,9 +707,8 @@ public final class UrlConnectionCacheTest {
new MockResponse().addHeader("ETag: v1") new MockResponse().addHeader("ETag: v1")
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals("v1", conditionalRequest.getHeader("If-None-Match"));
assertTrue(headers.contains("If-None-Match: v1")); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void etagAndExpirationDateInTheFuture() throws Exception { @Test public void etagAndExpirationDateInTheFuture() throws Exception {
@@ -731,8 +727,7 @@ public final class UrlConnectionCacheTest {
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Cache-Control: no-cache")); .addHeader("Cache-Control: no-cache"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void pragmaNoCache() throws Exception { @Test public void pragmaNoCache() throws Exception {
@@ -745,8 +740,7 @@ public final class UrlConnectionCacheTest {
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Pragma: no-cache")); .addHeader("Pragma: no-cache"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void cacheControlNoStore() throws Exception { @Test public void cacheControlNoStore() throws Exception {
@@ -1009,9 +1003,8 @@ public final class UrlConnectionCacheTest {
String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS); String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS);
RecordedRequest request = RecordedRequest request =
assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate); assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate);
List<String> headers = request.getHeaders(); assertEquals(ifModifiedSinceDate, request.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + ifModifiedSinceDate)); assertNull(request.getHeader("If-None-Match"));
assertFalse(headers.contains("If-None-Match: v3"));
} }
@Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception { @Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception {
@@ -1020,9 +1013,8 @@ public final class UrlConnectionCacheTest {
.addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES)) .addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES))
.addHeader("Cache-Control: max-age=0"); .addHeader("Cache-Control: max-age=0");
RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1"); RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1");
List<String> headers = request.getHeaders(); assertEquals("v1", request.getHeader("If-None-Match"));
assertTrue(headers.contains("If-None-Match: v1")); assertNull(request.getHeader("If-Modified-Since"));
assertFalse(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName, private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName,

View File

@@ -421,8 +421,7 @@ public final class ResponseCacheTest {
RecordedRequest conditionalRequest = assertConditionallyCached( RecordedRequest conditionalRequest = assertConditionallyCached(
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS))); .addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception { @Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception {
@@ -458,8 +457,7 @@ public final class ResponseCacheTest {
RecordedRequest conditionalRequest = assertConditionallyCached( RecordedRequest conditionalRequest = assertConditionallyCached(
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception { @Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception {
@@ -482,8 +480,7 @@ public final class ResponseCacheTest {
new MockResponse().addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS)) new MockResponse().addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS))
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Cache-Control: max-age=60")); .addHeader("Cache-Control: max-age=60"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception { @Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception {
@@ -595,7 +592,7 @@ public final class ResponseCacheTest {
@Test public void etag() throws Exception { @Test public void etag() throws Exception {
RecordedRequest conditionalRequest = RecordedRequest conditionalRequest =
assertConditionallyCached(new MockResponse().addHeader("ETag: v1")); assertConditionallyCached(new MockResponse().addHeader("ETag: v1"));
assertTrue(conditionalRequest.getHeaders().contains("If-None-Match: v1")); assertEquals("v1", conditionalRequest.getHeader("If-None-Match"));
} }
@Test public void etagAndExpirationDateInThePast() throws Exception { @Test public void etagAndExpirationDateInThePast() throws Exception {
@@ -604,9 +601,8 @@ public final class ResponseCacheTest {
new MockResponse().addHeader("ETag: v1") new MockResponse().addHeader("ETag: v1")
.addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> headers = conditionalRequest.getHeaders(); assertEquals("v1", conditionalRequest.getHeader("If-None-Match"));
assertTrue(headers.contains("If-None-Match: v1")); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void etagAndExpirationDateInTheFuture() throws Exception { @Test public void etagAndExpirationDateInTheFuture() throws Exception {
@@ -625,8 +621,7 @@ public final class ResponseCacheTest {
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Cache-Control: no-cache")); .addHeader("Cache-Control: no-cache"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void pragmaNoCache() throws Exception { @Test public void pragmaNoCache() throws Exception {
@@ -639,8 +634,7 @@ public final class ResponseCacheTest {
new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) new MockResponse().addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Pragma: no-cache")); .addHeader("Pragma: no-cache"));
List<String> headers = conditionalRequest.getHeaders(); assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
@Test public void cacheControlNoStore() throws Exception { @Test public void cacheControlNoStore() throws Exception {
@@ -863,9 +857,8 @@ public final class ResponseCacheTest {
String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS); String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS);
RecordedRequest request = RecordedRequest request =
assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate); assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate);
List<String> headers = request.getHeaders(); assertEquals(ifModifiedSinceDate, request.getHeader("If-Modified-Since"));
assertTrue(headers.contains("If-Modified-Since: " + ifModifiedSinceDate)); assertNull(request.getHeader("If-None-Match"));
assertFalse(headers.contains("If-None-Match: v3"));
} }
@Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception { @Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception {
@@ -874,9 +867,8 @@ public final class ResponseCacheTest {
.addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES)) .addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES))
.addHeader("Cache-Control: max-age=0"); .addHeader("Cache-Control: max-age=0");
RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1"); RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1");
List<String> headers = request.getHeaders(); assertEquals("v1", request.getHeader("If-None-Match"));
assertTrue(headers.contains("If-None-Match: v1")); assertNull(request.getHeader("If-Modified-Since"));
assertFalse(headers.contains("If-Modified-Since: " + lastModifiedDate));
} }
private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName, private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName,
@@ -905,7 +897,7 @@ public final class ResponseCacheTest {
connection.setIfModifiedSince(since.getTime()); connection.setIfModifiedSince(since.getTime());
assertEquals("A", readAscii(connection)); assertEquals("A", readAscii(connection));
RecordedRequest request = server.takeRequest(); RecordedRequest request = server.takeRequest();
assertTrue(request.getHeaders().contains("If-Modified-Since: " + HttpDate.format(since))); assertEquals(HttpDate.format(since), request.getHeader("If-Modified-Since"));
} }
@Test public void clientSuppliedConditionWithoutCachedResult() throws Exception { @Test public void clientSuppliedConditionWithoutCachedResult() throws Exception {