|
|
|
@ -1,7 +1,6 @@
@@ -1,7 +1,6 @@
|
|
|
|
|
package org.springframework.cloud.netflix.zuul; |
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
|
|
|
|
|
|
import org.junit.Before; |
|
|
|
|
import org.junit.Test; |
|
|
|
|
import org.junit.runner.RunWith; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
@ -35,43 +34,50 @@ import org.springframework.web.bind.annotation.RestController;
@@ -35,43 +34,50 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
import com.netflix.loadbalancer.Server; |
|
|
|
|
import com.netflix.loadbalancer.ServerList; |
|
|
|
|
import com.netflix.zuul.ZuulFilter; |
|
|
|
|
import com.netflix.zuul.context.RequestContext; |
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
|
|
|
|
|
|
@RunWith(SpringJUnit4ClassRunner.class) |
|
|
|
|
@SpringApplicationConfiguration(classes = RetryableZuulProxyApplication.class) |
|
|
|
|
@WebAppConfiguration |
|
|
|
|
@IntegrationTest({ "server.port: 0", |
|
|
|
|
"zuul.routes.simple.path: /simple/**", |
|
|
|
|
"zuul.routes.simple.retryable: true", |
|
|
|
|
"ribbon.OkToRetryOnAllOperations: true" |
|
|
|
|
}) |
|
|
|
|
@IntegrationTest({ "server.port: 0", "zuul.routes.simple.path: /simple/**", |
|
|
|
|
"zuul.routes.simple.retryable: true", "ribbon.OkToRetryOnAllOperations: true" }) |
|
|
|
|
@DirtiesContext |
|
|
|
|
public class RetryableZuulProxyApplicationTests { |
|
|
|
|
|
|
|
|
|
@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 postWithForm() { |
|
|
|
|
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>(); |
|
|
|
|
form.set("foo", "bar"); |
|
|
|
|
HttpHeaders headers = new HttpHeaders(); |
|
|
|
|
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
|
|
|
|
ResponseEntity<String> result = new TestRestTemplate().exchange( |
|
|
|
|
"http://localhost:" + port + "/simple", HttpMethod.POST, |
|
|
|
|
new HttpEntity<MultiValueMap<String,String>>(form, headers), String.class); |
|
|
|
|
assertEquals(HttpStatus.OK, result.getStatusCode()); |
|
|
|
|
assertEquals("Posted! {foo=[bar]}", result.getBody()); |
|
|
|
|
} |
|
|
|
|
@Before |
|
|
|
|
public void setTestRequestcontext() { |
|
|
|
|
RequestContext context = new RequestContext(); |
|
|
|
|
RequestContext.testSetCurrentContext(context); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void postWithForm() { |
|
|
|
|
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>(); |
|
|
|
|
form.set("foo", "bar"); |
|
|
|
|
HttpHeaders headers = new HttpHeaders(); |
|
|
|
|
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
|
|
|
|
ResponseEntity<String> result = new TestRestTemplate().exchange( |
|
|
|
|
"http://localhost:" + this.port + "/simple", HttpMethod.POST, |
|
|
|
|
new HttpEntity<MultiValueMap<String, String>>(form, headers), |
|
|
|
|
String.class); |
|
|
|
|
assertEquals(HttpStatus.OK, result.getStatusCode()); |
|
|
|
|
assertEquals("Posted! {foo=[bar]}", result.getBody()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Don't use @SpringBootApplication because we don't want to component scan
|
|
|
|
|
// Don't use @SpringBootApplication because we don't want to component scan
|
|
|
|
|
@Configuration |
|
|
|
|
@EnableAutoConfiguration |
|
|
|
|
@RestController |
|
|
|
@ -79,43 +85,43 @@ public class RetryableZuulProxyApplicationTests {
@@ -79,43 +85,43 @@ public class RetryableZuulProxyApplicationTests {
|
|
|
|
|
@RibbonClient(name = "simple", configuration = RetryableRibbonClientConfiguration.class) |
|
|
|
|
class RetryableZuulProxyApplication { |
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/", method = RequestMethod.POST) |
|
|
|
|
public String delete(@RequestBody MultiValueMap<String, String> form) { |
|
|
|
|
return "Posted! " + form; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public ZuulFilter sampleFilter() { |
|
|
|
|
return new ZuulFilter() { |
|
|
|
|
@Override |
|
|
|
|
public String filterType() { |
|
|
|
|
return "pre"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean shouldFilter() { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object run() { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public int filterOrder() { |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
|
SpringApplication.run(SampleZuulProxyApplication.class, args); |
|
|
|
|
} |
|
|
|
|
@RequestMapping(value = "/", method = RequestMethod.POST) |
|
|
|
|
public String delete(@RequestBody MultiValueMap<String, String> form) { |
|
|
|
|
return "Posted! " + form; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public ZuulFilter sampleFilter() { |
|
|
|
|
return new ZuulFilter() { |
|
|
|
|
@Override |
|
|
|
|
public String filterType() { |
|
|
|
|
return "pre"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean shouldFilter() { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object run() { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public int filterOrder() { |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
|
SpringApplication.run(SampleZuulProxyApplication.class, args); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Load balancer with fixed server list for "simple" pointing to localhost
|
|
|
|
|
// Load balancer with fixed server list for "simple" pointing to localhost
|
|
|
|
|
@Configuration |
|
|
|
|
class RetryableRibbonClientConfiguration { |
|
|
|
|
|
|
|
|
@ -124,9 +130,7 @@ class RetryableRibbonClientConfiguration {
@@ -124,9 +130,7 @@ class RetryableRibbonClientConfiguration {
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
public ServerList<Server> ribbonServerList() { |
|
|
|
|
return new StaticServerList<>( |
|
|
|
|
new Server("localhost", port), |
|
|
|
|
new Server("failed-localhost", port) |
|
|
|
|
); |
|
|
|
|
return new StaticServerList<>(new Server("localhost", this.port), |
|
|
|
|
new Server("failed-localhost", this.port)); |
|
|
|
|
} |
|
|
|
|
} |