Skip to content

Commit

Permalink
Use 'Headers' in recorded response.
Browse files Browse the repository at this point in the history
  • Loading branch information
JakeWharton committed Jan 6, 2015
1 parent 5f44ca7 commit c46b61d
Show file tree
Hide file tree
Showing 12 changed files with 130 additions and 215 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,7 @@ private void handleWebSocketUpgrade(Socket socket, BufferedSource source, Buffer
// 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]))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
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;
Expand Down Expand Up @@ -73,33 +72,16 @@ public String getPath() {
}

/** Returns all headers. */
public List<String> 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() {
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<String> values = headers.values(name);
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
* if the request's body was empty or unchunked.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,8 @@
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;

Expand All @@ -43,27 +41,6 @@
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<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() {
MockResponse response = new MockResponse();
assertEquals(Arrays.asList("Content-Length: 0"), headersToList(response));
Expand Down Expand Up @@ -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 {
Expand Down
32 changes: 12 additions & 20 deletions okhttp-tests/src/test/java/com/squareup/okhttp/CacheTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -562,8 +562,7 @@ private void testClientPrematureDisconnect(TransferKind transferKind) throws IOE
RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse()
.addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Date: " + formatDate(-15, TimeUnit.SECONDS)));
List<String> headers = conditionalRequest.getHeaders();
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
}

@Test public void defaultExpirationDateFullyCachedForMoreThan24Hours() throws Exception {
Expand Down Expand Up @@ -600,8 +599,7 @@ private void testClientPrematureDisconnect(TransferKind transferKind) throws IOE
RecordedRequest conditionalRequest = assertConditionallyCached(new MockResponse()
.addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> headers = conditionalRequest.getHeaders();
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
}

@Test public void expirationDateInThePastWithNoLastModifiedHeader() throws Exception {
Expand All @@ -627,8 +625,7 @@ private void testClientPrematureDisconnect(TransferKind transferKind) throws IOE
.addHeader("Date: " + formatDate(-120, TimeUnit.SECONDS))
.addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Cache-Control: max-age=60"));
List<String> headers = conditionalRequest.getHeaders();
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
}

@Test public void maxAgeInThePastWithDateHeaderButNoLastModifiedHeader() throws Exception {
Expand Down Expand Up @@ -809,7 +806,7 @@ private void testMethodInvalidates(String requestMethod) throws Exception {
@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 {
Expand All @@ -818,9 +815,8 @@ private void testMethodInvalidates(String requestMethod) throws Exception {
.addHeader("ETag: v1")
.addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(-1, TimeUnit.HOURS)));
List<String> 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 {
Expand All @@ -841,8 +837,7 @@ private void testMethodInvalidates(String requestMethod) throws Exception {
.addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Cache-Control: no-cache"));
List<String> headers = conditionalRequest.getHeaders();
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
}

@Test public void pragmaNoCache() throws Exception {
Expand All @@ -856,8 +851,7 @@ private void testMethodInvalidates(String requestMethod) throws Exception {
.addHeader("Last-Modified: " + lastModifiedDate)
.addHeader("Expires: " + formatDate(1, TimeUnit.HOURS))
.addHeader("Pragma: no-cache"));
List<String> headers = conditionalRequest.getHeaders();
assertTrue(headers.contains("If-Modified-Since: " + lastModifiedDate));
assertEquals(lastModifiedDate, conditionalRequest.getHeader("If-Modified-Since"));
}

@Test public void cacheControlNoStore() throws Exception {
Expand Down Expand Up @@ -1224,9 +1218,8 @@ private void assertNonIdentityEncodingCached(MockResponse response) throws Excep
String ifModifiedSinceDate = formatDate(-24, TimeUnit.HOURS);
RecordedRequest request =
assertClientSuppliedCondition(response, "If-Modified-Since", ifModifiedSinceDate);
List<String> 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 {
Expand All @@ -1236,9 +1229,8 @@ private void assertNonIdentityEncodingCached(MockResponse response) throws Excep
.addHeader("Date: " + formatDate(-2, TimeUnit.MINUTES))
.addHeader("Cache-Control: max-age=0");
RecordedRequest request = assertClientSuppliedCondition(response, "If-None-Match", "v1");
List<String> 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,
Expand Down
18 changes: 10 additions & 8 deletions okhttp-tests/src/test/java/com/squareup/okhttp/CallTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ private void postBodyRetransmittedAfterAuthorizationFail(String body) throws Exc
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 {
Expand Down Expand Up @@ -519,7 +519,7 @@ private void postBodyRetransmittedAfterAuthorizationFail(String body) throws Exc
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 {
Expand All @@ -538,7 +538,7 @@ private void postBodyRetransmittedAfterAuthorizationFail(String body) throws Exc
.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 {
Expand Down Expand Up @@ -1223,12 +1223,14 @@ private void postBodyRetransmittedAfterAuthorizationFail(String body) throws Exc
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 {
Expand All @@ -1246,7 +1248,7 @@ private void postBodyRetransmittedAfterAuthorizationFail(String body) throws Exc
assertEquals("Page 2", response.body().string());

RecordedRequest redirectRequest = server2.takeRequest();
assertContainsNoneMatching(redirectRequest.getHeaders(), "Authorization.*");
assertNull(redirectRequest.getHeader("Authorization"));
assertEquals("/b", redirectRequest.getPath());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ private void multipleInterceptors(List<Interceptor> interceptors) throws Excepti

RecordedRequest recordedRequest = server.takeRequest();
assertEquals(Arrays.asList("Android", "Bob"),
recordedRequest.getHeaders("Request-Interceptor"));
recordedRequest.getHeaders().values("Request-Interceptor"));
}

@Test public void asyncApplicationInterceptors() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
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;

Expand Down Expand Up @@ -204,10 +205,13 @@ public void testNetscapeResponse() throws Exception {
get(server, "/");
RecordedRequest request = server.takeRequest();

List<String> 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 {
Expand All @@ -233,11 +237,14 @@ public void testNetscapeResponse() throws Exception {
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);
}
Expand Down Expand Up @@ -300,8 +307,10 @@ public Map<String, List<String>> get(URI uri,
} 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 {
Expand All @@ -321,8 +330,9 @@ public Map<String, List<String>> get(URI uri,
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<String> collection, String element) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
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;
Expand Down Expand Up @@ -48,13 +47,12 @@ public HttpOverHttp20Draft16Test() {

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 {
Expand All @@ -73,12 +71,11 @@ public HttpOverHttp20Draft16Test() {

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"));
}
}
Loading

0 comments on commit c46b61d

Please sign in to comment.