1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.http.impl.io;
28
29 import java.io.InterruptedIOException;
30
31 import org.apache.http.ConnectionClosedException;
32 import org.apache.http.Consts;
33 import org.apache.http.Header;
34 import org.apache.http.HttpRequest;
35 import org.apache.http.HttpVersion;
36 import org.apache.http.RequestLine;
37 import org.apache.http.impl.SessionInputBufferMock;
38 import org.apache.http.io.SessionInputBuffer;
39 import org.junit.Assert;
40 import org.junit.Test;
41
42
43
44
45 public class TestRequestParser {
46
47 @Test(expected=IllegalArgumentException.class)
48 public void testInvalidConstructorInput() throws Exception {
49 new DefaultHttpRequestParser(null);
50 }
51
52 @Test
53 public void testBasicMessageParsing() throws Exception {
54 final String s =
55 "GET / HTTP/1.1\r\n" +
56 "Host: localhost\r\n" +
57 "User-Agent: whatever\r\n" +
58 "Cookie: c1=stuff\r\n" +
59 "\r\n";
60 final SessionInputBuffer inBuffer = new SessionInputBufferMock(s, Consts.ASCII);
61
62 final DefaultHttpRequestParser parser = new DefaultHttpRequestParser(inBuffer);
63 final HttpRequest httprequest = parser.parse();
64
65 final RequestLine reqline = httprequest.getRequestLine();
66 Assert.assertNotNull(reqline);
67 Assert.assertEquals("GET", reqline.getMethod());
68 Assert.assertEquals("/", reqline.getUri());
69 Assert.assertEquals(HttpVersion.HTTP_1_1, reqline.getProtocolVersion());
70 final Header[] headers = httprequest.getAllHeaders();
71 Assert.assertEquals(3, headers.length);
72 }
73
74 @Test
75 public void testConnectionClosedException() throws Exception {
76 final SessionInputBuffer inBuffer = new SessionInputBufferMock(new byte[] {});
77
78 final DefaultHttpRequestParser parser = new DefaultHttpRequestParser(inBuffer);
79 try {
80 parser.parse();
81 Assert.fail("ConnectionClosedException should have been thrown");
82 } catch (final ConnectionClosedException expected) {
83 }
84 }
85
86 @Test
87 public void testMessageParsingTimeout() throws Exception {
88 final String s =
89 "GET \000/ HTTP/1.1\r\000\n" +
90 "Host: loca\000lhost\r\n" +
91 "User-Agent: whatever\r\n" +
92 "Coo\000kie: c1=stuff\r\n" +
93 "\000\r\n";
94 final SessionInputBuffer inBuffer = new SessionInputBufferMock(
95 new TimeoutByteArrayInputStream(s.getBytes(Consts.ASCII)), 16);
96
97 final DefaultHttpRequestParser parser = new DefaultHttpRequestParser(inBuffer);
98
99 int timeoutCount = 0;
100
101 HttpRequest httprequest = null;
102 for (int i = 0; i < 10; i++) {
103 try {
104 httprequest = parser.parse();
105 break;
106 } catch (final InterruptedIOException ex) {
107 timeoutCount++;
108 }
109
110 }
111 Assert.assertNotNull(httprequest);
112 Assert.assertEquals(5, timeoutCount);
113
114 final RequestLine reqline = httprequest.getRequestLine();
115 Assert.assertNotNull(reqline);
116 Assert.assertEquals("GET", reqline.getMethod());
117 Assert.assertEquals("/", reqline.getUri());
118 Assert.assertEquals(HttpVersion.HTTP_1_1, reqline.getProtocolVersion());
119 final Header[] headers = httprequest.getAllHeaders();
120 Assert.assertEquals(3, headers.length);
121 }
122
123 }
124