/* * Aphelion * Copyright (c) 2013 Joris van der Wel * * This file is part of Aphelion * * Aphelion is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, version 3 of the License. * * Aphelion 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 General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Aphelion. If not, see <http://www.gnu.org/licenses/>. * * In addition, the following supplemental terms apply, based on section 7 of * the GNU Affero General Public License (version 3): * a) Preservation of all legal notices and author attributions * b) Prohibition of misrepresentation of the origin of this material, and * modified versions are required to be marked in reasonable ways as * different from the original version (for example by appending a copyright notice). * * Linking this library statically or dynamically with other modules is making a * combined work based on this library. Thus, the terms and conditions of the * GNU Affero General Public License cover the whole combination. * * As a special exception, the copyright holders of this library give you * permission to link this library with independent modules to produce an * executable, regardless of the license terms of these independent modules, * and to copy and distribute the resulting executable under terms of your * choice, provided that you also meet, for each linked independent module, * the terms and conditions of the license of that module. An independent * module is a module which is not derived from or based on this library. */ package aphelion.server.http; import java.nio.ByteBuffer; import java.nio.charset.Charset; import org.junit.Test; import static org.junit.Assert.*; /** * * @author Joris */ public class HttpUtilTest_ { public HttpUtilTest_() { } @Test public void testBinarySizeUTF8() { testBinarySizeUTF8_string("$"); testBinarySizeUTF8_string("¢"); testBinarySizeUTF8_string("€"); testBinarySizeUTF8_string("$¢€"); testBinarySizeUTF8_string("\uD834\uDD1E"); } private void testBinarySizeUTF8_string(String test) { assertEquals(test.getBytes(Charset.forName("UTF-8")).length, HttpUtil.binarySizeUTF8(test)); } @Test public void testFindCRLF() { ByteBuffer buf = ByteBuffer.allocate(100); buf.put((byte) 't'); buf.put((byte) 'e'); buf.put((byte) 's'); buf.put((byte) 't'); buf.put((byte) '\r'); buf.put((byte) '\n'); buf.put((byte) 'b'); buf.put((byte) 'l'); buf.put((byte) 'a'); buf.flip(); assertEquals(4, HttpUtil.findCRLF(buf, 0)); assertEquals(4, HttpUtil.findCRLF(buf, 1)); assertEquals(4, HttpUtil.findCRLF(buf, 2)); assertEquals(4, HttpUtil.findCRLF(buf, 3)); assertEquals(4, HttpUtil.findCRLF(buf, 4)); assertEquals(-1, HttpUtil.findCRLF(buf, 5)); buf.clear(); buf.put((byte) '\r'); buf.put((byte) '\n'); buf.flip(); assertEquals(0, HttpUtil.findCRLF(buf, 0)); assertEquals(-1, HttpUtil.findCRLF(buf, 1)); } @Test public void testFindCRLFIgnoreLWS() { ByteBuffer buf = ByteBuffer.allocate(100); buf.put((byte) 't'); //0 buf.put((byte) 'e'); //1 buf.put((byte) 's'); //2 buf.put((byte) 't'); //3 buf.put((byte) '\r');//4 buf.put((byte) '\n');//5 buf.put((byte) ' '); //6 buf.put((byte) 'a'); //7 buf.put((byte) 'b'); //8 buf.put((byte) 'c'); //9 buf.put((byte) '\r');//10 buf.put((byte) '\n');//11 buf.put((byte) '\r');//12 buf.put((byte) '\n');//13 buf.flip(); assertEquals(10, HttpUtil.findCRLFIgnoreLWS(buf, 0)); assertEquals(10, HttpUtil.findCRLFIgnoreLWS(buf, 3)); assertEquals(10, HttpUtil.findCRLFIgnoreLWS(buf, 4)); assertEquals(10, HttpUtil.findCRLFIgnoreLWS(buf, 5)); assertEquals(10, HttpUtil.findCRLFIgnoreLWS(buf, 6)); assertEquals(10, HttpUtil.findCRLFIgnoreLWS(buf, 9)); assertEquals(10, HttpUtil.findCRLFIgnoreLWS(buf, 10)); assertEquals(-1, HttpUtil.findCRLFIgnoreLWS(buf, 11)); buf.clear(); buf.put((byte) '\r'); buf.put((byte) '\n'); buf.put((byte) 'C'); buf.flip(); assertEquals(0, HttpUtil.findCRLFIgnoreLWS(buf, 0)); assertEquals(-1, HttpUtil.findCRLFIgnoreLWS(buf, 1)); } @Test public void testReadLine() { StringBuilder dest = new StringBuilder(); ByteBuffer buf = ByteBuffer.allocate(100); buf.put((byte) 't'); buf.put((byte) 'e'); buf.put((byte) 's'); buf.put((byte) 't'); buf.put((byte) '\r'); buf.put((byte) '\n'); buf.put((byte) ' '); buf.put((byte) 'b'); buf.put((byte) 'l'); buf.put((byte) 'a'); buf.put((byte) '\r'); buf.put((byte) '\n'); buf.put((byte) '\r'); buf.put((byte) '\n'); buf.flip(); dest.setLength(0); assertTrue(HttpUtil.readLine(dest, buf, false)); assertEquals("test", dest.toString()); dest.setLength(0); assertTrue(HttpUtil.readLine(dest, buf, false)); assertEquals(" bla", dest.toString()); dest.setLength(0); assertTrue(HttpUtil.readLine(dest, buf, false)); assertEquals("", dest.toString()); buf.position(0); dest.setLength(0); assertTrue(HttpUtil.readLine(dest, buf, true)); assertEquals("test\r\n bla", dest.toString()); dest.setLength(0); assertFalse(HttpUtil.readLine(dest, buf, true)); } }