• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 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  */
16 package com.squareup.okhttp.internal.http;
17 
18 import com.squareup.okhttp.Protocol;
19 import java.io.IOException;
20 import java.net.ProtocolException;
21 import org.junit.Test;
22 
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.fail;
25 
26 public final class StatusLineTest {
parse()27   @Test public void parse() throws IOException {
28     String message = "Temporary Redirect";
29     int version = 1;
30     int code = 200;
31     StatusLine statusLine = StatusLine.parse("HTTP/1." + version + " " + code + " " + message);
32     assertEquals(message, statusLine.message);
33     assertEquals(Protocol.HTTP_1_1, statusLine.protocol);
34     assertEquals(code, statusLine.code);
35   }
36 
emptyMessage()37   @Test public void emptyMessage() throws IOException {
38     int version = 1;
39     int code = 503;
40     StatusLine statusLine = StatusLine.parse("HTTP/1." + version + " " + code + " ");
41     assertEquals("", statusLine.message);
42     assertEquals(Protocol.HTTP_1_1, statusLine.protocol);
43     assertEquals(code, statusLine.code);
44   }
45 
46   /**
47    * This is not defined in the protocol but some servers won't add the leading
48    * empty space when the message is empty.
49    * http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1
50    */
emptyMessageAndNoLeadingSpace()51   @Test public void emptyMessageAndNoLeadingSpace() throws IOException {
52     int version = 1;
53     int code = 503;
54     StatusLine statusLine = StatusLine.parse("HTTP/1." + version + " " + code);
55     assertEquals("", statusLine.message);
56     assertEquals(Protocol.HTTP_1_1, statusLine.protocol);
57     assertEquals(code, statusLine.code);
58   }
59 
60   // https://github.com/square/okhttp/issues/386
shoutcast()61   @Test public void shoutcast() throws IOException {
62     StatusLine statusLine = StatusLine.parse("ICY 200 OK");
63     assertEquals("OK", statusLine.message);
64     assertEquals(Protocol.HTTP_1_0, statusLine.protocol);
65     assertEquals(200, statusLine.code);
66   }
67 
missingProtocol()68   @Test public void missingProtocol() throws IOException {
69     assertInvalid("");
70     assertInvalid(" ");
71     assertInvalid("200 OK");
72     assertInvalid(" 200 OK");
73   }
74 
protocolVersions()75   @Test public void protocolVersions() throws IOException {
76     assertInvalid("HTTP/2.0 200 OK");
77     assertInvalid("HTTP/2.1 200 OK");
78     assertInvalid("HTTP/-.1 200 OK");
79     assertInvalid("HTTP/1.- 200 OK");
80     assertInvalid("HTTP/0.1 200 OK");
81     assertInvalid("HTTP/101 200 OK");
82     assertInvalid("HTTP/1.1_200 OK");
83   }
84 
nonThreeDigitCode()85   @Test public void nonThreeDigitCode() throws IOException {
86     assertInvalid("HTTP/1.1  OK");
87     assertInvalid("HTTP/1.1 2 OK");
88     assertInvalid("HTTP/1.1 20 OK");
89     assertInvalid("HTTP/1.1 2000 OK");
90     assertInvalid("HTTP/1.1 two OK");
91     assertInvalid("HTTP/1.1 2");
92     assertInvalid("HTTP/1.1 2000");
93     assertInvalid("HTTP/1.1 two");
94   }
95 
truncated()96   @Test public void truncated() throws IOException {
97     assertInvalid("");
98     assertInvalid("H");
99     assertInvalid("HTTP/1");
100     assertInvalid("HTTP/1.");
101     assertInvalid("HTTP/1.1");
102     assertInvalid("HTTP/1.1 ");
103     assertInvalid("HTTP/1.1 2");
104     assertInvalid("HTTP/1.1 20");
105   }
106 
wrongMessageDelimiter()107   @Test public void wrongMessageDelimiter() throws IOException {
108     assertInvalid("HTTP/1.1 200_");
109   }
110 
assertInvalid(String statusLine)111   private void assertInvalid(String statusLine) throws IOException {
112     try {
113       StatusLine.parse(statusLine);
114       fail();
115     } catch (ProtocolException expected) {
116     }
117   }
118 }
119