/* * This file is part of the OWASP Proxy, a free intercepting proxy library. * Copyright (C) 2008-2010 Rogan Dawes <rogan@dawes.za.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to: * The Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ package org.owasp.proxy.http; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; import org.owasp.proxy.http.MessageFormatException; import org.owasp.proxy.http.MutableMessageHeader; import org.owasp.proxy.http.NamedValue; import org.owasp.proxy.util.AsciiString; /** * @author Rogan Dawes * */ public class MessageHeaderTest { private String CRLF = "\r\n"; private String CRLFCRLF = CRLF + CRLF; private String get = "GET / HTTP/1.0"; private String get3 = "GET / HTTP/1.0\r\nHost: localhost\r\nCookie: a=b"; private String post = "POST / HTTP/1.0\r\nHost: localhost\r\nCookie: a=b\r\nContent-Length: 10"; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#getMessage()}. */ @Test public void testGetSetHeader() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(get + CRLFCRLF)); String s = AsciiString.create(m.getHeader()); assertEquals(get + CRLFCRLF, s); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#getStartLine()}. */ @Test public void testGetFirstLine() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(get + CRLFCRLF)); assertEquals(get, m.getStartLine()); m.setHeader(AsciiString.getBytes(get3 + CRLFCRLF)); assertEquals(get, m.getStartLine()); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#setStartLine(java.lang.String)} . */ @Test public void testSetFirstLine() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setStartLine(get); assertEquals(get + CRLFCRLF, AsciiString.create(m.getHeader())); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#getHeaders()}. */ @Test public void testGetHeaders() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(post + CRLFCRLF)); String result = m.getStartLine() + CRLF + NamedValue.join(m.getHeaders(), CRLF) + CRLFCRLF; assertEquals(post + CRLFCRLF, result); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#setHeaders(org.owasp.proxy.http.NamedValue[])} * . */ @Test public void testSetHeaders() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); String first = post.substring(0, post.indexOf(CRLF)); NamedValue[] h = NamedValue.parse(post.substring(first.length() + CRLF.length()), CRLF, " *: *"); try { m.setHeaders(h); fail("Should have thrown an exception here"); } catch (MessageFormatException mfe) { // expected m.setHeader(null); } m.setStartLine(first); m.setHeaders(h); assertEquals(post + CRLFCRLF, AsciiString.create(m.getHeader())); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#getHeader(java.lang.String)} . */ @Test public void testGetHeaderString() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(post + CRLFCRLF)); assertEquals("a=b", m.getHeader("cookie")); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#setHeader(java.lang.String, java.lang.String)} * . */ @Test public void testSetHeaderStringString() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(post + CRLFCRLF)); m.setHeader("Cookie", "a=c"); assertEquals("a=c", m.getHeader("cookie")); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#addHeader(java.lang.String, java.lang.String)} * . */ @Test public void testAddHeader() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(post + CRLFCRLF)); m.addHeader("Cookie", "b=c"); NamedValue[] headers = m.getHeaders(); boolean found = false; for (int i = 0; i < headers.length; i++) if ("cookie".equalsIgnoreCase(headers[i].getName()) && "a=b".equals(headers[i].getValue())) found = true; assertTrue(found); found = false; for (int i = 0; i < headers.length; i++) if ("cookie".equalsIgnoreCase(headers[i].getName()) && "b=c".equals(headers[i].getValue())) found = true; assertTrue(found); } /** * Test method for {@link org.owasp.proxy.http.MutableBufferedMessage#deleteHeader(java.lang.String)} . */ @Test public void testDeleteHeader() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(post + CRLFCRLF)); assertEquals("a=b", m.getHeader("Cookie")); m.deleteHeader("cookie"); assertEquals(null, m.getHeader("cookie")); } @Test public void testHeaderLines() throws Exception { MutableMessageHeader.Impl m = new MutableMessageHeader.Impl(); m.setHeader(AsciiString.getBytes(post + CRLFCRLF)); assertEquals(5, m.getHeaderLines().length); assertEquals(3, m.getHeaders().length); } }