/*
* This file is part of the Wayback archival access software
* (http://archive-access.sourceforge.net/projects/wayback/).
*
* Licensed to the Internet Archive (IA) by one or more individual
* contributors.
*
* The IA licenses this file to You 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 org.archive.wayback.util.url;
import java.net.MalformedURLException;
import java.net.URL;
import junit.framework.TestCase;
/**
* Stub for testing UrlOperations static methods
*
* @author brad
* @version $Date$, $Revision$
*/
public class UrlOperationsTest extends TestCase {
public void testOneSlashUrl() throws MalformedURLException {
assertEquals("http://one.com/",
UrlOperations.fixupHTTPUrlWithOneSlash("http://one.com/"));
assertEquals("http://one.com",
UrlOperations.fixupHTTPUrlWithOneSlash("http://one.com"));
assertEquals("http://http://one.com",
UrlOperations.fixupHTTPUrlWithOneSlash("http://http://one.com"));
assertEquals("http://one.com",
UrlOperations.fixupHTTPUrlWithOneSlash("http:/one.com"));
assertEquals("http://one.com/",
UrlOperations.fixupHTTPUrlWithOneSlash("http:/one.com/"));
assertEquals("http://one.com/foo.html",
UrlOperations.fixupHTTPUrlWithOneSlash("http:/one.com/foo.html"));
}
public void testFixupScheme() {
assertEquals("http://one.com/foo.html",
UrlOperations.fixupScheme("http:/one.com/foo.html"));
assertEquals("https://one.com/foo.html",
UrlOperations.fixupScheme("https:/one.com/foo.html"));
assertEquals("ftp://one.com/foo.html",
UrlOperations.fixupScheme("ftp:/one.com/foo.html"));
assertEquals("rtsp://one.com/foo.html",
UrlOperations.fixupScheme("rtsp:/one.com/foo.html"));
assertEquals("mms://one.com/foo.html",
UrlOperations.fixupScheme("mms:/one.com/foo.html"));
assertEquals(
"http://web.archive.org/web/2010/http:/example.com",
UrlOperations
.fixupScheme("http://web.archive.org/web/2010/http:/example.com"));
final String url = "http://example.com/well/formed.html";
assertTrue(url == UrlOperations.fixupScheme(url));
}
public void testIsAuthority() {
checkAuthority("foo.com",true);
checkAuthority("foo.con",false);
checkAuthority("foo.de",true);
checkAuthority("foo.denny",false);
checkAuthority("1.1.1.1",true);
checkAuthority("23.4.4.foo",false);
checkAuthority("23.4.4.com",true);
checkAuthority("com.23.4.4.134",false);
}
private void checkAuthority(String s, boolean want) {
boolean got = UrlOperations.isAuthority(s);
if(want) {
assertTrue("String("+s+") could be an Authority",want == got);
} else {
assertTrue("String("+s+") is not an Authority",want == got);
}
}
public void testUrlToHost() {
assertEquals("foo.com",UrlOperations.urlToHost("dns:foo.com"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com"));
assertEquals("www.google.com",UrlOperations.urlToHost("http://www.GOOGLE.COM"));
assertEquals("google.com",UrlOperations.urlToHost("http://GOOGLE.COM/"));
assertEquals("google.com",UrlOperations.urlToHost("http://GOOGLE.COM"));
assertEquals("google.com",UrlOperations.urlToHost("http://GOOGLE.COM:80"));
assertEquals("google.com",UrlOperations.urlToHost("http://GOOGLE.COM:80/"));
assertEquals("google.com",UrlOperations.urlToHost("http://GOOGLE.COM:80/foo"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com/"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com/"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com/"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com:120/"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com:180/"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com:190/"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com:120"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com:180"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com:190"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com:120/path"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com:180/path"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com:190/path"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com:120/path/"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com:180/path/"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com:190/path/"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com:120/path:/"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com:180/path:/"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com:190/path:/"));
assertEquals("foo.com",UrlOperations.urlToHost("http://foo.com/path:/"));
assertEquals("foo.com",UrlOperations.urlToHost("https://foo.com/path:/"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com/path:/"));
assertEquals("foo.com",UrlOperations.urlToHost("ftp://foo.com\\"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://www.foo.com\\"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://www.foo.com:80\\"));
assertEquals("foo.com",UrlOperations.urlToHost("http://user@foo.com"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://user@www.foo.com"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://user:pass@www.foo.com"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://user:pass@www.foo.com/"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://user:pass@www.foo.com/boo@foo"));
}
public void testUrlToUserInfo() {
assertEquals(null,UrlOperations.urlToUserInfo("dns:foo.com"));
assertEquals(null,UrlOperations.urlToUserInfo("http://foo.com"));
assertEquals(null,UrlOperations.urlToUserInfo("https://foo.com"));
assertEquals(null,UrlOperations.urlToUserInfo("ftp://foo.com"));
assertEquals(null,UrlOperations.urlToUserInfo("ftp://foo.com/"));
assertEquals(null,UrlOperations.urlToUserInfo("http://foo.com:80/"));
assertEquals(null,UrlOperations.urlToUserInfo("http://foo.com:80"));
assertEquals(null,UrlOperations.urlToUserInfo("http://www.foo.com:80\\"));
assertEquals(null,UrlOperations.urlToUserInfo("http://www.flickr.com/photos/36050182@N05/"));
assertEquals("user",UrlOperations.urlToUserInfo("http://user@foo.com"));
assertEquals("user",UrlOperations.urlToUserInfo("http://user@www.foo.com"));
assertEquals("user:pass",UrlOperations.urlToUserInfo("http://user:pass@www.foo.com"));
assertEquals("user:pass",UrlOperations.urlToUserInfo("http://user:pass@www.foo.com:8080"));
assertEquals("user:pass",UrlOperations.urlToUserInfo("http://user:pass@www.foo.com:8080/boo@arb"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://user:pass@www.foo.com/"));
assertEquals("www.foo.com",UrlOperations.urlToHost("http://user:pass@www.foo.com/boo@foo"));
}
public void testResolveUrl() {
for(String scheme : UrlOperations.ALL_SCHEMES) {
assertEquals(scheme + "a.org/1/2",
UrlOperations.resolveUrl(scheme + "a.org/3/","/1/2"));
assertEquals(scheme + "b.org/1/2",
UrlOperations.resolveUrl(scheme + "a.org/3/",
scheme + "b.org/1/2"));
assertEquals(scheme + "a.org/3/1/2",
UrlOperations.resolveUrl(scheme + "a.org/3/","1/2"));
assertEquals(scheme + "a.org/1/2",
UrlOperations.resolveUrl(scheme + "a.org/3","1/2"));
assertEquals(scheme + "a.org/3",
UrlOperations.resolveUrl(scheme + "a.org/3",""));
assertEquals(scheme + "a.org/3.html",
UrlOperations.resolveUrl(scheme + "a.org/3.html",""));
}
}
public void testUrlToScheme() {
assertEquals("http://",UrlOperations.urlToScheme("http://a.com/"));
assertEquals("https://",UrlOperations.urlToScheme("https://a.com/"));
assertEquals("ftp://",UrlOperations.urlToScheme("ftp://a.com/"));
assertEquals("rtsp://",UrlOperations.urlToScheme("rtsp://a.com/"));
assertEquals("mms://",UrlOperations.urlToScheme("mms://a.com/"));
assertNull(UrlOperations.urlToScheme("blah://a.com/"));
}
public void testGetUrlParentDir() {
assertEquals( "http://a.b/c/",
UrlOperations.getUrlParentDir("http://a.b/c/d"));
assertEquals( "http://a.b/",
UrlOperations.getUrlParentDir("http://a.b/c/"));
assertEquals( "http://a.b/",
UrlOperations.getUrlParentDir("http://a.b/c"));
assertEquals( "http://a.b/c/d/e/",
UrlOperations.getUrlParentDir("http://a.b/c/d/e/f"));
assertEquals( "http://a.b/",
UrlOperations.getUrlParentDir("http://a.b/c?d=e"));
assertEquals( null,
UrlOperations.getUrlParentDir("http://a.b/"));
assertEquals( null,
UrlOperations.getUrlParentDir("http//a.b/"));
assertEquals( null,
UrlOperations.getUrlParentDir("http://"));
assertEquals( null,
UrlOperations.getUrlParentDir("http://#4.8gifdijdf"));
assertEquals( null,
UrlOperations.getUrlParentDir("http://#4.8gifdijdf/a/b"));
}
public void testUrlPath() {
assertEquals("/",UrlOperations.getURLPath("http://foo.com"));
assertEquals("/",UrlOperations.getURLPath("http://foo.com/"));
assertEquals("/",UrlOperations.getURLPath("http://foo.com:80/"));
assertEquals("/blue",UrlOperations.getURLPath("http://foo.com:80/blue"));
assertEquals("/blue/red",UrlOperations.getURLPath("http://foo.com:80/blue/red"));
assertEquals("/blue/red:colon",UrlOperations.getURLPath("http://foo.com:80/blue/red:colon"));
assertEquals("/",UrlOperations.getURLPath("foo.com"));
assertEquals("/",UrlOperations.getURLPath("foo.com:80"));
assertEquals("/",UrlOperations.getURLPath("foo.com:8080"));
assertEquals("/",UrlOperations.getURLPath("foo.com/"));
assertEquals("/",UrlOperations.getURLPath("foo.com:80/"));
assertEquals("/",UrlOperations.getURLPath("foo.com:8080/"));
assertEquals("/bar",UrlOperations.getURLPath("foo.com/bar"));
assertEquals("/bar",UrlOperations.getURLPath("foo.com:80/bar"));
assertEquals("/bar",UrlOperations.getURLPath("foo.com:8080/bar"));
assertEquals("/bar/baz",UrlOperations.getURLPath("foo.com/bar/baz"));
assertEquals("/bar/baz",UrlOperations.getURLPath("foo.com:80/bar/baz"));
assertEquals("/bar/baz",UrlOperations.getURLPath("foo.com:8080/bar/baz"));
}
public void testStripDefaultPort() {
assertSDP("http://foo.com/","http://foo.com/");
assertSDP("http://foo.com","http://foo.com");
assertSDP("http://foo.com","http://foo.com:80");
assertSDP("foo.com:80/","foo.com:80/");
assertSDP("http://foo.com:8080/","http://foo.com:8080/");
assertSDP("http://foo.com:8081/","http://foo.com:8081/");
assertSDP("https://foo.com:8081/","https://foo.com:8081/");
assertSDP("https://foo.com/","https://foo.com:443/");
assertSDP("https://foo.com","https://foo.com:443");
assertSDP("ftp://foo.com/","ftp://foo.com/");
assertSDP("ftp://foo.com","ftp://foo.com");
assertSDP("ftp://foo.com:1234","ftp://foo.com:1234");
assertSDP("ftp://foo.com","ftp://foo.com:21");
assertSDP("ftp://foo.com/","ftp://foo.com:21/");
assertSDP("ftp://foo.com/bla","ftp://foo.com:21/bla");
assertSDP("s3://foo.com/","s3://foo.com/");
assertSDP("s3://foo.com/bar","s3://foo.com/bar");
assertSDP("s3://foo.com:80/bar","s3://foo.com:80/bar");
assertSDP("http://b@foo.com/bar","http://b@foo.com:80/bar");
assertSDP("http://b@foo.com/bar","http://b@foo.com/bar");
assertSDP("http://b:80@foo.com/bar","http://b:80@foo.com/bar");
assertSDP("http://b:80@foo.com/bar","http://b:80@foo.com:80/bar");
assertSDP("http://b:80@foo.com:8080/ba","http://b:80@foo.com:8080/ba");
assertSDP("http://www.flickr.com/photos/36050182@N05/","http://www.flickr.com/photos/36050182@N05/");
}
private void assertSDP(String want, String orig) {
String got = UrlOperations.stripDefaultPortFromUrl(orig);
assertEquals(want,got);
}
}