diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java index a9b7b519..7e34225d 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/AdhocTestSuite.java @@ -20,7 +20,9 @@ import org.junit.Ignore; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; -import org.springframework.cloud.netflix.feign.valid.FeignHttpClientTests; +import org.springframework.cloud.netflix.zuul.filters.CustomHostRoutingFilterTests; +import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelperTests; +import org.springframework.cloud.netflix.zuul.filters.discovery.DiscoveryClientRouteLocatorTests; /** * A test suite for probing weird ordering problems in the tests. @@ -28,7 +30,8 @@ import org.springframework.cloud.netflix.feign.valid.FeignHttpClientTests; * @author Dave Syer */ @RunWith(Suite.class) -@SuiteClasses({ FeignHttpClientTests.class }) +@SuiteClasses({ DiscoveryClientRouteLocatorTests.class, + CustomHostRoutingFilterTests.class, ProxyRequestHelperTests.class }) @Ignore public class AdhocTestSuite { diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/CustomHostRoutingFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/CustomHostRoutingFilterTests.java index c4e407b6..2dd5f566 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/CustomHostRoutingFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/CustomHostRoutingFilterTests.java @@ -1,10 +1,14 @@ package org.springframework.cloud.netflix.zuul.filters; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,8 +41,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import com.netflix.zuul.context.RequestContext; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; @@ -47,92 +50,98 @@ import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SampleCustomZuulProxyApplication.class) @WebAppConfiguration -@IntegrationTest({"server.port: 0", "server.contextPath: /app"}) +@IntegrationTest({ "server.port: 0", "server.contextPath: /app" }) @DirtiesContext public class CustomHostRoutingFilterTests { - @Value("${local.server.port}") - private int port; + @Value("${local.server.port}") + private int port; - @Autowired - private DiscoveryClientRouteLocator routes; + @Autowired + private DiscoveryClientRouteLocator routes; - @Autowired - private RoutesEndpoint endpoint; + @Autowired + private RoutesEndpoint endpoint; - @Test - public void getOnSelfViaCustomHostRoutingFilter() { - this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); - this.endpoint.reset(); - ResponseEntity result = new TestRestTemplate().getForEntity( - "http://localhost:" + this.port + "/app/self/get/1", String.class); - assertEquals(HttpStatus.OK, result.getStatusCode()); - assertEquals("Get 1", result.getBody()); - } + @Before + public void setTestRequestcontext() { + RequestContext context = new RequestContext(); + RequestContext.testSetCurrentContext(context); + } - @Test - public void postOnSelfViaCustomHostRoutingFilter() { - this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); - this.endpoint.reset(); - MultiValueMap params = new LinkedMultiValueMap<>(); - params.add("id", "2"); - ResponseEntity result = new TestRestTemplate().postForEntity( - "http://localhost:" + this.port + "/app/self/post", params, String.class); - assertEquals(HttpStatus.OK, result.getStatusCode()); - assertEquals("Post 2", result.getBody()); - } + @Test + public void getOnSelfViaCustomHostRoutingFilter() { + this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); + this.endpoint.reset(); + ResponseEntity result = new TestRestTemplate().getForEntity( + "http://localhost:" + this.port + "/app/self/get/1", String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals("Get 1", result.getBody()); + } - @Test - public void putOnSelfViaCustomHostRoutingFilter() { - this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); - this.endpoint.reset(); - ResponseEntity result = new TestRestTemplate().exchange( - "http://localhost:" + this.port + "/app/self/put/3", HttpMethod.PUT, - new HttpEntity<>((Void) null), String.class); - assertEquals(HttpStatus.OK, result.getStatusCode()); - assertEquals("Put 3", result.getBody()); - } + @Test + public void postOnSelfViaCustomHostRoutingFilter() { + this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); + this.endpoint.reset(); + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("id", "2"); + ResponseEntity result = new TestRestTemplate().postForEntity( + "http://localhost:" + this.port + "/app/self/post", params, String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals("Post 2", result.getBody()); + } - @Test - public void patchOnSelfViaCustomHostRoutingFilter() { - this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); - this.endpoint.reset(); - MultiValueMap params = new LinkedMultiValueMap<>(); - params.add("patch", "5"); - ResponseEntity result = new TestRestTemplate().exchange( - "http://localhost:" + this.port + "/app/self/patch/4", HttpMethod.PATCH, - new HttpEntity<>(params), String.class); - assertEquals(HttpStatus.OK, result.getStatusCode()); - assertEquals("Patch 45", result.getBody()); - } + @Test + public void putOnSelfViaCustomHostRoutingFilter() { + this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); + this.endpoint.reset(); + ResponseEntity result = new TestRestTemplate().exchange( + "http://localhost:" + this.port + "/app/self/put/3", HttpMethod.PUT, + new HttpEntity<>((Void) null), String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals("Put 3", result.getBody()); + } - @Test - public void getOnSelfIgnoredHeaders() { - this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); - this.endpoint.reset(); - ResponseEntity result = new TestRestTemplate().getForEntity( - "http://localhost:" + this.port + "/app/self/get/1", String.class); - assertEquals(HttpStatus.OK, result.getStatusCode()); - assertTrue(result.getHeaders().containsKey("X-NotIgnored")); - assertFalse(result.getHeaders().containsKey("X-Ignored")); - } + @Test + public void patchOnSelfViaCustomHostRoutingFilter() { + this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); + this.endpoint.reset(); + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("patch", "5"); + ResponseEntity result = new TestRestTemplate().exchange( + "http://localhost:" + this.port + "/app/self/patch/4", HttpMethod.PATCH, + new HttpEntity<>(params), String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals("Patch 45", result.getBody()); + } - @Test - public void getOnSelfWithSessionCookie() { - this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); - this.endpoint.reset(); + @Test + public void getOnSelfIgnoredHeaders() { + this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); + this.endpoint.reset(); + ResponseEntity result = new TestRestTemplate().getForEntity( + "http://localhost:" + this.port + "/app/self/get/1", String.class); + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertTrue(result.getHeaders().containsKey("X-NotIgnored")); + assertFalse(result.getHeaders().containsKey("X-Ignored")); + } - RestTemplate restTemplate = new RestTemplate(); + @Test + public void getOnSelfWithSessionCookie() { + this.routes.addRoute("/self/**", "http://localhost:" + this.port + "/app"); + this.endpoint.reset(); - ResponseEntity result1 = restTemplate.getForEntity( - "http://localhost:" + this.port + "/app/self/cookie/1", String.class); + RestTemplate restTemplate = new RestTemplate(); - ResponseEntity result2 = restTemplate.getForEntity( - "http://localhost:" + this.port + "/app/self/cookie/2", String.class); + ResponseEntity result1 = restTemplate.getForEntity( + "http://localhost:" + this.port + "/app/self/cookie/1", String.class); - assertEquals("SetCookie 1", result1.getBody()); - assertEquals("GetCookie 1", result2.getBody()); - } + ResponseEntity result2 = restTemplate.getForEntity( + "http://localhost:" + this.port + "/app/self/cookie/2", String.class); + + assertEquals("SetCookie 1", result1.getBody()); + assertEquals("GetCookie 1", result2.getBody()); + } } @@ -141,72 +150,71 @@ public class CustomHostRoutingFilterTests { @RestController class SampleCustomZuulProxyApplication { - @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) - public String get(@PathVariable String id, HttpServletResponse response) { - response.setHeader("X-Ignored", "foo"); - response.setHeader("X-NotIgnored", "bar"); - return "Get " + id; - } + @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) + public String get(@PathVariable String id, HttpServletResponse response) { + response.setHeader("X-Ignored", "foo"); + response.setHeader("X-NotIgnored", "bar"); + return "Get " + id; + } - @RequestMapping(value = "/cookie/{id}", method = RequestMethod.GET) - public String getWithCookie(@PathVariable String id, HttpSession session) { - Object testCookie = session.getAttribute("testCookie"); - if (testCookie != null) { - return "GetCookie " + testCookie; - } - session.setAttribute("testCookie", id); - return "SetCookie " + id; - } + @RequestMapping(value = "/cookie/{id}", method = RequestMethod.GET) + public String getWithCookie(@PathVariable String id, HttpSession session) { + Object testCookie = session.getAttribute("testCookie"); + if (testCookie != null) { + return "GetCookie " + testCookie; + } + session.setAttribute("testCookie", id); + return "SetCookie " + id; + } - @RequestMapping(value = "/post", method = RequestMethod.POST) - public String post(@RequestParam("id") String id) { - return "Post " + id; - } + @RequestMapping(value = "/post", method = RequestMethod.POST) + public String post(@RequestParam("id") String id) { + return "Post " + id; + } - @RequestMapping(value = "/put/{id}", method = RequestMethod.PUT) - public String put(@PathVariable String id) { - return "Put " + id; - } + @RequestMapping(value = "/put/{id}", method = RequestMethod.PUT) + public String put(@PathVariable String id) { + return "Put " + id; + } - @RequestMapping(value = "/patch/{id}", method = RequestMethod.PATCH) - public String patch(@PathVariable String id, @RequestParam("patch") String patch) { - return "Patch " + id + patch; - } + @RequestMapping(value = "/patch/{id}", method = RequestMethod.PATCH) + public String patch(@PathVariable String id, @RequestParam("patch") String patch) { + return "Patch " + id + patch; + } - public static void main(String[] args) { - SpringApplication.run(SampleCustomZuulProxyApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(SampleCustomZuulProxyApplication.class, args); + } - @Configuration - @EnableZuulProxy - protected static class CustomZuulProxyConfig extends ZuulProxyConfiguration { - @Bean - @Override - public SimpleHostRoutingFilter simpleHostRoutingFilter() { - return new CustomHostRoutingFilter(); - } + @Configuration + @EnableZuulProxy + protected static class CustomZuulProxyConfig extends ZuulProxyConfiguration { + @Bean + @Override + public SimpleHostRoutingFilter simpleHostRoutingFilter() { + return new CustomHostRoutingFilter(); + } - private class CustomHostRoutingFilter extends SimpleHostRoutingFilter { + private class CustomHostRoutingFilter extends SimpleHostRoutingFilter { - @Override - public Object run() { - super.addIgnoredHeaders("X-Ignored"); - return super.run(); - } + @Override + public Object run() { + super.addIgnoredHeaders("X-Ignored"); + return super.run(); + } - @Override - protected CloseableHttpClient newClient() { - // Custom client with cookie support. - // In practice, we would want a custom cookie store using a multimap with a user key. - return HttpClients.custom() - .setConnectionManager(newConnectionManager()) - .setDefaultCookieStore(new BasicCookieStore()) - .setDefaultRequestConfig(RequestConfig.custom() - .setCookieSpec(CookieSpecs.DEFAULT) - .build()) - .build(); - } - } - } + @Override + protected CloseableHttpClient newClient() { + // Custom client with cookie support. + // In practice, we would want a custom cookie store using a multimap with + // a user key. + return HttpClients.custom().setConnectionManager(newConnectionManager()) + .setDefaultCookieStore(new BasicCookieStore()) + .setDefaultRequestConfig(RequestConfig.custom() + .setCookieSpec(CookieSpecs.DEFAULT).build()) + .build(); + } + } + } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java index d79f64e1..0bd3d9d8 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/ProxyRequestHelperTests.java @@ -56,6 +56,12 @@ public class ProxyRequestHelperTests { initMocks(this); } + @Before + public void setTestRequestcontext() { + RequestContext context = new RequestContext(); + RequestContext.testSetCurrentContext(context); + } + @Test public void debug() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest("POST", "/"); @@ -130,10 +136,7 @@ public class ProxyRequestHelperTests { MultiValueMap headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_ENCODING.toLowerCase(), "gzip"); - helper.setResponse( - 200, - request.getInputStream(), - headers); + helper.setResponse(200, request.getInputStream(), headers); assertTrue(context.getResponseGZipped()); } @@ -151,10 +154,7 @@ public class ProxyRequestHelperTests { MultiValueMap headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_ENCODING, "gzip"); - helper.setResponse( - 200, - request.getInputStream(), - headers); + helper.setResponse(200, request.getInputStream(), headers); assertTrue(context.getResponseGZipped()); } } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java index 227c95d3..f8162353 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/discovery/DiscoveryClientRouteLocatorTests.java @@ -66,7 +66,7 @@ public class DiscoveryClientRouteLocatorTests { @Before public void init() { initMocks(this); - setTestRequestcontext(); //re-initialize Zuul context for each test + setTestRequestcontext(); // re-initialize Zuul context for each test } @Test @@ -96,8 +96,9 @@ public class DiscoveryClientRouteLocatorTests { @Test public void testGetMatchingPathWithServletPath() throws Exception { - setTestRequestcontext(); - RequestContext.getCurrentContext().set(RequestUtils.IS_DISPATCHERSERVLETREQUEST, true); + setTestRequestcontext(); + RequestContext.getCurrentContext().set(RequestUtils.IS_DISPATCHERSERVLETREQUEST, + true); DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/app", this.discovery, this.properties); this.properties.getRoutes().put("foo", new ZuulRoute("/foo/**")); @@ -107,20 +108,20 @@ public class DiscoveryClientRouteLocatorTests { assertEquals("foo", route.getLocation()); assertEquals("/1", route.getPath()); } - - @Test - public void testGetMatchingPathWithZuulServletPath() throws Exception { - RequestContext.getCurrentContext().setZuulEngineRan(); - DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/app", - this.discovery, this.properties); - this.properties.getRoutes().put("foo", new ZuulRoute("/foo/**")); - this.properties.init(); - routeLocator.getRoutes(); // force refresh - Route route = routeLocator.getMatchingRoute("/zuul/foo/1"); - assertEquals("foo", route.getLocation()); - assertEquals("/1", route.getPath()); - - } + + @Test + public void testGetMatchingPathWithZuulServletPath() throws Exception { + RequestContext.getCurrentContext().setZuulEngineRan(); + DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/app", + this.discovery, this.properties); + this.properties.getRoutes().put("foo", new ZuulRoute("/foo/**")); + this.properties.init(); + routeLocator.getRoutes(); // force refresh + Route route = routeLocator.getMatchingRoute("/zuul/foo/1"); + assertEquals("foo", route.getLocation()); + assertEquals("/1", route.getPath()); + + } @Test public void testGetMatchingPathWithNoPrefixStripping() throws Exception { @@ -161,10 +162,12 @@ public class DiscoveryClientRouteLocatorTests { assertEquals("foo", route.getLocation()); assertEquals("/foo/1", route.getPath()); } - + @Test - public void testGetMatchingPathWithGlobalPrefixStrippingAndServletPath() throws Exception { - RequestContext.getCurrentContext().set(RequestUtils.IS_DISPATCHERSERVLETREQUEST, true); + public void testGetMatchingPathWithGlobalPrefixStrippingAndServletPath() + throws Exception { + RequestContext.getCurrentContext().set(RequestUtils.IS_DISPATCHERSERVLETREQUEST, + true); DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/app", this.discovery, this.properties); this.properties.getRoutes().put("foo", @@ -174,10 +177,11 @@ public class DiscoveryClientRouteLocatorTests { Route route = routeLocator.getMatchingRoute("/app/proxy/foo/1"); assertEquals("foo", route.getLocation()); assertEquals("/foo/1", route.getPath()); - } - + } + @Test - public void testGetMatchingPathWithGlobalPrefixStrippingAndZuulServletPath() throws Exception { + public void testGetMatchingPathWithGlobalPrefixStrippingAndZuulServletPath() + throws Exception { RequestContext.getCurrentContext().setZuulEngineRan(); DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/", this.discovery, this.properties); @@ -188,7 +192,7 @@ public class DiscoveryClientRouteLocatorTests { Route route = routeLocator.getMatchingRoute("/zuul/proxy/foo/1"); assertEquals("foo", route.getLocation()); assertEquals("/foo/1", route.getPath()); - } + } @Test public void testGetMatchingPathWithRoutePrefixStripping() throws Exception { @@ -644,10 +648,10 @@ public class DiscoveryClientRouteLocatorTests { } return null; } - + private void setTestRequestcontext() { - RequestContext context = new RequestContext(); - RequestContext.testSetCurrentContext(context); - + RequestContext context = new RequestContext(); + RequestContext.testSetCurrentContext(context); + } }