package org.mapfish.print.processor.http; import org.springframework.http.HttpMethod; import org.springframework.http.client.ClientHttpRequest; import org.springframework.test.context.ContextConfiguration; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import javax.annotation.Nullable; import static org.junit.Assert.assertEquals; @ContextConfiguration(locations = { "classpath:org/mapfish/print/processor/http/use-http-for-https/add-custom-processor-application-context.xml" }) public class UseHttpForHttpsProcessorTest extends AbstractHttpProcessorTest { @Override protected String baseDir() { return "use-http-for-https"; } @Override protected Class<TestProcessor> testProcessorClass() { return TestProcessor.class; } @Override protected Class<? extends AbstractClientHttpRequestFactoryProcessor> classUnderTest() { return UseHttpForHttpsProcessor.class; } public static class TestProcessor extends AbstractTestProcessor { String userinfo = "user:pass"; String host = "localhost"; String path = "path"; String query = "query"; String fragment = "fragment"; @Nullable @Override public Void execute(TestParam values, ExecutionContext context) throws Exception { testDefinedPortMapping(values); testImplicitPortMapping(values); testUriWithOnlyAuthoritySegment(values); testHttp(values); return null; } private void testUriWithOnlyAuthoritySegment(TestParam values) throws URISyntaxException, IOException { String authHost = "center_wmts_fixedscale.com"; URI uri = new URI("https://" + userinfo + "@" + authHost + ":8443/" + path); ClientHttpRequest request = values.clientHttpRequestFactoryProvider.get().createRequest(uri, HttpMethod.GET); assertEquals("http", request.getURI().getScheme()); assertEquals(userinfo + "@" + authHost + ":9999", request.getURI().getAuthority()); assertEquals("/" + path, request.getURI().getPath()); uri = new URI("https://" + authHost + ":8443/" + path); request = values.clientHttpRequestFactoryProvider.get().createRequest(uri, HttpMethod.GET); assertEquals("http", request.getURI().getScheme()); assertEquals(authHost + ":9999", request.getURI().getAuthority()); uri = new URI("https://" + authHost + "/" + path); request = values.clientHttpRequestFactoryProvider.get().createRequest(uri, HttpMethod.GET); assertEquals("http", request.getURI().getScheme()); assertEquals(authHost, request.getURI().getAuthority()); uri = new URI("https://" + userinfo + "@" + authHost + "/" + path); request = values.clientHttpRequestFactoryProvider.get().createRequest(uri, HttpMethod.GET); assertEquals("http", request.getURI().getScheme()); assertEquals(userinfo + "@" + authHost, request.getURI().getAuthority()); } private void testHttp(TestParam values) throws URISyntaxException, IOException { String uriString = String.format("http://%s@%s:9999/%s?%s#%s", userinfo, host, path, query, fragment); final ClientHttpRequest request = values.clientHttpRequestFactoryProvider.get().createRequest(new URI(uriString), HttpMethod.GET); assertEquals("http", request.getURI().getScheme()); assertEquals(userinfo, request.getURI().getUserInfo()); assertEquals(host, request.getURI().getHost()); assertEquals(9999, request.getURI().getPort()); assertEquals("/" + path, request.getURI().getPath()); assertEquals(query, request.getURI().getQuery()); assertEquals(fragment, request.getURI().getFragment()); } private void testDefinedPortMapping(TestParam values) throws IOException, URISyntaxException { String uriString = String.format("https://%s@%s:8443/%s?%s#%s", userinfo, host, path, query, fragment); final ClientHttpRequest request = values.clientHttpRequestFactoryProvider.get().createRequest(new URI(uriString), HttpMethod.GET); assertEquals("http", request.getURI().getScheme()); assertEquals(userinfo, request.getURI().getUserInfo()); assertEquals(host, request.getURI().getHost()); assertEquals(9999, request.getURI().getPort()); assertEquals("/" + path, request.getURI().getPath()); assertEquals(query, request.getURI().getQuery()); assertEquals(fragment, request.getURI().getFragment()); } private void testImplicitPortMapping(TestParam values) throws IOException, URISyntaxException { String uriString = String.format("https://%s@%s/%s?%s#%s", userinfo, host, path, query, fragment); final ClientHttpRequest request = values.clientHttpRequestFactoryProvider.get().createRequest(new URI(uriString), HttpMethod.GET); assertEquals("http", request.getURI().getScheme()); assertEquals(userinfo, request.getURI().getUserInfo()); assertEquals(host, request.getURI().getHost()); assertEquals(-1, request.getURI().getPort()); assertEquals("/" + path, request.getURI().getPath()); assertEquals(query, request.getURI().getQuery()); assertEquals(fragment, request.getURI().getFragment()); } } }