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