/* * Copyright (C) 2015 SoftIndex LLC. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.datakernel.http; import io.datakernel.exception.ParseException; import org.junit.Test; import static org.junit.Assert.*; public class HttpUriTest { @Test public void testIPv6() { // with port HttpUri url = HttpUri.ofUrl("http://[0:0:0:0:0:0:0:1]:52142"); assertEquals("[0:0:0:0:0:0:0:1]", url.getHost()); assertEquals("[0:0:0:0:0:0:0:1]:52142", url.getHostAndPort()); assertEquals(52142, url.getPort()); assertEquals("/", url.getPathAndQuery()); assertEquals("/", url.getPath()); assertEquals("", url.getQuery()); // without port url = HttpUri.ofUrl("http://[0:0:0:0:0:0:0:1]"); assertEquals("[0:0:0:0:0:0:0:1]", url.getHost()); assertEquals("[0:0:0:0:0:0:0:1]", url.getHostAndPort()); assertEquals(80, url.getPort()); assertEquals("/", url.getPathAndQuery()); assertEquals("/", url.getPath()); assertEquals("", url.getQuery()); // with query url = HttpUri.ofUrl("http://[0:0:0:0:0:0:0:1]:52142/path1/path2?aa=bb&zz=a+b"); assertEquals("[0:0:0:0:0:0:0:1]", url.getHost()); assertEquals("[0:0:0:0:0:0:0:1]:52142", url.getHostAndPort()); assertEquals(52142, url.getPort()); assertEquals("/path1/path2?aa=bb&zz=a+b", url.getPathAndQuery()); assertEquals("/path1/path2", url.getPath()); assertEquals("aa=bb&zz=a+b", url.getQuery()); url = HttpUri.ofUrl("http://[0:0:0:0:0:0:0:1]/?"); assertEquals("[0:0:0:0:0:0:0:1]", url.getHost()); assertEquals("[0:0:0:0:0:0:0:1]", url.getHostAndPort()); assertEquals(80, url.getPort()); assertEquals("/?", url.getPathAndQuery()); assertEquals("/", url.getPath()); assertEquals("", url.getQuery()); } @Test public void testFullUrl() { HttpUri url = HttpUri.ofUrl("http://abc.com"); assertFalse(url.isPartial()); assertEquals("abc.com", url.getHostAndPort()); assertEquals("abc.com", url.getHost()); assertEquals(80, url.getPort()); assertEquals("/", url.getPathAndQuery()); assertEquals("/", url.getPath()); assertEquals("", url.getQuery()); url = HttpUri.ofUrl("http://zzz.abc.com:8080/path1/path2?aa=bb&zz=a+b"); assertFalse(url.isPartial()); assertEquals("zzz.abc.com:8080", url.getHostAndPort()); assertEquals("zzz.abc.com", url.getHost()); assertEquals(8080, url.getPort()); assertEquals("/path1/path2?aa=bb&zz=a+b", url.getPathAndQuery()); assertEquals("/path1/path2", url.getPath()); assertEquals("aa=bb&zz=a+b", url.getQuery()); url = HttpUri.ofUrl("http://zzz.abc.com/?"); assertFalse(url.isPartial()); assertEquals("zzz.abc.com", url.getHostAndPort()); assertEquals("zzz.abc.com", url.getHost()); assertEquals(80, url.getPort()); assertEquals("/?", url.getPathAndQuery()); assertEquals("/", url.getPath()); assertEquals("", url.getQuery()); } @Test public void testPartialUrl() throws ParseException { HttpUri url = HttpUri.parseUrl("/path1/path2?aa=bb&zz=a+b"); assertTrue(url.isPartial()); assertNull(url.getHostAndPort()); assertNull(url.getHost()); assertEquals(-1, url.getPort()); assertEquals("/path1/path2?aa=bb&zz=a+b", url.getPathAndQuery()); assertEquals("/path1/path2", url.getPath()); assertEquals("aa=bb&zz=a+b", url.getQuery()); url = HttpUri.parseUrl(""); assertTrue(url.isPartial()); assertNull(url.getHostAndPort()); assertNull(url.getHost()); assertEquals(-1, url.getPort()); assertEquals("/", url.getPathAndQuery()); assertEquals("/", url.getPath()); assertEquals("", url.getQuery()); } @Test(expected = IllegalArgumentException.class) public void testInvalidScheme() { HttpUri.ofUrl("ftp://abc.com/"); } @Test(expected = IllegalArgumentException.class) public void testInvalidPartialUrl() throws ParseException { HttpUri.ofUrl("/path"); } }