package org.mapfish.print.processor.http.matcher;
import org.apache.http.auth.AuthScope;
import org.junit.Test;
import org.springframework.http.HttpMethod;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.SocketException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import static org.junit.Assert.assertTrue;
import static org.mapfish.print.processor.http.matcher.MatcherTestUtils.assertMatch;
public class LocalHostMatcherTest {
private final LocalHostMatcher localHostMatcher = new LocalHostMatcher();
@Test
public void testAccepts() throws Exception {
final InetAddress[] localhosts = InetAddress.getAllByName("localhost");
for (InetAddress localhost : localhosts) {
assertMatch(localHostMatcher, true, new URI("http://" + localhost.getHostName()), HttpMethod.GET);
assertMatch(localHostMatcher, true, new URI("https://" + localhost.getHostName()), HttpMethod.GET);
assertMatch(localHostMatcher, true, new URI("https://" + localhost.getHostName()), HttpMethod.POST);
assertMatch(localHostMatcher, true, new URI("http://" + localhost.getHostName()), HttpMethod.POST);
assertMatch(localHostMatcher, true, new URI("http://" + localhost.getHostName()), HttpMethod.HEAD);
assertMatch(localHostMatcher, true, new URI("http://" + localhost.getHostName() + "/print/create"), HttpMethod.GET);
assertMatch(localHostMatcher, true, new URI("http://" + localhost.getHostName() + ":8080"), HttpMethod.GET);
}
assertTrue(localHostMatcher.matches(MatchInfo.fromAuthScope(
new AuthScope(AuthScope.ANY_HOST, 80, AuthScope.ANY_REALM, "http"))));
assertTrue(localHostMatcher.matches(MatchInfo.fromAuthScope(
new AuthScope("127.0.0.1", AuthScope.ANY_PORT, AuthScope.ANY_REALM, "http"))));
assertTrue(localHostMatcher.matches(MatchInfo.fromAuthScope(
new AuthScope("127.0.0.1", 80, AuthScope.ANY_REALM, AuthScope.ANY_SCHEME))));
assertMatch(localHostMatcher, false, new URI("http://www.camptocamp.com/"), HttpMethod.GET);
localHostMatcher.setPort(8080);
for (InetAddress localhost : localhosts) {
assertMatch(localHostMatcher, true, new URI("http://"+localhost.getHostName() + ":8080"), HttpMethod.GET);
assertMatch(localHostMatcher, false, new URI("http://"+localhost.getHostName()), HttpMethod.GET);
}
assertMatch(localHostMatcher, false, new URI("http://www.camptocamp.com:8080/"), HttpMethod.GET);
localHostMatcher.setPort(-1);
localHostMatcher.setPathRegex("/print/.+");
for (InetAddress localhost : localhosts) {
assertMatch(localHostMatcher, true, new URI("http://"+localhost.getHostName() + "/print/create"), HttpMethod.GET);
assertMatch(localHostMatcher, false, new URI("http://"+localhost.getHostName() + "/printing/create"), HttpMethod.GET);
}
assertMatch(localHostMatcher, false, new URI("http://www.camptocamp.com/print/create"), HttpMethod.GET);
}
@Test
public void testLoopback() throws URISyntaxException, SocketException, UnknownHostException, MalformedURLException {
assertMatch(localHostMatcher, true, new URI("http://127.0.0.1/"), HttpMethod.GET);
assertMatch(localHostMatcher, true, new URI("http://127.36.0.0/"), HttpMethod.GET);
assertMatch(localHostMatcher, false, new URI("http://128.0.0.0/"), HttpMethod.GET);
}
}