From 020aff116095c4a2d5546948ce617d5eeb1f71e6 Mon Sep 17 00:00:00 2001 From: Roque Santos Date: Wed, 27 May 2020 21:32:31 -0300 Subject: [PATCH 1/4] BAEL-3844 : Send request to a proxy using RestTemplate --- .../proxy/RequestFactoryLiveTest.java | 38 +++++++++++++ .../proxy/RestTemplateCustomizerLiveTest.java | 55 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java create mode 100644 spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java new file mode 100644 index 0000000000..f9ca66f14d --- /dev/null +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java @@ -0,0 +1,38 @@ +package com.baeldung.resttemplate.proxy; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.Proxy.Type; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +public class RequestFactoryLiveTest { + + RestTemplate restTemplate; + + @Before + public void setUp() { + Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("201.91.82.155", 3128)); + + SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); + requestFactory.setProxy(proxy); + + restTemplate = new RestTemplate(requestFactory); + } + + @Test + public void givenRestTemplate_whenRequestedWithProxy_thenResponseBodyIsOk() { + ResponseEntity responseEntity = restTemplate.getForEntity("http://httpbin.org/get", String.class); + + assertThat(responseEntity.getStatusCode(), is(equalTo(HttpStatus.OK))); + } +} diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java new file mode 100644 index 0000000000..8f318b758b --- /dev/null +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java @@ -0,0 +1,55 @@ +package com.baeldung.resttemplate.proxy; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import org.apache.http.HttpException; +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.client.HttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.conn.DefaultProxyRoutePlanner; +import org.apache.http.protocol.HttpContext; +import org.junit.Before; +import org.junit.Test; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.boot.web.client.RestTemplateCustomizer; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +public class RestTemplateCustomizerLiveTest { + + RestTemplate restTemplate; + + @Before + public void setUp() { + restTemplate = new RestTemplateBuilder(new ProxyCustomizer()).build(); + } + + @Test + public void givenRestTemplate_whenRequestedWithProxy_thenResponseBodyIsOk() { + ResponseEntity responseEntity = restTemplate.getForEntity("http://httpbin.org/get", String.class); + + assertThat(responseEntity.getStatusCode(), is(equalTo(HttpStatus.OK))); + } + + private static class ProxyCustomizer implements RestTemplateCustomizer { + + @Override + public void customize(RestTemplate restTemplate) { + HttpHost proxy = new HttpHost("201.91.82.155", 3128); + HttpClient httpClient = HttpClientBuilder.create() + .setRoutePlanner(new DefaultProxyRoutePlanner(proxy) { + @Override + public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context) throws HttpException { + return super.determineProxy(target, request, context); + } + }) + .build(); + restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)); + } + } +} From 0d2076f299bf28c919e5640e15c8359d3d134e75 Mon Sep 17 00:00:00 2001 From: Roque Santos Date: Wed, 3 Jun 2020 19:51:49 -0300 Subject: [PATCH 2/4] BAEL-3844 - Suggested adjustements --- ...estFactoryLiveTest.java => RequestFactoryUnitTest.java} | 7 +++++-- ...erLiveTest.java => RestTemplateCustomizerUnitTest.java} | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) rename spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/{RequestFactoryLiveTest.java => RequestFactoryUnitTest.java} (85%) rename spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/{RestTemplateCustomizerLiveTest.java => RestTemplateCustomizerUnitTest.java} (89%) diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryUnitTest.java similarity index 85% rename from spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java rename to spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryUnitTest.java index f9ca66f14d..6959aa8d47 100644 --- a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryUnitTest.java @@ -15,13 +15,16 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; -public class RequestFactoryLiveTest { +public class RequestFactoryUnitTest { + + private static final String PROXY_SERVER_HOST = "127.0.0.1"; + private static final int PROXY_SERVER_PORT = 8080; RestTemplate restTemplate; @Before public void setUp() { - Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("201.91.82.155", 3128)); + Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress(PROXY_SERVER_HOST, PROXY_SERVER_PORT)); SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); requestFactory.setProxy(proxy); diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerUnitTest.java similarity index 89% rename from spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java rename to spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerUnitTest.java index 8f318b758b..b35283bdcf 100644 --- a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerUnitTest.java @@ -20,7 +20,10 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; -public class RestTemplateCustomizerLiveTest { +public class RestTemplateCustomizerUnitTest { + + private static final String PROXY_SERVER_HOST = "127.0.0.1"; + private static final int PROXY_SERVER_PORT = 8080; RestTemplate restTemplate; @@ -40,7 +43,7 @@ public class RestTemplateCustomizerLiveTest { @Override public void customize(RestTemplate restTemplate) { - HttpHost proxy = new HttpHost("201.91.82.155", 3128); + HttpHost proxy = new HttpHost(PROXY_SERVER_HOST, PROXY_SERVER_PORT); HttpClient httpClient = HttpClientBuilder.create() .setRoutePlanner(new DefaultProxyRoutePlanner(proxy) { @Override From 6e9f4d80a5ab19fd6572c4dda3ce78675fd9110e Mon Sep 17 00:00:00 2001 From: Roque Santos Date: Wed, 3 Jun 2020 19:58:40 -0300 Subject: [PATCH 3/4] BAEL-3844 : Back to LiveTest to bypass te CI build since the proxy address is dynamic --- ...{RequestFactoryUnitTest.java => RequestFactoryLiveTest.java} | 2 +- ...tomizerUnitTest.java => RestTemplateCustomizerLiveTest.java} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/{RequestFactoryUnitTest.java => RequestFactoryLiveTest.java} (97%) rename spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/{RestTemplateCustomizerUnitTest.java => RestTemplateCustomizerLiveTest.java} (98%) diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryUnitTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java similarity index 97% rename from spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryUnitTest.java rename to spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java index 6959aa8d47..8c13bef05f 100644 --- a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryUnitTest.java +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java @@ -15,7 +15,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; -public class RequestFactoryUnitTest { +public class RequestFactoryLiveTest { private static final String PROXY_SERVER_HOST = "127.0.0.1"; private static final int PROXY_SERVER_PORT = 8080; diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerUnitTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java similarity index 98% rename from spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerUnitTest.java rename to spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java index b35283bdcf..547428ec9f 100644 --- a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerUnitTest.java +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java @@ -20,7 +20,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; -public class RestTemplateCustomizerUnitTest { +public class RestTemplateCustomizerLiveTest { private static final String PROXY_SERVER_HOST = "127.0.0.1"; private static final int PROXY_SERVER_PORT = 8080; From e4d59f4874bfd432a894f6e98fc70dd847cf3f79 Mon Sep 17 00:00:00 2001 From: Roque Santos Date: Thu, 4 Jun 2020 02:23:10 -0300 Subject: [PATCH 4/4] BAEL-3844 : Documenting the LiveTests using JavaDoc. --- .../resttemplate/proxy/RequestFactoryLiveTest.java | 9 +++++++++ .../proxy/RestTemplateCustomizerLiveTest.java | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java index 8c13bef05f..93949e52a3 100644 --- a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RequestFactoryLiveTest.java @@ -15,6 +15,15 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; +/** + * This class is used to test a request using {@link RestTemplate} with {@link Proxy} + * using a {@link SimpleClientHttpRequestFactory} as configuration. + *
+ *
+ * + * Before running the test we should change the PROXY_SERVER_HOST + * and PROXY_SERVER_PORT constants in our class to match our preferred proxy configuration. + */ public class RequestFactoryLiveTest { private static final String PROXY_SERVER_HOST = "127.0.0.1"; diff --git a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java index 547428ec9f..faeb49537a 100644 --- a/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java +++ b/spring-resttemplate/src/test/java/com/baeldung/resttemplate/proxy/RestTemplateCustomizerLiveTest.java @@ -4,6 +4,8 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; +import java.net.Proxy; + import org.apache.http.HttpException; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; @@ -20,6 +22,15 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; +/** + * This class is used to test a request using {@link RestTemplate} with {@link Proxy} + * using a {@link RestTemplateCustomizer} as configuration. + *
+ *
+ * + * Before running the test we should change the PROXY_SERVER_HOST + * and PROXY_SERVER_PORT constants in our class to match our preferred proxy configuration. + */ public class RestTemplateCustomizerLiveTest { private static final String PROXY_SERVER_HOST = "127.0.0.1";