HttpOverHttp20Draft09Test.java revision 3c938a3f6b61ce5e2dba0d039b03fe73b89fd26c
1/*
2 * Copyright (C) 2013 Square, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.squareup.okhttp.internal.http;
17
18import com.squareup.okhttp.Protocol;
19import com.squareup.okhttp.mockwebserver.MockResponse;
20import com.squareup.okhttp.mockwebserver.PushPromise;
21import com.squareup.okhttp.mockwebserver.RecordedRequest;
22import java.util.Arrays;
23import org.junit.Test;
24
25import static org.junit.Assert.assertEquals;
26
27public class HttpOverHttp20Draft09Test extends HttpOverSpdyTest {
28
29  public HttpOverHttp20Draft09Test() {
30    super(Protocol.HTTP_2);
31    this.hostHeader = ":authority";
32  }
33
34  @Test public void serverSendsPushPromise_GET() throws Exception {
35    MockResponse response = new MockResponse().setBody("ABCDE").setStatus("HTTP/1.1 200 Sweet")
36        .withPush(new PushPromise("GET", "/foo/bar", Arrays.asList("foo: bar"),
37            new MockResponse().setBody("bar").setStatus("HTTP/1.1 200 Sweet")));
38    server.enqueue(response);
39    server.play();
40
41    connection = client.open(server.getUrl("/foo"));
42    assertContent("ABCDE", connection, Integer.MAX_VALUE);
43    assertEquals(200, connection.getResponseCode());
44    assertEquals("Sweet", connection.getResponseMessage());
45
46    RecordedRequest request = server.takeRequest();
47    assertEquals("GET /foo HTTP/1.1", request.getRequestLine());
48    assertContains(request.getHeaders(), ":scheme: https");
49    assertContains(request.getHeaders(), hostHeader + ": " + hostName + ":" + server.getPort());
50
51    RecordedRequest pushedRequest = server.takeRequest();
52    assertEquals("GET /foo/bar HTTP/1.1", pushedRequest.getRequestLine());
53    assertEquals(Arrays.asList("foo: bar"), pushedRequest.getHeaders());
54  }
55
56  @Test public void serverSendsPushPromise_HEAD() throws Exception {
57    MockResponse response = new MockResponse().setBody("ABCDE").setStatus("HTTP/1.1 200 Sweet")
58        .withPush(new PushPromise("HEAD", "/foo/bar", Arrays.asList("foo: bar"),
59            new MockResponse().setStatus("HTTP/1.1 204 Sweet")));
60    server.enqueue(response);
61    server.play();
62
63    connection = client.open(server.getUrl("/foo"));
64    assertContent("ABCDE", connection, Integer.MAX_VALUE);
65    assertEquals(200, connection.getResponseCode());
66    assertEquals("Sweet", connection.getResponseMessage());
67
68    RecordedRequest request = server.takeRequest();
69    assertEquals("GET /foo HTTP/1.1", request.getRequestLine());
70    assertContains(request.getHeaders(), ":scheme: https");
71    assertContains(request.getHeaders(), hostHeader + ": " + hostName + ":" + server.getPort());
72
73    RecordedRequest pushedRequest = server.takeRequest();
74    assertEquals("HEAD /foo/bar HTTP/1.1", pushedRequest.getRequestLine());
75    assertEquals(Arrays.asList("foo: bar"), pushedRequest.getHeaders());
76  }
77}
78