From c46b61d56533d392246ef2884b9a6e552cd6b94c Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Mon, 5 Jan 2015 22:16:25 -0800 Subject: [PATCH] Use 'Headers' in recorded response. --- .../okhttp/mockwebserver/MockWebServer.java | 2 +- .../okhttp/mockwebserver/RecordedRequest.java | 22 +--- .../mockwebserver/MockWebServerTest.java | 25 +---- .../java/com/squareup/okhttp/CacheTest.java | 32 +++--- .../java/com/squareup/okhttp/CallTest.java | 18 ++-- .../com/squareup/okhttp/InterceptorTest.java | 2 +- .../okhttp/internal/http/CookiesTest.java | 34 +++--- .../http/HttpOverHttp20Draft16Test.java | 15 ++- .../internal/http/HttpOverSpdyTest.java | 29 ++--- .../internal/http/URLConnectionTest.java | 100 ++++++++---------- .../okhttp/UrlConnectionCacheTest.java | 32 +++--- .../internal/huc/ResponseCacheTest.java | 34 +++--- 12 files changed, 130 insertions(+), 215 deletions(-) diff --git a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java index 589e2979c..92b4ac138 100644 --- a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java +++ b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java @@ -618,7 +618,7 @@ public final class MockWebServer { // Adapt the request and response into our Request and Response domain model. final Request fancyRequest = new Request.Builder() .get().url(request.getPath()) - .headers(request.getNewHeaders()) + .headers(request.getHeaders()) .build(); final Response fancyResponse = new Response.Builder() .code(Integer.parseInt(response.getStatus().split(" ")[1])) diff --git a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/RecordedRequest.java b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/RecordedRequest.java index 2e67151a4..fb91846db 100644 --- a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/RecordedRequest.java +++ b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/RecordedRequest.java @@ -20,7 +20,6 @@ import com.squareup.okhttp.TlsVersion; import com.squareup.okhttp.internal.Internal; import com.squareup.okhttp.Headers; import java.net.Socket; -import java.util.ArrayList; import java.util.List; import javax.net.ssl.SSLSocket; import okio.Buffer; @@ -73,33 +72,16 @@ public final class RecordedRequest { } /** Returns all headers. */ - public List getHeaders() { - int size = headers.size(); - List headerList = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - headerList.add(headers.name(i) + ": " + headers.value(i)); - } - return headerList; - } - - Headers getNewHeaders() { + public Headers getHeaders() { 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) { List values = headers.values(name); return values.isEmpty() ? null : values.get(0); } - /** Returns the headers named {@code name}. */ - public List getHeaders(String name) { - return headers.values(name); - } - /** * Returns the sizes of the chunks of this request's body, or an empty list * if the request's body was empty or unchunked. diff --git a/mockwebserver/src/test/java/com/squareup/okhttp/mockwebserver/MockWebServerTest.java b/mockwebserver/src/test/java/com/squareup/okhttp/mockwebserver/MockWebServerTest.java index 644128b73..388dbf64f 100644 --- a/mockwebserver/src/test/java/com/squareup/okhttp/mockwebserver/MockWebServerTest.java +++ b/mockwebserver/src/test/java/com/squareup/okhttp/mockwebserver/MockWebServerTest.java @@ -27,10 +27,8 @@ import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; -import okio.Buffer; import org.junit.Rule; import org.junit.Test; @@ -43,27 +41,6 @@ import static org.junit.Assert.fail; public final class MockWebServerTest { @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 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() { MockResponse response = new MockResponse(); assertEquals(Arrays.asList("Content-Length: 0"), headersToList(response)); @@ -108,7 +85,7 @@ public final class MockWebServerTest { RecordedRequest request = server.takeRequest(); 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 { diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/CacheTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/CacheTest.java index 94df054c5..3ae9c3960 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/CacheTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/CacheTest.java @@ -562,8 +562,7 @@ public final class CacheTest { RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse() .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception { @@ -600,8 +599,7 @@ public final class CacheTest { RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse() .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception { @@ -627,8 +625,7 @@ public final class CacheTest { .addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS)) .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Cache-Control: max-age=60")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception { @@ -809,7 +806,7 @@ public final class CacheTest { @Test public void etag() throws Exception { RecordedRequest conditionalRequest = 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 { @@ -818,9 +815,8 @@ public final class CacheTest { .addHeader("ETag: v1") .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-None-Match: v1")); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals("v1", conditionalRequest.getHeader("If-None-Match")); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void etagAndExpirationDateInTheFuture() throws Exception { @@ -841,8 +837,7 @@ public final class CacheTest { .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Cache-Control: no-cache")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void pragmaNoCache() throws Exception { @@ -856,8 +851,7 @@ public final class CacheTest { .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Pragma: no-cache")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void cacheControlNoStore() throws Exception { @@ -1224,9 +1218,8 @@ public final class CacheTest { String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS); RecordedRequest request = assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate); - List headers = request.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + ifModifiedSinceDate)); - assertFalse(headers.contains("If-None-Match: v3")); + assertEquals(ifModifiedSinceDate, request.getHeader("If-Modified-Since")); + assertNull(request.getHeader("If-None-Match")); } @Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception { @@ -1236,9 +1229,8 @@ public final class CacheTest { .addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES)) .addHeader("Cache-Control: max-age=0"); RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1"); - List headers = request.getHeaders(); - assertTrue(headers.contains("If-None-Match: v1")); - assertFalse(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals("v1", request.getHeader("If-None-Match")); + assertNull(request.getHeader("If-Modified-Since")); } private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName, diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/CallTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/CallTest.java index 80edd4ddd..4dfa59457 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/CallTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/CallTest.java @@ -489,7 +489,7 @@ public final class CallTest { 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 { @@ -519,7 +519,7 @@ public final class CallTest { 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 { @@ -538,7 +538,7 @@ public final class CallTest { .assertHeader("Content-Type", "text/plain") .assertBody("abc"); - assertTrue(server.takeRequest().getHeaders().contains("User-Agent: AsyncApiTest")); + assertEquals("AsyncApiTest", server.takeRequest().getHeader("User-Agent")); } @Test public void exceptionThrownByOnResponseIsRedactedAndLogged() throws Exception { @@ -1223,12 +1223,14 @@ public final class CallTest { assertEquals("Page 2", response.body().string()); RecordedRequest request1 = server.takeRequest(); - assertContains(request1.getHeaders(), - "Cookie: $Version=\"1\"; " + "c=\"cookie\";$Path=\"/\";$Domain=\"" + server.get() - .getCookieDomain() + "\";$Port=\"" + portList + "\""); + assertEquals("$Version=\"1\"; c=\"cookie\";$Path=\"/\";$Domain=\"" + + server.get().getCookieDomain() + + "\";$Port=\"" + + portList + + "\"", request1.getHeader("Cookie")); RecordedRequest request2 = server2.takeRequest(); - assertContainsNoneMatching(request2.getHeaders(), "Cookie.*"); + assertNull(request2.getHeader("Cookie")); } @Test public void redirectsDoNotIncludeTooManyAuthHeaders() throws Exception { @@ -1246,7 +1248,7 @@ public final class CallTest { assertEquals("Page 2", response.body().string()); RecordedRequest redirectRequest = server2.takeRequest(); - assertContainsNoneMatching(redirectRequest.getHeaders(), "Authorization.*"); + assertNull(redirectRequest.getHeader("Authorization")); assertEquals("/b", redirectRequest.getPath()); } diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/InterceptorTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/InterceptorTest.java index 7ca661a94..070069d4f 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/InterceptorTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/InterceptorTest.java @@ -319,7 +319,7 @@ public final class InterceptorTest { RecordedRequest recordedRequest = server.takeRequest(); assertEquals(Arrays.asList("Android", "Bob"), - recordedRequest.getHeaders("Request-Interceptor")); + recordedRequest.getHeaders().values("Request-Interceptor")); } @Test public void asyncApplicationInterceptors() throws Exception { diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/CookiesTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/CookiesTest.java index f9648d7d6..d0fa1b242 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/CookiesTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/CookiesTest.java @@ -40,6 +40,7 @@ import org.junit.Test; import static java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -204,10 +205,13 @@ public class CookiesTest { get(server, "/"); RecordedRequest request = server.takeRequest(); - List receivedHeaders = request.getHeaders(); - assertContains(receivedHeaders, "Cookie: $Version=\"1\"; " - + "a=\"android\";$Path=\"/\";$Domain=\"" + server.getCookieDomain() + "\"; " - + "b=\"banana\";$Path=\"/\";$Domain=\"" + server.getCookieDomain() + "\""); + assertEquals("$Version=\"1\"; " + + "a=\"android\";$Path=\"/\";$Domain=\"" + + server.getCookieDomain() + + "\"; " + + "b=\"banana\";$Path=\"/\";$Domain=\"" + + server.getCookieDomain() + + "\"", request.getHeader("Cookie")); } @Test public void testRedirectsDoNotIncludeTooManyCookies() throws Exception { @@ -233,11 +237,14 @@ public class CookiesTest { get(redirectSource, "/"); RecordedRequest request = redirectSource.takeRequest(); - assertContains(request.getHeaders(), "Cookie: $Version=\"1\"; " - + "c=\"cookie\";$Path=\"/\";$Domain=\"" + redirectSource.getCookieDomain() - + "\";$Port=\"" + portList + "\""); + assertEquals("$Version=\"1\"; " + + "c=\"cookie\";$Path=\"/\";$Domain=\"" + + redirectSource.getCookieDomain() + + "\";$Port=\"" + + portList + + "\"", request.getHeader("Cookie")); - for (String header : redirectTarget.takeRequest().getHeaders()) { + for (String header : redirectTarget.takeRequest().getHeaders().names()) { if (header.startsWith("Cookie")) { fail(header); } @@ -300,8 +307,10 @@ public class CookiesTest { } catch (IllegalStateException expected) { } - assertContainsAll(request.getHeaders(), "Foo: foo", "Cookie: Bar=bar", "Cookie2: Baz=baz"); - assertFalse(request.getHeaders().contains("Quux: quux")); + assertEquals("foo", request.getHeader("Foo")); + assertEquals("Bar=bar", request.getHeader("Cookie")); + assertEquals("Baz=baz", request.getHeader("Cookie2")); + assertNull(request.getHeader("Quux")); } @Test public void testCookiesSentIgnoresCase() throws Exception { @@ -321,8 +330,9 @@ public class CookiesTest { get(server, "/"); RecordedRequest request = server.takeRequest(); - assertContainsAll(request.getHeaders(), "COOKIE: Bar=bar", "cooKIE2: Baz=baz"); - assertFalse(request.getHeaders().contains("Quux: quux")); + assertEquals("Bar=bar", request.getHeader("Cookie")); + assertEquals("Baz=baz", request.getHeader("Cookie2")); + assertNull(request.getHeader("Quux")); } private void assertContains(Collection collection, String element) { diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverHttp20Draft16Test.java b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverHttp20Draft16Test.java index d0583b595..7659110e9 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverHttp20Draft16Test.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverHttp20Draft16Test.java @@ -20,7 +20,6 @@ import com.squareup.okhttp.Protocol; import com.squareup.okhttp.mockwebserver.MockResponse; import com.squareup.okhttp.mockwebserver.PushPromise; import com.squareup.okhttp.mockwebserver.RecordedRequest; -import java.util.Arrays; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -48,13 +47,12 @@ public class HttpOverHttp20Draft16Test extends HttpOverSpdyTest { RecordedRequest request = server.takeRequest(); assertEquals("GET /foo HTTP/1.1", request.getRequestLine()); - assertContains(request.getHeaders(), ":scheme: https"); - assertContains(request.getHeaders(), - hostHeader + ": " + server.getHostName() + ":" + server.getPort()); + assertEquals("https", request.getHeader(":scheme")); + assertEquals(server.getHostName() + ":" + server.getPort(), request.getHeader(hostHeader)); RecordedRequest pushedRequest = server.takeRequest(); 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 { @@ -73,12 +71,11 @@ public class HttpOverHttp20Draft16Test extends HttpOverSpdyTest { RecordedRequest request = server.takeRequest(); assertEquals("GET /foo HTTP/1.1", request.getRequestLine()); - assertContains(request.getHeaders(), ":scheme: https"); - assertContains(request.getHeaders(), - hostHeader + ": " + server.getHostName() + ":" + server.getPort()); + assertEquals("https", request.getHeader(":scheme")); + assertEquals(server.getHostName() + ":" + server.getPort(), request.getHeader(hostHeader)); RecordedRequest pushedRequest = server.takeRequest(); assertEquals("HEAD /foo/bar HTTP/1.1", pushedRequest.getRequestLine()); - assertEquals(Arrays.asList("foo: bar"), pushedRequest.getHeaders()); + assertEquals("bar", pushedRequest.getHeader("foo")); } } diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java index 7b0cd3d1c..ab8f3c97c 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/HttpOverSpdyTest.java @@ -34,7 +34,6 @@ import java.net.CookieManager; import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.List; 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.assertEquals; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** Test how SPDY interacts with HTTP features. */ @@ -111,9 +109,8 @@ public abstract class HttpOverSpdyTest { RecordedRequest request = server.takeRequest(); assertEquals("GET /foo HTTP/1.1", request.getRequestLine()); - assertContains(request.getHeaders(), ":scheme: https"); - assertContains(request.getHeaders(), hostHeader + ": " - + server.getHostName() + ":" + server.getPort()); + assertEquals("https", request.getHeader(":scheme")); + assertEquals(server.getHostName() + ":" + server.getPort(), request.getHeader(hostHeader)); } @Test public void emptyResponse() throws IOException { @@ -231,11 +228,11 @@ public abstract class HttpOverSpdyTest { assertEquals("Successful auth!", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); RecordedRequest denied = server.takeRequest(); - assertContainsNoneMatching(denied.getHeaders(), "authorization: Basic .*"); + assertNull(denied.getHeader("Authorization")); RecordedRequest accepted = server.takeRequest(); assertEquals("GET / HTTP/1.1", accepted.getRequestLine()); - assertContains(accepted.getHeaders(), - "authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); + assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS, + accepted.getHeader("Authorization")); } @Test public void redirect() throws Exception { @@ -396,9 +393,9 @@ public abstract class HttpOverSpdyTest { assertContent("B", client.open(url), Integer.MAX_VALUE); RecordedRequest requestA = server.takeRequest(); - assertContainsNoneMatching(requestA.getHeaders(), "Cookie.*"); + assertNull(requestA.getHeader("Cookie")); RecordedRequest requestB = server.takeRequest(); - assertContains(requestB.getHeaders(), "cookie: c=oreo"); + assertEquals("c=oreo", requestB.getHeader("Cookie")); } /** https://github.com/square/okhttp/issues/1191 */ @@ -420,24 +417,12 @@ public abstract class HttpOverSpdyTest { assertEquals(0, server.takeRequest().getSequenceNumber()); } - void assertContains(Collection collection, T value) { - assertTrue(collection.toString(), collection.contains(value)); - } - void assertContent(String expected, HttpURLConnection connection, int limit) throws IOException { connection.connect(); assertEquals(expected, readAscii(connection.getInputStream(), limit)); } - private void assertContainsNoneMatching(List 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 { StringBuilder result = new StringBuilder(); for (int i = 0; i < count; i++) { diff --git a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java index 68eddef3a..330929b33 100644 --- a/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java +++ b/okhttp-tests/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java @@ -180,12 +180,11 @@ public final class URLConnectionTest { connection.getResponseCode(); RecordedRequest request = server.takeRequest(); - assertContains(request.getHeaders(), "D: e"); - assertContains(request.getHeaders(), "D: f"); - assertContainsNoneMatching(request.getHeaders(), "NullValue.*"); - assertContainsNoneMatching(request.getHeaders(), "AnotherNullValue.*"); - assertContainsNoneMatching(request.getHeaders(), "G:.*"); - assertContainsNoneMatching(request.getHeaders(), "null:.*"); + assertEquals(Arrays.asList("e", "f"), request.getHeaders().values("D")); + assertNull(request.getHeader("NullValue")); + assertNull(request.getHeader("AnotherNullValue")); + assertNull(request.getHeader("G")); + assertNull(request.getHeader("null")); try { connection.addRequestProperty("N", "o"); @@ -687,7 +686,7 @@ public final class URLConnectionTest { RecordedRequest request = server.get().takeRequest(); 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 { @@ -814,11 +813,11 @@ public final class URLConnectionTest { RecordedRequest connect = server.takeRequest(); assertEquals("Connect line failure on proxy", "CONNECT android.com:443 HTTP/1.1", connect.getRequestLine()); - assertContains(connect.getHeaders(), "Host: android.com"); + assertEquals("android.com", connect.getHeader("Host")); RecordedRequest get = server.takeRequest(); 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); } @@ -848,7 +847,7 @@ public final class URLConnectionTest { RecordedRequest connect = server.takeRequest(); 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 { @@ -878,14 +877,14 @@ public final class URLConnectionTest { assertContent("encrypted response from the origin server", connection); RecordedRequest connect = server.takeRequest(); - assertContainsNoneMatching(connect.getHeaders(), "Private.*"); - assertContains(connect.getHeaders(), "Proxy-Authorization: bar"); - assertContains(connect.getHeaders(), "User-Agent: baz"); - assertContains(connect.getHeaders(), "Host: android.com"); - assertContains(connect.getHeaders(), "Proxy-Connection: Keep-Alive"); + assertNull(connect.getHeader("Private")); + assertEquals("bar", connect.getHeader("Proxy-Authorization")); + assertEquals("baz", connect.getHeader("User-Agent")); + assertEquals("android.com", connect.getHeader("Host")); + assertEquals("Keep-Alive", connect.getHeader("Proxy-Connection")); RecordedRequest get = server.takeRequest(); - assertContains(get.getHeaders(), "Private: Secret"); + assertEquals("Secret", get.getHeader("Private")); assertEquals(Arrays.asList("verify android.com"), hostnameVerifier.calls); } @@ -908,16 +907,16 @@ public final class URLConnectionTest { RecordedRequest connect1 = server.takeRequest(); assertEquals("CONNECT android.com:443 HTTP/1.1", connect1.getRequestLine()); - assertContainsNoneMatching(connect1.getHeaders(), "Proxy\\-Authorization.*"); + assertNull(connect1.getHeader("Proxy-Authorization")); RecordedRequest connect2 = server.takeRequest(); assertEquals("CONNECT android.com:443 HTTP/1.1", connect2.getRequestLine()); - assertContains(connect2.getHeaders(), - "Proxy-Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); + assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS, + connect2.getHeader("Proxy-Authorization")); RecordedRequest get = server.takeRequest(); 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 @@ -1106,7 +1105,7 @@ public final class URLConnectionTest { assertEquals(-1, connection.getContentLength()); RecordedRequest request = server.takeRequest(); - assertContains(request.getHeaders(), "Accept-Encoding: gzip"); + assertEquals("gzip", request.getHeader("Accept-Encoding")); } @Test public void clientConfiguredGzipContentEncoding() throws Exception { @@ -1122,7 +1121,7 @@ public final class URLConnectionTest { assertEquals(bodyBytes.size(), connection.getContentLength()); RecordedRequest request = server.takeRequest(); - assertContains(request.getHeaders(), "Accept-Encoding: gzip"); + assertEquals("gzip", request.getHeader("Accept-Encoding")); } @Test public void gzipAndConnectionReuseWithFixedLength() throws Exception { @@ -1149,7 +1148,7 @@ public final class URLConnectionTest { assertEquals("ABCDE", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); 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... RecordedRequest request = server.takeRequest(); - assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); + assertNull(request.getHeader("Authorization")); assertEquals("ABCD", request.getBody().readUtf8()); } @@ -1639,14 +1638,14 @@ public final class URLConnectionTest { // no authorization header for the first request... RecordedRequest request = server.takeRequest(); - assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); + assertNull(request.getHeader("Authorization")); // ...but the three requests that follow include an authorization header for (int i = 0; i < 3; i++) { request = server.takeRequest(); assertEquals("POST / HTTP/1.1", request.getRequestLine()); - assertContains(request.getHeaders(), - "Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); + assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS, + request.getHeader("Authorization")); assertEquals("ABCD", request.getBody().readUtf8()); } } @@ -1668,14 +1667,14 @@ public final class URLConnectionTest { // no authorization header for the first request... RecordedRequest request = server.takeRequest(); - assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); + assertNull(request.getHeader("Authorization")); // ...but the three requests that follow requests include an authorization header for (int i = 0; i < 3; i++) { request = server.takeRequest(); assertEquals("GET / HTTP/1.1", request.getRequestLine()); - assertContains(request.getHeaders(), - "Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); + assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS, + request.getHeader("Authorization")); } } @@ -1700,14 +1699,14 @@ public final class URLConnectionTest { // no authorization header for the first request... RecordedRequest request = server.takeRequest(); - assertContainsNoneMatching(request.getHeaders(), "Authorization: Basic .*"); + assertNull(request.getHeader("Authorization")); // ...but the three requests that follow requests include an authorization header for (int i = 0; i < 3; i++) { request = server.takeRequest(); assertEquals("GET / HTTP/1.1", request.getRequestLine()); - assertContains(request.getHeaders(), - "Authorization: Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS); + assertEquals("Basic " + RecordingAuthenticator.BASE_64_CREDENTIALS, + request.getHeader("Authorization")); } } @@ -1869,8 +1868,8 @@ public final class URLConnectionTest { String server1Host = server.get().getHostName() + ":" + server.getPort(); String server2Host = server2.get().getHostName() + ":" + server2.getPort(); - assertContains(server.takeRequest().getHeaders(), "Host: " + server1Host); - assertContains(server2.takeRequest().getHeaders(), "Host: " + server2Host); + assertEquals(server1Host, server.takeRequest().getHeader("Host")); + assertEquals(server2Host, server2.takeRequest().getHeader("Host")); assertEquals("Expected connection reuse", 1, server.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"))); RecordedRequest redirectRequest = server2.takeRequest(); - assertContainsNoneMatching(redirectRequest.getHeaders(), "Authorization.*"); + assertNull(redirectRequest.getHeader("Authorization")); assertEquals("/b", redirectRequest.getPath()); } @@ -1988,9 +1987,9 @@ public final class URLConnectionTest { RecordedRequest page2 = server.takeRequest(); assertEquals("GET /page2 HTTP/1.1", page2.getRequestLine()); - assertContainsNoneMatching(page2.getHeaders(), "Content-Length.*"); - assertContainsNoneMatching(page2.getHeaders(), "Content-Type.*"); - assertContainsNoneMatching(page2.getHeaders(), "Transfer-Encoding.*"); + assertNull(page2.getHeader("Content-Length")); + assertNull(page2.getHeader("Content-Type")); + assertNull(page2.getHeader("Transfer-Encoding")); } @Test public void response305UseProxy() throws Exception { @@ -2475,7 +2474,7 @@ public final class URLConnectionTest { out.close(); assertEquals("A", readAscii(connection.getInputStream(), Integer.MAX_VALUE)); RecordedRequest request = server.takeRequest(); - assertContains(request.getHeaders(), "Content-Length: 3"); + assertEquals("3", request.getHeader("Content-Length")); } @Test public void getContentLengthConnects() throws Exception { @@ -2740,9 +2739,8 @@ public final class URLConnectionTest { client.client().setAuthenticator(authenticator); assertContent("A", client.open(server.getUrl("/private"))); - assertContainsNoneMatching(server.takeRequest().getHeaders(), "Authorization: .*"); - assertContains(server.takeRequest().getHeaders(), - "Authorization: " + credential); + assertNull(server.takeRequest().getHeader("Authorization")); + assertEquals(credential, server.takeRequest().getHeader("Authorization")); assertEquals(Proxy.NO_PROXY, authenticator.onlyProxy()); Response response = authenticator.onlyResponse(); @@ -2761,8 +2759,8 @@ public final class URLConnectionTest { client.client().setAuthenticator(authenticator); assertContent("A", client.open(server.getUrl("/private"))); - assertContainsNoneMatching(server.takeRequest().getHeaders(), "Authorization: .*"); - assertContains(server.takeRequest().getHeaders(), "Authorization: oauthed abc123"); + assertNull(server.takeRequest().getHeader("Authorization")); + assertEquals("oauthed abc123", server.takeRequest().getHeader("Authorization")); Response response = authenticator.onlyResponse(); assertEquals("/private", response.request().url().getPath()); @@ -3078,18 +3076,6 @@ public final class URLConnectionTest { assertContent(expected, connection, Integer.MAX_VALUE); } - private void assertContains(List headers, String header) { - assertTrue(headers.toString(), headers.contains(header)); - } - - private void assertContainsNoneMatching(List headers, String pattern) { - for (String header : headers) { - if (header.matches(pattern)) { - fail("Header " + header + " matches " + pattern); - } - } - } - private Set newSet(String... elements) { return new HashSet(Arrays.asList(elements)); } diff --git a/okhttp-urlconnection/src/test/java/com/squareup/okhttp/UrlConnectionCacheTest.java b/okhttp-urlconnection/src/test/java/com/squareup/okhttp/UrlConnectionCacheTest.java index 513cd9d49..f64a3dc71 100644 --- a/okhttp-urlconnection/src/test/java/com/squareup/okhttp/UrlConnectionCacheTest.java +++ b/okhttp-urlconnection/src/test/java/com/squareup/okhttp/UrlConnectionCacheTest.java @@ -484,8 +484,7 @@ public final class UrlConnectionCacheTest { RecordedRequest conditionalRequest = assertConditionallyCached( new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception { @@ -521,8 +520,7 @@ public final class UrlConnectionCacheTest { RecordedRequest conditionalRequest = assertConditionallyCached( new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception { @@ -545,8 +543,7 @@ public final class UrlConnectionCacheTest { new MockResponse().addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS)) .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Cache-Control: max-age=60")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception { @@ -701,7 +698,7 @@ public final class UrlConnectionCacheTest { @Test public void etag() throws Exception { RecordedRequest conditionalRequest = 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 { @@ -710,9 +707,8 @@ public final class UrlConnectionCacheTest { new MockResponse().addHeader("ETag: v1") .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-None-Match: v1")); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals("v1", conditionalRequest.getHeader("If-None-Match")); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void etagAndExpirationDateInTheFuture() throws Exception { @@ -731,8 +727,7 @@ public final class UrlConnectionCacheTest { new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Cache-Control: no-cache")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void pragmaNoCache() throws Exception { @@ -745,8 +740,7 @@ public final class UrlConnectionCacheTest { new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Pragma: no-cache")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void cacheControlNoStore() throws Exception { @@ -1009,9 +1003,8 @@ public final class UrlConnectionCacheTest { String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS); RecordedRequest request = assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate); - List headers = request.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + ifModifiedSinceDate)); - assertFalse(headers.contains("If-None-Match: v3")); + assertEquals(ifModifiedSinceDate, request.getHeader("If-Modified-Since")); + assertNull(request.getHeader("If-None-Match")); } @Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception { @@ -1020,9 +1013,8 @@ public final class UrlConnectionCacheTest { .addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES)) .addHeader("Cache-Control: max-age=0"); RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1"); - List headers = request.getHeaders(); - assertTrue(headers.contains("If-None-Match: v1")); - assertFalse(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals("v1", request.getHeader("If-None-Match")); + assertNull(request.getHeader("If-Modified-Since")); } private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName, diff --git a/okhttp-urlconnection/src/test/java/com/squareup/okhttp/internal/huc/ResponseCacheTest.java b/okhttp-urlconnection/src/test/java/com/squareup/okhttp/internal/huc/ResponseCacheTest.java index ba3200ada..3337b945f 100644 --- a/okhttp-urlconnection/src/test/java/com/squareup/okhttp/internal/huc/ResponseCacheTest.java +++ b/okhttp-urlconnection/src/test/java/com/squareup/okhttp/internal/huc/ResponseCacheTest.java @@ -421,8 +421,7 @@ public final class ResponseCacheTest { RecordedRequest conditionalRequest = assertConditionallyCached( new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception { @@ -458,8 +457,7 @@ public final class ResponseCacheTest { RecordedRequest conditionalRequest = assertConditionallyCached( new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception { @@ -482,8 +480,7 @@ public final class ResponseCacheTest { new MockResponse().addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS)) .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Cache-Control: max-age=60")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception { @@ -595,7 +592,7 @@ public final class ResponseCacheTest { @Test public void etag() throws Exception { RecordedRequest conditionalRequest = 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 { @@ -604,9 +601,8 @@ public final class ResponseCacheTest { new MockResponse().addHeader("ETag: v1") .addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS))); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-None-Match: v1")); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals("v1", conditionalRequest.getHeader("If-None-Match")); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void etagAndExpirationDateInTheFuture() throws Exception { @@ -625,8 +621,7 @@ public final class ResponseCacheTest { new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Cache-Control: no-cache")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void pragmaNoCache() throws Exception { @@ -639,8 +634,7 @@ public final class ResponseCacheTest { new MockResponse().addHeader("Last-Modified: " + lastModifiedDate) .addHeader("Expires: " + formatDate(1, TimeUnit.HOURS)) .addHeader("Pragma: no-cache")); - List headers = conditionalRequest.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since")); } @Test public void cacheControlNoStore() throws Exception { @@ -863,9 +857,8 @@ public final class ResponseCacheTest { String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS); RecordedRequest request = assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate); - List headers = request.getHeaders(); - assertTrue(headers.contains("If-Modified-Since: " + ifModifiedSinceDate)); - assertFalse(headers.contains("If-None-Match: v3")); + assertEquals(ifModifiedSinceDate, request.getHeader("If-Modified-Since")); + assertNull(request.getHeader("If-None-Match")); } @Test public void clientSuppliedIfNoneMatchSinceWithCachedResult() throws Exception { @@ -874,9 +867,8 @@ public final class ResponseCacheTest { .addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES)) .addHeader("Cache-Control: max-age=0"); RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1"); - List headers = request.getHeaders(); - assertTrue(headers.contains("If-None-Match: v1")); - assertFalse(headers.contains("If-Modified-Since: " + lastModifiedDate)); + assertEquals("v1", request.getHeader("If-None-Match")); + assertNull(request.getHeader("If-Modified-Since")); } private RecordedRequest assertClientSuppliedCondition(MockResponse seed, String conditionName, @@ -905,7 +897,7 @@ public final class ResponseCacheTest { connection.setIfModifiedSince(since.getTime()); assertEquals("A", readAscii(connection)); 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 {