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
28
29
30
31 package org.apache.commons.httpclient;
32
33 import java.io.ByteArrayInputStream;
34 import java.io.InputStream;
35
36 import junit.framework.*;
37
38 /***
39 * Simple tests for {@link HttpParser}.
40 *
41 * @author Oleg Kalnichevski
42 * @version $Id: TestHttpParser.java 179411 2005-06-01 20:04:58Z olegk $
43 */
44 public class TestHttpParser extends TestCase {
45
46 private static final String HTTP_ELEMENT_CHARSET = "US-ASCII";
47
48
49 public TestHttpParser(String testName) {
50 super(testName);
51 }
52
53
54 public static void main(String args[]) {
55 String[] testCaseName = { TestHeader.class.getName() };
56 junit.textui.TestRunner.main(testCaseName);
57 }
58
59
60
61 public static Test suite() {
62 return new TestSuite(TestHttpParser.class);
63 }
64
65 public void testReadHttpLine() throws Exception {
66 InputStream instream = new ByteArrayInputStream(
67 "\r\r\nstuff\r\n".getBytes(HTTP_ELEMENT_CHARSET));
68 assertEquals("\r", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
69 assertEquals("stuff", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
70 assertEquals(null, HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
71
72 instream = new ByteArrayInputStream(
73 "\n\r\nstuff\r\n".getBytes("US-ASCII"));
74 assertEquals("", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
75 assertEquals("", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
76 assertEquals("stuff", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
77 assertEquals(null, HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
78 }
79
80 public void testReadWellFormedHttpHeaders() throws Exception {
81 InputStream instream = new ByteArrayInputStream(
82 "a: a\r\nb: b\r\n\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
83 Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
84 assertNotNull(headers);
85 assertEquals(2, headers.length);
86 assertEquals("a", headers[0].getName());
87 assertEquals("a", headers[0].getValue());
88 assertEquals("b", headers[1].getName());
89 assertEquals("b", headers[1].getValue());
90 }
91
92 public void testReadMalformedHttpHeaders() throws Exception {
93 InputStream instream = new ByteArrayInputStream(
94 "a: a\r\nb b\r\n\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
95 try {
96 Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
97 fail("HttpException should have been thrown");
98 } catch (HttpException expected) {
99 }
100 }
101
102 public void testHeadersTerminatorLeniency1() throws Exception {
103 InputStream instream = new ByteArrayInputStream(
104 "a: a\r\nb: b\r\n\r\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
105 Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
106 assertNotNull(headers);
107 assertEquals(2, headers.length);
108 assertEquals("a", headers[0].getName());
109 assertEquals("a", headers[0].getValue());
110 assertEquals("b", headers[1].getName());
111 assertEquals("b", headers[1].getValue());
112 }
113
114 public void testHeadersTerminatorLeniency2() throws Exception {
115 InputStream instream = new ByteArrayInputStream(
116 "a: a\r\nb: b\r\n \r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
117 Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
118 assertNotNull(headers);
119 assertEquals(2, headers.length);
120 assertEquals("a", headers[0].getName());
121 assertEquals("a", headers[0].getValue());
122 assertEquals("b", headers[1].getName());
123 assertEquals("b", headers[1].getValue());
124 }
125 }