/*
* 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");
}
}