1 /*
2  * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/test/org/apache/commons/httpclient/TestHttpParser.java,v 1.3 2004/02/22 18:08:49 olegk Exp $
3  * $Revision: 480424 $
4  * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $
5  * ====================================================================
6  *
7  *  Licensed to the Apache Software Foundation (ASF) under one or more
8  *  contributor license agreements.  See the NOTICE file distributed with
9  *  this work for additional information regarding copyright ownership.
10  *  The ASF licenses this file to You under the Apache License, Version 2.0
11  *  (the "License"); you may not use this file except in compliance with
12  *  the License.  You may obtain a copy of the License at
13  *
14  *      http://www.apache.org/licenses/LICENSE-2.0
15  *
16  *  Unless required by applicable law or agreed to in writing, software
17  *  distributed under the License is distributed on an "AS IS" BASIS,
18  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  *  See the License for the specific language governing permissions and
20  *  limitations under the License.
21  * ====================================================================
22  *
23  * This software consists of voluntary contributions made by many
24  * individuals on behalf of the Apache Software Foundation.  For more
25  * information on the Apache Software Foundation, please see
26  * <http://www.apache.org/>.
27  *
28  * [Additional notices, if required by prior licensing conditions]
29  *
30  */
31 
32 package org.apache.commons.httpclient;
33 
34 import java.io.ByteArrayInputStream;
35 import java.io.InputStream;
36 
37 import junit.framework.*;
38 
39 /**
40  * Simple tests for {@link HttpParser}.
41  *
42  * @author Oleg Kalnichevski
43  * @version $Id: TestHttpParser.java 480424 2006-11-29 05:56:49Z bayard $
44  */
45 public class TestHttpParser extends TestCase {
46 
47     private static final String HTTP_ELEMENT_CHARSET = "US-ASCII";
48 
49     // ------------------------------------------------------------ Constructor
TestHttpParser(String testName)50     public TestHttpParser(String testName) {
51         super(testName);
52     }
53 
54     // ------------------------------------------------------------------- Main
main(String args[])55     public static void main(String args[]) {
56         String[] testCaseName = { TestHeader.class.getName() };
57         junit.textui.TestRunner.main(testCaseName);
58     }
59 
60     // ------------------------------------------------------- TestCase Methods
61 
suite()62     public static Test suite() {
63         return new TestSuite(TestHttpParser.class);
64     }
65 
testReadHttpLine()66     public void testReadHttpLine() throws Exception {
67         InputStream instream = new ByteArrayInputStream(
68             "\r\r\nstuff\r\n".getBytes(HTTP_ELEMENT_CHARSET));
69         assertEquals("\r", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
70         assertEquals("stuff", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
71         assertEquals(null, HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
72 
73         instream = new ByteArrayInputStream(
74             "\n\r\nstuff\r\n".getBytes("US-ASCII"));
75         assertEquals("", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
76         assertEquals("", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
77         assertEquals("stuff", HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
78         assertEquals(null, HttpParser.readLine(instream, HTTP_ELEMENT_CHARSET));
79     }
80 
testReadWellFormedHttpHeaders()81     public void testReadWellFormedHttpHeaders() throws Exception {
82         InputStream instream = new ByteArrayInputStream(
83             "a: a\r\nb: b\r\n\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
84         Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
85         assertNotNull(headers);
86         assertEquals(2, headers.length);
87         assertEquals("a", headers[0].getName());
88         assertEquals("a", headers[0].getValue());
89         assertEquals("b", headers[1].getName());
90         assertEquals("b", headers[1].getValue());
91     }
92 
testReadMalformedHttpHeaders()93     public void testReadMalformedHttpHeaders() throws Exception {
94         InputStream instream = new ByteArrayInputStream(
95             "a: a\r\nb b\r\n\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
96         try {
97             Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
98             fail("HttpException should have been thrown");
99         } catch (HttpException expected) {
100         }
101     }
102 
testHeadersTerminatorLeniency1()103     public void testHeadersTerminatorLeniency1() throws Exception {
104         InputStream instream = new ByteArrayInputStream(
105             "a: a\r\nb: b\r\n\r\r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
106         Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
107         assertNotNull(headers);
108         assertEquals(2, headers.length);
109         assertEquals("a", headers[0].getName());
110         assertEquals("a", headers[0].getValue());
111         assertEquals("b", headers[1].getName());
112         assertEquals("b", headers[1].getValue());
113     }
114 
testHeadersTerminatorLeniency2()115     public void testHeadersTerminatorLeniency2() throws Exception {
116         InputStream instream = new ByteArrayInputStream(
117             "a: a\r\nb: b\r\n    \r\nwhatever".getBytes(HTTP_ELEMENT_CHARSET));
118         Header[] headers = HttpParser.parseHeaders(instream, HTTP_ELEMENT_CHARSET);
119         assertNotNull(headers);
120         assertEquals(2, headers.length);
121         assertEquals("a", headers[0].getName());
122         assertEquals("a", headers[0].getValue());
123         assertEquals("b", headers[1].getName());
124         assertEquals("b", headers[1].getValue());
125     }
126 }
127