diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java index b2f71704..28b3687d 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java @@ -137,8 +137,7 @@ public class ProxyExchange { /** * Contains headers that are considered case-sensitive by default. */ - public static Set DEFAULT_SENSITIVE = new HashSet<>( - Arrays.asList("cookie", "authorization")); + public static Set DEFAULT_SENSITIVE = new HashSet<>(Arrays.asList("cookie", "authorization")); private URI uri; @@ -160,16 +159,14 @@ public class ProxyExchange { private Type responseType; - public ProxyExchange(RestTemplate rest, NativeWebRequest webRequest, - ModelAndViewContainer mavContainer, WebDataBinderFactory binderFactory, - Type type) { + public ProxyExchange(RestTemplate rest, NativeWebRequest webRequest, ModelAndViewContainer mavContainer, + WebDataBinderFactory binderFactory, Type type) { this.responseType = type; this.rest = rest; this.webRequest = webRequest; this.mavContainer = mavContainer; this.binderFactory = binderFactory; - this.delegate = new RequestResponseBodyMethodProcessor( - rest.getMessageConverters()); + this.delegate = new RequestResponseBodyMethodProcessor(rest.getMessageConverters()); } /** @@ -249,28 +246,24 @@ public class ProxyExchange { } public String path() { - return (String) this.webRequest.getAttribute( - HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, + return (String) this.webRequest.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, WebRequest.SCOPE_REQUEST); } public String path(String prefix) { String path = path(); if (!path.startsWith(prefix)) { - throw new IllegalArgumentException( - "Path does not start with prefix (" + prefix + "): " + path); + throw new IllegalArgumentException("Path does not start with prefix (" + prefix + "): " + path); } return path.substring(prefix.length()); } public void forward(String path) { - HttpServletRequest request = this.webRequest - .getNativeRequest(HttpServletRequest.class); - HttpServletResponse response = this.webRequest - .getNativeResponse(HttpServletResponse.class); + HttpServletRequest request = this.webRequest.getNativeRequest(HttpServletRequest.class); + HttpServletResponse response = this.webRequest.getNativeResponse(HttpServletResponse.class); try { - request.getRequestDispatcher(path).forward( - new BodyForwardingHttpServletRequest(request, response), response); + request.getRequestDispatcher(path).forward(new BodyForwardingHttpServletRequest(request, response), + response); } catch (Exception e) { throw new IllegalStateException("Cannot forward request", e); @@ -278,79 +271,65 @@ public class ProxyExchange { } public ResponseEntity get() { - RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.get(uri)) - .build(); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.get(uri)).build(); return exchange(requestEntity); } - public ResponseEntity get( - Function, ResponseEntity> converter) { + public ResponseEntity get(Function, ResponseEntity> converter) { return converter.apply(get()); } public ResponseEntity head() { - RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.head(uri)) - .build(); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.head(uri)).build(); return exchange(requestEntity); } - public ResponseEntity head( - Function, ResponseEntity> converter) { + public ResponseEntity head(Function, ResponseEntity> converter) { return converter.apply(head()); } public ResponseEntity options() { - RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.options(uri)) - .build(); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.options(uri)).build(); return exchange(requestEntity); } - public ResponseEntity options( - Function, ResponseEntity> converter) { + public ResponseEntity options(Function, ResponseEntity> converter) { return converter.apply(options()); } public ResponseEntity post() { - RequestEntity requestEntity = headers(RequestEntity.post(uri)) - .body(body()); + RequestEntity requestEntity = headers(RequestEntity.post(uri)).body(body()); return exchange(requestEntity); } - public ResponseEntity post( - Function, ResponseEntity> converter) { + public ResponseEntity post(Function, ResponseEntity> converter) { return converter.apply(post()); } public ResponseEntity delete() { - RequestEntity requestEntity = headers( - (BodyBuilder) RequestEntity.delete(uri)).body(body()); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.delete(uri)).body(body()); return exchange(requestEntity); } - public ResponseEntity delete( - Function, ResponseEntity> converter) { + public ResponseEntity delete(Function, ResponseEntity> converter) { return converter.apply(delete()); } public ResponseEntity put() { - RequestEntity requestEntity = headers(RequestEntity.put(uri)) - .body(body()); + RequestEntity requestEntity = headers(RequestEntity.put(uri)).body(body()); return exchange(requestEntity); } - public ResponseEntity put( - Function, ResponseEntity> converter) { + public ResponseEntity put(Function, ResponseEntity> converter) { return converter.apply(put()); } public ResponseEntity patch() { - RequestEntity requestEntity = headers(RequestEntity.patch(uri)) - .body(body()); + RequestEntity requestEntity = headers(RequestEntity.patch(uri)).body(body()); return exchange(requestEntity); } - public ResponseEntity patch( - Function, ResponseEntity> converter) { + public ResponseEntity patch(Function, ResponseEntity> converter) { return converter.apply(patch()); } @@ -359,8 +338,7 @@ public class ProxyExchange { if (type instanceof TypeVariable || type instanceof WildcardType) { type = Object.class; } - return rest.exchange(requestEntity, - ParameterizedTypeReference.forType(responseType)); + return rest.exchange(requestEntity, ParameterizedTypeReference.forType(responseType)); } private BodyBuilder headers(BodyBuilder builder) { @@ -380,14 +358,13 @@ public class ProxyExchange { private void proxy() { try { - URI uri = new URI(webRequest.getNativeRequest(HttpServletRequest.class) - .getRequestURL().toString()); + URI uri = new URI(webRequest.getNativeRequest(HttpServletRequest.class).getRequestURL().toString()); appendForwarded(uri); appendXForwarded(uri); } catch (URISyntaxException e) { - throw new IllegalStateException("Cannot create URI for request: " + webRequest - .getNativeRequest(HttpServletRequest.class).getRequestURL()); + throw new IllegalStateException("Cannot create URI for request: " + + webRequest.getNativeRequest(HttpServletRequest.class).getRequestURL()); } } @@ -450,8 +427,7 @@ public class ProxyExchange { return result.getTarget(); } } - MethodParameter input = new MethodParameter( - ClassUtils.getMethod(BodyGrabber.class, "body", Object.class), 0); + MethodParameter input = new MethodParameter(ClassUtils.getMethod(BodyGrabber.class, "body", Object.class), 0); try { delegate.resolveArgument(input, mavContainer, webRequest, binderFactory); } @@ -459,8 +435,7 @@ public class ProxyExchange { throw new IllegalStateException("Cannot resolve body", e); } String name = Conventions.getVariableNameForParameter(input); - BindingResult result = (BindingResult) mavContainer.getModel() - .get(BindingResult.MODEL_KEY_PREFIX + name); + BindingResult result = (BindingResult) mavContainer.getModel().get(BindingResult.MODEL_KEY_PREFIX + name); return result.getTarget(); } @@ -493,8 +468,7 @@ public class ProxyExchange { private HttpServletResponse response; - BodyForwardingHttpServletRequest(HttpServletRequest request, - HttpServletResponse response) { + BodyForwardingHttpServletRequest(HttpServletRequest request, HttpServletResponse response) { super(request); this.request = request; this.response = response; @@ -508,16 +482,13 @@ public class ProxyExchange { @Override public ServletInputStream getInputStream() throws IOException { Object body = body(); - MethodParameter output = new MethodParameter( - ClassUtils.getMethod(BodySender.class, "body"), -1); - ServletOutputToInputConverter response = new ServletOutputToInputConverter( - this.response); + MethodParameter output = new MethodParameter(ClassUtils.getMethod(BodySender.class, "body"), -1); + ServletOutputToInputConverter response = new ServletOutputToInputConverter(this.response); ServletWebRequest webRequest = new ServletWebRequest(this.request, response); try { delegate.handleReturnValue(body, output, mavContainer, webRequest); } - catch (HttpMessageNotWritableException - | HttpMediaTypeNotAcceptableException e) { + catch (HttpMessageNotWritableException | HttpMediaTypeNotAcceptableException e) { throw new IllegalStateException("Cannot convert body", e); } return response.getInputStream(); @@ -596,8 +567,7 @@ class ServletOutputToInputConverter extends HttpServletResponseWrapper { } public ServletInputStream getInputStream() { - ByteArrayInputStream body = new ByteArrayInputStream( - builder.toString().getBytes()); + ByteArrayInputStream body = new ByteArrayInputStream(builder.toString().getBytes()); return new ServletInputStream() { @Override diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java index f07987ac..3e531b54 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyExchangeArgumentResolver.java @@ -72,11 +72,9 @@ public class ProxyExchangeArgumentResolver implements HandlerMethodArgumentResol } @Override - public Object resolveArgument(MethodParameter parameter, - ModelAndViewContainer mavContainer, NativeWebRequest webRequest, - WebDataBinderFactory binderFactory) throws Exception { - ProxyExchange proxy = new ProxyExchange<>(rest, webRequest, mavContainer, - binderFactory, type(parameter)); + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, + NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { + ProxyExchange proxy = new ProxyExchange<>(rest, webRequest, mavContainer, binderFactory, type(parameter)); proxy.headers(headers); if (this.autoForwardedHeaders.size() > 0) { proxy.headers(extractAutoForwardedHeaders(webRequest)); @@ -97,15 +95,13 @@ public class ProxyExchangeArgumentResolver implements HandlerMethodArgumentResol } private HttpHeaders extractAutoForwardedHeaders(NativeWebRequest webRequest) { - HttpServletRequest nativeRequest = webRequest - .getNativeRequest(HttpServletRequest.class); + HttpServletRequest nativeRequest = webRequest.getNativeRequest(HttpServletRequest.class); Enumeration headerNames = nativeRequest.getHeaderNames(); HttpHeaders headers = new HttpHeaders(); while (headerNames.hasMoreElements()) { String header = headerNames.nextElement(); if (this.autoForwardedHeaders.contains(header.toLowerCase())) { - headers.addAll(header, - Collections.list(nativeRequest.getHeaders(header))); + headers.addAll(header, Collections.list(nativeRequest.getHeaders(header))); } } return headers; diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java index 08d48a53..0b69bab0 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/config/ProxyResponseAutoConfiguration.java @@ -56,8 +56,8 @@ public class ProxyResponseAutoConfiguration implements WebMvcConfigurer { @Bean @ConditionalOnMissingBean - public ProxyExchangeArgumentResolver proxyExchangeArgumentResolver( - Optional optional, ProxyProperties proxy) { + public ProxyExchangeArgumentResolver proxyExchangeArgumentResolver(Optional optional, + ProxyProperties proxy) { RestTemplateBuilder builder = optional.orElse(new RestTemplateBuilder()); RestTemplate template = builder.build(); template.setErrorHandler(new NoOpResponseErrorHandler()); @@ -67,8 +67,7 @@ public class ProxyResponseAutoConfiguration implements WebMvcConfigurer { return true; } }); - ProxyExchangeArgumentResolver resolver = new ProxyExchangeArgumentResolver( - template); + ProxyExchangeArgumentResolver resolver = new ProxyExchangeArgumentResolver(template); resolver.setHeaders(proxy.convertHeaders()); resolver.setAutoForwardedHeaders(proxy.getAutoForward()); resolver.setSensitive(proxy.getSensitive()); // can be null @@ -76,8 +75,7 @@ public class ProxyResponseAutoConfiguration implements WebMvcConfigurer { } @Override - public void addArgumentResolvers( - List argumentResolvers) { + public void addArgumentResolvers(List argumentResolvers) { argumentResolvers.add(context.getBean(ProxyExchangeArgumentResolver.class)); } diff --git a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java b/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java index ddfe456b..bda865a7 100644 --- a/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java +++ b/spring-cloud-gateway-mvc/src/test/java/org/springframework/cloud/gateway/mvc/ProductionConfigurationTests.java @@ -84,26 +84,22 @@ public class ProductionConfigurationTests { @Test public void path() throws Exception { - assertThat(rest.getForObject("/proxy/path/1", Foo.class).getName()) - .isEqualTo("foo"); + assertThat(rest.getForObject("/proxy/path/1", Foo.class).getName()).isEqualTo("foo"); } @Test public void resource() throws Exception { - assertThat(rest.getForObject("/proxy/html/test.html", String.class)) - .contains("Test"); + assertThat(rest.getForObject("/proxy/html/test.html", String.class)).contains("Test"); } @Test public void resourceWithNoType() throws Exception { - assertThat(rest.getForObject("/proxy/typeless/test.html", String.class)) - .contains("Test"); + assertThat(rest.getForObject("/proxy/typeless/test.html", String.class)).contains("Test"); } @Test public void missing() throws Exception { - assertThat(rest.getForEntity("/proxy/missing/0", Foo.class).getStatusCode()) - .isEqualTo(HttpStatus.NOT_FOUND); + assertThat(rest.getForEntity("/proxy/missing/0", Foo.class).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); } @Test @@ -113,20 +109,18 @@ public class ProductionConfigurationTests { @Test public void post() throws Exception { - assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), - Bar.class).getName()).isEqualTo("host=localhost:" + port + ";foo"); + assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), Bar.class).getName()) + .isEqualTo("host=localhost:" + port + ";foo"); } @Test public void forward() throws Exception { - assertThat(rest.getForObject("/forward/foos/0", Foo.class).getName()) - .isEqualTo("bye"); + assertThat(rest.getForObject("/forward/foos/0", Foo.class).getName()).isEqualTo("bye"); } @Test public void forwardHeader() throws Exception { - ResponseEntity result = rest.getForEntity("/forward/special/foos/0", - Foo.class); + ResponseEntity result = rest.getForEntity("/forward/special/foos/0", Foo.class); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(result.getBody().getName()).isEqualTo("FOO"); } @@ -134,11 +128,8 @@ public class ProductionConfigurationTests { @Test public void postForwardHeader() throws Exception { ResponseEntity> result = rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/forward/special/bars")) - .body(Collections - .singletonList(Collections.singletonMap("name", "foo"))), + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/forward/special/bars")) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), new ParameterizedTypeReference>() { }); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -147,13 +138,11 @@ public class ProductionConfigurationTests { @Test public void postForwardBody() throws Exception { - ResponseEntity result = rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/forward/body/bars")) - .body(Collections - .singletonList(Collections.singletonMap("name", "foo"))), - String.class); + ResponseEntity result = rest + .exchange( + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/forward/body/bars")) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), + String.class); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(result.getBody()).contains("foo"); } @@ -161,11 +150,8 @@ public class ProductionConfigurationTests { @Test public void postForwardForgetBody() throws Exception { ResponseEntity result = rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/forward/forget/bars")) - .body(Collections - .singletonList(Collections.singletonMap("name", "foo"))), + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/forward/forget/bars")) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), String.class); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(result.getBody()).contains("foo"); @@ -174,11 +160,8 @@ public class ProductionConfigurationTests { @Test public void postForwardBodyFoo() throws Exception { ResponseEntity> result = rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/forward/body/bars")) - .body(Collections - .singletonList(Collections.singletonMap("name", "foo"))), + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/forward/body/bars")) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), new ParameterizedTypeReference>() { }); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -188,57 +171,44 @@ public class ProductionConfigurationTests { @Test public void list() throws Exception { assertThat(rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy")) - .body(Collections - .singletonList(Collections.singletonMap("name", "foo"))), + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy")) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), new ParameterizedTypeReference>() { - }).getBody().iterator().next().getName()) - .isEqualTo("host=localhost:" + port + ";foo"); + }).getBody().iterator().next().getName()).isEqualTo("host=localhost:" + port + ";foo"); } @Test public void bodyless() throws Exception { - assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), - Bar.class).getName()).isEqualTo("host=localhost:" + port + ";foo"); + assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), Bar.class).getName()) + .isEqualTo("host=localhost:" + port + ";foo"); } @Test public void entity() throws Exception { - assertThat(rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/entity")) - .body(Collections.singletonMap("name", "foo")), - new ParameterizedTypeReference>() { - }).getBody().iterator().next().getName()) - .isEqualTo("host=localhost:" + port + ";foo"); + assertThat( + rest.exchange(RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/entity")) + .body(Collections.singletonMap("name", "foo")), new ParameterizedTypeReference>() { + }).getBody().iterator().next().getName()).isEqualTo("host=localhost:" + port + ";foo"); } @Test public void entityWithType() throws Exception { - assertThat(rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/type")) - .body(Collections.singletonMap("name", "foo")), - new ParameterizedTypeReference>() { - }).getBody().iterator().next().getName()) - .isEqualTo("host=localhost:" + port + ";foo"); + assertThat( + rest.exchange(RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/type")) + .body(Collections.singletonMap("name", "foo")), new ParameterizedTypeReference>() { + }).getBody().iterator().next().getName()).isEqualTo("host=localhost:" + port + ";foo"); } @Test public void single() throws Exception { - assertThat(rest.postForObject("/proxy/single", - Collections.singletonMap("name", "foobar"), Bar.class).getName()) - .isEqualTo("host=localhost:" + port + ";foobar"); + assertThat(rest.postForObject("/proxy/single", Collections.singletonMap("name", "foobar"), Bar.class).getName()) + .isEqualTo("host=localhost:" + port + ";foobar"); } @Test public void converter() throws Exception { - assertThat(rest.postForObject("/proxy/converter", - Collections.singletonMap("name", "foobar"), Bar.class).getName()) + assertThat( + rest.postForObject("/proxy/converter", Collections.singletonMap("name", "foobar"), Bar.class).getName()) .isEqualTo("host=localhost:" + port + ";foobar"); } @@ -250,8 +220,7 @@ public class ProductionConfigurationTests { @Test public void deleteWithoutBody() throws Exception { - ResponseEntity deleteResponse = rest.exchange("/proxy/{id}/no-body", - HttpMethod.DELETE, null, Void.TYPE, + ResponseEntity deleteResponse = rest.exchange("/proxy/{id}/no-body", HttpMethod.DELETE, null, Void.TYPE, Collections.singletonMap("id", "123")); assertThat(deleteResponse.getStatusCode()).isEqualTo(HttpStatus.OK); } @@ -261,28 +230,20 @@ public class ProductionConfigurationTests { Foo foo = new Foo("to-be-deleted"); ParameterizedTypeReference> returnType = new ParameterizedTypeReference>() { }; - ResponseEntity> deleteResponse = rest.exchange("/proxy/{id}", - HttpMethod.DELETE, new HttpEntity(foo), returnType, - Collections.singletonMap("id", "123")); + ResponseEntity> deleteResponse = rest.exchange("/proxy/{id}", HttpMethod.DELETE, + new HttpEntity(foo), returnType, Collections.singletonMap("id", "123")); assertThat(deleteResponse.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(deleteResponse.getBody().get("deleted")) - .isEqualToComparingFieldByField(foo); + assertThat(deleteResponse.getBody().get("deleted")).isEqualToComparingFieldByField(foo); } @Test @SuppressWarnings({ "Duplicates", "unchecked" }) public void headers() throws Exception { Map> headers = rest - .exchange( - RequestEntity - .get(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/headers")) - .header("foo", "bar").header("abc", "xyz") - .header("baz", "fob").build(), - Map.class) + .exchange(RequestEntity.get(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/headers")) + .header("foo", "bar").header("abc", "xyz").header("baz", "fob").build(), Map.class) .getBody(); - assertThat(headers).doesNotContainKey("foo").doesNotContainKey("hello") - .containsKeys("bar", "abc"); + assertThat(headers).doesNotContainKey("foo").doesNotContainKey("hello").containsKeys("bar", "abc"); assertThat(headers.get("bar")).containsOnly("hello"); assertThat(headers.get("abc")).containsOnly("123"); @@ -292,9 +253,7 @@ public class ProductionConfigurationTests { @Test public void forwardedHeaderUsesHost() throws Exception { Map> headers = rest - .exchange(RequestEntity - .get(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/headers")) + .exchange(RequestEntity.get(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/headers")) .header("host", "foo:1234").build(), Map.class) .getBody(); @@ -323,35 +282,32 @@ public class ProductionConfigurationTests { } @GetMapping("/proxy/{id}") - public ResponseEntity proxyFoos(@PathVariable Integer id, - ProxyExchange proxy) throws Exception { + public ResponseEntity proxyFoos(@PathVariable Integer id, ProxyExchange proxy) throws Exception { return proxy.uri(home.toString() + "/foos/" + id).get(); } @GetMapping("/proxy/path/**") - public ResponseEntity proxyPath(ProxyExchange proxy, - UriComponentsBuilder uri) throws Exception { + public ResponseEntity proxyPath(ProxyExchange proxy, UriComponentsBuilder uri) throws Exception { String path = proxy.path("/proxy/path/"); return proxy.uri(home.toString() + "/foos/" + path).get(); } @GetMapping("/proxy/html/**") - public ResponseEntity proxyHtml(ProxyExchange proxy, - UriComponentsBuilder uri) throws Exception { + public ResponseEntity proxyHtml(ProxyExchange proxy, UriComponentsBuilder uri) + throws Exception { String path = proxy.path("/proxy/html"); return proxy.uri(home.toString() + path).get(); } @GetMapping("/proxy/typeless/**") - public ResponseEntity proxyTypeless(ProxyExchange proxy, - UriComponentsBuilder uri) throws Exception { + public ResponseEntity proxyTypeless(ProxyExchange proxy, UriComponentsBuilder uri) + throws Exception { String path = proxy.path("/proxy/typeless"); return proxy.uri(home.toString() + path).get(); } @GetMapping("/proxy/missing/{id}") - public ResponseEntity proxyMissing(@PathVariable Integer id, - ProxyExchange proxy) throws Exception { + public ResponseEntity proxyMissing(@PathVariable Integer id, ProxyExchange proxy) throws Exception { return proxy.uri(home.toString() + "/missing/" + id).get(); } @@ -361,47 +317,39 @@ public class ProductionConfigurationTests { } @PostMapping("/proxy/{id}") - public ResponseEntity proxyBars(@PathVariable Integer id, - @RequestBody Map body, + public ResponseEntity proxyBars(@PathVariable Integer id, @RequestBody Map body, ProxyExchange> proxy) throws Exception { body.put("id", id); - return proxy.uri(home.toString() + "/bars").body(Arrays.asList(body)) - .post(this::first); + return proxy.uri(home.toString() + "/bars").body(Arrays.asList(body)).post(this::first); } @PostMapping("/proxy") - public ResponseEntity barsWithNoBody(ProxyExchange proxy) - throws Exception { + public ResponseEntity barsWithNoBody(ProxyExchange proxy) throws Exception { return proxy.uri(home.toString() + "/bars").post(); } @PostMapping("/proxy/entity") - public ResponseEntity explicitEntity(@RequestBody Foo foo, - ProxyExchange proxy) throws Exception { - return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)) - .post(); + public ResponseEntity explicitEntity(@RequestBody Foo foo, ProxyExchange proxy) throws Exception { + return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)).post(); } @PostMapping("/proxy/type") public ResponseEntity> explicitEntityWithType(@RequestBody Foo foo, ProxyExchange> proxy) throws Exception { - return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)) - .post(); + return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)).post(); } @PostMapping("/proxy/single") - public ResponseEntity implicitEntity(@RequestBody Foo foo, - ProxyExchange> proxy) throws Exception { - return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)) - .post(this::first); + public ResponseEntity implicitEntity(@RequestBody Foo foo, ProxyExchange> proxy) + throws Exception { + return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)).post(this::first); } @PostMapping("/proxy/converter") - public ResponseEntity implicitEntityWithConverter(@RequestBody Foo foo, - ProxyExchange> proxy) throws Exception { + public ResponseEntity implicitEntityWithConverter(@RequestBody Foo foo, ProxyExchange> proxy) + throws Exception { return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)) - .post(response -> ResponseEntity.status(response.getStatusCode()) - .headers(response.getHeaders()) + .post(response -> ResponseEntity.status(response.getStatusCode()).headers(response.getHeaders()) .body(response.getBody().iterator().next())); } @@ -411,18 +359,16 @@ public class ProductionConfigurationTests { } @DeleteMapping("/proxy/{id}/no-body") - public ResponseEntity deleteWithoutBody(@PathVariable Integer id, - ProxyExchange proxy) throws Exception { + public ResponseEntity deleteWithoutBody(@PathVariable Integer id, ProxyExchange proxy) + throws Exception { return proxy.uri(home.toString() + "/foos/" + id + "/no-body").delete(); } @DeleteMapping("/proxy/{id}") - public ResponseEntity deleteWithBody(@PathVariable Integer id, - @RequestBody Foo foo, ProxyExchange proxy) throws Exception { - return proxy.uri(home.toString() + "/foos/" + id).body(foo) - .delete(response -> ResponseEntity - .status(response.getStatusCode()) - .headers(response.getHeaders()).body(response.getBody())); + public ResponseEntity deleteWithBody(@PathVariable Integer id, @RequestBody Foo foo, + ProxyExchange proxy) throws Exception { + return proxy.uri(home.toString() + "/foos/" + id).body(foo).delete(response -> ResponseEntity + .status(response.getStatusCode()).headers(response.getHeaders()).body(response.getBody())); } @GetMapping("/forward/**") @@ -446,23 +392,20 @@ public class ProductionConfigurationTests { } @PostMapping("/forward/body/**") - public void postForwardBody(@RequestBody byte[] body, ProxyExchange proxy) - throws Exception { + public void postForwardBody(@RequestBody byte[] body, ProxyExchange proxy) throws Exception { String path = proxy.path("/forward/body"); proxy.body(body).forward(path); } @PostMapping("/forward/forget/**") - public void postForwardForgetBody(@RequestBody byte[] body, - ProxyExchange proxy) throws Exception { + public void postForwardForgetBody(@RequestBody byte[] body, ProxyExchange proxy) throws Exception { String path = proxy.path("/forward/forget"); proxy.forward(path); } @GetMapping("/proxy/headers") @SuppressWarnings("Duplicates") - public ResponseEntity>> headers( - ProxyExchange>> proxy) { + public ResponseEntity>> headers(ProxyExchange>> proxy) { proxy.sensitive("foo"); proxy.sensitive("hello"); proxy.header("bar", "hello"); @@ -472,8 +415,7 @@ public class ProductionConfigurationTests { } private ResponseEntity first(ResponseEntity> response) { - return ResponseEntity.status(response.getStatusCode()) - .headers(response.getHeaders()) + return ResponseEntity.status(response.getStatusCode()).headers(response.getHeaders()) .body(response.getBody().iterator().next()); } @@ -504,18 +446,15 @@ public class ProductionConfigurationTests { } @DeleteMapping("/foos/{id}") - public ResponseEntity deleteFoo(@PathVariable Integer id, - @RequestBody Foo foo) { + public ResponseEntity deleteFoo(@PathVariable Integer id, @RequestBody Foo foo) { return ResponseEntity.ok().body(Collections.singletonMap("deleted", foo)); } @PostMapping("/bars") - public List bars(@RequestBody List foos, - @RequestHeader HttpHeaders headers) { + public List bars(@RequestBody List foos, @RequestHeader HttpHeaders headers) { String custom = headers.getFirst("X-Custom"); custom = custom == null ? "" : custom; - custom = headers.getFirst("forwarded") == null ? custom - : headers.getFirst("forwarded") + ";" + custom; + custom = headers.getFirst("forwarded") == null ? custom : headers.getFirst("forwarded") + ";" + custom; return Arrays.asList(new Bar(custom + foos.iterator().next().getName())); } diff --git a/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java index cb0b194d..ed192eb3 100644 --- a/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java +++ b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/GatewaySampleApplication.java @@ -157,18 +157,16 @@ public class GatewaySampleApplication { @Bean public RouterFunction testFunRouterFunction() { - RouterFunction route = RouterFunctions.route( - RequestPredicates.path("/testfun"), + RouterFunction route = RouterFunctions.route(RequestPredicates.path("/testfun"), request -> ServerResponse.ok().body(BodyInserters.fromValue("hello"))); return route; } @Bean public RouterFunction testWhenMetricPathIsNotMeet() { - RouterFunction route = RouterFunctions.route( - RequestPredicates.path("/actuator/metrics/gateway.requests"), - request -> ServerResponse.ok().body(BodyInserters - .fromValue(HELLO_FROM_FAKE_ACTUATOR_METRICS_GATEWAY_REQUESTS))); + RouterFunction route = RouterFunctions + .route(RequestPredicates.path("/actuator/metrics/gateway.requests"), request -> ServerResponse.ok() + .body(BodyInserters.fromValue(HELLO_FROM_FAKE_ACTUATOR_METRICS_GATEWAY_REQUESTS))); return route; } diff --git a/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/ThrottleGatewayFilter.java b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/ThrottleGatewayFilter.java index cc2c4e36..47487c8e 100644 --- a/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/ThrottleGatewayFilter.java +++ b/spring-cloud-gateway-sample/src/main/java/org/springframework/cloud/gateway/sample/ThrottleGatewayFilter.java @@ -84,8 +84,7 @@ public class ThrottleGatewayFilter implements GatewayFilter { public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { TokenBucket tokenBucket = TokenBuckets.builder().withCapacity(capacity) - .withFixedIntervalRefillStrategy(refillTokens, refillPeriod, refillUnit) - .build(); + .withFixedIntervalRefillStrategy(refillTokens, refillPeriod, refillUnit).build(); // TODO: get a token bucket for a key log.debug("TokenBucket capacity: " + tokenBucket.getCapacity()); diff --git a/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java b/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java index 2fc1ff90..d1b87295 100644 --- a/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java +++ b/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationTests.java @@ -49,8 +49,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author Spencer Gibb */ @RunWith(SpringRunner.class) -@SpringBootTest(classes = { GatewaySampleApplicationTests.TestConfig.class }, - webEnvironment = RANDOM_PORT, properties = "management.server.port=${test.port}") +@SpringBootTest(classes = { GatewaySampleApplicationTests.TestConfig.class }, webEnvironment = RANDOM_PORT, + properties = "management.server.port=${test.port}") public class GatewaySampleApplicationTests { protected static int managementPort; @@ -77,8 +77,7 @@ public class GatewaySampleApplicationTests { @Before public void setup() { baseUri = "http://localhost:" + port; - this.webClient = WebTestClient.bindToServer() - .responseTimeout(Duration.ofSeconds(10)).baseUrl(baseUri).build(); + this.webClient = WebTestClient.bindToServer().responseTimeout(Duration.ofSeconds(10)).baseUrl(baseUri).build(); } @Test @@ -89,108 +88,88 @@ public class GatewaySampleApplicationTests { @Test @SuppressWarnings("unchecked") public void readBodyPredicateStringWorks() { - webClient.post().uri("/post").header("Host", "www.readbody.org").bodyValue("hi") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-TestHeader", "read_body_pred").expectBody(Map.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .containsEntry("data", "hi")); + webClient.post().uri("/post").header("Host", "www.readbody.org").bodyValue("hi").exchange().expectStatus() + .isOk().expectHeader().valueEquals("X-TestHeader", "read_body_pred").expectBody(Map.class) + .consumeWith(result -> assertThat(result.getResponseBody()).containsEntry("data", "hi")); } @Test @SuppressWarnings("unchecked") public void rewriteRequestBodyStringWorks() { - webClient.post().uri("/post").header("Host", "www.rewriterequestupper.org") - .bodyValue("hello").exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-TestHeader", "rewrite_request_upper") + webClient.post().uri("/post").header("Host", "www.rewriterequestupper.org").bodyValue("hello").exchange() + .expectStatus().isOk().expectHeader().valueEquals("X-TestHeader", "rewrite_request_upper") .expectBody(Map.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .containsEntry("data", "HELLOHELLO")); + .consumeWith(result -> assertThat(result.getResponseBody()).containsEntry("data", "HELLOHELLO")); } @Test @SuppressWarnings("unchecked") public void rewriteRequestBodyObjectWorks() { - webClient.post().uri("/post").header("Host", "www.rewriterequestobj.org") - .bodyValue("hello").exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-TestHeader", "rewrite_request").expectBody(Map.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .containsEntry("data", "{\"message\":\"HELLO\"}")); + webClient.post().uri("/post").header("Host", "www.rewriterequestobj.org").bodyValue("hello").exchange() + .expectStatus().isOk().expectHeader().valueEquals("X-TestHeader", "rewrite_request") + .expectBody(Map.class).consumeWith(result -> assertThat(result.getResponseBody()).containsEntry("data", + "{\"message\":\"HELLO\"}")); } @Test @SuppressWarnings("unchecked") public void rewriteResponseBodyStringWorks() { - webClient.post().uri("/post").header("Host", "www.rewriteresponseupper.org") - .bodyValue("hello").exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-TestHeader", "rewrite_response_upper") + webClient.post().uri("/post").header("Host", "www.rewriteresponseupper.org").bodyValue("hello").exchange() + .expectStatus().isOk().expectHeader().valueEquals("X-TestHeader", "rewrite_response_upper") .expectBody(Map.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .containsEntry("DATA", "HELLO")); + .consumeWith(result -> assertThat(result.getResponseBody()).containsEntry("DATA", "HELLO")); } @Test @SuppressWarnings("unchecked") public void rewriteResponseEmptyBodyToStringWorks() { - webClient.post().uri("/post/empty").header("Host", "www.rewriteemptyresponse.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-TestHeader", "rewrite_empty_response") - .expectBody(String.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .isEqualTo("emptybody")); + webClient.post().uri("/post/empty").header("Host", "www.rewriteemptyresponse.org").exchange().expectStatus() + .isOk().expectHeader().valueEquals("X-TestHeader", "rewrite_empty_response").expectBody(String.class) + .consumeWith(result -> assertThat(result.getResponseBody()).isEqualTo("emptybody")); } @Test @SuppressWarnings("unchecked") public void emptyBodySupplierNotCalledWhenBodyPresent() { - webClient.post().uri("/post") - .header("Host", "www.rewriteresponsewithfailsupplier.org") - .bodyValue("hello").exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-TestHeader", "rewrite_response_fail_supplier") - .expectBody(Map.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .containsEntry("DATA", "HELLO")); + webClient.post().uri("/post").header("Host", "www.rewriteresponsewithfailsupplier.org").bodyValue("hello") + .exchange().expectStatus().isOk().expectHeader() + .valueEquals("X-TestHeader", "rewrite_response_fail_supplier").expectBody(Map.class) + .consumeWith(result -> assertThat(result.getResponseBody()).containsEntry("DATA", "HELLO")); } @Test @SuppressWarnings("unchecked") public void rewriteResponeBodyObjectWorks() { - webClient.post().uri("/post").header("Host", "www.rewriteresponseobj.org") - .bodyValue("hello").exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-TestHeader", "rewrite_response_obj") + webClient.post().uri("/post").header("Host", "www.rewriteresponseobj.org").bodyValue("hello").exchange() + .expectStatus().isOk().expectHeader().valueEquals("X-TestHeader", "rewrite_response_obj") .expectBody(String.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .isEqualTo("hello")); + .consumeWith(result -> assertThat(result.getResponseBody()).isEqualTo("hello")); } @Test public void complexPredicate() { - webClient.get().uri("/anything/png").header("Host", "www.abc.org").exchange() - .expectHeader().valueEquals("X-TestHeader", "foobar").expectStatus() - .isOk(); + webClient.get().uri("/anything/png").header("Host", "www.abc.org").exchange().expectHeader() + .valueEquals("X-TestHeader", "foobar").expectStatus().isOk(); } @Test public void actuatorManagementPort() { - webClient.get() - .uri("http://localhost:" + managementPort + "/actuator/gateway/routes") - .exchange().expectStatus().isOk(); + webClient.get().uri("http://localhost:" + managementPort + "/actuator/gateway/routes").exchange().expectStatus() + .isOk(); } @Test public void actuatorMetrics() { contextLoads(); - webClient.get() - .uri("http://localhost:" + managementPort - + "/actuator/metrics/gateway.requests") - .exchange().expectStatus().isOk().expectBody().consumeWith(i -> { + webClient.get().uri("http://localhost:" + managementPort + "/actuator/metrics/gateway.requests").exchange() + .expectStatus().isOk().expectBody().consumeWith(i -> { String body = new String(i.getResponseBodyContent()); ObjectMapper mapper = new ObjectMapper(); try { JsonNode actualObj = mapper.readTree(body); JsonNode findValue = actualObj.findValue("name"); - assertThat(findValue.asText()) - .as("Expected to find metric with name gateway.requests") + assertThat(findValue.asText()).as("Expected to find metric with name gateway.requests") .isEqualTo("gateway.requests"); } catch (IOException e) { @@ -218,10 +197,8 @@ public class GatewaySampleApplicationTests { int port; @Bean - public ServiceInstanceListSupplier fixedServiceInstanceListSupplier( - Environment env) { - return ServiceInstanceListSupplier.fixed(env) - .instance("localhost", port, "httpbin").build(); + public ServiceInstanceListSupplier fixedServiceInstanceListSupplier(Environment env) { + return ServiceInstanceListSupplier.fixed(env).instance("localhost", port, "httpbin").build(); } } diff --git a/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationWithoutMetricsTests.java b/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationWithoutMetricsTests.java index 4c5e9e79..705112f9 100644 --- a/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationWithoutMetricsTests.java +++ b/spring-cloud-gateway-sample/src/test/java/org/springframework/cloud/gateway/sample/GatewaySampleApplicationWithoutMetricsTests.java @@ -35,8 +35,7 @@ import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.util.SocketUtils; @RunWith(ModifiedClassPathRunner.class) -@ClassPathExclusions({ "micrometer-*.jar", "spring-boot-actuator-*.jar", - "spring-boot-actuator-autoconfigure-*.jar" }) +@ClassPathExclusions({ "micrometer-*.jar", "spring-boot-actuator-*.jar", "spring-boot-actuator-autoconfigure-*.jar" }) @DirtiesContext public class GatewaySampleApplicationWithoutMetricsTests { @@ -60,8 +59,7 @@ public class GatewaySampleApplicationWithoutMetricsTests { @Before public void setup() { baseUri = "http://localhost:" + port; - this.webClient = WebTestClient.bindToServer() - .responseTimeout(Duration.ofSeconds(10)).baseUrl(baseUri).build(); + this.webClient = WebTestClient.bindToServer().responseTimeout(Duration.ofSeconds(10)).baseUrl(baseUri).build(); } protected ConfigurableApplicationContext init(Class config) { @@ -73,10 +71,9 @@ public class GatewaySampleApplicationWithoutMetricsTests { public void actuatorMetrics() { init(TestConfig.class); webClient.get().uri("/get").exchange().expectStatus().isOk(); - webClient.get() - .uri("http://localhost:" + port + "/actuator/metrics/gateway.requests") - .exchange().expectStatus().isOk().expectBody(String.class).isEqualTo( - GatewaySampleApplication.HELLO_FROM_FAKE_ACTUATOR_METRICS_GATEWAY_REQUESTS); + webClient.get().uri("http://localhost:" + port + "/actuator/metrics/gateway.requests").exchange().expectStatus() + .isOk().expectBody(String.class) + .isEqualTo(GatewaySampleApplication.HELLO_FROM_FAKE_ACTUATOR_METRICS_GATEWAY_REQUESTS); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java index 9d59ade2..ccdf5ec8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/AbstractGatewayControllerEndpoint.java @@ -66,11 +66,10 @@ public class AbstractGatewayControllerEndpoint implements ApplicationEventPublis protected ApplicationEventPublisher publisher; - public AbstractGatewayControllerEndpoint( - RouteDefinitionLocator routeDefinitionLocator, + public AbstractGatewayControllerEndpoint(RouteDefinitionLocator routeDefinitionLocator, List globalFilters, List gatewayFilters, - List routePredicates, - RouteDefinitionWriter routeDefinitionWriter, RouteLocator routeLocator) { + List routePredicates, RouteDefinitionWriter routeDefinitionWriter, + RouteLocator routeLocator) { this.routeDefinitionLocator = routeDefinitionLocator; this.globalFilters = globalFilters; this.GatewayFilters = gatewayFilters; @@ -128,32 +127,25 @@ public class AbstractGatewayControllerEndpoint implements ApplicationEventPublis */ @PostMapping("/routes/{id}") @SuppressWarnings("unchecked") - public Mono> save(@PathVariable String id, - @RequestBody RouteDefinition route) { + public Mono> save(@PathVariable String id, @RequestBody RouteDefinition route) { return Mono.just(route).filter(this::validateRouteDefinition) - .flatMap(routeDefinition -> this.routeDefinitionWriter - .save(Mono.just(routeDefinition).map(r -> { - r.setId(id); - log.debug("Saving route: " + route); - return r; - })) - .then(Mono.defer(() -> Mono.just(ResponseEntity - .created(URI.create("/routes/" + id)).build())))) - .switchIfEmpty( - Mono.defer(() -> Mono.just(ResponseEntity.badRequest().build()))); + .flatMap(routeDefinition -> this.routeDefinitionWriter.save(Mono.just(routeDefinition).map(r -> { + r.setId(id); + log.debug("Saving route: " + route); + return r; + })).then(Mono.defer(() -> Mono.just(ResponseEntity.created(URI.create("/routes/" + id)).build())))) + .switchIfEmpty(Mono.defer(() -> Mono.just(ResponseEntity.badRequest().build()))); } private boolean validateRouteDefinition(RouteDefinition routeDefinition) { boolean hasValidFilterDefinitions = routeDefinition.getFilters().stream() - .allMatch(filterDefinition -> GatewayFilters.stream() - .anyMatch(gatewayFilterFactory -> filterDefinition.getName() - .equals(gatewayFilterFactory.name()))); + .allMatch(filterDefinition -> GatewayFilters.stream().anyMatch( + gatewayFilterFactory -> filterDefinition.getName().equals(gatewayFilterFactory.name()))); boolean hasValidPredicateDefinitions = routeDefinition.getPredicates().stream() .allMatch(predicateDefinition -> routePredicates.stream() - .anyMatch(routePredicate -> predicateDefinition.getName() - .equals(routePredicate.name()))); + .anyMatch(routePredicate -> predicateDefinition.getName().equals(routePredicate.name()))); log.debug("FilterDefinitions valid: " + hasValidFilterDefinitions); log.debug("PredicateDefinitions valid: " + hasValidPredicateDefinitions); return hasValidFilterDefinitions && hasValidPredicateDefinitions; @@ -163,15 +155,14 @@ public class AbstractGatewayControllerEndpoint implements ApplicationEventPublis public Mono> delete(@PathVariable String id) { return this.routeDefinitionWriter.delete(Mono.just(id)) .then(Mono.defer(() -> Mono.just(ResponseEntity.ok().build()))) - .onErrorResume(t -> t instanceof NotFoundException, - t -> Mono.just(ResponseEntity.notFound().build())); + .onErrorResume(t -> t instanceof NotFoundException, t -> Mono.just(ResponseEntity.notFound().build())); } @GetMapping("/routes/{id}/combinedfilters") public Mono> combinedfilters(@PathVariable String id) { // TODO: missing global filters - return this.routeLocator.getRoutes().filter(route -> route.getId().equals(id)) - .reduce(new HashMap<>(), this::putItem); + return this.routeLocator.getRoutes().filter(route -> route.getId().equals(id)).reduce(new HashMap<>(), + this::putItem); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpoint.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpoint.java index 14b555ab..e1cada2e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpoint.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpoint.java @@ -45,13 +45,11 @@ import org.springframework.web.bind.annotation.PathVariable; @RestControllerEndpoint(id = "gateway") public class GatewayControllerEndpoint extends AbstractGatewayControllerEndpoint { - public GatewayControllerEndpoint(List globalFilters, - List gatewayFilters, - List routePredicates, - RouteDefinitionWriter routeDefinitionWriter, RouteLocator routeLocator, - RouteDefinitionLocator routeDefinitionLocator) { - super(routeDefinitionLocator, globalFilters, gatewayFilters, routePredicates, - routeDefinitionWriter, routeLocator); + public GatewayControllerEndpoint(List globalFilters, List gatewayFilters, + List routePredicates, RouteDefinitionWriter routeDefinitionWriter, + RouteLocator routeLocator, RouteDefinitionLocator routeDefinitionLocator) { + super(routeDefinitionLocator, globalFilters, gatewayFilters, routePredicates, routeDefinitionWriter, + routeLocator); } @GetMapping("/routedefinitions") diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayLegacyControllerEndpoint.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayLegacyControllerEndpoint.java index 36bef427..eca537fe 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayLegacyControllerEndpoint.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/actuate/GatewayLegacyControllerEndpoint.java @@ -46,16 +46,16 @@ public class GatewayLegacyControllerEndpoint extends AbstractGatewayControllerEn public GatewayLegacyControllerEndpoint(RouteDefinitionLocator routeDefinitionLocator, List globalFilters, List GatewayFilters, - List routePredicates, - RouteDefinitionWriter routeDefinitionWriter, RouteLocator routeLocator) { - super(routeDefinitionLocator, globalFilters, GatewayFilters, routePredicates, - routeDefinitionWriter, routeLocator); + List routePredicates, RouteDefinitionWriter routeDefinitionWriter, + RouteLocator routeLocator) { + super(routeDefinitionLocator, globalFilters, GatewayFilters, routePredicates, routeDefinitionWriter, + routeLocator); } @GetMapping("/routes") public Mono>> routes() { - Mono> routeDefs = this.routeDefinitionLocator - .getRouteDefinitions().collectMap(RouteDefinition::getId); + Mono> routeDefs = this.routeDefinitionLocator.getRouteDefinitions() + .collectMap(RouteDefinition::getId); Mono> routes = this.routeLocator.getRoutes().collectList(); return Mono.zip(routeDefs, routes).map(tuple -> { Map defs = tuple.getT1(); @@ -102,10 +102,8 @@ public class GatewayLegacyControllerEndpoint extends AbstractGatewayControllerEn @GetMapping("/routes/{id}") public Mono> route(@PathVariable String id) { // TODO: missing RouteLocator - return this.routeDefinitionLocator.getRouteDefinitions() - .filter(route -> route.getId().equals(id)).singleOrEmpty() - .map(ResponseEntity::ok) - .switchIfEmpty(Mono.just(ResponseEntity.notFound().build())); + return this.routeDefinitionLocator.getRouteDefinitions().filter(route -> route.getId().equals(id)) + .singleOrEmpty().map(ResponseEntity::ok).switchIfEmpty(Mono.just(ResponseEntity.notFound().build())); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index 6d35bf78..37258d9d 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -164,8 +164,7 @@ import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) @EnableConfigurationProperties -@AutoConfigureBefore({ HttpHandlerAutoConfiguration.class, - WebFluxAutoConfiguration.class }) +@AutoConfigureBefore({ HttpHandlerAutoConfiguration.class, WebFluxAutoConfiguration.class }) @AutoConfigureAfter({ GatewayReactiveLoadBalancerClientAutoConfiguration.class, GatewayClassPathWarningAutoConfiguration.class }) @ConditionalOnClass(DispatcherHandler.class) @@ -177,15 +176,13 @@ public class GatewayAutoConfiguration { } @Bean - public RouteLocatorBuilder routeLocatorBuilder( - ConfigurableApplicationContext context) { + public RouteLocatorBuilder routeLocatorBuilder(ConfigurableApplicationContext context) { return new RouteLocatorBuilder(context); } @Bean @ConditionalOnMissingBean - public PropertiesRouteDefinitionLocator propertiesRouteDefinitionLocator( - GatewayProperties properties) { + public PropertiesRouteDefinitionLocator propertiesRouteDefinitionLocator(GatewayProperties properties) { return new PropertiesRouteDefinitionLocator(properties); } @@ -197,10 +194,8 @@ public class GatewayAutoConfiguration { @Bean @Primary - public RouteDefinitionLocator routeDefinitionLocator( - List routeDefinitionLocators) { - return new CompositeRouteDefinitionLocator( - Flux.fromIterable(routeDefinitionLocators)); + public RouteDefinitionLocator routeDefinitionLocator(List routeDefinitionLocators) { + return new CompositeRouteDefinitionLocator(Flux.fromIterable(routeDefinitionLocators)); } @Bean @@ -212,12 +207,10 @@ public class GatewayAutoConfiguration { @Bean public RouteLocator routeDefinitionRouteLocator(GatewayProperties properties, - List gatewayFilters, - List predicates, - RouteDefinitionLocator routeDefinitionLocator, - ConfigurationService configurationService) { - return new RouteDefinitionRouteLocator(routeDefinitionLocator, predicates, - gatewayFilters, properties, configurationService); + List gatewayFilters, List predicates, + RouteDefinitionLocator routeDefinitionLocator, ConfigurationService configurationService) { + return new RouteDefinitionRouteLocator(routeDefinitionLocator, predicates, gatewayFilters, properties, + configurationService); } @Bean @@ -225,15 +218,12 @@ public class GatewayAutoConfiguration { @ConditionalOnMissingBean(name = "cachedCompositeRouteLocator") // TODO: property to disable composite? public RouteLocator cachedCompositeRouteLocator(List routeLocators) { - return new CachingRouteLocator( - new CompositeRouteLocator(Flux.fromIterable(routeLocators))); + return new CachingRouteLocator(new CompositeRouteLocator(Flux.fromIterable(routeLocators))); } @Bean - @ConditionalOnClass( - name = "org.springframework.cloud.client.discovery.event.HeartbeatMonitor") - public RouteRefreshListener routeRefreshListener( - ApplicationEventPublisher publisher) { + @ConditionalOnClass(name = "org.springframework.cloud.client.discovery.event.HeartbeatMonitor") + public RouteRefreshListener routeRefreshListener(ApplicationEventPublisher publisher) { return new RouteRefreshListener(publisher); } @@ -248,11 +238,9 @@ public class GatewayAutoConfiguration { } @Bean - public RoutePredicateHandlerMapping routePredicateHandlerMapping( - FilteringWebHandler webHandler, RouteLocator routeLocator, - GlobalCorsProperties globalCorsProperties, Environment environment) { - return new RoutePredicateHandlerMapping(webHandler, routeLocator, - globalCorsProperties, environment); + public RoutePredicateHandlerMapping routePredicateHandlerMapping(FilteringWebHandler webHandler, + RouteLocator routeLocator, GlobalCorsProperties globalCorsProperties, Environment environment) { + return new RoutePredicateHandlerMapping(webHandler, routeLocator, globalCorsProperties, environment); } @Bean @@ -268,8 +256,7 @@ public class GatewayAutoConfiguration { } @Bean - @ConditionalOnProperty(name = "spring.cloud.gateway.forwarded.enabled", - matchIfMissing = true) + @ConditionalOnProperty(name = "spring.cloud.gateway.forwarded.enabled", matchIfMissing = true) public ForwardedHeadersFilter forwardedHeadersFilter() { return new ForwardedHeadersFilter(); } @@ -282,8 +269,7 @@ public class GatewayAutoConfiguration { } @Bean - @ConditionalOnProperty(name = "spring.cloud.gateway.x-forwarded.enabled", - matchIfMissing = true) + @ConditionalOnProperty(name = "spring.cloud.gateway.x-forwarded.enabled", matchIfMissing = true) public XForwardedHeadersFilter xForwardedHeadersFilter() { return new XForwardedHeadersFilter(); } @@ -306,8 +292,7 @@ public class GatewayAutoConfiguration { } @Bean - public ForwardRoutingFilter forwardRoutingFilter( - ObjectProvider dispatcherHandler) { + public ForwardRoutingFilter forwardRoutingFilter(ObjectProvider dispatcherHandler) { return new ForwardRoutingFilter(dispatcherHandler); } @@ -317,22 +302,18 @@ public class GatewayAutoConfiguration { } @Bean - public WebSocketService webSocketService( - RequestUpgradeStrategy requestUpgradeStrategy) { + public WebSocketService webSocketService(RequestUpgradeStrategy requestUpgradeStrategy) { return new HandshakeWebSocketService(requestUpgradeStrategy); } @Bean public WebsocketRoutingFilter websocketRoutingFilter(WebSocketClient webSocketClient, - WebSocketService webSocketService, - ObjectProvider> headersFilters) { - return new WebsocketRoutingFilter(webSocketClient, webSocketService, - headersFilters); + WebSocketService webSocketService, ObjectProvider> headersFilters) { + return new WebsocketRoutingFilter(webSocketClient, webSocketService, headersFilters); } @Bean - public WeightCalculatorWebFilter weightCalculatorWebFilter( - ConfigurationService configurationService, + public WeightCalculatorWebFilter weightCalculatorWebFilter(ConfigurationService configurationService, ObjectProvider routeLocator) { return new WeightCalculatorWebFilter(routeLocator, configurationService); } @@ -394,8 +375,7 @@ public class GatewayAutoConfiguration { } @Bean - public ReadBodyPredicateFactory readBodyPredicateFactory( - ServerCodecConfigurer codecConfigurer) { + public ReadBodyPredicateFactory readBodyPredicateFactory(ServerCodecConfigurer codecConfigurer) { return new ReadBodyPredicateFactory(codecConfigurer.getReaders()); } @@ -452,8 +432,7 @@ public class GatewayAutoConfiguration { public ModifyResponseBodyGatewayFilterFactory modifyResponseBodyGatewayFilterFactory( ServerCodecConfigurer codecConfigurer, Set bodyDecoders, Set bodyEncoders) { - return new ModifyResponseBodyGatewayFilterFactory(codecConfigurer.getReaders(), - bodyDecoders, bodyEncoders); + return new ModifyResponseBodyGatewayFilterFactory(codecConfigurer.getReaders(), bodyDecoders, bodyEncoders); } @Bean @@ -495,8 +474,8 @@ public class GatewayAutoConfiguration { @Bean @ConditionalOnBean({ RateLimiter.class, KeyResolver.class }) - public RequestRateLimiterGatewayFilterFactory requestRateLimiterGatewayFilterFactory( - RateLimiter rateLimiter, KeyResolver resolver) { + public RequestRateLimiterGatewayFilterFactory requestRateLimiterGatewayFilterFactory(RateLimiter rateLimiter, + KeyResolver resolver) { return new RequestRateLimiterGatewayFilterFactory(rateLimiter, resolver); } @@ -516,8 +495,7 @@ public class GatewayAutoConfiguration { } @Bean - public SecureHeadersGatewayFilterFactory secureHeadersGatewayFilterFactory( - SecureHeadersProperties properties) { + public SecureHeadersGatewayFilterFactory secureHeadersGatewayFilterFactory(SecureHeadersProperties properties) { return new SecureHeadersGatewayFilterFactory(properties); } @@ -589,8 +567,8 @@ public class GatewayAutoConfiguration { @Bean @ConditionalOnProperty(name = "spring.cloud.gateway.httpserver.wiretap") - public NettyWebServerFactoryCustomizer nettyServerWiretapCustomizer( - Environment environment, ServerProperties serverProperties) { + public NettyWebServerFactoryCustomizer nettyServerWiretapCustomizer(Environment environment, + ServerProperties serverProperties) { return new NettyWebServerFactoryCustomizer(environment, serverProperties) { @Override public void customize(NettyReactiveWebServerFactory factory) { @@ -602,8 +580,7 @@ public class GatewayAutoConfiguration { @Bean @ConditionalOnMissingBean - public HttpClient gatewayHttpClient(HttpClientProperties properties, - List customizers) { + public HttpClient gatewayHttpClient(HttpClientProperties properties, List customizers) { // configure pool resources HttpClientProperties.Pool pool = properties.getPool(); @@ -613,10 +590,9 @@ public class GatewayAutoConfiguration { connectionProvider = ConnectionProvider.newConnection(); } else if (pool.getType() == FIXED) { - ConnectionProvider.Builder builder = ConnectionProvider - .builder(pool.getName()).maxConnections(pool.getMaxConnections()) - .pendingAcquireMaxCount(-1).pendingAcquireTimeout( - Duration.ofMillis(pool.getAcquireTimeout())); + ConnectionProvider.Builder builder = ConnectionProvider.builder(pool.getName()) + .maxConnections(pool.getMaxConnections()).pendingAcquireMaxCount(-1) + .pendingAcquireTimeout(Duration.ofMillis(pool.getAcquireTimeout())); if (pool.getMaxIdleTime() != null) { builder.maxIdleTime(pool.getMaxIdleTime()); } @@ -626,9 +602,8 @@ public class GatewayAutoConfiguration { connectionProvider = builder.build(); } else { - ConnectionProvider.Builder builder = ConnectionProvider - .builder(pool.getName()).maxConnections(Integer.MAX_VALUE) - .pendingAcquireTimeout(Duration.ofMillis(0)) + ConnectionProvider.Builder builder = ConnectionProvider.builder(pool.getName()) + .maxConnections(Integer.MAX_VALUE).pendingAcquireTimeout(Duration.ofMillis(0)) .pendingAcquireMaxCount(-1); if (pool.getMaxIdleTime() != null) { builder.maxIdleTime(pool.getMaxIdleTime()); @@ -644,20 +619,17 @@ public class GatewayAutoConfiguration { .httpResponseDecoder(spec -> { if (properties.getMaxHeaderSize() != null) { // cast to int is ok, since @Max is Integer.MAX_VALUE - spec.maxHeaderSize( - (int) properties.getMaxHeaderSize().toBytes()); + spec.maxHeaderSize((int) properties.getMaxHeaderSize().toBytes()); } if (properties.getMaxInitialLineLength() != null) { // cast to int is ok, since @Max is Integer.MAX_VALUE - spec.maxInitialLineLength( - (int) properties.getMaxInitialLineLength().toBytes()); + spec.maxInitialLineLength((int) properties.getMaxInitialLineLength().toBytes()); } return spec; }).tcpConfiguration(tcpClient -> { if (properties.getConnectTimeout() != null) { - tcpClient = tcpClient.option( - ChannelOption.CONNECT_TIMEOUT_MILLIS, + tcpClient = tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, properties.getConnectTimeout()); } @@ -667,19 +639,16 @@ public class GatewayAutoConfiguration { if (StringUtils.hasText(proxy.getHost())) { tcpClient = tcpClient.proxy(proxySpec -> { - ProxyProvider.Builder builder = proxySpec - .type(ProxyProvider.Proxy.HTTP) + ProxyProvider.Builder builder = proxySpec.type(ProxyProvider.Proxy.HTTP) .host(proxy.getHost()); PropertyMapper map = PropertyMapper.get(); map.from(proxy::getPort).whenNonNull().to(builder::port); - map.from(proxy::getUsername).whenHasText() - .to(builder::username); + map.from(proxy::getUsername).whenHasText().to(builder::username); map.from(proxy::getPassword).whenHasText() .to(password -> builder.password(s -> password)); - map.from(proxy::getNonProxyHostsPattern).whenHasText() - .to(builder::nonProxyHosts); + map.from(proxy::getNonProxyHostsPattern).whenHasText().to(builder::nonProxyHosts); }); } return tcpClient; @@ -687,33 +656,27 @@ public class GatewayAutoConfiguration { HttpClientProperties.Ssl ssl = properties.getSsl(); if ((ssl.getKeyStore() != null && ssl.getKeyStore().length() > 0) - || ssl.getTrustedX509CertificatesForTrustManager().length > 0 - || ssl.isUseInsecureTrustManager()) { + || ssl.getTrustedX509CertificatesForTrustManager().length > 0 || ssl.isUseInsecureTrustManager()) { httpClient = httpClient.secure(sslContextSpec -> { // configure ssl SslContextBuilder sslContextBuilder = SslContextBuilder.forClient(); - X509Certificate[] trustedX509Certificates = ssl - .getTrustedX509CertificatesForTrustManager(); + X509Certificate[] trustedX509Certificates = ssl.getTrustedX509CertificatesForTrustManager(); if (trustedX509Certificates.length > 0) { - sslContextBuilder = sslContextBuilder - .trustManager(trustedX509Certificates); + sslContextBuilder = sslContextBuilder.trustManager(trustedX509Certificates); } else if (ssl.isUseInsecureTrustManager()) { - sslContextBuilder = sslContextBuilder - .trustManager(InsecureTrustManagerFactory.INSTANCE); + sslContextBuilder = sslContextBuilder.trustManager(InsecureTrustManagerFactory.INSTANCE); } try { - sslContextBuilder = sslContextBuilder - .keyManager(ssl.getKeyManagerFactory()); + sslContextBuilder = sslContextBuilder.keyManager(ssl.getKeyManagerFactory()); } catch (Exception e) { logger.error(e); } - sslContextSpec.sslContext(sslContextBuilder) - .defaultConfiguration(ssl.getDefaultConfigurationType()) + sslContextSpec.sslContext(sslContextBuilder).defaultConfiguration(ssl.getDefaultConfigurationType()) .handshakeTimeout(ssl.getHandshakeTimeout()) .closeNotifyFlushTimeout(ssl.getCloseNotifyFlushTimeout()) .closeNotifyReadTimeout(ssl.getCloseNotifyReadTimeout()); @@ -741,25 +704,21 @@ public class GatewayAutoConfiguration { @Bean public NettyRoutingFilter routingFilter(HttpClient httpClient, - ObjectProvider> headersFilters, - HttpClientProperties properties) { + ObjectProvider> headersFilters, HttpClientProperties properties) { return new NettyRoutingFilter(httpClient, headersFilters, properties); } @Bean - public NettyWriteResponseFilter nettyWriteResponseFilter( - GatewayProperties properties) { + public NettyWriteResponseFilter nettyWriteResponseFilter(GatewayProperties properties) { return new NettyWriteResponseFilter(properties.getStreamingMediaTypes()); } @Bean - public ReactorNettyWebSocketClient reactorNettyWebSocketClient( - HttpClientProperties properties, HttpClient httpClient) { - ReactorNettyWebSocketClient webSocketClient = new ReactorNettyWebSocketClient( - httpClient); + public ReactorNettyWebSocketClient reactorNettyWebSocketClient(HttpClientProperties properties, + HttpClient httpClient) { + ReactorNettyWebSocketClient webSocketClient = new ReactorNettyWebSocketClient(httpClient); if (properties.getWebsocket().getMaxFramePayloadLength() != null) { - webSocketClient.setMaxFramePayloadLength( - properties.getWebsocket().getMaxFramePayloadLength()); + webSocketClient.setMaxFramePayloadLength(properties.getWebsocket().getMaxFramePayloadLength()); } webSocketClient.setHandlePing(properties.getWebsocket().isProxyPing()); return webSocketClient; @@ -770,8 +729,7 @@ public class GatewayAutoConfiguration { HttpClientProperties httpClientProperties) { ReactorNettyRequestUpgradeStrategy requestUpgradeStrategy = new ReactorNettyRequestUpgradeStrategy(); - HttpClientProperties.Websocket websocket = httpClientProperties - .getWebsocket(); + HttpClientProperties.Websocket websocket = httpClientProperties.getWebsocket(); PropertyMapper map = PropertyMapper.get(); map.from(websocket::getMaxFramePayloadLength).whenNonNull() .to(requestUpgradeStrategy::setMaxFramePayloadLength); @@ -786,32 +744,25 @@ public class GatewayAutoConfiguration { protected static class GatewayActuatorConfiguration { @Bean - @ConditionalOnProperty(name = "spring.cloud.gateway.actuator.verbose.enabled", - matchIfMissing = true) + @ConditionalOnProperty(name = "spring.cloud.gateway.actuator.verbose.enabled", matchIfMissing = true) @ConditionalOnAvailableEndpoint - public GatewayControllerEndpoint gatewayControllerEndpoint( - List globalFilters, - List gatewayFilters, - List routePredicates, + public GatewayControllerEndpoint gatewayControllerEndpoint(List globalFilters, + List gatewayFilters, List routePredicates, RouteDefinitionWriter routeDefinitionWriter, RouteLocator routeLocator, RouteDefinitionLocator routeDefinitionLocator) { - return new GatewayControllerEndpoint(globalFilters, gatewayFilters, - routePredicates, routeDefinitionWriter, routeLocator, - routeDefinitionLocator); + return new GatewayControllerEndpoint(globalFilters, gatewayFilters, routePredicates, routeDefinitionWriter, + routeLocator, routeDefinitionLocator); } @Bean @Conditional(OnVerboseDisabledCondition.class) @ConditionalOnAvailableEndpoint public GatewayLegacyControllerEndpoint gatewayLegacyControllerEndpoint( - RouteDefinitionLocator routeDefinitionLocator, - List globalFilters, - List gatewayFilters, - List routePredicates, + RouteDefinitionLocator routeDefinitionLocator, List globalFilters, + List gatewayFilters, List routePredicates, RouteDefinitionWriter routeDefinitionWriter, RouteLocator routeLocator) { - return new GatewayLegacyControllerEndpoint(routeDefinitionLocator, - globalFilters, gatewayFilters, routePredicates, routeDefinitionWriter, - routeLocator); + return new GatewayLegacyControllerEndpoint(routeDefinitionLocator, globalFilters, gatewayFilters, + routePredicates, routeDefinitionWriter, routeLocator); } } @@ -822,8 +773,7 @@ public class GatewayAutoConfiguration { super(ConfigurationPhase.REGISTER_BEAN); } - @ConditionalOnProperty(name = "spring.cloud.gateway.actuator.verbose.enabled", - matchIfMissing = true) + @ConditionalOnProperty(name = "spring.cloud.gateway.actuator.verbose.enabled", matchIfMissing = true) static class VerboseDisabled { } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java index 1eb3430c..25efe5fe 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java @@ -28,8 +28,7 @@ import org.springframework.context.annotation.Configuration; @AutoConfigureBefore(GatewayAutoConfiguration.class) public class GatewayClassPathWarningAutoConfiguration { - private static final Log log = LogFactory - .getLog(GatewayClassPathWarningAutoConfiguration.class); + private static final Log log = LogFactory.getLog(GatewayClassPathWarningAutoConfiguration.class); private static final String BORDER = "\n\n**********************************************************\n\n"; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayEnvironmentPostProcessor.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayEnvironmentPostProcessor.java index d70e59a1..62ace259 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayEnvironmentPostProcessor.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayEnvironmentPostProcessor.java @@ -26,11 +26,9 @@ import org.springframework.core.env.MapPropertySource; public class GatewayEnvironmentPostProcessor implements EnvironmentPostProcessor { @Override - public void postProcessEnvironment(ConfigurableEnvironment env, - SpringApplication application) { - env.getPropertySources().addFirst( - new MapPropertySource("gateway-properties", Collections.singletonMap( - "spring.webflux.hiddenmethod.filter.enabled", "false"))); + public void postProcessEnvironment(ConfigurableEnvironment env, SpringApplication application) { + env.getPropertySources().addFirst(new MapPropertySource("gateway-properties", + Collections.singletonMap("spring.webflux.hiddenmethod.filter.enabled", "false"))); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfiguration.java index 2e4e0f95..70c17224 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfiguration.java @@ -42,10 +42,8 @@ import org.springframework.web.reactive.DispatcherHandler; @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) @EnableConfigurationProperties(GatewayMetricsProperties.class) @AutoConfigureBefore(HttpHandlerAutoConfiguration.class) -@AutoConfigureAfter({ MetricsAutoConfiguration.class, - MeterRegistryAutoConfiguration.class }) -@ConditionalOnClass({ DispatcherHandler.class, MeterRegistry.class, - MetricsAutoConfiguration.class }) +@AutoConfigureAfter({ MetricsAutoConfiguration.class, MeterRegistryAutoConfiguration.class }) +@ConditionalOnClass({ DispatcherHandler.class, MeterRegistry.class, MetricsAutoConfiguration.class }) public class GatewayMetricsAutoConfiguration { @Bean @@ -59,15 +57,13 @@ public class GatewayMetricsAutoConfiguration { } @Bean - public PropertiesTagsProvider propertiesTagsProvider( - GatewayMetricsProperties gatewayMetricsProperties) { + public PropertiesTagsProvider propertiesTagsProvider(GatewayMetricsProperties gatewayMetricsProperties) { return new PropertiesTagsProvider(gatewayMetricsProperties.getTags()); } @Bean @ConditionalOnBean(MeterRegistry.class) - @ConditionalOnProperty(name = "spring.cloud.gateway.metrics.enabled", - matchIfMissing = true) + @ConditionalOnProperty(name = "spring.cloud.gateway.metrics.enabled", matchIfMissing = true) public GatewayMetricsFilter gatewayMetricFilter(MeterRegistry meterRegistry, List tagsProviders) { return new GatewayMetricsFilter(meterRegistry, tagsProviders); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfiguration.java index a455b6b5..a9f21890 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfiguration.java @@ -50,8 +50,7 @@ public class GatewayNoLoadBalancerClientAutoConfiguration { @Bean @ConditionalOnMissingBean(ReactiveLoadBalancerClientFilter.class) - public NoLoadBalancerClientFilter noLoadBalancerClientFilter( - LoadBalancerProperties properties) { + public NoLoadBalancerClientFilter noLoadBalancerClientFilter(LoadBalancerProperties properties) { return new NoLoadBalancerClientFilter(properties.isUse404()); } @@ -73,13 +72,11 @@ public class GatewayNoLoadBalancerClientAutoConfiguration { public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { URI url = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); String schemePrefix = exchange.getAttribute(GATEWAY_SCHEME_PREFIX_ATTR); - if (url == null - || (!"lb".equals(url.getScheme()) && !"lb".equals(schemePrefix))) { + if (url == null || (!"lb".equals(url.getScheme()) && !"lb".equals(schemePrefix))) { return chain.filter(exchange); } - throw NotFoundException.create(use404, - "Unable to find instance for " + url.getHost()); + throw NotFoundException.create(use404, "Unable to find instance for " + url.getHost()); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayProperties.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayProperties.java index 1d3a438e..a521367a 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayProperties.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayProperties.java @@ -54,8 +54,8 @@ public class GatewayProperties { */ private List defaultFilters = new ArrayList<>(); - private List streamingMediaTypes = Arrays - .asList(MediaType.TEXT_EVENT_STREAM, MediaType.APPLICATION_STREAM_JSON); + private List streamingMediaTypes = Arrays.asList(MediaType.TEXT_EVENT_STREAM, + MediaType.APPLICATION_STREAM_JSON); /** * Option to fail on route definition errors, defaults to true. Otherwise, a warning @@ -100,11 +100,9 @@ public class GatewayProperties { @Override public String toString() { - return new ToStringCreator(this).append("routes", routes) - .append("defaultFilters", defaultFilters) + return new ToStringCreator(this).append("routes", routes).append("defaultFilters", defaultFilters) .append("streamingMediaTypes", streamingMediaTypes) - .append("failOnRouteDefinitionError", failOnRouteDefinitionError) - .toString(); + .append("failOnRouteDefinitionError", failOnRouteDefinitionError).toString(); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayReactiveLoadBalancerClientAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayReactiveLoadBalancerClientAutoConfiguration.java index 0af4f094..ea0e8240 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayReactiveLoadBalancerClientAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayReactiveLoadBalancerClientAutoConfiguration.java @@ -36,8 +36,7 @@ import org.springframework.web.reactive.DispatcherHandler; * @author Olga Maciaszek-Sharma */ @Configuration(proxyBeanMethods = false) -@ConditionalOnClass({ ReactiveLoadBalancer.class, LoadBalancerAutoConfiguration.class, - DispatcherHandler.class }) +@ConditionalOnClass({ ReactiveLoadBalancer.class, LoadBalancerAutoConfiguration.class, DispatcherHandler.class }) @AutoConfigureAfter(LoadBalancerAutoConfiguration.class) @EnableConfigurationProperties(LoadBalancerProperties.class) public class GatewayReactiveLoadBalancerClientAutoConfiguration { @@ -45,8 +44,8 @@ public class GatewayReactiveLoadBalancerClientAutoConfiguration { @Bean @ConditionalOnBean(LoadBalancerClientFactory.class) @ConditionalOnMissingBean(ReactiveLoadBalancerClientFilter.class) - public ReactiveLoadBalancerClientFilter gatewayLoadBalancerClientFilter( - LoadBalancerClientFactory clientFactory, LoadBalancerProperties properties) { + public ReactiveLoadBalancerClientFilter gatewayLoadBalancerClientFilter(LoadBalancerClientFactory clientFactory, + LoadBalancerProperties properties) { return new ReactiveLoadBalancerClientFilter(clientFactory, properties); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfiguration.java index ce7402a3..5d8686d5 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayRedisAutoConfiguration.java @@ -49,8 +49,8 @@ class GatewayRedisAutoConfiguration { @SuppressWarnings("unchecked") public RedisScript redisRequestRateLimiterScript() { DefaultRedisScript redisScript = new DefaultRedisScript<>(); - redisScript.setScriptSource(new ResourceScriptSource( - new ClassPathResource("META-INF/scripts/request_rate_limiter.lua"))); + redisScript.setScriptSource( + new ResourceScriptSource(new ClassPathResource("META-INF/scripts/request_rate_limiter.lua"))); redisScript.setResultType(List.class); return redisScript; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayResilience4JCircuitBreakerAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayResilience4JCircuitBreakerAutoConfiguration.java index da5985e0..5ec50797 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayResilience4JCircuitBreakerAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayResilience4JCircuitBreakerAutoConfiguration.java @@ -37,9 +37,8 @@ import org.springframework.web.reactive.DispatcherHandler; @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) @AutoConfigureAfter({ ReactiveResilience4JAutoConfiguration.class }) -@ConditionalOnClass({ DispatcherHandler.class, - ReactiveResilience4JAutoConfiguration.class, ReactiveCircuitBreakerFactory.class, - ReactiveResilience4JCircuitBreakerFactory.class }) +@ConditionalOnClass({ DispatcherHandler.class, ReactiveResilience4JAutoConfiguration.class, + ReactiveCircuitBreakerFactory.class, ReactiveResilience4JCircuitBreakerFactory.class }) public class GatewayResilience4JCircuitBreakerAutoConfiguration { @Bean @@ -47,8 +46,7 @@ public class GatewayResilience4JCircuitBreakerAutoConfiguration { public SpringCloudCircuitBreakerResilience4JFilterFactory springCloudCircuitBreakerResilience4JFilterFactory( ReactiveResilience4JCircuitBreakerFactory reactiveCircuitBreakerFactory, ObjectProvider dispatcherHandler) { - return new SpringCloudCircuitBreakerResilience4JFilterFactory( - reactiveCircuitBreakerFactory, dispatcherHandler); + return new SpringCloudCircuitBreakerResilience4JFilterFactory(reactiveCircuitBreakerFactory, dispatcherHandler); } @Bean diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java index 37fdff76..57b1c2f9 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java @@ -248,9 +248,8 @@ public class HttpClientProperties { @Override public String toString() { - return "Pool{" + "type=" + type + ", name='" + name + '\'' - + ", maxConnections=" + maxConnections + ", acquireTimeout=" - + acquireTimeout + ", maxIdleTime=" + maxIdleTime + ", maxLifeTime=" + return "Pool{" + "type=" + type + ", name='" + name + '\'' + ", maxConnections=" + maxConnections + + ", acquireTimeout=" + acquireTimeout + ", maxIdleTime=" + maxIdleTime + ", maxLifeTime=" + maxLifeTime + '}'; } @@ -337,9 +336,8 @@ public class HttpClientProperties { @Override public String toString() { - return "Proxy{" + "host='" + host + '\'' + ", port=" + port + ", username='" - + username + '\'' + ", password='" + password + '\'' - + ", nonProxyHostsPattern='" + nonProxyHostsPattern + '\'' + '}'; + return "Proxy{" + "host='" + host + '\'' + ", port=" + port + ", username='" + username + '\'' + + ", password='" + password + '\'' + ", nonProxyHostsPattern='" + nonProxyHostsPattern + '\'' + '}'; } } @@ -433,8 +431,7 @@ public class HttpClientProperties { public X509Certificate[] getTrustedX509CertificatesForTrustManager() { try { - CertificateFactory certificateFactory = CertificateFactory - .getInstance("X.509"); + CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); ArrayList allCerts = new ArrayList<>(); for (String trustedCert : getTrustedX509Certificates()) { try { @@ -444,15 +441,13 @@ public class HttpClientProperties { allCerts.addAll(certs); } catch (IOException e) { - throw new WebServerException( - "Could not load certificate '" + trustedCert + "'", e); + throw new WebServerException("Could not load certificate '" + trustedCert + "'", e); } } return allCerts.toArray(new X509Certificate[allCerts.size()]); } catch (CertificateException e1) { - throw new WebServerException("Could not load CertificateFactory X.509", - e1); + throw new WebServerException("Could not load CertificateFactory X.509", e1); } } @@ -461,8 +456,7 @@ public class HttpClientProperties { if (getKeyStore() != null && getKeyStore().length() > 0) { KeyManagerFactory keyManagerFactory = KeyManagerFactory .getInstance(KeyManagerFactory.getDefaultAlgorithm()); - char[] keyPassword = getKeyPassword() != null - ? getKeyPassword().toCharArray() : null; + char[] keyPassword = getKeyPassword() != null ? getKeyPassword().toCharArray() : null; if (keyPassword == null && getKeyStorePassword() != null) { keyPassword = getKeyStorePassword().toCharArray(); @@ -487,19 +481,17 @@ public class HttpClientProperties { : KeyStore.getInstance(getKeyStoreType()); try { URL url = ResourceUtils.getURL(getKeyStore()); - store.load(url.openStream(), getKeyStorePassword() != null - ? getKeyStorePassword().toCharArray() : null); + store.load(url.openStream(), + getKeyStorePassword() != null ? getKeyStorePassword().toCharArray() : null); } catch (Exception e) { - throw new WebServerException( - "Could not load key store ' " + getKeyStore() + "'", e); + throw new WebServerException("Could not load key store ' " + getKeyStore() + "'", e); } return store; } catch (KeyStoreException | NoSuchProviderException e) { - throw new WebServerException( - "Could not load KeyStore for given type and provider", e); + throw new WebServerException("Could not load KeyStore for given type and provider", e); } } @@ -541,21 +533,18 @@ public class HttpClientProperties { return defaultConfigurationType; } - public void setDefaultConfigurationType( - SslProvider.DefaultConfigurationType defaultConfigurationType) { + public void setDefaultConfigurationType(SslProvider.DefaultConfigurationType defaultConfigurationType) { this.defaultConfigurationType = defaultConfigurationType; } @Override public String toString() { - return new ToStringCreator(this) - .append("useInsecureTrustManager", useInsecureTrustManager) + return new ToStringCreator(this).append("useInsecureTrustManager", useInsecureTrustManager) .append("trustedX509Certificates", trustedX509Certificates) .append("handshakeTimeout", handshakeTimeout) .append("closeNotifyFlushTimeout", closeNotifyFlushTimeout) .append("closeNotifyReadTimeout", closeNotifyReadTimeout) - .append("defaultConfigurationType", defaultConfigurationType) - .toString(); + .append("defaultConfigurationType", defaultConfigurationType).toString(); } } @@ -586,8 +575,7 @@ public class HttpClientProperties { @Override public String toString() { - return new ToStringCreator(this) - .append("maxFramePayloadLength", maxFramePayloadLength) + return new ToStringCreator(this).append("maxFramePayloadLength", maxFramePayloadLength) .append("proxyPing", proxyPing).toString(); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/SimpleUrlHandlerMappingGlobalCorsAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/SimpleUrlHandlerMappingGlobalCorsAutoConfiguration.java index 02b45718..c00f7da3 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/SimpleUrlHandlerMappingGlobalCorsAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/SimpleUrlHandlerMappingGlobalCorsAutoConfiguration.java @@ -32,8 +32,7 @@ import org.springframework.web.reactive.handler.SimpleUrlHandlerMapping; @Configuration(proxyBeanMethods = false) @ConditionalOnClass(SimpleUrlHandlerMapping.class) -@ConditionalOnProperty( - name = "spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping", +@ConditionalOnProperty(name = "spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping", matchIfMissing = false) public class SimpleUrlHandlerMappingGlobalCorsAutoConfiguration { @@ -45,8 +44,7 @@ public class SimpleUrlHandlerMappingGlobalCorsAutoConfiguration { @PostConstruct void config() { - simpleUrlHandlerMapping - .setCorsConfigurations(globalCorsProperties.getCorsConfigurations()); + simpleUrlHandlerMapping.setCorsConfigurations(globalCorsProperties.getCorsConfigurations()); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java index ed08ec67..da677508 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocator.java @@ -47,8 +47,7 @@ import org.springframework.util.StringUtils; */ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLocator { - private static final Log log = LogFactory - .getLog(DiscoveryClientRouteDefinitionLocator.class); + private static final Log log = LogFactory.getLog(DiscoveryClientRouteDefinitionLocator.class); private final DiscoveryLocatorProperties properties; @@ -65,8 +64,7 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc .flatMap(service -> discoveryClient.getInstances(service).collectList()); } - private DiscoveryClientRouteDefinitionLocator(String discoveryClientName, - DiscoveryLocatorProperties properties) { + private DiscoveryClientRouteDefinitionLocator(String discoveryClientName, DiscoveryLocatorProperties properties) { this.properties = properties; if (StringUtils.hasText(properties.getRouteIdPrefix())) { routeIdPrefix = properties.getRouteIdPrefix(); @@ -74,21 +72,18 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc else { routeIdPrefix = discoveryClientName + "_"; } - evalCtxt = SimpleEvaluationContext.forReadOnlyDataBinding().withInstanceMethods() - .build(); + evalCtxt = SimpleEvaluationContext.forReadOnlyDataBinding().withInstanceMethods().build(); } @Override public Flux getRouteDefinitions() { SpelExpressionParser parser = new SpelExpressionParser(); - Expression includeExpr = parser - .parseExpression(properties.getIncludeExpression()); + Expression includeExpr = parser.parseExpression(properties.getIncludeExpression()); Expression urlExpr = parser.parseExpression(properties.getUrlExpression()); Predicate includePredicate; - if (properties.getIncludeExpression() == null - || "true".equalsIgnoreCase(properties.getIncludeExpression())) { + if (properties.getIncludeExpression() == null || "true".equalsIgnoreCase(properties.getIncludeExpression())) { includePredicate = instance -> true; } else { @@ -101,22 +96,17 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc }; } - return serviceInstances.filter(instances -> !instances.isEmpty()) - .map(instances -> instances.get(0)).filter(includePredicate) - .map(instance -> { - RouteDefinition routeDefinition = buildRouteDefinition(urlExpr, - instance); + return serviceInstances.filter(instances -> !instances.isEmpty()).map(instances -> instances.get(0)) + .filter(includePredicate).map(instance -> { + RouteDefinition routeDefinition = buildRouteDefinition(urlExpr, instance); - final ServiceInstance instanceForEval = new DelegatingServiceInstance( - instance, properties); + final ServiceInstance instanceForEval = new DelegatingServiceInstance(instance, properties); for (PredicateDefinition original : this.properties.getPredicates()) { PredicateDefinition predicate = new PredicateDefinition(); predicate.setName(original.getName()); - for (Map.Entry entry : original.getArgs() - .entrySet()) { - String value = getValueFromExpr(evalCtxt, parser, - instanceForEval, entry); + for (Map.Entry entry : original.getArgs().entrySet()) { + String value = getValueFromExpr(evalCtxt, parser, instanceForEval, entry); predicate.addArg(entry.getKey(), value); } routeDefinition.getPredicates().add(predicate); @@ -125,10 +115,8 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc for (FilterDefinition original : this.properties.getFilters()) { FilterDefinition filter = new FilterDefinition(); filter.setName(original.getName()); - for (Map.Entry entry : original.getArgs() - .entrySet()) { - String value = getValueFromExpr(evalCtxt, parser, - instanceForEval, entry); + for (Map.Entry entry : original.getArgs().entrySet()) { + String value = getValueFromExpr(evalCtxt, parser, instanceForEval, entry); filter.addArg(entry.getKey(), value); } routeDefinition.getFilters().add(filter); @@ -138,8 +126,7 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc }); } - protected RouteDefinition buildRouteDefinition(Expression urlExpr, - ServiceInstance serviceInstance) { + protected RouteDefinition buildRouteDefinition(Expression urlExpr, ServiceInstance serviceInstance) { String serviceId = serviceInstance.getServiceId(); RouteDefinition routeDefinition = new RouteDefinition(); routeDefinition.setId(this.routeIdPrefix + serviceId); @@ -150,8 +137,8 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc return routeDefinition; } - String getValueFromExpr(SimpleEvaluationContext evalCtxt, SpelExpressionParser parser, - ServiceInstance instance, Map.Entry entry) { + String getValueFromExpr(SimpleEvaluationContext evalCtxt, SpelExpressionParser parser, ServiceInstance instance, + Map.Entry entry) { try { Expression valueExpr = parser.parseExpression(entry.getValue()); return valueExpr.getValue(evalCtxt, instance, String.class); @@ -170,8 +157,7 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc private final DiscoveryLocatorProperties properties; - private DelegatingServiceInstance(ServiceInstance delegate, - DiscoveryLocatorProperties properties) { + private DelegatingServiceInstance(ServiceInstance delegate, DiscoveryLocatorProperties properties) { this.delegate = delegate; this.properties = properties; } @@ -216,8 +202,7 @@ public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLoc @Override public String toString() { - return new ToStringCreator(this).append("delegate", delegate) - .append("properties", properties).toString(); + return new ToStringCreator(this).append("delegate", delegate).append("properties", properties).toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryLocatorProperties.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryLocatorProperties.java index 06a1afe4..b13f71cb 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryLocatorProperties.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/DiscoveryLocatorProperties.java @@ -116,12 +116,10 @@ public class DiscoveryLocatorProperties { @Override public String toString() { - return new ToStringCreator(this).append("enabled", enabled) - .append("routeIdPrefix", routeIdPrefix) - .append("includeExpression", includeExpression) - .append("urlExpression", urlExpression) - .append("lowerCaseServiceId", lowerCaseServiceId) - .append("predicates", predicates).append("filters", filters).toString(); + return new ToStringCreator(this).append("enabled", enabled).append("routeIdPrefix", routeIdPrefix) + .append("includeExpression", includeExpression).append("urlExpression", urlExpression) + .append("lowerCaseServiceId", lowerCaseServiceId).append("predicates", predicates) + .append("filters", filters).toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/GatewayDiscoveryClientAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/GatewayDiscoveryClientAutoConfiguration.java index d3104053..a8da0ec7 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/GatewayDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/discovery/GatewayDiscoveryClientAutoConfiguration.java @@ -48,8 +48,7 @@ import static org.springframework.cloud.gateway.support.NameUtils.normalizeRoute @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) @AutoConfigureBefore(GatewayAutoConfiguration.class) @AutoConfigureAfter(CompositeDiscoveryClientAutoConfiguration.class) -@ConditionalOnClass({ DispatcherHandler.class, - CompositeDiscoveryClientAutoConfiguration.class }) +@ConditionalOnClass({ DispatcherHandler.class, CompositeDiscoveryClientAutoConfiguration.class }) @EnableConfigurationProperties public class GatewayDiscoveryClientAutoConfiguration { @@ -89,15 +88,13 @@ public class GatewayDiscoveryClientAutoConfiguration { } @Configuration(proxyBeanMethods = false) - @ConditionalOnProperty(value = "spring.cloud.discovery.reactive.enabled", - matchIfMissing = true) + @ConditionalOnProperty(value = "spring.cloud.discovery.reactive.enabled", matchIfMissing = true) public static class ReactiveDiscoveryClientRouteDefinitionLocatorConfiguration { @Bean @ConditionalOnProperty(name = "spring.cloud.gateway.discovery.locator.enabled") public DiscoveryClientRouteDefinitionLocator discoveryClientRouteDefinitionLocator( - ReactiveDiscoveryClient discoveryClient, - DiscoveryLocatorProperties properties) { + ReactiveDiscoveryClient discoveryClient, DiscoveryLocatorProperties properties) { return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/AdaptCachedBodyGlobalFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/AdaptCachedBodyGlobalFilter.java index 3eaf82d4..48a125bd 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/AdaptCachedBodyGlobalFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/AdaptCachedBodyGlobalFilter.java @@ -34,8 +34,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.C import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR; import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR; -public class AdaptCachedBodyGlobalFilter - implements GlobalFilter, Ordered, ApplicationListener { +public class AdaptCachedBodyGlobalFilter implements GlobalFilter, Ordered, ApplicationListener { private ConcurrentMap routesToCache = new ConcurrentHashMap<>(); @@ -49,8 +48,8 @@ public class AdaptCachedBodyGlobalFilter // the cached ServerHttpRequest is used when the ServerWebExchange can not be // mutated, for example, during a predicate where the body is read, but still // needs to be cached. - ServerHttpRequest cachedRequest = exchange - .getAttributeOrDefault(CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR, null); + ServerHttpRequest cachedRequest = exchange.getAttributeOrDefault(CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR, + null); if (cachedRequest != null) { exchange.getAttributes().remove(CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR); return chain.filter(exchange.mutate().request(cachedRequest).build()); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardPathFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardPathFilter.java index 0134d810..16b472b0 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardPathFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardPathFilter.java @@ -43,9 +43,7 @@ public class ForwardPathFilter implements GlobalFilter, Ordered { if (isAlreadyRouted(exchange) || !"forward".equals(scheme)) { return chain.filter(exchange); } - exchange = exchange.mutate() - .request(exchange.getRequest().mutate().path(routeUri.getPath()).build()) - .build(); + exchange = exchange.mutate().request(exchange.getRequest().mutate().path(routeUri.getPath()).build()).build(); return chain.filter(exchange); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilter.java index 5db1e76c..30319a9b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilter.java @@ -39,8 +39,7 @@ public class ForwardRoutingFilter implements GlobalFilter, Ordered { // do not use this dispatcherHandler directly, use getDispatcherHandler() instead. private volatile DispatcherHandler dispatcherHandler; - public ForwardRoutingFilter( - ObjectProvider dispatcherHandlerProvider) { + public ForwardRoutingFilter(ObjectProvider dispatcherHandlerProvider) { this.dispatcherHandlerProvider = dispatcherHandlerProvider; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java index fa33b177..3ece70c5 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java @@ -43,11 +43,9 @@ public class GatewayMetricsFilter implements GlobalFilter, Ordered { private GatewayTagsProvider compositeTagsProvider; - public GatewayMetricsFilter(MeterRegistry meterRegistry, - List tagsProviders) { + public GatewayMetricsFilter(MeterRegistry meterRegistry, List tagsProviders) { this.meterRegistry = meterRegistry; - this.compositeTagsProvider = tagsProviders.stream() - .reduce(exchange -> Tags.empty(), GatewayTagsProvider::and); + this.compositeTagsProvider = tagsProviders.stream().reduce(exchange -> Tags.empty(), GatewayTagsProvider::and); } @Override @@ -61,8 +59,7 @@ public class GatewayMetricsFilter implements GlobalFilter, Ordered { public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { Sample sample = Timer.start(meterRegistry); - return chain.filter(exchange) - .doOnSuccess(aVoid -> endTimerRespectingCommit(exchange, sample)) + return chain.filter(exchange).doOnSuccess(aVoid -> endTimerRespectingCommit(exchange, sample)) .doOnError(throwable -> endTimerRespectingCommit(exchange, sample)); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java index fcd9eda6..40ef0843 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyRoutingFilter.java @@ -82,8 +82,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { // do not use this headersFilters directly, use getHeadersFilters() instead. private volatile List headersFilters; - public NettyRoutingFilter(HttpClient httpClient, - ObjectProvider> headersFiltersProvider, + public NettyRoutingFilter(HttpClient httpClient, ObjectProvider> headersFiltersProvider, HttpClientProperties properties) { this.httpClient = httpClient; this.headersFiltersProvider = headersFiltersProvider; @@ -108,8 +107,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); String scheme = requestUrl.getScheme(); - if (isAlreadyRouted(exchange) - || (!"http".equals(scheme) && !"https".equals(scheme))) { + if (isAlreadyRouted(exchange) || (!"http".equals(scheme) && !"https".equals(scheme))) { return chain.filter(exchange); } setAlreadyRouted(exchange); @@ -124,82 +122,72 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { final DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders(); filtered.forEach(httpHeaders::set); - boolean preserveHost = exchange - .getAttributeOrDefault(PRESERVE_HOST_HEADER_ATTRIBUTE, false); + boolean preserveHost = exchange.getAttributeOrDefault(PRESERVE_HOST_HEADER_ATTRIBUTE, false); Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR); - Flux responseFlux = getHttpClient(route, exchange) - .headers(headers -> { - headers.add(httpHeaders); - // Will either be set below, or later by Netty - headers.remove(HttpHeaders.HOST); - if (preserveHost) { - String host = request.getHeaders().getFirst(HttpHeaders.HOST); - headers.add(HttpHeaders.HOST, host); - } - }).request(method).uri(url).send((req, nettyOutbound) -> { - if (log.isTraceEnabled()) { - nettyOutbound - .withConnection(connection -> log.trace("outbound route: " - + connection.channel().id().asShortText() - + ", inbound: " + exchange.getLogPrefix())); - } - return nettyOutbound.send(request.getBody().map(this::getByteBuf)); - }).responseConnection((res, connection) -> { + Flux responseFlux = getHttpClient(route, exchange).headers(headers -> { + headers.add(httpHeaders); + // Will either be set below, or later by Netty + headers.remove(HttpHeaders.HOST); + if (preserveHost) { + String host = request.getHeaders().getFirst(HttpHeaders.HOST); + headers.add(HttpHeaders.HOST, host); + } + }).request(method).uri(url).send((req, nettyOutbound) -> { + if (log.isTraceEnabled()) { + nettyOutbound.withConnection(connection -> log.trace("outbound route: " + + connection.channel().id().asShortText() + ", inbound: " + exchange.getLogPrefix())); + } + return nettyOutbound.send(request.getBody().map(this::getByteBuf)); + }).responseConnection((res, connection) -> { - // Defer committing the response until all route filters have run - // Put client response as ServerWebExchange attribute and write - // response later NettyWriteResponseFilter - exchange.getAttributes().put(CLIENT_RESPONSE_ATTR, res); - exchange.getAttributes().put(CLIENT_RESPONSE_CONN_ATTR, connection); + // Defer committing the response until all route filters have run + // Put client response as ServerWebExchange attribute and write + // response later NettyWriteResponseFilter + exchange.getAttributes().put(CLIENT_RESPONSE_ATTR, res); + exchange.getAttributes().put(CLIENT_RESPONSE_CONN_ATTR, connection); - ServerHttpResponse response = exchange.getResponse(); - // put headers and status so filters can modify the response - HttpHeaders headers = new HttpHeaders(); + ServerHttpResponse response = exchange.getResponse(); + // put headers and status so filters can modify the response + HttpHeaders headers = new HttpHeaders(); - res.responseHeaders().forEach( - entry -> headers.add(entry.getKey(), entry.getValue())); + res.responseHeaders().forEach(entry -> headers.add(entry.getKey(), entry.getValue())); - String contentTypeValue = headers.getFirst(HttpHeaders.CONTENT_TYPE); - if (StringUtils.hasLength(contentTypeValue)) { - exchange.getAttributes().put(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR, - contentTypeValue); - } + String contentTypeValue = headers.getFirst(HttpHeaders.CONTENT_TYPE); + if (StringUtils.hasLength(contentTypeValue)) { + exchange.getAttributes().put(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR, contentTypeValue); + } - setResponseStatus(res, response); + setResponseStatus(res, response); - // make sure headers filters run after setting status so it is - // available in response - HttpHeaders filteredResponseHeaders = HttpHeadersFilter.filter( - getHeadersFilters(), headers, exchange, Type.RESPONSE); + // make sure headers filters run after setting status so it is + // available in response + HttpHeaders filteredResponseHeaders = HttpHeadersFilter.filter(getHeadersFilters(), headers, exchange, + Type.RESPONSE); - if (!filteredResponseHeaders - .containsKey(HttpHeaders.TRANSFER_ENCODING) - && filteredResponseHeaders - .containsKey(HttpHeaders.CONTENT_LENGTH)) { - // It is not valid to have both the transfer-encoding header and - // the content-length header. - // Remove the transfer-encoding header in the response if the - // content-length header is present. - response.getHeaders().remove(HttpHeaders.TRANSFER_ENCODING); - } + if (!filteredResponseHeaders.containsKey(HttpHeaders.TRANSFER_ENCODING) + && filteredResponseHeaders.containsKey(HttpHeaders.CONTENT_LENGTH)) { + // It is not valid to have both the transfer-encoding header and + // the content-length header. + // Remove the transfer-encoding header in the response if the + // content-length header is present. + response.getHeaders().remove(HttpHeaders.TRANSFER_ENCODING); + } - exchange.getAttributes().put(CLIENT_RESPONSE_HEADER_NAMES, - filteredResponseHeaders.keySet()); + exchange.getAttributes().put(CLIENT_RESPONSE_HEADER_NAMES, filteredResponseHeaders.keySet()); - response.getHeaders().putAll(filteredResponseHeaders); + response.getHeaders().putAll(filteredResponseHeaders); - return Mono.just(res); - }); + return Mono.just(res); + }); Duration responseTimeout = getResponseTimeout(route); if (responseTimeout != null) { responseFlux = responseFlux - .timeout(responseTimeout, Mono.error(new TimeoutException( - "Response took longer than timeout: " + responseTimeout))) + .timeout(responseTimeout, + Mono.error(new TimeoutException("Response took longer than timeout: " + responseTimeout))) .onErrorMap(TimeoutException.class, - th -> new ResponseStatusException(HttpStatus.GATEWAY_TIMEOUT, - th.getMessage(), th)); + th -> new ResponseStatusException(HttpStatus.GATEWAY_TIMEOUT, th.getMessage(), th)); } return responseFlux.then(chain.filter(exchange)); @@ -215,12 +203,10 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { DefaultDataBuffer buffer = (DefaultDataBuffer) dataBuffer; return Unpooled.wrappedBuffer(buffer.getNativeBuffer()); } - throw new IllegalArgumentException( - "Unable to handle DataBuffer of type " + dataBuffer.getClass()); + throw new IllegalArgumentException("Unable to handle DataBuffer of type " + dataBuffer.getClass()); } - private void setResponseStatus(HttpClientResponse clientResponse, - ServerHttpResponse response) { + private void setResponseStatus(HttpClientResponse clientResponse, ServerHttpResponse response) { HttpStatus status = HttpStatus.resolve(clientResponse.status().code()); if (status != null) { response.setStatusCode(status); @@ -230,14 +216,12 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { response = ((ServerHttpResponseDecorator) response).getDelegate(); } if (response instanceof AbstractServerHttpResponse) { - ((AbstractServerHttpResponse) response) - .setStatusCodeValue(clientResponse.status().code()); + ((AbstractServerHttpResponse) response).setStatusCodeValue(clientResponse.status().code()); } else { // TODO: log warning here, not throw error? - throw new IllegalStateException("Unable to set status code " - + clientResponse.status().code() + " on response of type " - + response.getClass().getName()); + throw new IllegalStateException("Unable to set status code " + clientResponse.status().code() + + " on response of type " + response.getClass().getName()); } } } @@ -255,8 +239,8 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { Object connectTimeoutAttr = route.getMetadata().get(CONNECT_TIMEOUT_ATTR); if (connectTimeoutAttr != null) { Integer connectTimeout = getInteger(connectTimeoutAttr); - return this.httpClient.tcpConfiguration((tcpClient) -> tcpClient - .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectTimeout)); + return this.httpClient.tcpConfiguration( + (tcpClient) -> tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectTimeout)); } return httpClient; } @@ -283,8 +267,7 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered { responseTimeout = Long.valueOf(responseTimeoutAttr.toString()); } } - return responseTimeout != null ? Duration.ofMillis(responseTimeout) - : properties.getResponseTimeout(); + return responseTimeout != null ? Duration.ofMillis(responseTimeout) : properties.getResponseTimeout(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java index e6af21da..3af527b4 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/NettyWriteResponseFilter.java @@ -104,18 +104,15 @@ public class NettyWriteResponseFilter implements GlobalFilter, Ordered { protected DataBuffer wrap(ByteBuf byteBuf, ServerHttpResponse response) { if (response.bufferFactory() instanceof NettyDataBufferFactory) { - NettyDataBufferFactory factory = (NettyDataBufferFactory) response - .bufferFactory(); + NettyDataBufferFactory factory = (NettyDataBufferFactory) response.bufferFactory(); return factory.wrap(byteBuf); } // MockServerHttpResponse creates these else if (response.bufferFactory() instanceof DefaultDataBufferFactory) { - DefaultDataBufferFactory factory = (DefaultDataBufferFactory) response - .bufferFactory(); + DefaultDataBufferFactory factory = (DefaultDataBufferFactory) response.bufferFactory(); return factory.wrap(byteBuf.nioBuffer()); } - throw new IllegalArgumentException( - "Unkown DataBufferFactory type " + response.bufferFactory().getClass()); + throw new IllegalArgumentException("Unkown DataBufferFactory type " + response.bufferFactory().getClass()); } private void cleanup(ServerWebExchange exchange) { @@ -128,8 +125,7 @@ public class NettyWriteResponseFilter implements GlobalFilter, Ordered { // TODO: use framework if possible // TODO: port to WebClientWriteResponseFilter private boolean isStreamingMediaType(@Nullable MediaType contentType) { - return (contentType != null && this.streamingMediaTypes.stream() - .anyMatch(contentType::isCompatibleWith)); + return (contentType != null && this.streamingMediaTypes.stream().anyMatch(contentType::isCompatibleWith)); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/OrderedGatewayFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/OrderedGatewayFilter.java index 065f0df8..0c797272 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/OrderedGatewayFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/OrderedGatewayFilter.java @@ -51,8 +51,7 @@ public class OrderedGatewayFilter implements GatewayFilter, Ordered { @Override public String toString() { - return new StringBuilder("[").append(delegate).append(", order = ").append(order) - .append("]").toString(); + return new StringBuilder("[").append(delegate).append(", order = ").append(order).append("]").toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java index bb7e85fe..54fc7b5d 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilter.java @@ -50,8 +50,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.a */ public class ReactiveLoadBalancerClientFilter implements GlobalFilter, Ordered { - private static final Log log = LogFactory - .getLog(ReactiveLoadBalancerClientFilter.class); + private static final Log log = LogFactory.getLog(ReactiveLoadBalancerClientFilter.class); /** * Order of filter. @@ -78,23 +77,20 @@ public class ReactiveLoadBalancerClientFilter implements GlobalFilter, Ordered { public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { URI url = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); String schemePrefix = exchange.getAttribute(GATEWAY_SCHEME_PREFIX_ATTR); - if (url == null - || (!"lb".equals(url.getScheme()) && !"lb".equals(schemePrefix))) { + if (url == null || (!"lb".equals(url.getScheme()) && !"lb".equals(schemePrefix))) { return chain.filter(exchange); } // preserve the original url addOriginalRequestUrl(exchange, url); if (log.isTraceEnabled()) { - log.trace(ReactiveLoadBalancerClientFilter.class.getSimpleName() - + " url before: " + url); + log.trace(ReactiveLoadBalancerClientFilter.class.getSimpleName() + " url before: " + url); } return choose(exchange).doOnNext(response -> { if (!response.hasServer()) { - throw NotFoundException.create(properties.isUse404(), - "Unable to find instance for " + url.getHost()); + throw NotFoundException.create(properties.isUse404(), "Unable to find instance for " + url.getHost()); } URI uri = exchange.getRequest().getURI(); @@ -106,8 +102,8 @@ public class ReactiveLoadBalancerClientFilter implements GlobalFilter, Ordered { overrideScheme = url.getScheme(); } - DelegatingServiceInstance serviceInstance = new DelegatingServiceInstance( - response.getServer(), overrideScheme); + DelegatingServiceInstance serviceInstance = new DelegatingServiceInstance(response.getServer(), + overrideScheme); URI requestUrl = reconstructURI(serviceInstance, uri); @@ -125,8 +121,8 @@ public class ReactiveLoadBalancerClientFilter implements GlobalFilter, Ordered { @SuppressWarnings("deprecation") private Mono> choose(ServerWebExchange exchange) { URI uri = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); - ReactorLoadBalancer loadBalancer = this.clientFactory - .getInstance(uri.getHost(), ReactorServiceInstanceLoadBalancer.class); + ReactorLoadBalancer loadBalancer = this.clientFactory.getInstance(uri.getHost(), + ReactorServiceInstanceLoadBalancer.class); if (loadBalancer == null) { throw new NotFoundException("No loadbalancer available for " + uri.getHost()); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java index 681b6889..35c1a77c 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilter.java @@ -50,8 +50,8 @@ public class RouteToRequestUrlFilter implements GlobalFilter, Ordered { /* for testing */ static boolean hasAnotherScheme(URI uri) { - return schemePattern.matcher(uri.getSchemeSpecificPart()).matches() - && uri.getHost() == null && uri.getRawPath() == null; + return schemePattern.matcher(uri.getSchemeSpecificPart()).matches() && uri.getHost() == null + && uri.getRawPath() == null; } @Override @@ -73,8 +73,7 @@ public class RouteToRequestUrlFilter implements GlobalFilter, Ordered { if (hasAnotherScheme(routeUri)) { // this is a special url, save scheme to special attribute // replace routeUri with schemeSpecificPart - exchange.getAttributes().put(GATEWAY_SCHEME_PREFIX_ATTR, - routeUri.getScheme()); + exchange.getAttributes().put(GATEWAY_SCHEME_PREFIX_ATTR, routeUri.getScheme()); routeUri = URI.create(routeUri.getSchemeSpecificPart()); } @@ -88,8 +87,7 @@ public class RouteToRequestUrlFilter implements GlobalFilter, Ordered { URI mergedUrl = UriComponentsBuilder.fromUri(uri) // .uri(routeUri) - .scheme(routeUri.getScheme()).host(routeUri.getHost()) - .port(routeUri.getPort()).build(encoded).toUri(); + .scheme(routeUri.getScheme()).host(routeUri.getHost()).port(routeUri.getPort()).build(encoded).toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, mergedUrl); return chain.filter(exchange); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientHttpRoutingFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientHttpRoutingFilter.java index 143176bf..041b9ce1 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientHttpRoutingFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientHttpRoutingFilter.java @@ -76,8 +76,7 @@ public class WebClientHttpRoutingFilter implements GlobalFilter, Ordered { URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); String scheme = requestUrl.getScheme(); - if (isAlreadyRouted(exchange) - || (!"http".equals(scheme) && !"https".equals(scheme))) { + if (isAlreadyRouted(exchange) || (!"http".equals(scheme) && !"https".equals(scheme))) { return chain.filter(exchange); } setAlreadyRouted(exchange); @@ -88,17 +87,15 @@ public class WebClientHttpRoutingFilter implements GlobalFilter, Ordered { HttpHeaders filteredHeaders = filterRequest(getHeadersFilters(), exchange); - boolean preserveHost = exchange - .getAttributeOrDefault(PRESERVE_HOST_HEADER_ATTRIBUTE, false); + boolean preserveHost = exchange.getAttributeOrDefault(PRESERVE_HOST_HEADER_ATTRIBUTE, false); - RequestBodySpec bodySpec = this.webClient.method(method).uri(requestUrl) - .headers(httpHeaders -> { - httpHeaders.addAll(filteredHeaders); - // TODO: can this support preserviceHostHeader? - if (!preserveHost) { - httpHeaders.remove(HttpHeaders.HOST); - } - }); + RequestBodySpec bodySpec = this.webClient.method(method).uri(requestUrl).headers(httpHeaders -> { + httpHeaders.addAll(filteredHeaders); + // TODO: can this support preserviceHostHeader? + if (!preserveHost) { + httpHeaders.remove(HttpHeaders.HOST); + } + }); RequestHeadersSpec headersSpec; if (requiresBody(method)) { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientWriteResponseFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientWriteResponseFilter.java index 888cb913..28b44db8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientWriteResponseFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebClientWriteResponseFilter.java @@ -49,22 +49,18 @@ public class WebClientWriteResponseFilter implements GlobalFilter, Ordered { public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { // NOTICE: nothing in "pre" filter stage as CLIENT_RESPONSE_ATTR is not added // until the WebHandler is run - return chain.filter(exchange).doOnError(throwable -> cleanup(exchange)) - .then(Mono.defer(() -> { - ClientResponse clientResponse = exchange - .getAttribute(CLIENT_RESPONSE_ATTR); - if (clientResponse == null) { - return Mono.empty(); - } - log.trace("WebClientWriteResponseFilter start"); - ServerHttpResponse response = exchange.getResponse(); + return chain.filter(exchange).doOnError(throwable -> cleanup(exchange)).then(Mono.defer(() -> { + ClientResponse clientResponse = exchange.getAttribute(CLIENT_RESPONSE_ATTR); + if (clientResponse == null) { + return Mono.empty(); + } + log.trace("WebClientWriteResponseFilter start"); + ServerHttpResponse response = exchange.getResponse(); - return response - .writeWith( - clientResponse.body(BodyExtractors.toDataBuffers())) - // .log("webClient response") - .doOnCancel(() -> cleanup(exchange)); - })); + return response.writeWith(clientResponse.body(BodyExtractors.toDataBuffers())) + // .log("webClient response") + .doOnCancel(() -> cleanup(exchange)); + })); } private void cleanup(ServerWebExchange exchange) { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilter.java index 16467c93..ae91e59d 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilter.java @@ -68,8 +68,7 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered { // do not use this headersFilters directly, use getHeadersFilters() instead. private volatile List headersFilters; - public WebsocketRoutingFilter(WebSocketClient webSocketClient, - WebSocketService webSocketService, + public WebsocketRoutingFilter(WebSocketClient webSocketClient, WebSocketService webSocketService, ObjectProvider> headersFiltersProvider) { this.webSocketClient = webSocketClient; this.webSocketService = webSocketService; @@ -95,8 +94,7 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered { URI requestUrl = exchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); String scheme = requestUrl.getScheme(); - if (isAlreadyRouted(exchange) - || (!"ws".equals(scheme) && !"wss".equals(scheme))) { + if (isAlreadyRouted(exchange) || (!"ws".equals(scheme) && !"wss".equals(scheme))) { return chain.filter(exchange); } setAlreadyRouted(exchange); @@ -106,27 +104,23 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered { List protocols = headers.get(SEC_WEBSOCKET_PROTOCOL); if (protocols != null) { - protocols = headers.get(SEC_WEBSOCKET_PROTOCOL).stream().flatMap( - header -> Arrays.stream(commaDelimitedListToStringArray(header))) - .map(String::trim).collect(Collectors.toList()); + protocols = headers.get(SEC_WEBSOCKET_PROTOCOL).stream() + .flatMap(header -> Arrays.stream(commaDelimitedListToStringArray(header))).map(String::trim) + .collect(Collectors.toList()); } - return this.webSocketService.handleRequest(exchange, new ProxyWebSocketHandler( - requestUrl, this.webSocketClient, filtered, protocols)); + return this.webSocketService.handleRequest(exchange, + new ProxyWebSocketHandler(requestUrl, this.webSocketClient, filtered, protocols)); } private List getHeadersFilters() { if (this.headersFilters == null) { - this.headersFilters = this.headersFiltersProvider - .getIfAvailable(ArrayList::new); + this.headersFilters = this.headersFiltersProvider.getIfAvailable(ArrayList::new); headersFilters.add((headers, exchange) -> { HttpHeaders filtered = new HttpHeaders(); - headers.entrySet().stream() - .filter(entry -> !entry.getKey().toLowerCase() - .startsWith("sec-websocket")) - .forEach(header -> filtered.addAll(header.getKey(), - header.getValue())); + headers.entrySet().stream().filter(entry -> !entry.getKey().toLowerCase().startsWith("sec-websocket")) + .forEach(header -> filtered.addAll(header.getKey(), header.getValue())); return filtered; }); } @@ -140,12 +134,10 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered { String scheme = requestUrl.getScheme().toLowerCase(); String upgrade = exchange.getRequest().getHeaders().getUpgrade(); // change the scheme if the socket client send a "http" or "https" - if ("WebSocket".equalsIgnoreCase(upgrade) - && ("http".equals(scheme) || "https".equals(scheme))) { + if ("WebSocket".equalsIgnoreCase(upgrade) && ("http".equals(scheme) || "https".equals(scheme))) { String wsScheme = convertHttpToWs(scheme); boolean encoded = containsEncodedParts(requestUrl); - URI wsRequestUrl = UriComponentsBuilder.fromUri(requestUrl).scheme(wsScheme) - .build(encoded).toUri(); + URI wsRequestUrl = UriComponentsBuilder.fromUri(requestUrl).scheme(wsScheme).build(encoded).toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, wsRequestUrl); if (log.isTraceEnabled()) { log.trace("changeSchemeTo:[" + wsRequestUrl + "]"); @@ -163,8 +155,7 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered { private final List subProtocols; - ProxyWebSocketHandler(URI url, WebSocketClient client, HttpHeaders headers, - List protocols) { + ProxyWebSocketHandler(URI url, WebSocketClient client, HttpHeaders headers, List protocols) { this.client = client; this.url = url; this.headers = headers; @@ -191,8 +182,8 @@ public class WebsocketRoutingFilter implements GlobalFilter, Ordered { Mono proxySessionSend = proxySession .send(session.receive().doOnNext(WebSocketMessage::retain)); // .log("proxySessionSend", Level.FINE); - Mono serverSessionSend = session.send( - proxySession.receive().doOnNext(WebSocketMessage::retain)); + Mono serverSessionSend = session + .send(proxySession.receive().doOnNext(WebSocketMessage::retain)); // .log("sessionSend", Level.FINE); return Mono.zip(proxySessionSend, serverSessionSend).then(); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java index 60b41814..1b7b17b9 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilter.java @@ -49,8 +49,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.W * @author Spencer Gibb * @author Alexey Nakidkin */ -public class WeightCalculatorWebFilter - implements WebFilter, Ordered, SmartApplicationListener { +public class WeightCalculatorWebFilter implements WebFilter, Ordered, SmartApplicationListener { /** * Order of Weight Calculator Web filter. @@ -138,15 +137,13 @@ public class WeightCalculatorWebFilter WeightConfig config = new WeightConfig(event.getRouteId()); - this.configurationService.with(config).name(WeightConfig.CONFIG_PREFIX) - .normalizedProperties(args).bind(); + this.configurationService.with(config).name(WeightConfig.CONFIG_PREFIX).normalizedProperties(args).bind(); addWeightConfig(config); } private boolean hasRelevantKey(Map args) { - return args.keySet().stream() - .anyMatch(key -> key.startsWith(WeightConfig.CONFIG_PREFIX + ".")); + return args.keySet().stream().anyMatch(key -> key.startsWith(WeightConfig.CONFIG_PREFIX + ".")); } /* for testing */ void addWeightConfig(WeightConfig weightConfig) { @@ -227,8 +224,7 @@ public class WeightCalculatorWebFilter List ranges = config.ranges; if (log.isTraceEnabled()) { - log.trace("Weight for group: " + group + ", ranges: " + ranges + ", r: " - + r); + log.trace("Weight for group: " + group + ", ranges: " + ranges + ", r: " + r); } for (int i = 0; i < ranges.size() - 1; i++) { @@ -272,10 +268,8 @@ public class WeightCalculatorWebFilter @Override public String toString() { - return new ToStringCreator(this).append("group", group) - .append("weights", weights) - .append("normalizedWeights", normalizedWeights) - .append("rangeIndexes", rangeIndexes).toString(); + return new ToStringCreator(this).append("group", group).append("weights", weights) + .append("normalizedWeights", normalizedWeights).append("rangeIndexes", rangeIndexes).toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractChangeRequestUriGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractChangeRequestUriGatewayFilterFactory.java index 1207ca66..d4ea92c1 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractChangeRequestUriGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractChangeRequestUriGatewayFilterFactory.java @@ -33,8 +33,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.G * * @author Toshiaki Maki */ -public abstract class AbstractChangeRequestUriGatewayFilterFactory - extends AbstractGatewayFilterFactory { +public abstract class AbstractChangeRequestUriGatewayFilterFactory extends AbstractGatewayFilterFactory { private final int order; @@ -47,8 +46,7 @@ public abstract class AbstractChangeRequestUriGatewayFilterFactory this(clazz, RouteToRequestUrlFilter.ROUTE_TO_URL_FILTER_ORDER + 1); } - protected abstract Optional determineRequestUri(ServerWebExchange exchange, - T config); + protected abstract Optional determineRequestUri(ServerWebExchange exchange, T config); public GatewayFilter apply(T config) { return new OrderedGatewayFilter((exchange, chain) -> { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractNameValueGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractNameValueGatewayFilterFactory.java index 10f39856..5dbd80b9 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractNameValueGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AbstractNameValueGatewayFilterFactory.java @@ -25,8 +25,8 @@ import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.core.style.ToStringCreator; import org.springframework.validation.annotation.Validated; -public abstract class AbstractNameValueGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public abstract class AbstractNameValueGatewayFilterFactory + extends AbstractGatewayFilterFactory { public AbstractNameValueGatewayFilterFactory() { super(NameValueConfig.class); @@ -65,8 +65,7 @@ public abstract class AbstractNameValueGatewayFilterFactory extends @Override public String toString() { - return new ToStringCreator(this).append("name", name).append("value", value) - .toString(); + return new ToStringCreator(this).append("name", name).append("value", value).toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactory.java index b7a3708b..1ad67269 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactory.java @@ -29,18 +29,15 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * @author Spencer Gibb */ -public class AddRequestHeaderGatewayFilterFactory - extends AbstractNameValueGatewayFilterFactory { +public class AddRequestHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory { @Override public GatewayFilter apply(NameValueConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String value = ServerWebExchangeUtils.expand(exchange, config.getValue()); - ServerHttpRequest request = exchange.getRequest().mutate() - .header(config.getName(), value).build(); + ServerHttpRequest request = exchange.getRequest().mutate().header(config.getName(), value).build(); return chain.filter(exchange.mutate().request(request).build()); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactory.java index 383c233a..d99c46a7 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactory.java @@ -33,15 +33,13 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * @author Spencer Gibb */ -public class AddRequestParameterGatewayFilterFactory - extends AbstractNameValueGatewayFilterFactory { +public class AddRequestParameterGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory { @Override public GatewayFilter apply(NameValueConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { URI uri = exchange.getRequest().getURI(); StringBuilder query = new StringBuilder(); String originalQuery = uri.getRawQuery(); @@ -60,17 +58,14 @@ public class AddRequestParameterGatewayFilterFactory query.append(value); try { - URI newUri = UriComponentsBuilder.fromUri(uri) - .replaceQuery(query.toString()).build(true).toUri(); + URI newUri = UriComponentsBuilder.fromUri(uri).replaceQuery(query.toString()).build(true).toUri(); - ServerHttpRequest request = exchange.getRequest().mutate().uri(newUri) - .build(); + ServerHttpRequest request = exchange.getRequest().mutate().uri(newUri).build(); return chain.filter(exchange.mutate().request(request).build()); } catch (RuntimeException ex) { - throw new IllegalStateException( - "Invalid URI query: \"" + query.toString() + "\""); + throw new IllegalStateException("Invalid URI query: \"" + query.toString() + "\""); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactory.java index 0ed2332c..2362c9e8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactory.java @@ -28,15 +28,13 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * @author Spencer Gibb */ -public class AddResponseHeaderGatewayFilterFactory - extends AbstractNameValueGatewayFilterFactory { +public class AddResponseHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory { @Override public GatewayFilter apply(NameValueConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String value = ServerWebExchangeUtils.expand(exchange, config.getValue()); exchange.getResponse().getHeaders().add(config.getName(), value); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactory.java index ec2443fe..92b93d59 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactory.java @@ -69,8 +69,8 @@ Modified response header Access-Control-Allow-Credentials: true /** * @author Vitaliy Pavlyuk */ -public class DedupeResponseHeaderGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class DedupeResponseHeaderGatewayFilterFactory + extends AbstractGatewayFilterFactory { private static final String STRATEGY_KEY = "strategy"; @@ -87,18 +87,15 @@ public class DedupeResponseHeaderGatewayFilterFactory extends public GatewayFilter apply(Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { - return chain.filter(exchange).then(Mono.fromRunnable( - () -> dedupe(exchange.getResponse().getHeaders(), config))); + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + return chain.filter(exchange) + .then(Mono.fromRunnable(() -> dedupe(exchange.getResponse().getHeaders(), config))); } @Override public String toString() { - return filterToStringCreator( - DedupeResponseHeaderGatewayFilterFactory.this) - .append(config.getName(), config.getStrategy()) - .toString(); + return filterToStringCreator(DedupeResponseHeaderGatewayFilterFactory.this) + .append(config.getName(), config.getStrategy()).toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/FallbackHeadersGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/FallbackHeadersGatewayFilterFactory.java index 66ea5aeb..4843a4db 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/FallbackHeadersGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/FallbackHeadersGatewayFilterFactory.java @@ -45,8 +45,7 @@ public class FallbackHeadersGatewayFilterFactory @Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { - Throwable exception = exchange - .getAttribute(CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR); + Throwable exception = exchange.getAttribute(CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR); ServerWebExchange filteredExchange; if (exception == null) { filteredExchange = exchange; @@ -58,19 +57,15 @@ public class FallbackHeadersGatewayFilterFactory }; } - private ServerWebExchange addFallbackHeaders(Config config, - ServerWebExchange exchange, Throwable executionException) { + private ServerWebExchange addFallbackHeaders(Config config, ServerWebExchange exchange, + Throwable executionException) { ServerHttpRequest.Builder requestBuilder = exchange.getRequest().mutate(); - requestBuilder.header(config.executionExceptionTypeHeaderName, - executionException.getClass().getName()); - requestBuilder.header(config.executionExceptionMessageHeaderName, - executionException.getMessage()); + requestBuilder.header(config.executionExceptionTypeHeaderName, executionException.getClass().getName()); + requestBuilder.header(config.executionExceptionMessageHeaderName, executionException.getMessage()); Throwable rootCause = getRootCause(executionException); if (rootCause != null) { - requestBuilder.header(config.rootCauseExceptionTypeHeaderName, - rootCause.getClass().getName()); - requestBuilder.header(config.rootCauseExceptionMessageHeaderName, - rootCause.getMessage()); + requestBuilder.header(config.rootCauseExceptionTypeHeaderName, rootCause.getClass().getName()); + requestBuilder.header(config.rootCauseExceptionMessageHeaderName, rootCause.getMessage()); } return exchange.mutate().request(requestBuilder.build()).build(); } @@ -111,8 +106,7 @@ public class FallbackHeadersGatewayFilterFactory return executionExceptionTypeHeaderName; } - public void setExecutionExceptionTypeHeaderName( - String executionExceptionTypeHeaderName) { + public void setExecutionExceptionTypeHeaderName(String executionExceptionTypeHeaderName) { this.executionExceptionTypeHeaderName = executionExceptionTypeHeaderName; } @@ -120,8 +114,7 @@ public class FallbackHeadersGatewayFilterFactory return executionExceptionMessageHeaderName; } - public void setExecutionExceptionMessageHeaderName( - String executionExceptionMessageHeaderName) { + public void setExecutionExceptionMessageHeaderName(String executionExceptionMessageHeaderName) { this.executionExceptionMessageHeaderName = executionExceptionMessageHeaderName; } @@ -129,8 +122,7 @@ public class FallbackHeadersGatewayFilterFactory return rootCauseExceptionTypeHeaderName; } - public void setRootCauseExceptionTypeHeaderName( - String rootCauseExceptionTypeHeaderName) { + public void setRootCauseExceptionTypeHeaderName(String rootCauseExceptionTypeHeaderName) { this.rootCauseExceptionTypeHeaderName = rootCauseExceptionTypeHeaderName; } @@ -138,8 +130,7 @@ public class FallbackHeadersGatewayFilterFactory return rootCauseExceptionMessageHeaderName; } - public void setCauseExceptionMessageHeaderName( - String causeExceptionMessageHeaderName) { + public void setCauseExceptionMessageHeaderName(String causeExceptionMessageHeaderName) { this.rootCauseExceptionMessageHeaderName = causeExceptionMessageHeaderName; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactory.java index fc286639..58ff3e08 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactory.java @@ -32,8 +32,8 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * @author Tony Clarke */ -public class MapRequestHeaderGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class MapRequestHeaderGatewayFilterFactory + extends AbstractGatewayFilterFactory { /** * From Header key. @@ -57,18 +57,14 @@ public class MapRequestHeaderGatewayFilterFactory extends public GatewayFilter apply(MapRequestHeaderGatewayFilterFactory.Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { - if (!exchange.getRequest().getHeaders() - .containsKey(config.getFromHeader())) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + if (!exchange.getRequest().getHeaders().containsKey(config.getFromHeader())) { return chain.filter(exchange); } - List headerValues = exchange.getRequest().getHeaders() - .get(config.getFromHeader()); + List headerValues = exchange.getRequest().getHeaders().get(config.getFromHeader()); ServerHttpRequest request = exchange.getRequest().mutate() - .headers(i -> i.addAll(config.getToHeader(), headerValues)) - .build(); + .headers(i -> i.addAll(config.getToHeader(), headerValues)).build(); return chain.filter(exchange.mutate().request(request).build()); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactory.java index 9c6acb2d..43945426 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactory.java @@ -44,8 +44,7 @@ public class PrefixPathGatewayFilterFactory */ public static final String PREFIX_KEY = "prefix"; - private static final Log log = LogFactory - .getLog(PrefixPathGatewayFilterFactory.class); + private static final Log log = LogFactory.getLog(PrefixPathGatewayFilterFactory.class); public PrefixPathGatewayFilterFactory() { super(Config.class); @@ -60,10 +59,8 @@ public class PrefixPathGatewayFilterFactory public GatewayFilter apply(Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { - boolean alreadyPrefixed = exchange - .getAttributeOrDefault(GATEWAY_ALREADY_PREFIXED_ATTR, false); + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + boolean alreadyPrefixed = exchange.getAttributeOrDefault(GATEWAY_ALREADY_PREFIXED_ATTR, false); if (alreadyPrefixed) { return chain.filter(exchange); } @@ -78,8 +75,7 @@ public class PrefixPathGatewayFilterFactory exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, request.getURI()); if (log.isTraceEnabled()) { - log.trace("Prefixed URI with: " + config.prefix + " -> " - + request.getURI()); + log.trace("Prefixed URI with: " + config.prefix + " -> " + request.getURI()); } return chain.filter(exchange.mutate().request(request).build()); @@ -87,8 +83,8 @@ public class PrefixPathGatewayFilterFactory @Override public String toString() { - return filterToStringCreator(PrefixPathGatewayFilterFactory.this) - .append("prefix", config.getPrefix()).toString(); + return filterToStringCreator(PrefixPathGatewayFilterFactory.this).append("prefix", config.getPrefix()) + .toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactory.java index ce5aed46..f5abdf21 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactory.java @@ -38,16 +38,14 @@ public class PreserveHostHeaderGatewayFilterFactory extends AbstractGatewayFilte public GatewayFilter apply(Object config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { exchange.getAttributes().put(PRESERVE_HOST_HEADER_ATTRIBUTE, true); return chain.filter(exchange); } @Override public String toString() { - return filterToStringCreator(PreserveHostHeaderGatewayFilterFactory.this) - .toString(); + return filterToStringCreator(PreserveHostHeaderGatewayFilterFactory.this).toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java index 7a60d097..87f7f7d0 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java @@ -66,8 +66,7 @@ public class RedirectToGatewayFilterFactory public GatewayFilter apply(String statusString, String urlString) { HttpStatusHolder httpStatus = HttpStatusHolder.parse(statusString); - Assert.isTrue(httpStatus.is3xxRedirection(), - "status must be a 3xx code, but was " + statusString); + Assert.isTrue(httpStatus.is3xxRedirection(), "status must be a 3xx code, but was " + statusString); final URI url = URI.create(urlString); return apply(httpStatus, url); } @@ -79,8 +78,7 @@ public class RedirectToGatewayFilterFactory public GatewayFilter apply(HttpStatusHolder httpStatus, URI uri) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (!exchange.getResponse().isCommitted()) { setResponseStatus(exchange, httpStatus); @@ -100,8 +98,7 @@ public class RedirectToGatewayFilterFactory else { status = httpStatus.getStatus().toString(); } - return filterToStringCreator(RedirectToGatewayFilterFactory.this) - .append(status, uri).toString(); + return filterToStringCreator(RedirectToGatewayFilterFactory.this).append(status, uri).toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactory.java index da0c9d04..9a772491 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactory.java @@ -47,11 +47,9 @@ public class RemoveRequestHeaderGatewayFilterFactory public GatewayFilter apply(NameConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest().mutate() - .headers(httpHeaders -> httpHeaders.remove(config.getName())) - .build(); + .headers(httpHeaders -> httpHeaders.remove(config.getName())).build(); return chain.filter(exchange.mutate().request(request).build()); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java index e7fcd97a..8d09d331 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactory.java @@ -52,28 +52,23 @@ public class RemoveRequestParameterGatewayFilterFactory public GatewayFilter apply(NameConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); - MultiValueMap queryParams = new LinkedMultiValueMap<>( - request.getQueryParams()); + MultiValueMap queryParams = new LinkedMultiValueMap<>(request.getQueryParams()); queryParams.remove(config.getName()); URI newUri = UriComponentsBuilder.fromUri(request.getURI()) - .replaceQueryParams(unmodifiableMultiValueMap(queryParams)) - .build().toUri(); + .replaceQueryParams(unmodifiableMultiValueMap(queryParams)).build().toUri(); - ServerHttpRequest updatedRequest = exchange.getRequest().mutate() - .uri(newUri).build(); + ServerHttpRequest updatedRequest = exchange.getRequest().mutate().uri(newUri).build(); return chain.filter(exchange.mutate().request(updatedRequest).build()); } @Override public String toString() { - return filterToStringCreator( - RemoveRequestParameterGatewayFilterFactory.this) - .append("name", config.getName()).toString(); + return filterToStringCreator(RemoveRequestParameterGatewayFilterFactory.this) + .append("name", config.getName()).toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactory.java index fab6c194..92efcdf4 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactory.java @@ -46,17 +46,15 @@ public class RemoveResponseHeaderGatewayFilterFactory public GatewayFilter apply(NameConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { - return chain.filter(exchange).then(Mono.fromRunnable(() -> exchange - .getResponse().getHeaders().remove(config.getName()))); + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + return chain.filter(exchange) + .then(Mono.fromRunnable(() -> exchange.getResponse().getHeaders().remove(config.getName()))); } @Override public String toString() { - return filterToStringCreator( - RemoveResponseHeaderGatewayFilterFactory.this) - .append("name", config.getName()).toString(); + return filterToStringCreator(RemoveResponseHeaderGatewayFilterFactory.this) + .append("name", config.getName()).toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java index 1f7da932..7e5bca6f 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactory.java @@ -40,8 +40,8 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi * @author Sakalya Deshpande */ -public class RequestHeaderSizeGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class RequestHeaderSizeGatewayFilterFactory + extends AbstractGatewayFilterFactory { private static String ERROR = "Request Header/s size is larger than permissible limit." + " Request Header/s size is %s where permissible limit is %s"; @@ -54,8 +54,7 @@ public class RequestHeaderSizeGatewayFilterFactory extends public GatewayFilter apply(RequestHeaderSizeGatewayFilterFactory.Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); HttpHeaders headers = request.getHeaders(); Long headerSizeInBytes = 0L; @@ -68,8 +67,7 @@ public class RequestHeaderSizeGatewayFilterFactory extends } if (headerSizeInBytes > config.getMaxSize().toBytes()) { - exchange.getResponse() - .setStatusCode(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE); + exchange.getResponse().setStatusCode(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE); exchange.getResponse().getHeaders().add("errorMessage", getErrorMessage(headerSizeInBytes, config.getMaxSize())); return exchange.getResponse().setComplete(); @@ -88,8 +86,7 @@ public class RequestHeaderSizeGatewayFilterFactory extends } private static String getErrorMessage(Long currentRequestSize, DataSize maxSize) { - return String.format(ERROR, DataSize.of(currentRequestSize, DataUnit.BYTES), - maxSize); + return String.format(ERROR, DataSize.of(currentRequestSize, DataUnit.BYTES), maxSize); } public static class Config { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactory.java index 9f2c8bec..63f6967c 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactory.java @@ -38,11 +38,10 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi * * @author Toshiaki Maki */ -public class RequestHeaderToRequestUriGatewayFilterFactory extends - AbstractChangeRequestUriGatewayFilterFactory { +public class RequestHeaderToRequestUriGatewayFilterFactory + extends AbstractChangeRequestUriGatewayFilterFactory { - private final Logger log = LoggerFactory - .getLogger(RequestHeaderToRequestUriGatewayFilterFactory.class); + private final Logger log = LoggerFactory.getLogger(RequestHeaderToRequestUriGatewayFilterFactory.class); public RequestHeaderToRequestUriGatewayFilterFactory() { super(NameConfig.class); @@ -61,24 +60,21 @@ public class RequestHeaderToRequestUriGatewayFilterFactory extends return new OrderedGatewayFilter(gatewayFilter, gatewayFilter.getOrder()) { @Override public String toString() { - return filterToStringCreator( - RequestHeaderToRequestUriGatewayFilterFactory.this) - .append("name", config.getName()).toString(); + return filterToStringCreator(RequestHeaderToRequestUriGatewayFilterFactory.this) + .append("name", config.getName()).toString(); } }; } @Override - protected Optional determineRequestUri(ServerWebExchange exchange, - NameConfig config) { + protected Optional determineRequestUri(ServerWebExchange exchange, NameConfig config) { String requestUrl = exchange.getRequest().getHeaders().getFirst(config.getName()); return Optional.ofNullable(requestUrl).map(url -> { try { return new URL(url).toURI(); } catch (MalformedURLException | URISyntaxException e) { - log.info("Request url is invalid : url={}, error={}", requestUrl, - e.getMessage()); + log.info("Request url is invalid : url={}, error={}", requestUrl, e.getMessage()); return null; } }); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactory.java index 4636ad49..b524b572 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactory.java @@ -35,8 +35,8 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.s * https://gist.github.com/ptarjan/e38f45f2dfe601419ca3af937fff574d#file-1-check_request_rate_limiter-rb-L11-L34. */ @ConfigurationProperties("spring.cloud.gateway.filter.request-rate-limiter") -public class RequestRateLimiterGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class RequestRateLimiterGatewayFilterFactory + extends AbstractGatewayFilterFactory { /** * Key-Resolver key. @@ -57,8 +57,7 @@ public class RequestRateLimiterGatewayFilterFactory extends /** HttpStatus to return when denyEmptyKey is true, defaults to FORBIDDEN. */ private String emptyKeyStatusCode = HttpStatus.FORBIDDEN.name(); - public RequestRateLimiterGatewayFilterFactory(RateLimiter defaultRateLimiter, - KeyResolver defaultKeyResolver) { + public RequestRateLimiterGatewayFilterFactory(RateLimiter defaultRateLimiter, KeyResolver defaultKeyResolver) { super(Config.class); this.defaultRateLimiter = defaultRateLimiter; this.defaultKeyResolver = defaultKeyResolver; @@ -92,43 +91,38 @@ public class RequestRateLimiterGatewayFilterFactory extends @Override public GatewayFilter apply(Config config) { KeyResolver resolver = getOrDefault(config.keyResolver, defaultKeyResolver); - RateLimiter limiter = getOrDefault(config.rateLimiter, - defaultRateLimiter); + RateLimiter limiter = getOrDefault(config.rateLimiter, defaultRateLimiter); boolean denyEmpty = getOrDefault(config.denyEmptyKey, this.denyEmptyKey); HttpStatusHolder emptyKeyStatus = HttpStatusHolder .parse(getOrDefault(config.emptyKeyStatus, this.emptyKeyStatusCode)); - return (exchange, chain) -> resolver.resolve(exchange).defaultIfEmpty(EMPTY_KEY) - .flatMap(key -> { - if (EMPTY_KEY.equals(key)) { - if (denyEmpty) { - setResponseStatus(exchange, emptyKeyStatus); - return exchange.getResponse().setComplete(); - } - return chain.filter(exchange); - } - String routeId = config.getRouteId(); - if (routeId == null) { - Route route = exchange - .getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR); - routeId = route.getId(); - } - return limiter.isAllowed(routeId, key).flatMap(response -> { + return (exchange, chain) -> resolver.resolve(exchange).defaultIfEmpty(EMPTY_KEY).flatMap(key -> { + if (EMPTY_KEY.equals(key)) { + if (denyEmpty) { + setResponseStatus(exchange, emptyKeyStatus); + return exchange.getResponse().setComplete(); + } + return chain.filter(exchange); + } + String routeId = config.getRouteId(); + if (routeId == null) { + Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR); + routeId = route.getId(); + } + return limiter.isAllowed(routeId, key).flatMap(response -> { - for (Map.Entry header : response.getHeaders() - .entrySet()) { - exchange.getResponse().getHeaders().add(header.getKey(), - header.getValue()); - } + for (Map.Entry header : response.getHeaders().entrySet()) { + exchange.getResponse().getHeaders().add(header.getKey(), header.getValue()); + } - if (response.isAllowed()) { - return chain.filter(exchange); - } + if (response.isAllowed()) { + return chain.filter(exchange); + } - setResponseStatus(exchange, config.getStatusCode()); - return exchange.getResponse().setComplete(); - }); - }); + setResponseStatus(exchange, config.getStatusCode()); + return exchange.getResponse().setComplete(); + }); + }); } private T getOrDefault(T configValue, T defaultValue) { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactory.java index aa262a67..512bf195 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactory.java @@ -35,8 +35,8 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi * * @author Arpan */ -public class RequestSizeGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class RequestSizeGatewayFilterFactory + extends AbstractGatewayFilterFactory { private static String PREFIX = "kMGTPE"; @@ -48,8 +48,7 @@ public class RequestSizeGatewayFilterFactory extends } private static String getErrorMessage(Long currentRequestSize, Long maxSize) { - return String.format(ERROR, getReadableByteCount(currentRequestSize), - getReadableByteCount(maxSize)); + return String.format(ERROR, getReadableByteCount(currentRequestSize), getReadableByteCount(maxSize)); } private static String getReadableByteCount(long bytes) { @@ -63,24 +62,20 @@ public class RequestSizeGatewayFilterFactory extends } @Override - public GatewayFilter apply( - RequestSizeGatewayFilterFactory.RequestSizeConfig requestSizeConfig) { + public GatewayFilter apply(RequestSizeGatewayFilterFactory.RequestSizeConfig requestSizeConfig) { requestSizeConfig.validate(); return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); String contentLength = request.getHeaders().getFirst("content-length"); if (!StringUtils.isEmpty(contentLength)) { Long currentRequestSize = Long.valueOf(contentLength); if (currentRequestSize > requestSizeConfig.getMaxSize().toBytes()) { - exchange.getResponse() - .setStatusCode(HttpStatus.PAYLOAD_TOO_LARGE); + exchange.getResponse().setStatusCode(HttpStatus.PAYLOAD_TOO_LARGE); if (!exchange.getResponse().isCommitted()) { exchange.getResponse().getHeaders().add("errorMessage", - getErrorMessage(currentRequestSize, - requestSizeConfig.getMaxSize().toBytes())); + getErrorMessage(currentRequestSize, requestSizeConfig.getMaxSize().toBytes())); } return exchange.getResponse().setComplete(); } @@ -105,8 +100,7 @@ public class RequestSizeGatewayFilterFactory extends return maxSize; } - public RequestSizeGatewayFilterFactory.RequestSizeConfig setMaxSize( - DataSize maxSize) { + public RequestSizeGatewayFilterFactory.RequestSizeConfig setMaxSize(DataSize maxSize) { this.maxSize = maxSize; return this; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java index 148f591a..db63bae8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java @@ -48,8 +48,7 @@ import org.springframework.web.server.ServerWebExchange; import static org.springframework.cloud.gateway.support.GatewayToStringStyler.filterToStringCreator; -public class RetryGatewayFilterFactory - extends AbstractGatewayFilterFactory { +public class RetryGatewayFilterFactory extends AbstractGatewayFilterFactory { /** * Retry iteration key. @@ -80,8 +79,7 @@ public class RetryGatewayFilterFactory HttpStatus statusCode = exchange.getResponse().getStatusCode(); - boolean retryableStatusCode = retryConfig.getStatuses() - .contains(statusCode); + boolean retryableStatusCode = retryConfig.getStatuses().contains(statusCode); if (!retryableStatusCode && statusCode != null) { // null status code // might mean a @@ -93,14 +91,14 @@ public class RetryGatewayFilterFactory final boolean finalRetryableStatusCode = retryableStatusCode; trace("retryableStatusCode: %b, statusCode %s, configured statuses %s, configured series %s", - () -> finalRetryableStatusCode, () -> statusCode, - retryConfig::getStatuses, retryConfig::getSeries); + () -> finalRetryableStatusCode, () -> statusCode, retryConfig::getStatuses, + retryConfig::getSeries); HttpMethod httpMethod = exchange.getRequest().getMethod(); boolean retryableMethod = retryConfig.getMethods().contains(httpMethod); - trace("retryableMethod: %b, httpMethod %s, configured methods %s", - () -> retryableMethod, () -> httpMethod, retryConfig::getMethods); + trace("retryableMethod: %b, httpMethod %s, configured methods %s", () -> retryableMethod, + () -> httpMethod, retryConfig::getMethods); return retryableMethod && finalRetryableStatusCode; }; @@ -126,54 +124,44 @@ public class RetryGatewayFilterFactory } Throwable exception = context.exception(); - for (Class retryableClass : retryConfig - .getExceptions()) { - if (retryableClass.isInstance(exception) || (exception != null - && retryableClass.isInstance(exception.getCause()))) { + for (Class retryableClass : retryConfig.getExceptions()) { + if (retryableClass.isInstance(exception) + || (exception != null && retryableClass.isInstance(exception.getCause()))) { trace("exception or its cause is retryable %s, configured exceptions %s", - () -> getExceptionNameWithCause(exception), - retryConfig::getExceptions); + () -> getExceptionNameWithCause(exception), retryConfig::getExceptions); HttpMethod httpMethod = exchange.getRequest().getMethod(); - boolean retryableMethod = retryConfig.getMethods() - .contains(httpMethod); - trace("retryableMethod: %b, httpMethod %s, configured methods %s", - () -> retryableMethod, () -> httpMethod, - retryConfig::getMethods); + boolean retryableMethod = retryConfig.getMethods().contains(httpMethod); + trace("retryableMethod: %b, httpMethod %s, configured methods %s", () -> retryableMethod, + () -> httpMethod, retryConfig::getMethods); return retryableMethod; } } trace("exception or its cause is not retryable %s, configured exceptions %s", - () -> getExceptionNameWithCause(exception), - retryConfig::getExceptions); + () -> getExceptionNameWithCause(exception), retryConfig::getExceptions); return false; }; exceptionRetry = Retry.onlyIf(retryContextPredicate) - .doOnRetry(context -> reset(context.applicationContext())) - .retryMax(retryConfig.getRetries()); + .doOnRetry(context -> reset(context.applicationContext())).retryMax(retryConfig.getRetries()); BackoffConfig backoff = retryConfig.getBackoff(); if (backoff != null) { exceptionRetry = exceptionRetry.backoff(getBackoff(backoff)); } } - GatewayFilter gatewayFilter = apply(retryConfig.getRouteId(), statusCodeRepeat, - exceptionRetry); + GatewayFilter gatewayFilter = apply(retryConfig.getRouteId(), statusCodeRepeat, exceptionRetry); return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { return gatewayFilter.filter(exchange, chain); } @Override public String toString() { - return filterToStringCreator(RetryGatewayFilterFactory.this) - .append("retries", retryConfig.getRetries()) - .append("series", retryConfig.getSeries()) - .append("statuses", retryConfig.getStatuses()) - .append("methods", retryConfig.getMethods()) - .append("exceptions", retryConfig.getExceptions()).toString(); + return filterToStringCreator(RetryGatewayFilterFactory.this).append("retries", retryConfig.getRetries()) + .append("series", retryConfig.getSeries()).append("statuses", retryConfig.getStatuses()) + .append("methods", retryConfig.getMethods()).append("exceptions", retryConfig.getExceptions()) + .toString(); } }; } @@ -193,18 +181,17 @@ public class RetryGatewayFilterFactory } private Backoff getBackoff(BackoffConfig backoff) { - return Backoff.exponential(backoff.firstBackoff, backoff.maxBackoff, - backoff.factor, backoff.basedOnPreviousValue); + return Backoff.exponential(backoff.firstBackoff, backoff.maxBackoff, backoff.factor, + backoff.basedOnPreviousValue); } - public boolean exceedsMaxIterations(ServerWebExchange exchange, - RetryConfig retryConfig) { + public boolean exceedsMaxIterations(ServerWebExchange exchange, RetryConfig retryConfig) { Integer iteration = exchange.getAttribute(RETRY_ITERATION_KEY); // TODO: deal with null iteration boolean exceeds = iteration != null && iteration >= retryConfig.getRetries(); - trace("exceedsMaxIterations %b, iteration %d, configured retries %d", - () -> exceeds, () -> iteration, retryConfig::getRetries); + trace("exceedsMaxIterations %b, iteration %d, configured retries %d", () -> exceeds, () -> iteration, + retryConfig::getRetries); return exceeds; } @@ -216,8 +203,7 @@ public class RetryGatewayFilterFactory ServerWebExchangeUtils.reset(exchange); } - public GatewayFilter apply(String routeId, Repeat repeat, - Retry retry) { + public GatewayFilter apply(String routeId, Repeat repeat, Retry retry) { if (routeId != null && getPublisher() != null) { // send an event to enable caching getPublisher().publishEvent(new EnableBodyCachingEvent(this, routeId)); @@ -228,20 +214,18 @@ public class RetryGatewayFilterFactory // chain.filter returns a Mono Publisher publisher = chain.filter(exchange) // .log("retry-filter", Level.INFO) - .doOnSuccess(aVoid -> updateIteration(exchange)) - .doOnError(throwable -> updateIteration(exchange)); + .doOnSuccess(aVoid -> updateIteration(exchange)).doOnError(throwable -> updateIteration(exchange)); if (retry != null) { // retryWhen returns a Mono // retry needs to go before repeat - publisher = ((Mono) publisher).retryWhen(reactor.util.retry.Retry - .withThrowable(retry.withApplicationContext(exchange))); + publisher = ((Mono) publisher) + .retryWhen(reactor.util.retry.Retry.withThrowable(retry.withApplicationContext(exchange))); } if (repeat != null) { // repeatWhen returns a Flux // so this needs to be last and the variable a Publisher - publisher = ((Mono) publisher) - .repeatWhen(repeat.withApplicationContext(exchange)); + publisher = ((Mono) publisher).repeatWhen(repeat.withApplicationContext(exchange)); } return Mono.fromDirect(publisher); @@ -281,8 +265,7 @@ public class RetryGatewayFilterFactory private List methods = toList(HttpMethod.GET); - private List> exceptions = toList(IOException.class, - TimeoutException.class); + private List> exceptions = toList(IOException.class, TimeoutException.class); private BackoffConfig backoff; @@ -292,9 +275,7 @@ public class RetryGatewayFilterFactory public void validate() { Assert.isTrue(this.retries > 0, "retries must be greater than 0"); - Assert.isTrue( - !this.series.isEmpty() || !this.statuses.isEmpty() - || !this.exceptions.isEmpty(), + Assert.isTrue(!this.series.isEmpty() || !this.statuses.isEmpty() || !this.exceptions.isEmpty(), "series, status and exceptions may not all be empty"); Assert.notEmpty(this.methods, "methods may not be empty"); if (this.backoff != null) { @@ -311,10 +292,9 @@ public class RetryGatewayFilterFactory return this; } - public RetryConfig setBackoff(Duration firstBackoff, Duration maxBackoff, - int factor, boolean basedOnPreviousValue) { - this.backoff = new BackoffConfig(firstBackoff, maxBackoff, factor, - basedOnPreviousValue); + public RetryConfig setBackoff(Duration firstBackoff, Duration maxBackoff, int factor, + boolean basedOnPreviousValue) { + this.backoff = new BackoffConfig(firstBackoff, maxBackoff, factor, basedOnPreviousValue); return this; } @@ -388,8 +368,7 @@ public class RetryGatewayFilterFactory public BackoffConfig() { } - public BackoffConfig(Duration firstBackoff, Duration maxBackoff, int factor, - boolean basedOnPreviousValue) { + public BackoffConfig(Duration firstBackoff, Duration maxBackoff, int factor, boolean basedOnPreviousValue) { this.firstBackoff = firstBackoff; this.maxBackoff = maxBackoff; this.factor = factor; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactory.java index 640c9f41..aa1a4844 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactory.java @@ -93,8 +93,8 @@ Modified (not) Location response header: http://object-service.prod.example.net/ /** * @author Vitaliy Pavlyuk */ -public class RewriteLocationResponseHeaderGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class RewriteLocationResponseHeaderGatewayFilterFactory + extends AbstractGatewayFilterFactory { private static final String STRIP_VERSION_KEY = "stripVersion"; @@ -108,11 +108,9 @@ public class RewriteLocationResponseHeaderGatewayFilterFactory extends private static final String DEFAULT_PROTOCOLS = "https?|ftps?"; - private static final Pattern DEFAULT_HOST_PORT = compileHostPortPattern( - DEFAULT_PROTOCOLS); + private static final Pattern DEFAULT_HOST_PORT = compileHostPortPattern(DEFAULT_PROTOCOLS); - private static final Pattern DEFAULT_HOST_PORT_VERSION = compileHostPortVersionPattern( - DEFAULT_PROTOCOLS); + private static final Pattern DEFAULT_HOST_PORT_VERSION = compileHostPortVersionPattern(DEFAULT_PROTOCOLS); public RewriteLocationResponseHeaderGatewayFilterFactory() { super(Config.class); @@ -123,24 +121,20 @@ public class RewriteLocationResponseHeaderGatewayFilterFactory extends } private static Pattern compileHostPortVersionPattern(String protocols) { - return Pattern.compile( - "(?<=^(?:" + protocols + ")://)[^:/]+(?::\\d+)?(?:/v\\d+)?(?=/)"); + return Pattern.compile("(?<=^(?:" + protocols + ")://)[^:/]+(?::\\d+)?(?:/v\\d+)?(?=/)"); } @Override public List shortcutFieldOrder() { - return Arrays.asList(STRIP_VERSION_KEY, LOCATION_HEADER_NAME_KEY, HOST_VALUE_KEY, - PROTOCOLS_KEY); + return Arrays.asList(STRIP_VERSION_KEY, LOCATION_HEADER_NAME_KEY, HOST_VALUE_KEY, PROTOCOLS_KEY); } @Override public GatewayFilter apply(Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { - return chain.filter(exchange) - .then(Mono.fromRunnable(() -> rewriteLocation(exchange, config))); + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + return chain.filter(exchange).then(Mono.fromRunnable(() -> rewriteLocation(exchange, config))); } @Override @@ -159,26 +153,21 @@ public class RewriteLocationResponseHeaderGatewayFilterFactory extends } void rewriteLocation(ServerWebExchange exchange, Config config) { - final String location = exchange.getResponse().getHeaders() - .getFirst(config.getLocationHeaderName()); + final String location = exchange.getResponse().getHeaders().getFirst(config.getLocationHeaderName()); final String host = config.getHostValue() != null ? config.getHostValue() : exchange.getRequest().getHeaders().getFirst(HttpHeaders.HOST); final String path = exchange.getRequest().getURI().getPath(); if (location != null && host != null) { - final String fixedLocation = fixedLocation(location, host, path, - config.getStripVersion(), config.getHostPortPattern(), - config.getHostPortVersionPattern()); - exchange.getResponse().getHeaders().set(config.getLocationHeaderName(), - fixedLocation); + final String fixedLocation = fixedLocation(location, host, path, config.getStripVersion(), + config.getHostPortPattern(), config.getHostPortVersionPattern()); + exchange.getResponse().getHeaders().set(config.getLocationHeaderName(), fixedLocation); } } - String fixedLocation(String location, String host, String path, - StripVersion stripVersion, Pattern hostPortPattern, + String fixedLocation(String location, String host, String path, StripVersion stripVersion, Pattern hostPortPattern, Pattern hostPortVersionPattern) { final boolean doStrip = StripVersion.ALWAYS_STRIP.equals(stripVersion) - || (StripVersion.AS_IN_REQUEST.equals(stripVersion) - && !VERSIONED_PATH.matcher(path).matches()); + || (StripVersion.AS_IN_REQUEST.equals(stripVersion) && !VERSIONED_PATH.matcher(path).matches()); final Pattern pattern = doStrip ? hostPortVersionPattern : hostPortPattern; return pattern.matcher(location).replaceFirst(host); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java index f4ffc18a..4594ec76 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java @@ -61,8 +61,7 @@ public class RewritePathGatewayFilterFactory String replacement = config.replacement.replace("$\\", "$"); return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest req = exchange.getRequest(); addOriginalRequestUrl(exchange, req.getURI()); String path = req.getURI().getRawPath(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java index a74cbdaa..6c6a5dd9 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactory.java @@ -32,8 +32,8 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * @author Vitaliy Pavlyuk */ -public class RewriteResponseHeaderGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class RewriteResponseHeaderGatewayFilterFactory + extends AbstractGatewayFilterFactory { /** * Regexp key. @@ -58,20 +58,15 @@ public class RewriteResponseHeaderGatewayFilterFactory extends public GatewayFilter apply(Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { - return chain.filter(exchange) - .then(Mono.fromRunnable(() -> rewriteHeaders(exchange, config))); + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + return chain.filter(exchange).then(Mono.fromRunnable(() -> rewriteHeaders(exchange, config))); } @Override public String toString() { - return filterToStringCreator( - RewriteResponseHeaderGatewayFilterFactory.this) - .append("name", config.getName()) - .append("regexp", config.getRegexp()) - .append("replacement", config.getReplacement()) - .toString(); + return filterToStringCreator(RewriteResponseHeaderGatewayFilterFactory.this) + .append("name", config.getName()).append("regexp", config.getRegexp()) + .append("replacement", config.getReplacement()).toString(); } }; } @@ -88,8 +83,7 @@ public class RewriteResponseHeaderGatewayFilterFactory extends } protected List rewriteHeaders(Config config, List headers) { - return headers.stream() - .map(val -> rewrite(val, config.getRegexp(), config.getReplacement())) + return headers.stream().map(val -> rewrite(val, config.getRegexp(), config.getReplacement())) .collect(Collectors.toList()); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactory.java index 1acb2e12..28e4aa56 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactory.java @@ -41,16 +41,13 @@ public class SaveSessionGatewayFilterFactory extends AbstractGatewayFilterFactor public GatewayFilter apply(Object config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { - return exchange.getSession().map(WebSession::save) - .then(chain.filter(exchange)); + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + return exchange.getSession().map(WebSession::save).then(chain.filter(exchange)); } @Override public String toString() { - return filterToStringCreator(SaveSessionGatewayFilterFactory.this) - .toString(); + return filterToStringCreator(SaveSessionGatewayFilterFactory.this).toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactory.java index 3c9e7dff..b1191be2 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactory.java @@ -86,20 +86,17 @@ public class SecureHeadersGatewayFilterFactory extends AbstractGatewayFilterFact return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { HttpHeaders headers = exchange.getResponse().getHeaders(); List disabled = properties.getDisable(); if (isEnabled(disabled, X_XSS_PROTECTION_HEADER)) { - headers.add(X_XSS_PROTECTION_HEADER, - properties.getXssProtectionHeader()); + headers.add(X_XSS_PROTECTION_HEADER, properties.getXssProtectionHeader()); } if (isEnabled(disabled, STRICT_TRANSPORT_SECURITY_HEADER)) { - headers.add(STRICT_TRANSPORT_SECURITY_HEADER, - properties.getStrictTransportSecurity()); + headers.add(STRICT_TRANSPORT_SECURITY_HEADER, properties.getStrictTransportSecurity()); } if (isEnabled(disabled, X_FRAME_OPTIONS_HEADER)) { @@ -107,8 +104,7 @@ public class SecureHeadersGatewayFilterFactory extends AbstractGatewayFilterFact } if (isEnabled(disabled, X_CONTENT_TYPE_OPTIONS_HEADER)) { - headers.add(X_CONTENT_TYPE_OPTIONS_HEADER, - properties.getContentTypeOptions()); + headers.add(X_CONTENT_TYPE_OPTIONS_HEADER, properties.getContentTypeOptions()); } if (isEnabled(disabled, REFERRER_POLICY_HEADER)) { @@ -116,18 +112,15 @@ public class SecureHeadersGatewayFilterFactory extends AbstractGatewayFilterFact } if (isEnabled(disabled, CONTENT_SECURITY_POLICY_HEADER)) { - headers.add(CONTENT_SECURITY_POLICY_HEADER, - properties.getContentSecurityPolicy()); + headers.add(CONTENT_SECURITY_POLICY_HEADER, properties.getContentSecurityPolicy()); } if (isEnabled(disabled, X_DOWNLOAD_OPTIONS_HEADER)) { - headers.add(X_DOWNLOAD_OPTIONS_HEADER, - properties.getDownloadOptions()); + headers.add(X_DOWNLOAD_OPTIONS_HEADER, properties.getDownloadOptions()); } if (isEnabled(disabled, X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER)) { - headers.add(X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER, - properties.getPermittedCrossDomainPolicies()); + headers.add(X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER, properties.getPermittedCrossDomainPolicies()); } return chain.filter(exchange); @@ -135,8 +128,7 @@ public class SecureHeadersGatewayFilterFactory extends AbstractGatewayFilterFact @Override public String toString() { - return filterToStringCreator(SecureHeadersGatewayFilterFactory.this) - .toString(); + return filterToStringCreator(SecureHeadersGatewayFilterFactory.this).toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersProperties.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersProperties.java index 9761768b..e3fc3d3a 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersProperties.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersProperties.java @@ -176,15 +176,13 @@ public class SecureHeadersProperties { public String toString() { final StringBuffer sb = new StringBuffer("SecureHeadersProperties{"); sb.append("xssProtectionHeader='").append(xssProtectionHeader).append('\''); - sb.append(", strictTransportSecurity='").append(strictTransportSecurity) - .append('\''); + sb.append(", strictTransportSecurity='").append(strictTransportSecurity).append('\''); sb.append(", frameOptions='").append(frameOptions).append('\''); sb.append(", contentTypeOptions='").append(contentTypeOptions).append('\''); sb.append(", referrerPolicy='").append(referrerPolicy).append('\''); sb.append(", contentSecurityPolicy='").append(contentSecurityPolicy).append('\''); sb.append(", downloadOptions='").append(downloadOptions).append('\''); - sb.append(", permittedCrossDomainPolicies='").append(permittedCrossDomainPolicies) - .append('\''); + sb.append(", permittedCrossDomainPolicies='").append(permittedCrossDomainPolicies).append('\''); sb.append(", disabled='").append(disable).append('\''); sb.append('}'); return sb.toString(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactory.java index b451026d..105d28d9 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactory.java @@ -37,8 +37,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.g /** * @author Spencer Gibb */ -public class SetPathGatewayFilterFactory - extends AbstractGatewayFilterFactory { +public class SetPathGatewayFilterFactory extends AbstractGatewayFilterFactory { /** * Template key. @@ -60,8 +59,7 @@ public class SetPathGatewayFilterFactory return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest req = exchange.getRequest(); addOriginalRequestUrl(exchange, req.getURI()); @@ -79,8 +77,8 @@ public class SetPathGatewayFilterFactory @Override public String toString() { - return filterToStringCreator(SetPathGatewayFilterFactory.this) - .append("template", config.getTemplate()).toString(); + return filterToStringCreator(SetPathGatewayFilterFactory.this).append("template", config.getTemplate()) + .toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactory.java index 575e4526..3874c47f 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactory.java @@ -29,19 +29,16 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * @author Spencer Gibb */ -public class SetRequestHeaderGatewayFilterFactory - extends AbstractNameValueGatewayFilterFactory { +public class SetRequestHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory { @Override public GatewayFilter apply(NameValueConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String value = ServerWebExchangeUtils.expand(exchange, config.getValue()); ServerHttpRequest request = exchange.getRequest().mutate() - .headers(httpHeaders -> httpHeaders.set(config.name, value)) - .build(); + .headers(httpHeaders -> httpHeaders.set(config.name, value)).build(); return chain.filter(exchange.mutate().request(request).build()); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactory.java index 645bf372..463553c8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactory.java @@ -33,8 +33,8 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.P /** * @author Andrew Fitzgerald */ -public class SetRequestHostHeaderGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class SetRequestHostHeaderGatewayFilterFactory + extends AbstractGatewayFilterFactory { public SetRequestHostHeaderGatewayFilterFactory() { super(Config.class); @@ -49,15 +49,13 @@ public class SetRequestHostHeaderGatewayFilterFactory extends public GatewayFilter apply(Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String value = ServerWebExchangeUtils.expand(exchange, config.getHost()); - ServerHttpRequest request = exchange.getRequest().mutate() - .headers(httpHeaders -> { - httpHeaders.remove("Host"); - httpHeaders.add("Host", value); - }).build(); + ServerHttpRequest request = exchange.getRequest().mutate().headers(httpHeaders -> { + httpHeaders.remove("Host"); + httpHeaders.add("Host", value); + }).build(); // Make sure the header we just set is preserved exchange.getAttributes().put(PRESERVE_HOST_HEADER_ATTRIBUTE, true); @@ -67,9 +65,8 @@ public class SetRequestHostHeaderGatewayFilterFactory extends @Override public String toString() { - return filterToStringCreator( - SetRequestHostHeaderGatewayFilterFactory.this) - .append(config.getHost()).toString(); + return filterToStringCreator(SetRequestHostHeaderGatewayFilterFactory.this).append(config.getHost()) + .toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java index e29c024a..a5a29018 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactory.java @@ -28,18 +28,16 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * @author Spencer Gibb */ -public class SetResponseHeaderGatewayFilterFactory - extends AbstractNameValueGatewayFilterFactory { +public class SetResponseHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory { @Override public GatewayFilter apply(NameValueConfig config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { String value = ServerWebExchangeUtils.expand(exchange, config.getValue()); - return chain.filter(exchange).then(Mono.fromRunnable(() -> exchange - .getResponse().getHeaders().set(config.name, value))); + return chain.filter(exchange) + .then(Mono.fromRunnable(() -> exchange.getResponse().getHeaders().set(config.name, value))); } @Override diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactory.java index 4609a6c8..bba73683 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactory.java @@ -36,8 +36,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.s * @author Spencer Gibb */ @ConfigurationProperties("spring.cloud.gateway.set-status") -public class SetStatusGatewayFilterFactory - extends AbstractGatewayFilterFactory { +public class SetStatusGatewayFilterFactory extends AbstractGatewayFilterFactory { /** * Status key. @@ -64,8 +63,7 @@ public class SetStatusGatewayFilterFactory return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { // option 1 (runs in filter order) /* * exchange.getResponse().beforeCommit(() -> { @@ -78,8 +76,7 @@ public class SetStatusGatewayFilterFactory // check not really needed, since it is guarded in setStatusCode, // but it's a good example HttpStatus statusCode = exchange.getResponse().getStatusCode(); - boolean isStatusCodeUpdated = setResponseStatus(exchange, - statusHolder); + boolean isStatusCodeUpdated = setResponseStatus(exchange, statusHolder); if (isStatusCodeUpdated && originalStatusHeaderName != null) { exchange.getResponse().getHeaders().set(originalStatusHeaderName, singletonList(statusCode.value()).toString()); @@ -89,8 +86,8 @@ public class SetStatusGatewayFilterFactory @Override public String toString() { - return filterToStringCreator(SetStatusGatewayFilterFactory.this) - .append("status", config.getStatus()).toString(); + return filterToStringCreator(SetStatusGatewayFilterFactory.this).append("status", config.getStatus()) + .toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactory.java index 76af2e44..f495684d 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactory.java @@ -51,8 +51,8 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.r /** * @author Ryan Baxter */ -public abstract class SpringCloudCircuitBreakerFilterFactory extends - AbstractGatewayFilterFactory { +public abstract class SpringCloudCircuitBreakerFilterFactory + extends AbstractGatewayFilterFactory { private ReactiveCircuitBreakerFactory reactiveCircuitBreakerFactory; @@ -63,8 +63,7 @@ public abstract class SpringCloudCircuitBreakerFilterFactory extends // do not use this dispatcherHandler directly, use getDispatcherHandler() instead. private volatile DispatcherHandler dispatcherHandler; - public SpringCloudCircuitBreakerFilterFactory( - ReactiveCircuitBreakerFactory reactiveCircuitBreakerFactory, + public SpringCloudCircuitBreakerFilterFactory(ReactiveCircuitBreakerFactory reactiveCircuitBreakerFactory, ObjectProvider dispatcherHandlerProvider) { super(Config.class); this.reactiveCircuitBreakerFactory = reactiveCircuitBreakerFactory; @@ -87,15 +86,13 @@ public abstract class SpringCloudCircuitBreakerFilterFactory extends @Override public GatewayFilter apply(Config config) { ReactiveCircuitBreaker cb = reactiveCircuitBreakerFactory.create(config.getId()); - Set statuses = config.getStatusCodes().stream() - .map(HttpStatusHolder::parse) - .filter(statusHolder -> statusHolder.getHttpStatus() != null) - .map(HttpStatusHolder::getHttpStatus).collect(Collectors.toSet()); + Set statuses = config.getStatusCodes().stream().map(HttpStatusHolder::parse) + .filter(statusHolder -> statusHolder.getHttpStatus() != null).map(HttpStatusHolder::getHttpStatus) + .collect(Collectors.toSet()); return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { return cb.run(chain.filter(exchange).doOnSuccess(v -> { if (statuses.contains(exchange.getResponse().getStatusCode())) { HttpStatus status = exchange.getResponse().getStatusCode(); @@ -112,9 +109,8 @@ public abstract class SpringCloudCircuitBreakerFilterFactory extends URI uri = exchange.getRequest().getURI(); // TODO: assume always? boolean encoded = containsEncodedParts(uri); - URI requestUrl = UriComponentsBuilder.fromUri(uri).host(null) - .port(null).uri(config.getFallbackUri()).scheme(null) - .build(encoded).toUri(); + URI requestUrl = UriComponentsBuilder.fromUri(uri).host(null).port(null) + .uri(config.getFallbackUri()).scheme(null).build(encoded).toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl); addExceptionDetails(t, exchange); @@ -123,18 +119,15 @@ public abstract class SpringCloudCircuitBreakerFilterFactory extends // is to another route in the Gateway removeAlreadyRouted(exchange); - ServerHttpRequest request = exchange.getRequest().mutate() - .uri(requestUrl).build(); - return getDispatcherHandler() - .handle(exchange.mutate().request(request).build()); + ServerHttpRequest request = exchange.getRequest().mutate().uri(requestUrl).build(); + return getDispatcherHandler().handle(exchange.mutate().request(request).build()); }).onErrorResume(t -> handleErrorWithoutFallback(t)); } @Override public String toString() { return filterToStringCreator(SpringCloudCircuitBreakerFilterFactory.this) - .append("name", config.getName()) - .append("fallback", config.fallbackUri).toString(); + .append("name", config.getName()).append("fallback", config.fallbackUri).toString(); } }; } @@ -142,8 +135,8 @@ public abstract class SpringCloudCircuitBreakerFilterFactory extends protected abstract Mono handleErrorWithoutFallback(Throwable t); private void addExceptionDetails(Throwable t, ServerWebExchange exchange) { - ofNullable(t).ifPresent(exception -> exchange.getAttributes() - .put(CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR, exception)); + ofNullable(t).ifPresent( + exception -> exchange.getAttributes().put(CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR, exception)); } @Override diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactory.java index 8c61d275..55c04c35 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactory.java @@ -29,8 +29,7 @@ import org.springframework.web.server.ResponseStatusException; /** * @author Ryan Baxter */ -public class SpringCloudCircuitBreakerResilience4JFilterFactory - extends SpringCloudCircuitBreakerFilterFactory { +public class SpringCloudCircuitBreakerResilience4JFilterFactory extends SpringCloudCircuitBreakerFilterFactory { public SpringCloudCircuitBreakerResilience4JFilterFactory( ReactiveCircuitBreakerFactory reactiveCircuitBreakerFactory, @@ -41,8 +40,7 @@ public class SpringCloudCircuitBreakerResilience4JFilterFactory @Override protected Mono handleErrorWithoutFallback(Throwable t) { if (java.util.concurrent.TimeoutException.class.isInstance(t)) { - return Mono.error(new ResponseStatusException(HttpStatus.GATEWAY_TIMEOUT, - t.getMessage(), t)); + return Mono.error(new ResponseStatusException(HttpStatus.GATEWAY_TIMEOUT, t.getMessage(), t)); } if (CallNotPermittedException.class.isInstance(t)) { return Mono.error(new ServiceUnavailableException()); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactory.java index aea6f5b9..9846013a 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactory.java @@ -59,27 +59,24 @@ public class StripPrefixGatewayFilterFactory public GatewayFilter apply(Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); addOriginalRequestUrl(exchange, request.getURI()); String path = request.getURI().getRawPath(); - String newPath = "/" - + Arrays.stream(StringUtils.tokenizeToStringArray(path, "/")) - .skip(config.parts).collect(Collectors.joining("/")); + String newPath = "/" + Arrays.stream(StringUtils.tokenizeToStringArray(path, "/")).skip(config.parts) + .collect(Collectors.joining("/")); newPath += (newPath.length() > 1 && path.endsWith("/") ? "/" : ""); ServerHttpRequest newRequest = request.mutate().path(newPath).build(); - exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, - newRequest.getURI()); + exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI()); return chain.filter(exchange.mutate().request(newRequest).build()); } @Override public String toString() { - return filterToStringCreator(StripPrefixGatewayFilterFactory.this) - .append("parts", config.getParts()).toString(); + return filterToStringCreator(StripPrefixGatewayFilterFactory.this).append("parts", config.getParts()) + .toString(); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/CachedBodyOutputMessage.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/CachedBodyOutputMessage.java index d34adbe2..b2182f3f 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/CachedBodyOutputMessage.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/CachedBodyOutputMessage.java @@ -40,8 +40,8 @@ public class CachedBodyOutputMessage implements ReactiveHttpOutputMessage { private boolean cached = false; - private Flux body = Flux.error(new IllegalStateException( - "The body is not set. " + "Did handling complete with success?")); + private Flux body = Flux + .error(new IllegalStateException("The body is not set. " + "Did handling complete with success?")); public CachedBodyOutputMessage(ServerWebExchange exchange, HttpHeaders httpHeaders) { this.bufferFactory = exchange.getResponse().bufferFactory(); @@ -87,8 +87,7 @@ public class CachedBodyOutputMessage implements ReactiveHttpOutputMessage { } @Override - public Mono writeAndFlushWith( - Publisher> body) { + public Mono writeAndFlushWith(Publisher> body) { return writeWith(Flux.from(body).flatMap(p -> p)); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java index 0be986f4..f0f96eb8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactory.java @@ -43,8 +43,8 @@ import static org.springframework.cloud.gateway.support.GatewayToStringStyler.fi /** * GatewayFilter that modifies the request body. */ -public class ModifyRequestBodyGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class ModifyRequestBodyGatewayFilterFactory + extends AbstractGatewayFilterFactory { private final List> messageReaders; @@ -53,8 +53,7 @@ public class ModifyRequestBodyGatewayFilterFactory extends this.messageReaders = HandlerStrategies.withDefaults().messageReaders(); } - public ModifyRequestBodyGatewayFilterFactory( - List> messageReaders) { + public ModifyRequestBodyGatewayFilterFactory(List> messageReaders) { super(Config.class); this.messageReaders = messageReaders; } @@ -64,21 +63,16 @@ public class ModifyRequestBodyGatewayFilterFactory extends public GatewayFilter apply(Config config) { return new GatewayFilter() { @Override - public Mono filter(ServerWebExchange exchange, - GatewayFilterChain chain) { + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { Class inClass = config.getInClass(); - ServerRequest serverRequest = ServerRequest.create(exchange, - messageReaders); + ServerRequest serverRequest = ServerRequest.create(exchange, messageReaders); // TODO: flux or mono Mono modifiedBody = serverRequest.bodyToMono(inClass) - .flatMap(originalBody -> config.getRewriteFunction() - .apply(exchange, originalBody)) - .switchIfEmpty(Mono.defer(() -> (Mono) config.getRewriteFunction() - .apply(exchange, null))); + .flatMap(originalBody -> config.getRewriteFunction().apply(exchange, originalBody)) + .switchIfEmpty(Mono.defer(() -> (Mono) config.getRewriteFunction().apply(exchange, null))); - BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody, - config.getOutClass()); + BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody, config.getOutClass()); HttpHeaders headers = new HttpHeaders(); headers.putAll(exchange.getRequest().getHeaders()); @@ -91,35 +85,29 @@ public class ModifyRequestBodyGatewayFilterFactory extends if (config.getContentType() != null) { headers.set(HttpHeaders.CONTENT_TYPE, config.getContentType()); } - CachedBodyOutputMessage outputMessage = new CachedBodyOutputMessage( - exchange, headers); + CachedBodyOutputMessage outputMessage = new CachedBodyOutputMessage(exchange, headers); return bodyInserter.insert(outputMessage, new BodyInserterContext()) // .log("modify_request", Level.INFO) .then(Mono.defer(() -> { - ServerHttpRequest decorator = decorate(exchange, headers, - outputMessage); - return chain - .filter(exchange.mutate().request(decorator).build()); - })).onErrorResume( - (Function>) throwable -> release( - exchange, outputMessage, throwable)); + ServerHttpRequest decorator = decorate(exchange, headers, outputMessage); + return chain.filter(exchange.mutate().request(decorator).build()); + })).onErrorResume((Function>) throwable -> release(exchange, + outputMessage, throwable)); } @Override public String toString() { return filterToStringCreator(ModifyRequestBodyGatewayFilterFactory.this) - .append("Content type", config.getContentType()) - .append("In class", config.getInClass()) + .append("Content type", config.getContentType()).append("In class", config.getInClass()) .append("Out class", config.getOutClass()).toString(); } }; } - protected Mono release(ServerWebExchange exchange, - CachedBodyOutputMessage outputMessage, Throwable throwable) { + protected Mono release(ServerWebExchange exchange, CachedBodyOutputMessage outputMessage, + Throwable throwable) { if (outputMessage.isCached()) { - return outputMessage.getBody().map(DataBufferUtils::release) - .then(Mono.error(throwable)); + return outputMessage.getBody().map(DataBufferUtils::release).then(Mono.error(throwable)); } return Mono.error(throwable); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactory.java index 7c136e3b..d365ed67 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactory.java @@ -52,8 +52,8 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.O /** * GatewayFilter that modifies the response body. */ -public class ModifyResponseBodyGatewayFilterFactory extends - AbstractGatewayFilterFactory { +public class ModifyResponseBodyGatewayFilterFactory + extends AbstractGatewayFilterFactory { private final Map messageBodyDecoders; @@ -61,10 +61,8 @@ public class ModifyResponseBodyGatewayFilterFactory extends private final List> messageReaders; - public ModifyResponseBodyGatewayFilterFactory( - List> messageReaders, - Set messageBodyDecoders, - Set messageBodyEncoders) { + public ModifyResponseBodyGatewayFilterFactory(List> messageReaders, + Set messageBodyDecoders, Set messageBodyEncoders) { super(Config.class); this.messageReaders = messageReaders; this.messageBodyDecoders = messageBodyDecoders.stream() @@ -75,8 +73,7 @@ public class ModifyResponseBodyGatewayFilterFactory extends @Override public GatewayFilter apply(Config config) { - ModifyResponseGatewayFilter gatewayFilter = new ModifyResponseGatewayFilter( - config); + ModifyResponseGatewayFilter gatewayFilter = new ModifyResponseGatewayFilter(config); gatewayFilter.setFactory(this); return gatewayFilter; } @@ -171,8 +168,7 @@ public class ModifyResponseBodyGatewayFilterFactory extends @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - return chain.filter(exchange.mutate() - .response(new ModifiedServerHttpResponse(exchange, config)).build()); + return chain.filter(exchange.mutate().response(new ModifiedServerHttpResponse(exchange, config)).build()); } @Override @@ -182,12 +178,9 @@ public class ModifyResponseBodyGatewayFilterFactory extends @Override public String toString() { - Object obj = (this.gatewayFilterFactory != null) ? this.gatewayFilterFactory - : this; - return filterToStringCreator(obj) - .append("New content type", config.getNewContentType()) - .append("In class", config.getInClass()) - .append("Out class", config.getOutClass()).toString(); + Object obj = (this.gatewayFilterFactory != null) ? this.gatewayFilterFactory : this; + return filterToStringCreator(obj).append("New content type", config.getNewContentType()) + .append("In class", config.getInClass()).append("Out class", config.getOutClass()).toString(); } public void setFactory(GatewayFilterFactory gatewayFilterFactory) { @@ -215,8 +208,7 @@ public class ModifyResponseBodyGatewayFilterFactory extends Class inClass = config.getInClass(); Class outClass = config.getOutClass(); - String originalResponseContentType = exchange - .getAttribute(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR); + String originalResponseContentType = exchange.getAttribute(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR); HttpHeaders httpHeaders = new HttpHeaders(); // explicitly add it in this way instead of // 'httpHeaders.setContentType(originalResponseContentType)' @@ -228,62 +220,48 @@ public class ModifyResponseBodyGatewayFilterFactory extends // TODO: flux or mono Mono modifiedBody = extractBody(exchange, clientResponse, inClass) - .flatMap(originalBody -> config.getRewriteFunction().apply(exchange, - originalBody)) - .switchIfEmpty(Mono.defer(() -> (Mono) config.getRewriteFunction() - .apply(exchange, null))); + .flatMap(originalBody -> config.getRewriteFunction().apply(exchange, originalBody)) + .switchIfEmpty(Mono.defer(() -> (Mono) config.getRewriteFunction().apply(exchange, null))); - BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody, - outClass); + BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody, outClass); CachedBodyOutputMessage outputMessage = new CachedBodyOutputMessage(exchange, exchange.getResponse().getHeaders()); - return bodyInserter.insert(outputMessage, new BodyInserterContext()) - .then(Mono.defer(() -> { - Mono messageBody = writeBody(getDelegate(), - outputMessage, outClass); - HttpHeaders headers = getDelegate().getHeaders(); - if (!headers.containsKey(HttpHeaders.TRANSFER_ENCODING) - || headers.containsKey(HttpHeaders.CONTENT_LENGTH)) { - messageBody = messageBody.doOnNext(data -> headers - .setContentLength(data.readableByteCount())); - } - // TODO: fail if isStreamingMediaType? - return getDelegate().writeWith(messageBody); - })); + return bodyInserter.insert(outputMessage, new BodyInserterContext()).then(Mono.defer(() -> { + Mono messageBody = writeBody(getDelegate(), outputMessage, outClass); + HttpHeaders headers = getDelegate().getHeaders(); + if (!headers.containsKey(HttpHeaders.TRANSFER_ENCODING) + || headers.containsKey(HttpHeaders.CONTENT_LENGTH)) { + messageBody = messageBody.doOnNext(data -> headers.setContentLength(data.readableByteCount())); + } + // TODO: fail if isStreamingMediaType? + return getDelegate().writeWith(messageBody); + })); } @Override - public Mono writeAndFlushWith( - Publisher> body) { + public Mono writeAndFlushWith(Publisher> body) { return writeWith(Flux.from(body).flatMapSequential(p -> p)); } - private ClientResponse prepareClientResponse(Publisher body, - HttpHeaders httpHeaders) { + private ClientResponse prepareClientResponse(Publisher body, HttpHeaders httpHeaders) { ClientResponse.Builder builder; - builder = ClientResponse.create(exchange.getResponse().getStatusCode(), - messageReaders); - return builder.headers(headers -> headers.putAll(httpHeaders)) - .body(Flux.from(body)).build(); + builder = ClientResponse.create(exchange.getResponse().getStatusCode(), messageReaders); + return builder.headers(headers -> headers.putAll(httpHeaders)).body(Flux.from(body)).build(); } - private Mono extractBody(ServerWebExchange exchange, - ClientResponse clientResponse, Class inClass) { + private Mono extractBody(ServerWebExchange exchange, ClientResponse clientResponse, Class inClass) { // if inClass is byte[] then just return body, otherwise check if // decoding required if (byte[].class.isAssignableFrom(inClass)) { return clientResponse.bodyToMono(inClass); } - List encodingHeaders = exchange.getResponse().getHeaders() - .getOrEmpty(HttpHeaders.CONTENT_ENCODING); + List encodingHeaders = exchange.getResponse().getHeaders().getOrEmpty(HttpHeaders.CONTENT_ENCODING); for (String encoding : encodingHeaders) { MessageBodyDecoder decoder = messageBodyDecoders.get(encoding); if (decoder != null) { - return clientResponse.bodyToMono(byte[].class) - .publishOn(Schedulers.parallel()).map(decoder::decode) - .map(bytes -> exchange.getResponse().bufferFactory() - .wrap(bytes)) + return clientResponse.bodyToMono(byte[].class).publishOn(Schedulers.parallel()).map(decoder::decode) + .map(bytes -> exchange.getResponse().bufferFactory().wrap(bytes)) .map(buffer -> prepareClientResponse(Mono.just(buffer), exchange.getResponse().getHeaders())) .flatMap(response -> response.bodyToMono(inClass)); @@ -293,15 +271,14 @@ public class ModifyResponseBodyGatewayFilterFactory extends return clientResponse.bodyToMono(inClass); } - private Mono writeBody(ServerHttpResponse httpResponse, - CachedBodyOutputMessage message, Class outClass) { + private Mono writeBody(ServerHttpResponse httpResponse, CachedBodyOutputMessage message, + Class outClass) { Mono response = DataBufferUtils.join(message.getBody()); if (byte[].class.isAssignableFrom(outClass)) { return response; } - List encodingHeaders = httpResponse.getHeaders() - .getOrEmpty(HttpHeaders.CONTENT_ENCODING); + List encodingHeaders = httpResponse.getHeaders().getOrEmpty(HttpHeaders.CONTENT_ENCODING); for (String encoding : encodingHeaders) { MessageBodyEncoder encoder = messageBodyEncoders.get(encoding); if (encoder != null) { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/RewriteFunction.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/RewriteFunction.java index 0ebb6c9b..1978660a 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/RewriteFunction.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/rewrite/RewriteFunction.java @@ -28,7 +28,6 @@ import org.springframework.web.server.ServerWebExchange; * @param the type of the first argument to the function * @param the type of element signaled by the {@link Publisher} */ -public interface RewriteFunction - extends BiFunction> { +public interface RewriteFunction extends BiFunction> { } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java index c40779f4..8f116718 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilter.java @@ -69,8 +69,7 @@ public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { } @Nullable - /* for testing */ static LinkedCaseInsensitiveMap splitIntoCaseInsensitiveMap( - String[] pairs) { + /* for testing */ static LinkedCaseInsensitiveMap splitIntoCaseInsensitiveMap(String[] pairs) { if (ObjectUtils.isEmpty(pairs)) { return null; } @@ -98,8 +97,7 @@ public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { HttpHeaders updated = new HttpHeaders(); // copy all headers except Forwarded - original.entrySet().stream().filter( - entry -> !entry.getKey().toLowerCase().equalsIgnoreCase(FORWARDED_HEADER)) + original.entrySet().stream().filter(entry -> !entry.getKey().toLowerCase().equalsIgnoreCase(FORWARDED_HEADER)) .forEach(entry -> updated.addAll(entry.getKey(), entry.getValue())); List forwardeds = parse(original.get(FORWARDED_HEADER)); @@ -111,8 +109,7 @@ public class ForwardedHeadersFilter implements HttpHeadersFilter, Ordered { // TODO: add new forwarded URI uri = request.getURI(); String host = original.getFirst(HttpHeaders.HOST); - Forwarded forwarded = new Forwarded().put("host", host).put("proto", - uri.getScheme()); + Forwarded forwarded = new Forwarded().put("host", host).put("proto", uri.getScheme()); InetSocketAddress remoteAddress = request.getRemoteAddress(); if (remoteAddress != null) { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilter.java index 0fadfacc..042852e4 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilter.java @@ -23,23 +23,20 @@ import org.springframework.web.server.ServerWebExchange; public interface HttpHeadersFilter { - static HttpHeaders filterRequest(List filters, - ServerWebExchange exchange) { + static HttpHeaders filterRequest(List filters, ServerWebExchange exchange) { HttpHeaders headers = exchange.getRequest().getHeaders(); return filter(filters, headers, exchange, Type.REQUEST); } - static HttpHeaders filter(List filters, HttpHeaders input, - ServerWebExchange exchange, Type type) { + static HttpHeaders filter(List filters, HttpHeaders input, ServerWebExchange exchange, + Type type) { HttpHeaders response = input; if (filters != null) { - HttpHeaders reduce = filters.stream() - .filter(headersFilter -> headersFilter.supports(type)).reduce(input, - (headers, filter) -> filter.filter(headers, exchange), - (httpHeaders, httpHeaders2) -> { - httpHeaders.addAll(httpHeaders2); - return httpHeaders; - }); + HttpHeaders reduce = filters.stream().filter(headersFilter -> headersFilter.supports(type)).reduce(input, + (headers, filter) -> filter.filter(headers, exchange), (httpHeaders, httpHeaders2) -> { + httpHeaders.addAll(httpHeaders2); + return httpHeaders; + }); return reduce; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilter.java index ce0f465b..20f01593 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilter.java @@ -32,9 +32,8 @@ public class RemoveHopByHopHeadersFilter implements HttpHeadersFilter, Ordered { * Headers to remove as the result of applying the filter. */ public static final Set HEADERS_REMOVED_ON_REQUEST = new HashSet<>( - Arrays.asList("connection", "keep-alive", "transfer-encoding", "te", - "trailer", "proxy-authorization", "proxy-authenticate", - "x-application-context", "upgrade" + Arrays.asList("connection", "keep-alive", "transfer-encoding", "te", "trailer", "proxy-authorization", + "proxy-authenticate", "x-application-context", "upgrade" // these two are not listed in // https://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-14#section-7.1.3 // "proxy-connection", @@ -66,8 +65,7 @@ public class RemoveHopByHopHeadersFilter implements HttpHeadersFilter, Ordered { public HttpHeaders filter(HttpHeaders input, ServerWebExchange exchange) { HttpHeaders filtered = new HttpHeaders(); - input.entrySet().stream() - .filter(entry -> !this.headers.contains(entry.getKey().toLowerCase())) + input.entrySet().stream().filter(entry -> !this.headers.contains(entry.getKey().toLowerCase())) .forEach(entry -> filtered.addAll(entry.getKey(), entry.getValue())); return filtered; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java index 7906d24e..a15f7454 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilter.java @@ -201,11 +201,9 @@ public class XForwardedHeadersFilter implements HttpHeadersFilter, Ordered { HttpHeaders original = input; HttpHeaders updated = new HttpHeaders(); - original.entrySet().stream() - .forEach(entry -> updated.addAll(entry.getKey(), entry.getValue())); + original.entrySet().stream().forEach(entry -> updated.addAll(entry.getKey(), entry.getValue())); - if (isForEnabled() && request.getRemoteAddress() != null - && request.getRemoteAddress().getAddress() != null) { + if (isForEnabled() && request.getRemoteAddress() != null && request.getRemoteAddress().getAddress() != null) { String remoteAddr = request.getRemoteAddress().getAddress().getHostAddress(); write(updated, X_FORWARDED_FOR_HEADER, remoteAddr, isForAppend()); } @@ -223,8 +221,7 @@ public class XForwardedHeadersFilter implements HttpHeadersFilter, Ordered { // - see XForwardedHeadersFilterTests, so first get uris, then extract paths // and remove one from another if it's the ending part. - LinkedHashSet originalUris = exchange - .getAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + LinkedHashSet originalUris = exchange.getAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); URI requestUri = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); if (originalUris != null && requestUri != null) { @@ -239,8 +236,7 @@ public class XForwardedHeadersFilter implements HttpHeadersFilter, Ordered { String originalUriPath = stripTrailingSlash(originalUri); String requestUriPath = stripTrailingSlash(requestUri); - updateRequest(updated, originalUri, originalUriPath, - requestUriPath); + updateRequest(updated, originalUri, originalUriPath, requestUriPath); } }); @@ -263,13 +259,11 @@ public class XForwardedHeadersFilter implements HttpHeadersFilter, Ordered { return updated; } - private void updateRequest(HttpHeaders updated, URI originalUri, - String originalUriPath, String requestUriPath) { + private void updateRequest(HttpHeaders updated, URI originalUri, String originalUriPath, String requestUriPath) { String prefix; if (requestUriPath != null && (originalUriPath.endsWith(requestUriPath))) { prefix = substringBeforeLast(originalUriPath, requestUriPath); - if (prefix != null && prefix.length() > 0 - && prefix.length() <= originalUri.getPath().length()) { + if (prefix != null && prefix.length() > 0 && prefix.length() <= originalUri.getPath().length()) { write(updated, X_FORWARDED_PREFIX_HEADER, prefix, isPrefixAppend()); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/AbstractRateLimiter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/AbstractRateLimiter.java index 9387855f..4b0e0c18 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/AbstractRateLimiter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/AbstractRateLimiter.java @@ -58,24 +58,20 @@ public abstract class AbstractRateLimiter extends AbstractStatefulConfigurabl C routeConfig = newConfig(); if (this.configurationService != null) { - this.configurationService.with(routeConfig) - .name(this.configurationPropertyName).normalizedProperties(args) + this.configurationService.with(routeConfig).name(this.configurationPropertyName).normalizedProperties(args) .bind(); } getConfig().put(routeId, routeConfig); } private boolean hasRelevantKey(Map args) { - return args.keySet().stream() - .anyMatch(key -> key.startsWith(configurationPropertyName + ".")); + return args.keySet().stream().anyMatch(key -> key.startsWith(configurationPropertyName + ".")); } @Override public String toString() { - return new ToStringCreator(this) - .append("configurationPropertyName", configurationPropertyName) - .append("config", getConfig()).append("configClass", getConfigClass()) - .toString(); + return new ToStringCreator(this).append("configurationPropertyName", configurationPropertyName) + .append("config", getConfig()).append("configClass", getConfigClass()).toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java index d1e00558..dfa4a00e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiter.java @@ -52,8 +52,7 @@ import org.springframework.validation.annotation.Validated; * @author Denis Cutic */ @ConfigurationProperties("spring.cloud.gateway.redis-rate-limiter") -public class RedisRateLimiter extends AbstractRateLimiter - implements ApplicationContextAware { +public class RedisRateLimiter extends AbstractRateLimiter implements ApplicationContextAware { /** * Redis Rate Limiter property name. @@ -117,8 +116,8 @@ public class RedisRateLimiter extends AbstractRateLimiter> script, ConfigurationService configurationService) { + public RedisRateLimiter(ReactiveStringRedisTemplate redisTemplate, RedisScript> script, + ConfigurationService configurationService) { super(Config.class, CONFIGURATION_PROPERTY_NAME, configurationService); this.redisTemplate = redisTemplate; this.script = script; @@ -133,8 +132,7 @@ public class RedisRateLimiter extends AbstractRateLimiter keys = getKeys(id); // The arguments to the LUA script. time() returns unixtime in seconds. - List scriptArgs = Arrays.asList(replenishRate + "", - burstCapacity + "", Instant.now().getEpochSecond() + "", - requestedTokens + ""); + List scriptArgs = Arrays.asList(replenishRate + "", burstCapacity + "", + Instant.now().getEpochSecond() + "", requestedTokens + ""); // allowed, tokens_left = redis.eval(SCRIPT, keys, args) - Flux> flux = this.redisTemplate.execute(this.script, keys, - scriptArgs); + Flux> flux = this.redisTemplate.execute(this.script, keys, scriptArgs); // .log("redisratelimiter", Level.FINER); return flux.onErrorResume(throwable -> { if (log.isDebugEnabled()) { @@ -272,8 +267,7 @@ public class RedisRateLimiter extends AbstractRateLimiter headers = new HashMap<>(); if (isIncludeHeaders()) { headers.put(this.remainingHeader, tokensLeft.toString()); - headers.put(this.replenishRateHeader, - String.valueOf(config.getReplenishRate())); - headers.put(this.burstCapacityHeader, - String.valueOf(config.getBurstCapacity())); - headers.put(this.requestedTokensHeader, - String.valueOf(config.getRequestedTokens())); + headers.put(this.replenishRateHeader, String.valueOf(config.getReplenishRate())); + headers.put(this.burstCapacityHeader, String.valueOf(config.getBurstCapacity())); + headers.put(this.requestedTokensHeader, String.valueOf(config.getRequestedTokens())); } return headers; } @@ -363,8 +353,7 @@ public class RedisRateLimiter extends AbstractRateLimiter extends Function> { return new OrAsyncPredicate<>(this, other); } - static AsyncPredicate from( - Predicate predicate) { + static AsyncPredicate from(Predicate predicate) { return new DefaultAsyncPredicate<>(GatewayPredicate.wrapIfNeeded(predicate)); } @@ -99,8 +98,7 @@ public interface AsyncPredicate extends Function> { private final AsyncPredicate right; - public AndAsyncPredicate(AsyncPredicate left, - AsyncPredicate right) { + public AndAsyncPredicate(AsyncPredicate left, AsyncPredicate right) { Assert.notNull(left, "Left AsyncPredicate must not be null"); Assert.notNull(right, "Right AsyncPredicate must not be null"); this.left = left; @@ -109,8 +107,7 @@ public interface AsyncPredicate extends Function> { @Override public Publisher apply(T t) { - return Mono.from(left.apply(t)).flatMap( - result -> !result ? Mono.just(false) : Mono.from(right.apply(t))); + return Mono.from(left.apply(t)).flatMap(result -> !result ? Mono.just(false) : Mono.from(right.apply(t))); } @Override @@ -126,8 +123,7 @@ public interface AsyncPredicate extends Function> { private final AsyncPredicate right; - public OrAsyncPredicate(AsyncPredicate left, - AsyncPredicate right) { + public OrAsyncPredicate(AsyncPredicate left, AsyncPredicate right) { Assert.notNull(left, "Left AsyncPredicate must not be null"); Assert.notNull(right, "Right AsyncPredicate must not be null"); this.left = left; @@ -136,8 +132,7 @@ public interface AsyncPredicate extends Function> { @Override public Publisher apply(T t) { - return Mono.from(left.apply(t)).flatMap( - result -> result ? Mono.just(true) : Mono.from(right.apply(t))); + return Mono.from(left.apply(t)).flatMap(result -> result ? Mono.just(true) : Mono.from(right.apply(t))); } @Override diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java index a00a514e..8be3308b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/FilteringWebHandler.java @@ -113,8 +113,7 @@ public class FilteringWebHandler implements WebHandler { return Mono.defer(() -> { if (this.index < filters.size()) { GatewayFilter filter = filters.get(this.index); - DefaultGatewayFilterChain chain = new DefaultGatewayFilterChain(this, - this.index + 1); + DefaultGatewayFilterChain chain = new DefaultGatewayFilterChain(this, this.index + 1); return filter.filter(exchange, chain); } else { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java index 1c568898..9a8f160b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java @@ -48,9 +48,8 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { private final ManagementPortType managementPortType; - public RoutePredicateHandlerMapping(FilteringWebHandler webHandler, - RouteLocator routeLocator, GlobalCorsProperties globalCorsProperties, - Environment environment) { + public RoutePredicateHandlerMapping(FilteringWebHandler webHandler, RouteLocator routeLocator, + GlobalCorsProperties globalCorsProperties, Environment environment) { this.webHandler = webHandler; this.routeLocator = routeLocator; @@ -65,10 +64,8 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { if (this.managementPort != null && this.managementPort < 0) { return DISABLED; } - return ((this.managementPort == null - || (serverPort == null && this.managementPort.equals(8080)) - || (this.managementPort != 0 && this.managementPort.equals(serverPort))) - ? SAME : DIFFERENT); + return ((this.managementPort == null || (serverPort == null && this.managementPort.equals(8080)) + || (this.managementPort != 0 && this.managementPort.equals(serverPort))) ? SAME : DIFFERENT); } private static Integer getPortProperty(Environment environment, String prefix) { @@ -89,8 +86,7 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { .flatMap((Function>) r -> { exchange.getAttributes().remove(GATEWAY_PREDICATE_ROUTE_ATTR); if (logger.isDebugEnabled()) { - logger.debug( - "Mapping [" + getExchangeDesc(exchange) + "] to " + r); + logger.debug("Mapping [" + getExchangeDesc(exchange) + "] to " + r); } exchange.getAttributes().put(GATEWAY_ROUTE_ATTR, r); @@ -98,15 +94,13 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { }).switchIfEmpty(Mono.empty().then(Mono.fromRunnable(() -> { exchange.getAttributes().remove(GATEWAY_PREDICATE_ROUTE_ATTR); if (logger.isTraceEnabled()) { - logger.trace("No RouteDefinition found for [" - + getExchangeDesc(exchange) + "]"); + logger.trace("No RouteDefinition found for [" + getExchangeDesc(exchange) + "]"); } }))); } @Override - protected CorsConfiguration getCorsConfiguration(Object handler, - ServerWebExchange exchange) { + protected CorsConfiguration getCorsConfiguration(Object handler, ServerWebExchange exchange) { // TODO: support cors configuration via properties on a route see gh-229 // see RequestMappingHandlerMapping.initCorsConfiguration() // also see @@ -135,9 +129,7 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping { }) // instead of immediately stopping main flux due to error, log and // swallow it - .doOnError(e -> logger.error( - "Error applying predicate for route: " + route.getId(), - e)) + .doOnError(e -> logger.error("Error applying predicate for route: " + route.getId(), e)) .onErrorResume(e -> Mono.empty())) // .defaultIfEmpty() put a static Route not found // or .switchIfEmpty() diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactory.java index f33eed3d..3256de86 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactory.java @@ -28,8 +28,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Spencer Gibb */ -public class AfterRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class AfterRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * DateTime key. diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java index 25471c75..bae5fb01 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactory.java @@ -26,8 +26,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Spencer Gibb */ -public class BeforeRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class BeforeRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * DateTime key. diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactory.java index 2bd59beb..8f595ca8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactory.java @@ -30,8 +30,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Spencer Gibb */ -public class BetweenRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class BetweenRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * DateTime 1 key. @@ -61,14 +60,12 @@ public class BetweenRoutePredicateFactory @Override public boolean test(ServerWebExchange serverWebExchange) { final ZonedDateTime now = ZonedDateTime.now(); - return now.isAfter(config.getDatetime1()) - && now.isBefore(config.getDatetime2()); + return now.isAfter(config.getDatetime1()) && now.isBefore(config.getDatetime2()); } @Override public String toString() { - return String.format("Between: %s and %s", config.getDatetime1(), - config.getDatetime2()); + return String.format("Between: %s and %s", config.getDatetime1(), config.getDatetime2()); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactory.java index 4d5ed0d9..45c06c2a 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactory.java @@ -28,8 +28,7 @@ import org.springframework.web.server.ServerWebExchange; * @see Cloud Foundry * Route Service documentation */ -public class CloudFoundryRouteServiceRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class CloudFoundryRouteServiceRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * Forwarded URL header name. @@ -54,8 +53,7 @@ public class CloudFoundryRouteServiceRoutePredicateFactory @Override public Predicate apply(Object unused) { - return headerPredicate(X_CF_FORWARDED_URL) - .and(headerPredicate(X_CF_PROXY_SIGNATURE)) + return headerPredicate(X_CF_FORWARDED_URL).and(headerPredicate(X_CF_PROXY_SIGNATURE)) .and(headerPredicate(X_CF_PROXY_METADATA)); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactory.java index 01129da3..eb556474 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactory.java @@ -29,8 +29,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Spencer Gibb */ -public class CookieRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class CookieRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * Name key. @@ -56,8 +55,7 @@ public class CookieRoutePredicateFactory return new GatewayPredicate() { @Override public boolean test(ServerWebExchange exchange) { - List cookies = exchange.getRequest().getCookies() - .get(config.name); + List cookies = exchange.getRequest().getCookies().get(config.name); if (cookies == null) { return false; } @@ -71,8 +69,7 @@ public class CookieRoutePredicateFactory @Override public String toString() { - return String.format("Cookie: name=%s regexp=%s", config.name, - config.regexp); + return String.format("Cookie: name=%s regexp=%s", config.name, config.regexp); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactory.java index c774a26d..f63f11cf 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactory.java @@ -30,8 +30,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Spencer Gibb */ -public class HeaderRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class HeaderRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * Header key. @@ -59,16 +58,15 @@ public class HeaderRoutePredicateFactory return new GatewayPredicate() { @Override public boolean test(ServerWebExchange exchange) { - List values = exchange.getRequest().getHeaders() - .getOrDefault(config.header, Collections.emptyList()); + List values = exchange.getRequest().getHeaders().getOrDefault(config.header, + Collections.emptyList()); if (values.isEmpty()) { return false; } // values is now guaranteed to not be empty if (hasRegex) { // check if a header value matches - return values.stream() - .anyMatch(value -> value.matches(config.regexp)); + return values.stream().anyMatch(value -> value.matches(config.regexp)); } // there is a value and since regexp is empty, we only check existence. @@ -77,8 +75,7 @@ public class HeaderRoutePredicateFactory @Override public String toString() { - return String.format("Header: %s regexp=%s", config.header, - config.regexp); + return String.format("Header: %s regexp=%s", config.header, config.regexp); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactory.java index ae7a56c6..79ac8195 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactory.java @@ -33,8 +33,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Spencer Gibb */ -public class HostRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class HostRoutePredicateFactory extends AbstractRoutePredicateFactory { private PathMatcher pathMatcher = new AntPathMatcher("."); @@ -66,8 +65,8 @@ public class HostRoutePredicateFactory .filter(pattern -> pathMatcher.match(pattern, host)).findFirst(); if (optionalPattern.isPresent()) { - Map variables = pathMatcher - .extractUriTemplateVariables(optionalPattern.get(), host); + Map variables = pathMatcher.extractUriTemplateVariables(optionalPattern.get(), + host); ServerWebExchangeUtils.putUriTemplateVariables(exchange, variables); return true; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java index 9a631af3..009b7680 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactory.java @@ -30,8 +30,7 @@ import static java.util.Arrays.stream; * @author Spencer Gibb * @author Dennis Menge */ -public class MethodRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class MethodRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * Methods key. @@ -58,8 +57,7 @@ public class MethodRoutePredicateFactory @Override public boolean test(ServerWebExchange exchange) { HttpMethod requestMethod = exchange.getRequest().getMethod(); - return stream(config.getMethods()) - .anyMatch(httpMethod -> httpMethod == requestMethod); + return stream(config.getMethods()).anyMatch(httpMethod -> httpMethod == requestMethod); } @Override diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java index 26112625..4132816d 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java @@ -40,8 +40,7 @@ import static org.springframework.http.server.PathContainer.parsePath; * @author Spencer Gibb * @author Dhawal Kapil */ -public class PathRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class PathRoutePredicateFactory extends AbstractRoutePredicateFactory { private static final Log log = LogFactory.getLog(PathRoutePredicateFactory.class); @@ -53,11 +52,10 @@ public class PathRoutePredicateFactory super(Config.class); } - private static void traceMatch(String prefix, Object desired, Object actual, - boolean match) { + private static void traceMatch(String prefix, Object desired, Object actual, boolean match) { if (log.isTraceEnabled()) { - String message = String.format("%s \"%s\" %s against value \"%s\"", prefix, - desired, match ? "matches" : "does not match", actual); + String message = String.format("%s \"%s\" %s against value \"%s\"", prefix, desired, + match ? "matches" : "does not match", actual); log.trace(message); } } @@ -80,8 +78,7 @@ public class PathRoutePredicateFactory public Predicate apply(Config config) { final ArrayList pathPatterns = new ArrayList<>(); synchronized (this.pathPatternParser) { - pathPatternParser - .setMatchOptionalTrailingSeparator(config.isMatchTrailingSlash()); + pathPatternParser.setMatchOptionalTrailingSeparator(config.isMatchTrailingSlash()); config.getPatterns().forEach(pattern -> { PathPattern pathPattern = this.pathPatternParser.parse(pattern); pathPatterns.add(pathPattern); @@ -90,8 +87,7 @@ public class PathRoutePredicateFactory return new GatewayPredicate() { @Override public boolean test(ServerWebExchange exchange) { - PathContainer path = parsePath( - exchange.getRequest().getURI().getRawPath()); + PathContainer path = parsePath(exchange.getRequest().getURI().getRawPath()); Optional optionalPathPattern = pathPatterns.stream() .filter(pattern -> pattern.matches(path)).findFirst(); @@ -111,8 +107,8 @@ public class PathRoutePredicateFactory @Override public String toString() { - return String.format("Paths: %s, match trailing slash: %b", - config.getPatterns(), config.isMatchTrailingSlash()); + return String.format("Paths: %s, match trailing slash: %b", config.getPatterns(), + config.isMatchTrailingSlash()); } }; } @@ -145,8 +141,7 @@ public class PathRoutePredicateFactory * @deprecated use {@link #setMatchTrailingSlash(boolean)} */ @Deprecated - public Config setMatchOptionalTrailingSeparator( - boolean matchOptionalTrailingSeparator) { + public Config setMatchOptionalTrailingSeparator(boolean matchOptionalTrailingSeparator) { setMatchTrailingSlash(matchOptionalTrailingSeparator); return this; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateDefinition.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateDefinition.java index 926ab831..dc068910 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateDefinition.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/PredicateDefinition.java @@ -45,8 +45,8 @@ public class PredicateDefinition { public PredicateDefinition(String text) { int eqIdx = text.indexOf('='); if (eqIdx <= 0) { - throw new ValidationException("Unable to parse PredicateDefinition text '" - + text + "'" + ", must be of the form name=value"); + throw new ValidationException( + "Unable to parse PredicateDefinition text '" + text + "'" + ", must be of the form name=value"); } setName(text.substring(0, eqIdx)); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java index 7b30bba1..6f280d31 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactory.java @@ -29,8 +29,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Spencer Gibb */ -public class QueryRoutePredicateFactory - extends AbstractRoutePredicateFactory { +public class QueryRoutePredicateFactory extends AbstractRoutePredicateFactory { /** * Param key. @@ -58,12 +57,10 @@ public class QueryRoutePredicateFactory public boolean test(ServerWebExchange exchange) { if (!StringUtils.hasText(config.regexp)) { // check existence of header - return exchange.getRequest().getQueryParams() - .containsKey(config.param); + return exchange.getRequest().getQueryParams().containsKey(config.param); } - List values = exchange.getRequest().getQueryParams() - .get(config.param); + List values = exchange.getRequest().getQueryParams().get(config.param); if (values == null) { return false; } @@ -77,8 +74,7 @@ public class QueryRoutePredicateFactory @Override public String toString() { - return String.format("Query: param=%s regexp=%s", config.getParam(), - config.getRegexp()); + return String.format("Query: param=%s regexp=%s", config.getParam(), config.getRegexp()); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactory.java index 9dc30987..b7333250 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactory.java @@ -37,8 +37,7 @@ import org.springframework.web.server.ServerWebExchange; * The body is cached in memory so that possible subsequent calls to the predicate do not * need to deserialize again. */ -public class ReadBodyPredicateFactory - extends AbstractRoutePredicateFactory { +public class ReadBodyPredicateFactory extends AbstractRoutePredicateFactory { protected static final Log log = LogFactory.getLog(ReadBodyPredicateFactory.class); @@ -91,13 +90,10 @@ public class ReadBodyPredicateFactory else { return ServerWebExchangeUtils.cacheRequestBodyAndRequest(exchange, (serverHttpRequest) -> ServerRequest - .create(exchange.mutate().request(serverHttpRequest) - .build(), messageReaders) - .bodyToMono(inClass) - .doOnNext(objectValue -> exchange.getAttributes().put( - CACHE_REQUEST_BODY_OBJECT_KEY, objectValue)) - .map(objectValue -> config.getPredicate() - .test(objectValue))); + .create(exchange.mutate().request(serverHttpRequest).build(), messageReaders) + .bodyToMono(inClass).doOnNext(objectValue -> exchange.getAttributes() + .put(CACHE_REQUEST_BODY_OBJECT_KEY, objectValue)) + .map(objectValue -> config.getPredicate().test(objectValue))); } } @@ -111,8 +107,7 @@ public class ReadBodyPredicateFactory @Override @SuppressWarnings("unchecked") public Predicate apply(Config config) { - throw new UnsupportedOperationException( - "ReadBodyPredicateFactory is only async."); + throw new UnsupportedOperationException("ReadBodyPredicateFactory is only async."); } public static class Config { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactory.java index b52e1ae2..688d36b9 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactory.java @@ -43,8 +43,7 @@ import static org.springframework.cloud.gateway.support.ShortcutConfigurable.Sho public class RemoteAddrRoutePredicateFactory extends AbstractRoutePredicateFactory { - private static final Log log = LogFactory - .getLog(RemoteAddrRoutePredicateFactory.class); + private static final Log log = LogFactory.getLog(RemoteAddrRoutePredicateFactory.class); public RemoteAddrRoutePredicateFactory() { super(Config.class); @@ -76,15 +75,13 @@ public class RemoteAddrRoutePredicateFactory return new GatewayPredicate() { @Override public boolean test(ServerWebExchange exchange) { - InetSocketAddress remoteAddress = config.remoteAddressResolver - .resolve(exchange); + InetSocketAddress remoteAddress = config.remoteAddressResolver.resolve(exchange); if (remoteAddress != null && remoteAddress.getAddress() != null) { String hostAddress = remoteAddress.getAddress().getHostAddress(); String host = exchange.getRequest().getURI().getHost(); if (log.isDebugEnabled() && !hostAddress.equals(host)) { - log.debug("Remote addresses didn't match " + hostAddress + " != " - + host); + log.debug("Remote addresses didn't match " + hostAddress + " != " + host); } for (IpSubnetFilterRule source : sources) { @@ -113,8 +110,7 @@ public class RemoteAddrRoutePredicateFactory String ipAddress = ipAddressCidrPrefix[0]; int cidrPrefix = Integer.parseInt(ipAddressCidrPrefix[1]); - sources.add( - new IpSubnetFilterRule(ipAddress, cidrPrefix, IpFilterRuleType.ACCEPT)); + sources.add(new IpSubnetFilterRule(ipAddress, cidrPrefix, IpFilterRuleType.ACCEPT)); } @Validated @@ -141,8 +137,7 @@ public class RemoteAddrRoutePredicateFactory return this; } - public Config setRemoteAddressResolver( - RemoteAddressResolver remoteAddressResolver) { + public Config setRemoteAddressResolver(RemoteAddressResolver remoteAddressResolver) { this.remoteAddressResolver = remoteAddressResolver; return this; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactory.java index 6316b5cb..fe91fc80 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactory.java @@ -38,8 +38,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.W * @author Spencer Gibb */ // TODO: make this a generic Choose out of group predicate? -public class WeightRoutePredicateFactory - extends AbstractRoutePredicateFactory +public class WeightRoutePredicateFactory extends AbstractRoutePredicateFactory implements ApplicationEventPublisherAware { /** @@ -87,8 +86,7 @@ public class WeightRoutePredicateFactory return new GatewayPredicate() { @Override public boolean test(ServerWebExchange exchange) { - Map weights = exchange.getAttributeOrDefault(WEIGHT_ATTR, - Collections.emptyMap()); + Map weights = exchange.getAttributeOrDefault(WEIGHT_ATTR, Collections.emptyMap()); String routeId = exchange.getAttribute(GATEWAY_PREDICATE_ROUTE_ATTR); @@ -99,15 +97,14 @@ public class WeightRoutePredicateFactory String chosenRoute = weights.get(group); if (log.isTraceEnabled()) { - log.trace("in group weight: " + group + ", current route: " - + routeId + ", chosen route: " + chosenRoute); + log.trace("in group weight: " + group + ", current route: " + routeId + ", chosen route: " + + chosenRoute); } return routeId.equals(chosenRoute); } else if (log.isTraceEnabled()) { - log.trace("no weights found for group: " + group + ", current route: " - + routeId); + log.trace("no weights found for group: " + group + ", current route: " + routeId); } return false; @@ -115,8 +112,7 @@ public class WeightRoutePredicateFactory @Override public String toString() { - return String.format("Weight: %s %s", config.getGroup(), - config.getWeight()); + return String.format("Weight: %s %s", config.getGroup(), config.getWeight()); } }; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocator.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocator.java index 5a841a38..77ca4307 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocator.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocator.java @@ -30,8 +30,7 @@ import org.springframework.context.ApplicationListener; /** * @author Spencer Gibb */ -public class CachingRouteDefinitionLocator - implements RouteDefinitionLocator, ApplicationListener { +public class CachingRouteDefinitionLocator implements RouteDefinitionLocator, ApplicationListener { private static final String CACHE_KEY = "routeDefs"; @@ -43,8 +42,7 @@ public class CachingRouteDefinitionLocator public CachingRouteDefinitionLocator(RouteDefinitionLocator delegate) { this.delegate = delegate; - routeDefinitions = CacheFlux.lookup(cache, CACHE_KEY, RouteDefinition.class) - .onCacheMissResume(this::fetch); + routeDefinitions = CacheFlux.lookup(cache, CACHE_KEY, RouteDefinition.class).onCacheMissResume(this::fetch); } private Flux fetch() { @@ -67,8 +65,7 @@ public class CachingRouteDefinitionLocator @Override public void onApplicationEvent(RefreshRoutesEvent event) { - fetch().materialize().collect(Collectors.toList()) - .doOnNext(routes -> cache.put(CACHE_KEY, routes)).subscribe(); + fetch().materialize().collect(Collectors.toList()).doOnNext(routes -> cache.put(CACHE_KEY, routes)).subscribe(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java index 424e1d59..6b325652 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CachingRouteLocator.java @@ -37,8 +37,8 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; /** * @author Spencer Gibb */ -public class CachingRouteLocator implements Ordered, RouteLocator, - ApplicationListener, ApplicationEventPublisherAware { +public class CachingRouteLocator + implements Ordered, RouteLocator, ApplicationListener, ApplicationEventPublisherAware { private static final Log log = LogFactory.getLog(CachingRouteLocator.class); @@ -54,8 +54,7 @@ public class CachingRouteLocator implements Ordered, RouteLocator, public CachingRouteLocator(RouteLocator delegate) { this.delegate = delegate; - routes = CacheFlux.lookup(cache, CACHE_KEY, Route.class) - .onCacheMissResume(this::fetch); + routes = CacheFlux.lookup(cache, CACHE_KEY, Route.class).onCacheMissResume(this::fetch); } private Flux fetch() { @@ -79,10 +78,9 @@ public class CachingRouteLocator implements Ordered, RouteLocator, @Override public void onApplicationEvent(RefreshRoutesEvent event) { try { - fetch().collect(Collectors.toList()).subscribe(list -> Flux.fromIterable(list) - .materialize().collect(Collectors.toList()).subscribe(signals -> { - applicationEventPublisher - .publishEvent(new RefreshRoutesResultEvent(this)); + fetch().collect(Collectors.toList()).subscribe( + list -> Flux.fromIterable(list).materialize().collect(Collectors.toList()).subscribe(signals -> { + applicationEventPublisher.publishEvent(new RefreshRoutesResultEvent(this)); cache.put(CACHE_KEY, signals); }, throwable -> handleRefreshError(throwable))); } @@ -95,8 +93,7 @@ public class CachingRouteLocator implements Ordered, RouteLocator, if (log.isErrorEnabled()) { log.error("Refresh routes error !!!", throwable); } - applicationEventPublisher - .publishEvent(new RefreshRoutesResultEvent(this, throwable)); + applicationEventPublisher.publishEvent(new RefreshRoutesResultEvent(this, throwable)); } @Override @@ -105,8 +102,7 @@ public class CachingRouteLocator implements Ordered, RouteLocator, } @Override - public void setApplicationEventPublisher( - ApplicationEventPublisher applicationEventPublisher) { + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { this.applicationEventPublisher = applicationEventPublisher; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CompositeRouteDefinitionLocator.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CompositeRouteDefinitionLocator.java index 020a4294..21ba3a86 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CompositeRouteDefinitionLocator.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/CompositeRouteDefinitionLocator.java @@ -30,8 +30,7 @@ import org.springframework.util.IdGenerator; */ public class CompositeRouteDefinitionLocator implements RouteDefinitionLocator { - private static final Log log = LogFactory - .getLog(CompositeRouteDefinitionLocator.class); + private static final Log log = LogFactory.getLog(CompositeRouteDefinitionLocator.class); private final Flux delegates; @@ -41,23 +40,20 @@ public class CompositeRouteDefinitionLocator implements RouteDefinitionLocator { this(delegates, new AlternativeJdkIdGenerator()); } - public CompositeRouteDefinitionLocator(Flux delegates, - IdGenerator idGenerator) { + public CompositeRouteDefinitionLocator(Flux delegates, IdGenerator idGenerator) { this.delegates = delegates; this.idGenerator = idGenerator; } @Override public Flux getRouteDefinitions() { - return this.delegates - .flatMapSequential(RouteDefinitionLocator::getRouteDefinitions) + return this.delegates.flatMapSequential(RouteDefinitionLocator::getRouteDefinitions) .flatMap(routeDefinition -> { if (routeDefinition.getId() == null) { return randomId().map(id -> { routeDefinition.setId(id); if (log.isDebugEnabled()) { - log.debug( - "Id set on route definition: " + routeDefinition); + log.debug("Id set on route definition: " + routeDefinition); } return routeDefinition; }); @@ -67,8 +63,7 @@ public class CompositeRouteDefinitionLocator implements RouteDefinitionLocator { } protected Mono randomId() { - return Mono.fromSupplier(idGenerator::toString) - .publishOn(Schedulers.boundedElastic()); + return Mono.fromSupplier(idGenerator::toString).publishOn(Schedulers.boundedElastic()); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/InMemoryRouteDefinitionRepository.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/InMemoryRouteDefinitionRepository.java index 803cf17f..b12c8173 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/InMemoryRouteDefinitionRepository.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/InMemoryRouteDefinitionRepository.java @@ -32,8 +32,7 @@ import static java.util.Collections.synchronizedMap; */ public class InMemoryRouteDefinitionRepository implements RouteDefinitionRepository { - private final Map routes = synchronizedMap( - new LinkedHashMap()); + private final Map routes = synchronizedMap(new LinkedHashMap()); @Override public Mono save(Mono route) { @@ -53,8 +52,7 @@ public class InMemoryRouteDefinitionRepository implements RouteDefinitionReposit routes.remove(id); return Mono.empty(); } - return Mono.defer(() -> Mono.error( - new NotFoundException("RouteDefinition not found: " + routeId))); + return Mono.defer(() -> Mono.error(new NotFoundException("RouteDefinition not found: " + routeId))); }); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/Route.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/Route.java index a3be0c6e..b4a30a5e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/Route.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/Route.java @@ -55,8 +55,7 @@ public class Route implements Ordered { private final Map metadata; - private Route(String id, URI uri, int order, - AsyncPredicate predicate, + private Route(String id, URI uri, int order, AsyncPredicate predicate, List gatewayFilters, Map metadata) { this.id = id; this.uri = uri; @@ -125,8 +124,7 @@ public class Route implements Ordered { return false; } Route route = (Route) o; - return this.order == route.order && Objects.equals(this.id, route.id) - && Objects.equals(this.uri, route.uri) + return this.order == route.order && Objects.equals(this.id, route.id) && Objects.equals(this.uri, route.uri) && Objects.equals(this.predicate, route.predicate) && Objects.equals(this.gatewayFilters, route.gatewayFilters) && Objects.equals(this.metadata, route.metadata); @@ -134,8 +132,7 @@ public class Route implements Ordered { @Override public int hashCode() { - return Objects.hash(this.id, this.uri, this.order, this.predicate, - this.gatewayFilters, this.metadata); + return Objects.hash(this.id, this.uri, this.order, this.predicate, this.gatewayFilters, this.metadata); } @Override @@ -151,8 +148,7 @@ public class Route implements Ordered { return sb.toString(); } - public abstract static class AbstractBuilder> - implements Buildable { + public abstract static class AbstractBuilder> implements Buildable { protected String id; @@ -190,13 +186,11 @@ public class Route implements Ordered { public B uri(URI uri) { this.uri = uri; String scheme = this.uri.getScheme(); - Assert.hasText(scheme, "The parameter [" + this.uri - + "] format is incorrect, scheme can not be empty"); + Assert.hasText(scheme, "The parameter [" + this.uri + "] format is incorrect, scheme can not be empty"); if (this.uri.getPort() < 0 && scheme.startsWith("http")) { // default known http ports int port = this.uri.getScheme().equals("https") ? 443 : 80; - this.uri = UriComponentsBuilder.fromUri(this.uri).port(port).build(false) - .toUri(); + this.uri = UriComponentsBuilder.fromUri(this.uri).port(port).build(false).toUri(); } return getThis(); } @@ -243,8 +237,7 @@ public class Route implements Ordered { AsyncPredicate predicate = getPredicate(); Assert.notNull(predicate, "predicate can not be null"); - return new Route(this.id, this.uri, this.order, predicate, - this.gatewayFilters, this.metadata); + return new Route(this.id, this.uri, this.order, predicate, this.gatewayFilters, this.metadata); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinition.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinition.java index 1d14b071..2bf4e440 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinition.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinition.java @@ -62,8 +62,8 @@ public class RouteDefinition { public RouteDefinition(String text) { int eqIdx = text.indexOf('='); if (eqIdx <= 0) { - throw new ValidationException("Unable to parse RouteDefinition text '" + text - + "'" + ", must be of the form name=value"); + throw new ValidationException( + "Unable to parse RouteDefinition text '" + text + "'" + ", must be of the form name=value"); } setId(text.substring(0, eqIdx)); @@ -135,23 +135,19 @@ public class RouteDefinition { } RouteDefinition that = (RouteDefinition) o; return this.order == that.order && Objects.equals(this.id, that.id) - && Objects.equals(this.predicates, that.predicates) - && Objects.equals(this.filters, that.filters) - && Objects.equals(this.uri, that.uri) - && Objects.equals(this.metadata, that.metadata); + && Objects.equals(this.predicates, that.predicates) && Objects.equals(this.filters, that.filters) + && Objects.equals(this.uri, that.uri) && Objects.equals(this.metadata, that.metadata); } @Override public int hashCode() { - return Objects.hash(this.id, this.predicates, this.filters, this.uri, - this.metadata, this.order); + return Objects.hash(this.id, this.predicates, this.filters, this.uri, this.metadata, this.order); } @Override public String toString() { - return "RouteDefinition{" + "id='" + id + '\'' + ", predicates=" + predicates - + ", filters=" + filters + ", uri=" + uri + ", order=" + order - + ", metadata=" + metadata + '}'; + return "RouteDefinition{" + "id='" + id + '\'' + ", predicates=" + predicates + ", filters=" + filters + + ", uri=" + uri + ", order=" + order + ", metadata=" + metadata + '}'; } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRepository.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRepository.java index 747598fe..09b0654b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRepository.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRepository.java @@ -19,7 +19,6 @@ package org.springframework.cloud.gateway.route; /** * @author Spencer Gibb */ -public interface RouteDefinitionRepository - extends RouteDefinitionLocator, RouteDefinitionWriter { +public interface RouteDefinitionRepository extends RouteDefinitionLocator, RouteDefinitionWriter { } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocator.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocator.java index c584f076..a734e053 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocator.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocator.java @@ -67,15 +67,12 @@ public class RouteDefinitionRouteLocator implements RouteLocator { private final GatewayProperties gatewayProperties; public RouteDefinitionRouteLocator(RouteDefinitionLocator routeDefinitionLocator, - List predicates, - List gatewayFilterFactories, - GatewayProperties gatewayProperties, - ConfigurationService configurationService) { + List predicates, List gatewayFilterFactories, + GatewayProperties gatewayProperties, ConfigurationService configurationService) { this.routeDefinitionLocator = routeDefinitionLocator; this.configurationService = configurationService; initFactories(predicates); - gatewayFilterFactories.forEach( - factory -> this.gatewayFilterFactories.put(factory.name(), factory)); + gatewayFilterFactories.forEach(factory -> this.gatewayFilterFactories.put(factory.name(), factory)); this.gatewayProperties = gatewayProperties; } @@ -83,9 +80,8 @@ public class RouteDefinitionRouteLocator implements RouteLocator { predicates.forEach(factory -> { String key = factory.name(); if (this.predicates.containsKey(key)) { - this.logger.warn("A RoutePredicateFactory named " + key - + " already exists, class: " + this.predicates.get(key) - + ". It will be overwritten."); + this.logger.warn("A RoutePredicateFactory named " + key + " already exists, class: " + + this.predicates.get(key) + ". It will be overwritten."); } this.predicates.put(key, factory); if (logger.isInfoEnabled()) { @@ -96,16 +92,14 @@ public class RouteDefinitionRouteLocator implements RouteLocator { @Override public Flux getRoutes() { - Flux routes = this.routeDefinitionLocator.getRouteDefinitions() - .map(this::convertToRoute); + Flux routes = this.routeDefinitionLocator.getRouteDefinitions().map(this::convertToRoute); if (!gatewayProperties.isFailOnRouteDefinitionError()) { // instead of letting error bubble up, continue routes = routes.onErrorContinue((error, obj) -> { if (logger.isWarnEnabled()) { logger.warn("RouteDefinition id " + ((RouteDefinition) obj).getId() - + " will be ignored. Definition has invalid configs, " - + error.getMessage()); + + " will be ignored. Definition has invalid configs, " + error.getMessage()); } }); } @@ -122,26 +116,22 @@ public class RouteDefinitionRouteLocator implements RouteLocator { AsyncPredicate predicate = combinePredicates(routeDefinition); List gatewayFilters = getFilters(routeDefinition); - return Route.async(routeDefinition).asyncPredicate(predicate) - .replaceFilters(gatewayFilters).build(); + return Route.async(routeDefinition).asyncPredicate(predicate).replaceFilters(gatewayFilters).build(); } @SuppressWarnings("unchecked") - List loadGatewayFilters(String id, - List filterDefinitions) { + List loadGatewayFilters(String id, List filterDefinitions) { ArrayList ordered = new ArrayList<>(filterDefinitions.size()); for (int i = 0; i < filterDefinitions.size(); i++) { FilterDefinition definition = filterDefinitions.get(i); - GatewayFilterFactory factory = this.gatewayFilterFactories - .get(definition.getName()); + GatewayFilterFactory factory = this.gatewayFilterFactories.get(definition.getName()); if (factory == null) { throw new IllegalArgumentException( - "Unable to find GatewayFilterFactory with name " - + definition.getName()); + "Unable to find GatewayFilterFactory with name " + definition.getName()); } if (logger.isDebugEnabled()) { - logger.debug("RouteDefinition " + id + " applying filter " - + definition.getArgs() + " to " + definition.getName()); + logger.debug("RouteDefinition " + id + " applying filter " + definition.getArgs() + " to " + + definition.getName()); } // @formatter:off @@ -178,33 +168,28 @@ public class RouteDefinitionRouteLocator implements RouteLocator { // TODO: support option to apply defaults after route specific filters? if (!this.gatewayProperties.getDefaultFilters().isEmpty()) { - filters.addAll(loadGatewayFilters(DEFAULT_FILTERS, - new ArrayList<>(this.gatewayProperties.getDefaultFilters()))); + filters.addAll( + loadGatewayFilters(DEFAULT_FILTERS, new ArrayList<>(this.gatewayProperties.getDefaultFilters()))); } if (!routeDefinition.getFilters().isEmpty()) { - filters.addAll(loadGatewayFilters(routeDefinition.getId(), - new ArrayList<>(routeDefinition.getFilters()))); + filters.addAll(loadGatewayFilters(routeDefinition.getId(), new ArrayList<>(routeDefinition.getFilters()))); } AnnotationAwareOrderComparator.sort(filters); return filters; } - private AsyncPredicate combinePredicates( - RouteDefinition routeDefinition) { + private AsyncPredicate combinePredicates(RouteDefinition routeDefinition) { List predicates = routeDefinition.getPredicates(); if (predicates == null || predicates.isEmpty()) { // this is a very rare case, but possible, just match all return AsyncPredicate.from(exchange -> true); } - AsyncPredicate predicate = lookup(routeDefinition, - predicates.get(0)); + AsyncPredicate predicate = lookup(routeDefinition, predicates.get(0)); - for (PredicateDefinition andPredicate : predicates.subList(1, - predicates.size())) { - AsyncPredicate found = lookup(routeDefinition, - andPredicate); + for (PredicateDefinition andPredicate : predicates.subList(1, predicates.size())) { + AsyncPredicate found = lookup(routeDefinition, andPredicate); predicate = predicate.and(found); } @@ -212,17 +197,14 @@ public class RouteDefinitionRouteLocator implements RouteLocator { } @SuppressWarnings("unchecked") - private AsyncPredicate lookup(RouteDefinition route, - PredicateDefinition predicate) { + private AsyncPredicate lookup(RouteDefinition route, PredicateDefinition predicate) { RoutePredicateFactory factory = this.predicates.get(predicate.getName()); if (factory == null) { - throw new IllegalArgumentException( - "Unable to find RoutePredicateFactory with name " - + predicate.getName()); + throw new IllegalArgumentException("Unable to find RoutePredicateFactory with name " + predicate.getName()); } if (logger.isDebugEnabled()) { - logger.debug("RouteDefinition " + route.getId() + " applying " - + predicate.getArgs() + " to " + predicate.getName()); + logger.debug("RouteDefinition " + route.getId() + " applying " + predicate.getArgs() + " to " + + predicate.getName()); } // @formatter:off diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteRefreshListener.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteRefreshListener.java index 5841a53c..ac2309fc 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteRefreshListener.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/RouteRefreshListener.java @@ -46,13 +46,11 @@ public class RouteRefreshListener implements ApplicationListener predicate; - public BooleanSpec(Route.AsyncBuilder routeBuilder, - RouteLocatorBuilder.Builder builder) { + public BooleanSpec(Route.AsyncBuilder routeBuilder, RouteLocatorBuilder.Builder builder) { super(routeBuilder, builder); // save current predicate useful in kotlin dsl predicate = routeBuilder.getPredicate(); @@ -87,8 +86,7 @@ public class BooleanSpec extends UriSpec { private Operator operator; - BooleanOpSpec(Route.AsyncBuilder routeBuilder, - RouteLocatorBuilder.Builder builder, Operator operator) { + BooleanOpSpec(Route.AsyncBuilder routeBuilder, RouteLocatorBuilder.Builder builder, Operator operator) { super(routeBuilder, builder); Assert.notNull(operator, "operator may not be null"); this.operator = operator; @@ -114,23 +112,20 @@ public class BooleanSpec extends UriSpec { } public BooleanSpec not(Function fn) { - return fn - .apply(new NotOpSpec(this.routeBuilder, this.builder, this.operator)); + return fn.apply(new NotOpSpec(this.routeBuilder, this.builder, this.operator)); } } public static class NotOpSpec extends BooleanOpSpec { - NotOpSpec(Route.AsyncBuilder routeBuilder, RouteLocatorBuilder.Builder builder, - Operator operator) { + NotOpSpec(Route.AsyncBuilder routeBuilder, RouteLocatorBuilder.Builder builder, Operator operator) { super(routeBuilder, builder, operator); } @Override public BooleanSpec asyncPredicate(AsyncPredicate predicate) { - AsyncPredicate negated = this.routeBuilder.getPredicate() - .not(predicate); + AsyncPredicate negated = this.routeBuilder.getPredicate().not(predicate); return super.asyncPredicate(negated); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java index e24126cb..77c9f2c2 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java @@ -84,8 +84,7 @@ public class GatewayFilterSpec extends UriSpec { private static final Log log = LogFactory.getLog(GatewayFilterSpec.class); - public GatewayFilterSpec(Route.AsyncBuilder routeBuilder, - RouteLocatorBuilder.Builder builder) { + public GatewayFilterSpec(Route.AsyncBuilder routeBuilder, RouteLocatorBuilder.Builder builder) { super(routeBuilder, builder); } @@ -111,8 +110,8 @@ public class GatewayFilterSpec extends UriSpec { public GatewayFilterSpec filter(GatewayFilter gatewayFilter, int order) { if (gatewayFilter instanceof Ordered) { this.routeBuilder.filter(gatewayFilter); - log.warn("GatewayFilter already implements ordered " - + gatewayFilter.getClass() + "ignoring order parameter: " + order); + log.warn("GatewayFilter already implements ordered " + gatewayFilter.getClass() + + "ignoring order parameter: " + order); return this; } this.routeBuilder.filter(new OrderedGatewayFilter(gatewayFilter, order)); @@ -125,8 +124,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec filters(GatewayFilter... gatewayFilters) { - List filters = transformToOrderedFilters( - Stream.of(gatewayFilters)); + List filters = transformToOrderedFilters(Stream.of(gatewayFilters)); this.routeBuilder.filters(filters); return this; } @@ -171,8 +169,8 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec addRequestParameter(String param, String value) { - return filter(getBean(AddRequestParameterGatewayFilterFactory.class) - .apply(c -> c.setName(param).setValue(value))); + return filter( + getBean(AddRequestParameterGatewayFilterFactory.class).apply(c -> c.setName(param).setValue(value))); } /** @@ -194,19 +192,17 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec dedupeResponseHeader(String headerName, String strategy) { - return filter(getBean(DedupeResponseHeaderGatewayFilterFactory.class).apply( - c -> c.setStrategy(Strategy.valueOf(strategy)).setName(headerName))); + return filter(getBean(DedupeResponseHeaderGatewayFilterFactory.class) + .apply(c -> c.setStrategy(Strategy.valueOf(strategy)).setName(headerName))); } - public GatewayFilterSpec circuitBreaker( - Consumer configConsumer) { + public GatewayFilterSpec circuitBreaker(Consumer configConsumer) { SpringCloudCircuitBreakerFilterFactory filterFactory; try { filterFactory = getBean(SpringCloudCircuitBreakerFilterFactory.class); } catch (NoSuchBeanDefinitionException e) { - throw new NoSuchBeanDefinitionException( - SpringCloudCircuitBreakerFilterFactory.class, + throw new NoSuchBeanDefinitionException(SpringCloudCircuitBreakerFilterFactory.class, "There needs to be a circuit breaker implementation on the classpath that supports reactive APIs."); } return filter(filterFactory.apply(this.routeBuilder.getId(), configConsumer)); @@ -249,11 +245,10 @@ public class GatewayFilterSpec extends UriSpec { * @param the new request body class * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec modifyRequestBody(Class inClass, Class outClass, - String newContentType, RewriteFunction rewriteFunction) { + public GatewayFilterSpec modifyRequestBody(Class inClass, Class outClass, String newContentType, + RewriteFunction rewriteFunction) { return filter(getBean(ModifyRequestBodyGatewayFilterFactory.class) - .apply(c -> c.setRewriteFunction(inClass, outClass, rewriteFunction) - .setContentType(newContentType))); + .apply(c -> c.setRewriteFunction(inClass, outClass, rewriteFunction).setContentType(newContentType))); } /** @@ -276,8 +271,7 @@ public class GatewayFilterSpec extends UriSpec { */ public GatewayFilterSpec modifyRequestBody( Consumer configConsumer) { - return filter(getBean(ModifyRequestBodyGatewayFilterFactory.class) - .apply(configConsumer)); + return filter(getBean(ModifyRequestBodyGatewayFilterFactory.class).apply(configConsumer)); } /** @@ -291,8 +285,8 @@ public class GatewayFilterSpec extends UriSpec { * @param the new response body class * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec modifyResponseBody(Class inClass, - Class outClass, RewriteFunction rewriteFunction) { + public GatewayFilterSpec modifyResponseBody(Class inClass, Class outClass, + RewriteFunction rewriteFunction) { return filter(getBean(ModifyResponseBodyGatewayFilterFactory.class) .apply(c -> c.setRewriteFunction(inClass, outClass, rewriteFunction))); } @@ -310,12 +304,10 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ // TODO: setup custom spec - public GatewayFilterSpec modifyResponseBody(Class inClass, - Class outClass, String newContentType, + public GatewayFilterSpec modifyResponseBody(Class inClass, Class outClass, String newContentType, RewriteFunction rewriteFunction) { - return filter(getBean(ModifyResponseBodyGatewayFilterFactory.class) - .apply(c -> c.setRewriteFunction(inClass, outClass, rewriteFunction) - .setNewContentType(newContentType))); + return filter(getBean(ModifyResponseBodyGatewayFilterFactory.class).apply( + c -> c.setRewriteFunction(inClass, outClass, rewriteFunction).setNewContentType(newContentType))); } /** @@ -337,8 +329,7 @@ public class GatewayFilterSpec extends UriSpec { */ public GatewayFilterSpec modifyResponseBody( Consumer configConsumer) { - return filter(getBean(ModifyResponseBodyGatewayFilterFactory.class) - .apply(configConsumer)); + return filter(getBean(ModifyResponseBodyGatewayFilterFactory.class).apply(configConsumer)); } /** @@ -348,8 +339,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec prefixPath(String prefix) { - return filter(getBean(PrefixPathGatewayFilterFactory.class) - .apply(c -> c.setPrefix(prefix))); + return filter(getBean(PrefixPathGatewayFilterFactory.class).apply(c -> c.setPrefix(prefix))); } /** @@ -368,8 +358,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec setHostHeader(String hostName) { - return filter(getBean(SetRequestHostHeaderGatewayFilterFactory.class) - .apply(c -> c.setHost(hostName))); + return filter(getBean(SetRequestHostHeaderGatewayFilterFactory.class).apply(c -> c.setHost(hostName))); } /** @@ -425,8 +414,7 @@ public class GatewayFilterSpec extends UriSpec { */ public GatewayFilterSpec redirect(HttpStatus status, URL url) { try { - return filter(getBean(RedirectToGatewayFilterFactory.class).apply(status, - url.toURI())); + return filter(getBean(RedirectToGatewayFilterFactory.class).apply(status, url.toURI())); } catch (URISyntaxException e) { throw new IllegalArgumentException("Invalid URL", e); @@ -440,8 +428,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec removeRequestHeader(String headerName) { - return filter(getBean(RemoveRequestHeaderGatewayFilterFactory.class) - .apply(c -> c.setName(headerName))); + return filter(getBean(RemoveRequestHeaderGatewayFilterFactory.class).apply(c -> c.setName(headerName))); } /** @@ -451,8 +438,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec removeRequestParameter(String paramName) { - return filter(getBean(RemoveRequestParameterGatewayFilterFactory.class) - .apply(c -> c.setName(paramName))); + return filter(getBean(RemoveRequestParameterGatewayFilterFactory.class).apply(c -> c.setName(paramName))); } /** @@ -462,8 +448,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec removeResponseHeader(String headerName) { - return filter(getBean(RemoveResponseHeaderGatewayFilterFactory.class) - .apply(c -> c.setName(headerName))); + return filter(getBean(RemoveResponseHeaderGatewayFilterFactory.class).apply(c -> c.setName(headerName))); } /** @@ -474,8 +459,8 @@ public class GatewayFilterSpec extends UriSpec { */ public GatewayFilterSpec requestRateLimiter( Consumer configConsumer) { - return filter(getBean(RequestRateLimiterGatewayFilterFactory.class) - .apply(this.routeBuilder.getId(), configConsumer)); + return filter( + getBean(RequestRateLimiterGatewayFilterFactory.class).apply(this.routeBuilder.getId(), configConsumer)); } /** @@ -483,8 +468,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public RequestRateLimiterSpec requestRateLimiter() { - return new RequestRateLimiterSpec( - getBean(RequestRateLimiterGatewayFilterFactory.class)); + return new RequestRateLimiterSpec(getBean(RequestRateLimiterGatewayFilterFactory.class)); } /** @@ -505,9 +489,8 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec retry(int retries) { - return filter( - getBean(RetryGatewayFilterFactory.class).apply(this.routeBuilder.getId(), - retryConfig -> retryConfig.setRetries(retries))); + return filter(getBean(RetryGatewayFilterFactory.class).apply(this.routeBuilder.getId(), + retryConfig -> retryConfig.setRetries(retries))); } /** @@ -517,10 +500,8 @@ public class GatewayFilterSpec extends UriSpec { * to configure the retry functionality * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec retry( - Consumer retryConsumer) { - return filter(getBean(RetryGatewayFilterFactory.class) - .apply(this.routeBuilder.getId(), retryConsumer)); + public GatewayFilterSpec retry(Consumer retryConsumer) { + return filter(getBean(RetryGatewayFilterFactory.class).apply(this.routeBuilder.getId(), retryConsumer)); } /** @@ -529,10 +510,8 @@ public class GatewayFilterSpec extends UriSpec { * @param retry a {@link Retry} * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec retry(Repeat repeat, - Retry retry) { - RetryGatewayFilterFactory filterFactory = getBean( - RetryGatewayFilterFactory.class); + public GatewayFilterSpec retry(Repeat repeat, Retry retry) { + RetryGatewayFilterFactory filterFactory = getBean(RetryGatewayFilterFactory.class); return filter(filterFactory.apply(this.routeBuilder.getId(), repeat, retry)); } @@ -555,8 +534,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec setPath(String template) { - return filter(getBean(SetPathGatewayFilterFactory.class) - .apply(c -> c.setTemplate(template))); + return filter(getBean(SetPathGatewayFilterFactory.class).apply(c -> c.setTemplate(template))); } /** @@ -590,10 +568,9 @@ public class GatewayFilterSpec extends UriSpec { * @param replacement the replacement for the path * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec rewriteResponseHeader(String headerName, String regex, - String replacement) { - return filter(getBean(RewriteResponseHeaderGatewayFilterFactory.class).apply( - c -> c.setReplacement(replacement).setRegexp(regex).setName(headerName))); + public GatewayFilterSpec rewriteResponseHeader(String headerName, String regex, String replacement) { + return filter(getBean(RewriteResponseHeaderGatewayFilterFactory.class) + .apply(c -> c.setReplacement(replacement).setRegexp(regex).setName(headerName))); } /** @@ -606,12 +583,11 @@ public class GatewayFilterSpec extends UriSpec { * matched * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec rewriteLocationResponseHeader(String stripVersionMode, - String locationHeaderName, String hostValue, String protocolsRegex) { - return filter(getBean(RewriteLocationResponseHeaderGatewayFilterFactory.class) - .apply(c -> c.setStripVersion(StripVersion.valueOf(stripVersionMode)) - .setLocationHeaderName(locationHeaderName).setHostValue(hostValue) - .setProtocols(protocolsRegex))); + public GatewayFilterSpec rewriteLocationResponseHeader(String stripVersionMode, String locationHeaderName, + String hostValue, String protocolsRegex) { + return filter(getBean(RewriteLocationResponseHeaderGatewayFilterFactory.class).apply( + c -> c.setStripVersion(StripVersion.valueOf(stripVersionMode)).setLocationHeaderName(locationHeaderName) + .setHostValue(hostValue).setProtocols(protocolsRegex))); } /** @@ -641,8 +617,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec setStatus(String status) { - return filter(getBean(SetStatusGatewayFilterFactory.class) - .apply(c -> c.setStatus(status))); + return filter(getBean(SetStatusGatewayFilterFactory.class).apply(c -> c.setStatus(status))); } /** @@ -668,8 +643,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec stripPrefix(int parts) { - return filter(getBean(StripPrefixGatewayFilterFactory.class) - .apply(c -> c.setParts(parts))); + return filter(getBean(StripPrefixGatewayFilterFactory.class).apply(c -> c.setParts(parts))); } /** @@ -679,8 +653,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec requestHeaderToRequestUri(String headerName) { - return filter(getBean(RequestHeaderToRequestUriGatewayFilterFactory.class) - .apply(c -> c.setName(headerName))); + return filter(getBean(RequestHeaderToRequestUriGatewayFilterFactory.class).apply(c -> c.setName(headerName))); } /** @@ -689,17 +662,14 @@ public class GatewayFilterSpec extends UriSpec { * {@link ServerWebExchange} and returns a URI to route the request to * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec changeRequestUri( - Function> determineRequestUri) { - return filter( - new AbstractChangeRequestUriGatewayFilterFactory(Object.class) { - @Override - protected Optional determineRequestUri( - ServerWebExchange exchange, Object config) { - return determineRequestUri.apply(exchange); - } - }.apply(c -> { - })); + public GatewayFilterSpec changeRequestUri(Function> determineRequestUri) { + return filter(new AbstractChangeRequestUriGatewayFilterFactory(Object.class) { + @Override + protected Optional determineRequestUri(ServerWebExchange exchange, Object config) { + return determineRequestUri.apply(exchange); + } + }.apply(c -> { + })); } /** @@ -717,8 +687,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec setRequestSize(DataSize size) { - return filter(getBean(RequestSizeGatewayFilterFactory.class) - .apply(c -> c.setMaxSize(size))); + return filter(getBean(RequestSizeGatewayFilterFactory.class).apply(c -> c.setMaxSize(size))); } /** @@ -727,8 +696,7 @@ public class GatewayFilterSpec extends UriSpec { * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ public GatewayFilterSpec setRequestHeaderSize(DataSize size) { - return filter(getBean(RequestHeaderSizeGatewayFilterFactory.class) - .apply(c -> c.setMaxSize(size))); + return filter(getBean(RequestHeaderSizeGatewayFilterFactory.class).apply(c -> c.setMaxSize(size))); } /** @@ -740,8 +708,7 @@ public class GatewayFilterSpec extends UriSpec { * used. * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec fallbackHeaders( - FallbackHeadersGatewayFilterFactory.Config config) { + public GatewayFilterSpec fallbackHeaders(FallbackHeadersGatewayFilterFactory.Config config) { FallbackHeadersGatewayFilterFactory factory = getFallbackHeadersGatewayFilterFactory(); return filter(factory.apply(config)); } @@ -755,8 +722,7 @@ public class GatewayFilterSpec extends UriSpec { * values are used. * @return a {@link GatewayFilterSpec} that can be used to apply additional filters */ - public GatewayFilterSpec fallbackHeaders( - Consumer configConsumer) { + public GatewayFilterSpec fallbackHeaders(Consumer configConsumer) { FallbackHeadersGatewayFilterFactory factory = getFallbackHeadersGatewayFilterFactory(); return filter(factory.apply(configConsumer)); } @@ -767,8 +733,7 @@ public class GatewayFilterSpec extends UriSpec { factory = getBean(FallbackHeadersGatewayFilterFactory.class); } catch (NoSuchBeanDefinitionException e) { - throw new NoSuchBeanDefinitionException( - FallbackHeadersGatewayFilterFactory.class, + throw new NoSuchBeanDefinitionException(FallbackHeadersGatewayFilterFactory.class, "This is probably because Hystrix is missing from the classpath, which can be resolved by adding dependency on 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'"); } return factory; @@ -782,8 +747,8 @@ public class GatewayFilterSpec extends UriSpec { this.filter = filter; } - public > RequestRateLimiterSpec rateLimiter( - Class rateLimiterType, Consumer configConsumer) { + public > RequestRateLimiterSpec rateLimiter(Class rateLimiterType, + Consumer configConsumer) { R rateLimiter = getBean(rateLimiterType); C config = rateLimiter.newConfig(); configConsumer.accept(config); @@ -791,8 +756,7 @@ public class GatewayFilterSpec extends UriSpec { return this; } - public GatewayFilterSpec configure( - Consumer configConsumer) { + public GatewayFilterSpec configure(Consumer configConsumer) { filter(this.filter.apply(routeBuilder.getId(), configConsumer)); return GatewayFilterSpec.this; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/PredicateSpec.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/PredicateSpec.java index 38d1b381..7be16414 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/PredicateSpec.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/PredicateSpec.java @@ -77,8 +77,7 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec after(ZonedDateTime datetime) { - return asyncPredicate(getBean(AfterRoutePredicateFactory.class) - .applyAsync(c -> c.setDatetime(datetime))); + return asyncPredicate(getBean(AfterRoutePredicateFactory.class).applyAsync(c -> c.setDatetime(datetime))); } /** @@ -87,8 +86,7 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec before(ZonedDateTime datetime) { - return asyncPredicate(getBean(BeforeRoutePredicateFactory.class) - .applyAsync(c -> c.setDatetime(datetime))); + return asyncPredicate(getBean(BeforeRoutePredicateFactory.class).applyAsync(c -> c.setDatetime(datetime))); } /** @@ -110,8 +108,8 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec cookie(String name, String regex) { - return asyncPredicate(getBean(CookieRoutePredicateFactory.class) - .applyAsync(c -> c.setName(name).setRegexp(regex))); + return asyncPredicate( + getBean(CookieRoutePredicateFactory.class).applyAsync(c -> c.setName(name).setRegexp(regex))); } /** @@ -120,8 +118,7 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec header(String header) { - return asyncPredicate(getBean(HeaderRoutePredicateFactory.class) - .applyAsync(c -> c.setHeader(header))); + return asyncPredicate(getBean(HeaderRoutePredicateFactory.class).applyAsync(c -> c.setHeader(header))); } /** @@ -132,8 +129,8 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec header(String header, String regex) { - return asyncPredicate(getBean(HeaderRoutePredicateFactory.class) - .applyAsync(c -> c.setHeader(header).setRegexp(regex))); + return asyncPredicate( + getBean(HeaderRoutePredicateFactory.class).applyAsync(c -> c.setHeader(header).setRegexp(regex))); } /** @@ -143,8 +140,8 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec host(String... pattern) { - return asyncPredicate(getBean(HostRoutePredicateFactory.class) - .applyAsync(c -> c.setPatterns(Arrays.asList(pattern)))); + return asyncPredicate( + getBean(HostRoutePredicateFactory.class).applyAsync(c -> c.setPatterns(Arrays.asList(pattern)))); } /** @@ -154,8 +151,7 @@ public class PredicateSpec extends UriSpec { */ public BooleanSpec method(String... methods) { return asyncPredicate(getBean(MethodRoutePredicateFactory.class).applyAsync(c -> { - HttpMethod[] httpMethods = stream(methods).map(HttpMethod::resolve) - .toArray(HttpMethod[]::new); + HttpMethod[] httpMethods = stream(methods).map(HttpMethod::resolve).toArray(HttpMethod[]::new); c.setMethods(httpMethods); })); } @@ -178,8 +174,8 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec path(String... patterns) { - return asyncPredicate(getBean(PathRoutePredicateFactory.class) - .applyAsync(c -> c.setPatterns(Arrays.asList(patterns)))); + return asyncPredicate( + getBean(PathRoutePredicateFactory.class).applyAsync(c -> c.setPatterns(Arrays.asList(patterns)))); } /** @@ -192,8 +188,7 @@ public class PredicateSpec extends UriSpec { */ public BooleanSpec path(boolean matchTrailingSlash, String... patterns) { return asyncPredicate(getBean(PathRoutePredicateFactory.class) - .applyAsync(c -> c.setPatterns(Arrays.asList(patterns)) - .setMatchTrailingSlash(matchTrailingSlash))); + .applyAsync(c -> c.setPatterns(Arrays.asList(patterns)).setMatchTrailingSlash(matchTrailingSlash))); } /** @@ -205,8 +200,8 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec readBody(Class inClass, Predicate predicate) { - return asyncPredicate(getBean(ReadBodyPredicateFactory.class) - .applyAsync(c -> c.setPredicate(inClass, predicate))); + return asyncPredicate( + getBean(ReadBodyPredicateFactory.class).applyAsync(c -> c.setPredicate(inClass, predicate))); } /** @@ -216,8 +211,8 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec query(String param, String regex) { - return asyncPredicate(getBean(QueryRoutePredicateFactory.class) - .applyAsync(c -> c.setParam(param).setRegexp(regex))); + return asyncPredicate( + getBean(QueryRoutePredicateFactory.class).applyAsync(c -> c.setParam(param).setRegexp(regex))); } /** @@ -226,8 +221,7 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec query(String param) { - return asyncPredicate(getBean(QueryRoutePredicateFactory.class) - .applyAsync(c -> c.setParam(param))); + return asyncPredicate(getBean(QueryRoutePredicateFactory.class).applyAsync(c -> c.setParam(param))); } /** @@ -261,13 +255,12 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec remoteAddr(RemoteAddressResolver resolver, String... addrs) { - return asyncPredicate( - getBean(RemoteAddrRoutePredicateFactory.class).applyAsync(c -> { - c.setSources(addrs); - if (resolver != null) { - c.setRemoteAddressResolver(resolver); - } - })); + return asyncPredicate(getBean(RemoteAddrRoutePredicateFactory.class).applyAsync(c -> { + c.setSources(addrs); + if (resolver != null) { + c.setRemoteAddressResolver(resolver); + } + })); } /** @@ -277,14 +270,13 @@ public class PredicateSpec extends UriSpec { * @return a {@link BooleanSpec} to be used to add logical operators */ public BooleanSpec weight(String group, int weight) { - return asyncPredicate(getBean(WeightRoutePredicateFactory.class).applyAsync(c -> c - .setGroup(group).setRouteId(routeBuilder.getId()).setWeight(weight))); + return asyncPredicate(getBean(WeightRoutePredicateFactory.class) + .applyAsync(c -> c.setGroup(group).setRouteId(routeBuilder.getId()).setWeight(weight))); } public BooleanSpec cloudFoundryRouteService() { - return predicate( - getBean(CloudFoundryRouteServiceRoutePredicateFactory.class).apply(c -> { - })); + return predicate(getBean(CloudFoundryRouteServiceRoutePredicateFactory.class).apply(c -> { + })); } /** diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/RouteLocatorBuilder.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/RouteLocatorBuilder.java index f31d964d..168039a5 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/RouteLocatorBuilder.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/RouteLocatorBuilder.java @@ -89,8 +89,7 @@ public class RouteLocatorBuilder { * @return a {@link RouteLocator} */ public RouteLocator build() { - return () -> Flux.fromIterable(this.routes) - .map(routeBuilder -> routeBuilder.build()); + return () -> Flux.fromIterable(this.routes).map(routeBuilder -> routeBuilder.build()); } ConfigurableApplicationContext getContext() { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/AbstractStatefulConfigurable.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/AbstractStatefulConfigurable.java index 75c197b2..ae1df0fa 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/AbstractStatefulConfigurable.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/AbstractStatefulConfigurable.java @@ -37,8 +37,7 @@ public abstract class AbstractStatefulConfigurable extends AbstractConfigurab @Override public String toString() { - return new ToStringCreator(this).append("config", config) - .append("configClass", getConfigClass()).toString(); + return new ToStringCreator(this).append("config", config).append("configClass", getConfigClass()).toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ConfigurationService.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ConfigurationService.java index 0232ba09..8b51888e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ConfigurationService.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ConfigurationService.java @@ -54,16 +54,14 @@ public class ConfigurationService implements ApplicationEventPublisherAware { private Supplier validator; - public ConfigurationService(BeanFactory beanFactory, - ObjectProvider conversionService, + public ConfigurationService(BeanFactory beanFactory, ObjectProvider conversionService, ObjectProvider validator) { this.beanFactory = beanFactory; this.conversionService = conversionService::getIfAvailable; this.validator = validator::getIfAvailable; } - public ConfigurationService(BeanFactory beanFactory, - Supplier conversionService, + public ConfigurationService(BeanFactory beanFactory, Supplier conversionService, Supplier validator) { this.beanFactory = beanFactory; this.conversionService = conversionService; @@ -79,8 +77,7 @@ public class ConfigurationService implements ApplicationEventPublisherAware { this.publisher = publisher; } - public & ShortcutConfigurable> ConfigurableBuilder with( - C configurable) { + public & ShortcutConfigurable> ConfigurableBuilder with(C configurable) { return new ConfigurableBuilder(this, configurable); } @@ -88,9 +85,8 @@ public class ConfigurationService implements ApplicationEventPublisherAware { return new InstanceBuilder(this, instance); } - /* for testing */ static T bindOrCreate(Bindable bindable, - Map properties, String configurationPropertyName, - Validator validator, ConversionService conversionService) { + /* for testing */ static T bindOrCreate(Bindable bindable, Map properties, + String configurationPropertyName, Validator validator, ConversionService conversionService) { // see ConfigurationPropertiesBinder from spring boot for this definition. BindHandler handler = new IgnoreTopLevelConverterNotFoundBindHandler(); @@ -101,8 +97,8 @@ public class ConfigurationService implements ApplicationEventPublisherAware { List propertySources = Collections .singletonList(new MapConfigurationPropertySource(properties)); - return new Binder(propertySources, null, conversionService) - .bindOrCreate(configurationPropertyName, bindable, handler); + return new Binder(propertySources, null, conversionService).bindOrCreate(configurationPropertyName, bindable, + handler); } @SuppressWarnings("unchecked") @@ -141,8 +137,8 @@ public class ConfigurationService implements ApplicationEventPublisherAware { @Override protected Map normalizeProperties() { if (this.service.beanFactory != null) { - return this.configurable.shortcutType().normalize(this.properties, - this.configurable, this.service.parser, this.service.beanFactory); + return this.configurable.shortcutType().normalize(this.properties, this.configurable, + this.service.parser, this.service.beanFactory); } return super.normalizeProperties(); } @@ -150,10 +146,8 @@ public class ConfigurationService implements ApplicationEventPublisherAware { @Override protected T doBind() { Bindable bindable = Bindable.of(this.configurable.getConfigClass()); - T bound = bindOrCreate(bindable, this.normalizedProperties, - this.configurable.shortcutFieldPrefix(), - /* this.name, */this.service.validator.get(), - this.service.conversionService.get()); + T bound = bindOrCreate(bindable, this.normalizedProperties, this.configurable.shortcutFieldPrefix(), + /* this.name, */this.service.validator.get(), this.service.conversionService.get()); return bound; } @@ -183,8 +177,8 @@ public class ConfigurationService implements ApplicationEventPublisherAware { protected T doBind() { T toBind = getTargetObject(this.instance); Bindable bindable = Bindable.ofInstance(toBind); - return bindOrCreate(bindable, this.normalizedProperties, this.name, - this.service.validator.get(), this.service.conversionService.get()); + return bindOrCreate(bindable, this.normalizedProperties, this.name, this.service.validator.get(), + this.service.conversionService.get()); } } @@ -212,8 +206,7 @@ public class ConfigurationService implements ApplicationEventPublisherAware { return getThis(); } - public B eventFunction( - BiFunction, ApplicationEvent> eventFunction) { + public B eventFunction(BiFunction, ApplicationEvent> eventFunction) { this.eventFunction = eventFunction; return getThis(); } @@ -251,8 +244,7 @@ public class ConfigurationService implements ApplicationEventPublisherAware { T bound = doBind(); if (this.eventFunction != null && this.service.publisher != null) { - ApplicationEvent applicationEvent = this.eventFunction.apply(bound, - this.normalizedProperties); + ApplicationEvent applicationEvent = this.eventFunction.apply(bound, this.normalizedProperties); this.service.publisher.publishEvent(applicationEvent); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/GatewayToStringStyler.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/GatewayToStringStyler.java index 74b02077..f016ec1e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/GatewayToStringStyler.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/GatewayToStringStyler.java @@ -26,8 +26,8 @@ import org.springframework.util.ClassUtils; public class GatewayToStringStyler extends DefaultToStringStyler { - private static final GatewayToStringStyler FILTER_INSTANCE = new GatewayToStringStyler( - GatewayFilterFactory.class, NameUtils::normalizeFilterFactoryName); + private static final GatewayToStringStyler FILTER_INSTANCE = new GatewayToStringStyler(GatewayFilterFactory.class, + NameUtils::normalizeFilterFactoryName); private final Function classNameFormatter; @@ -37,8 +37,7 @@ public class GatewayToStringStyler extends DefaultToStringStyler { return new ToStringCreator(obj, FILTER_INSTANCE); } - public GatewayToStringStyler(Class instanceClass, - Function classNameFormatter) { + public GatewayToStringStyler(Class instanceClass, Function classNameFormatter) { super(new DefaultValueStyler()); this.classNameFormatter = classNameFormatter; this.instanceClass = instanceClass; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/HttpStatusHolder.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/HttpStatusHolder.java index 42f75d12..1898b133 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/HttpStatusHolder.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/HttpStatusHolder.java @@ -27,8 +27,7 @@ public class HttpStatusHolder { private final Integer status; public HttpStatusHolder(HttpStatus httpStatus, Integer status) { - Assert.isTrue(httpStatus != null || status != null, - "httpStatus and status may not both be null"); + Assert.isTrue(httpStatus != null || status != null, "httpStatus and status may not both be null"); this.httpStatus = httpStatus; this.status = status; } @@ -121,8 +120,7 @@ public class HttpStatusHolder { @Override public String toString() { - return new ToStringCreator(this).append("httpStatus", httpStatus) - .append("status", status).toString(); + return new ToStringCreator(this).append("httpStatus", httpStatus).append("status", status).toString(); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NameUtils.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NameUtils.java index 5ef8b214..2b057385 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NameUtils.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NameUtils.java @@ -37,16 +37,12 @@ public final class NameUtils { return GENERATED_NAME_PREFIX + i; } - public static String normalizeRoutePredicateName( - Class clazz) { - return removeGarbage(clazz.getSimpleName() - .replace(RoutePredicateFactory.class.getSimpleName(), "")); + public static String normalizeRoutePredicateName(Class clazz) { + return removeGarbage(clazz.getSimpleName().replace(RoutePredicateFactory.class.getSimpleName(), "")); } - public static String normalizeFilterFactoryName( - Class clazz) { - return removeGarbage(clazz.getSimpleName() - .replace(GatewayFilterFactory.class.getSimpleName(), "")); + public static String normalizeFilterFactoryName(Class clazz) { + return removeGarbage(clazz.getSimpleName().replace(GatewayFilterFactory.class.getSimpleName(), "")); } private static String removeGarbage(String s) { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NotFoundException.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NotFoundException.java index 8635aa16..7d1a7ed8 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NotFoundException.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/NotFoundException.java @@ -41,15 +41,12 @@ public class NotFoundException extends ResponseStatusException { } public static NotFoundException create(boolean with404, String message) { - HttpStatus httpStatus = with404 ? HttpStatus.NOT_FOUND - : HttpStatus.SERVICE_UNAVAILABLE; + HttpStatus httpStatus = with404 ? HttpStatus.NOT_FOUND : HttpStatus.SERVICE_UNAVAILABLE; return new NotFoundException(httpStatus, message); } - public static NotFoundException create(boolean with404, String message, - Throwable cause) { - HttpStatus httpStatus = with404 ? HttpStatus.NOT_FOUND - : HttpStatus.SERVICE_UNAVAILABLE; + public static NotFoundException create(boolean with404, String message, Throwable cause) { + HttpStatus httpStatus = with404 ? HttpStatus.NOT_FOUND : HttpStatus.SERVICE_UNAVAILABLE; return new NotFoundException(httpStatus, message, cause); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServerWebExchangeUtils.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServerWebExchangeUtils.java index 0f9ae2cb..616a515e 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServerWebExchangeUtils.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServerWebExchangeUtils.java @@ -57,14 +57,12 @@ public final class ServerWebExchangeUtils { /** * Preserve-Host header attribute name. */ - public static final String PRESERVE_HOST_HEADER_ATTRIBUTE = qualify( - "preserveHostHeader"); + public static final String PRESERVE_HOST_HEADER_ATTRIBUTE = qualify("preserveHostHeader"); /** * URI template variables attribute name. */ - public static final String URI_TEMPLATE_VARIABLES_ATTRIBUTE = qualify( - "uriTemplateVariables"); + public static final String URI_TEMPLATE_VARIABLES_ATTRIBUTE = qualify("uriTemplateVariables"); /** * Client response attribute name. @@ -74,14 +72,12 @@ public final class ServerWebExchangeUtils { /** * Client response connection attribute name. */ - public static final String CLIENT_RESPONSE_CONN_ATTR = qualify( - "gatewayClientResponseConnection"); + public static final String CLIENT_RESPONSE_CONN_ATTR = qualify("gatewayClientResponseConnection"); /** * Client response header names attribute name. */ - public static final String CLIENT_RESPONSE_HEADER_NAMES = qualify( - "gatewayClientResponseHeaderNames"); + public static final String CLIENT_RESPONSE_HEADER_NAMES = qualify("gatewayClientResponseHeaderNames"); /** * Gateway route attribute name. @@ -96,26 +92,22 @@ public final class ServerWebExchangeUtils { /** * Gateway original request URL attribute name. */ - public static final String GATEWAY_ORIGINAL_REQUEST_URL_ATTR = qualify( - "gatewayOriginalRequestUrl"); + public static final String GATEWAY_ORIGINAL_REQUEST_URL_ATTR = qualify("gatewayOriginalRequestUrl"); /** * Gateway handler mapper attribute name. */ - public static final String GATEWAY_HANDLER_MAPPER_ATTR = qualify( - "gatewayHandlerMapper"); + public static final String GATEWAY_HANDLER_MAPPER_ATTR = qualify("gatewayHandlerMapper"); /** * Gateway scheme prefix attribute name. */ - public static final String GATEWAY_SCHEME_PREFIX_ATTR = qualify( - "gatewaySchemePrefix"); + public static final String GATEWAY_SCHEME_PREFIX_ATTR = qualify("gatewaySchemePrefix"); /** * Gateway predicate route attribute name. */ - public static final String GATEWAY_PREDICATE_ROUTE_ATTR = qualify( - "gatewayPredicateRouteAttr"); + public static final String GATEWAY_PREDICATE_ROUTE_ATTR = qualify("gatewayPredicateRouteAttr"); /** * Weight attribute name. @@ -130,21 +122,18 @@ public final class ServerWebExchangeUtils { /** * CircuitBreaker execution exception attribute name. */ - public static final String CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR = qualify( - "circuitBreakerExecutionException"); + public static final String CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR = qualify("circuitBreakerExecutionException"); /** * Used when a routing filter has been successfully called. Allows users to write * custom routing filters that disable built in routing filters. */ - public static final String GATEWAY_ALREADY_ROUTED_ATTR = qualify( - "gatewayAlreadyRouted"); + public static final String GATEWAY_ALREADY_ROUTED_ATTR = qualify("gatewayAlreadyRouted"); /** * Gateway already prefixed attribute name. */ - public static final String GATEWAY_ALREADY_PREFIXED_ATTR = qualify( - "gatewayAlreadyPrefixed"); + public static final String GATEWAY_ALREADY_PREFIXED_ATTR = qualify("gatewayAlreadyPrefixed"); /** * Cached ServerHttpRequestDecorator attribute name. Used when @@ -179,27 +168,22 @@ public final class ServerWebExchangeUtils { return exchange.getAttributeOrDefault(GATEWAY_ALREADY_ROUTED_ATTR, false); } - public static boolean setResponseStatus(ServerWebExchange exchange, - HttpStatus httpStatus) { + public static boolean setResponseStatus(ServerWebExchange exchange, HttpStatus httpStatus) { boolean response = exchange.getResponse().setStatusCode(httpStatus); if (!response && log.isWarnEnabled()) { - log.warn("Unable to set status code to " + httpStatus - + ". Response already committed."); + log.warn("Unable to set status code to " + httpStatus + ". Response already committed."); } return response; } public static void reset(ServerWebExchange exchange) { // TODO: what else to do to reset exchange? - Set addedHeaders = exchange.getAttributeOrDefault( - CLIENT_RESPONSE_HEADER_NAMES, Collections.emptySet()); - addedHeaders - .forEach(header -> exchange.getResponse().getHeaders().remove(header)); + Set addedHeaders = exchange.getAttributeOrDefault(CLIENT_RESPONSE_HEADER_NAMES, Collections.emptySet()); + addedHeaders.forEach(header -> exchange.getResponse().getHeaders().remove(header)); removeAlreadyRouted(exchange); } - public static boolean setResponseStatus(ServerWebExchange exchange, - HttpStatusHolder statusHolder) { + public static boolean setResponseStatus(ServerWebExchange exchange, HttpStatusHolder statusHolder) { if (exchange.getResponse().isCommitted()) { return false; } @@ -209,10 +193,8 @@ public final class ServerWebExchangeUtils { if (statusHolder.getHttpStatus() != null) { return setResponseStatus(exchange, statusHolder.getHttpStatus()); } - if (statusHolder.getStatus() != null - && exchange.getResponse() instanceof AbstractServerHttpResponse) { // non-standard - ((AbstractServerHttpResponse) exchange.getResponse()) - .setStatusCodeValue(statusHolder.getStatus()); + if (statusHolder.getStatus() != null && exchange.getResponse() instanceof AbstractServerHttpResponse) { // non-standard + ((AbstractServerHttpResponse) exchange.getResponse()).setStatusCodeValue(statusHolder.getStatus()); return true; } return false; @@ -255,15 +237,12 @@ public final class ServerWebExchangeUtils { } public static void addOriginalRequestUrl(ServerWebExchange exchange, URI url) { - exchange.getAttributes().computeIfAbsent(GATEWAY_ORIGINAL_REQUEST_URL_ATTR, - s -> new LinkedHashSet<>()); - LinkedHashSet uris = exchange - .getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + exchange.getAttributes().computeIfAbsent(GATEWAY_ORIGINAL_REQUEST_URL_ATTR, s -> new LinkedHashSet<>()); + LinkedHashSet uris = exchange.getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); uris.add(url); } - public static AsyncPredicate toAsyncPredicate( - Predicate predicate) { + public static AsyncPredicate toAsyncPredicate(Predicate predicate) { Assert.notNull(predicate, "predicate must not be null"); return AsyncPredicate.from(predicate); } @@ -277,16 +256,14 @@ public final class ServerWebExchangeUtils { } Map variables = getUriTemplateVariables(exchange); - return UriComponentsBuilder.fromPath(template).build().expand(variables) - .getPath(); + return UriComponentsBuilder.fromPath(template).build().expand(variables).getPath(); } @SuppressWarnings("unchecked") - public static void putUriTemplateVariables(ServerWebExchange exchange, - Map uriVariables) { + public static void putUriTemplateVariables(ServerWebExchange exchange, Map uriVariables) { if (exchange.getAttributes().containsKey(URI_TEMPLATE_VARIABLES_ATTRIBUTE)) { - Map existingVariables = (Map) exchange - .getAttributes().get(URI_TEMPLATE_VARIABLES_ATTRIBUTE); + Map existingVariables = (Map) exchange.getAttributes() + .get(URI_TEMPLATE_VARIABLES_ATTRIBUTE); HashMap newVariables = new HashMap<>(); newVariables.putAll(existingVariables); newVariables.putAll(uriVariables); @@ -297,10 +274,8 @@ public final class ServerWebExchangeUtils { } } - public static Map getUriTemplateVariables( - ServerWebExchange exchange) { - return exchange.getAttributeOrDefault(URI_TEMPLATE_VARIABLES_ATTRIBUTE, - new HashMap<>()); + public static Map getUriTemplateVariables(ServerWebExchange exchange) { + return exchange.getAttributeOrDefault(URI_TEMPLATE_VARIABLES_ATTRIBUTE, new HashMap<>()); } /** @@ -348,22 +323,19 @@ public final class ServerWebExchangeUtils { * @param generic type for the return {@link Mono}. * @return Mono of type T created by the function parameter. */ - private static Mono cacheRequestBody(ServerWebExchange exchange, - boolean cacheDecoratedRequest, + private static Mono cacheRequestBody(ServerWebExchange exchange, boolean cacheDecoratedRequest, Function> function) { ServerHttpResponse response = exchange.getResponse(); - NettyDataBufferFactory factory = (NettyDataBufferFactory) response - .bufferFactory(); + NettyDataBufferFactory factory = (NettyDataBufferFactory) response.bufferFactory(); // Join all the DataBuffers so we have a single DataBuffer for the body return DataBufferUtils.join(exchange.getRequest().getBody()) - .defaultIfEmpty( - factory.wrap(new EmptyByteBuf(factory.getByteBufAllocator()))) + .defaultIfEmpty(factory.wrap(new EmptyByteBuf(factory.getByteBufAllocator()))) .map(dataBuffer -> decorate(exchange, dataBuffer, cacheDecoratedRequest)) .switchIfEmpty(Mono.just(exchange.getRequest())).flatMap(function); } - private static ServerHttpRequest decorate(ServerWebExchange exchange, - DataBuffer dataBuffer, boolean cacheDecoratedRequest) { + private static ServerHttpRequest decorate(ServerWebExchange exchange, DataBuffer dataBuffer, + boolean cacheDecoratedRequest) { if (dataBuffer.readableByteCount() > 0) { if (log.isTraceEnabled()) { log.trace("retaining body in exchange attribute"); @@ -371,13 +343,11 @@ public final class ServerWebExchangeUtils { exchange.getAttributes().put(CACHED_REQUEST_BODY_ATTR, dataBuffer); } - ServerHttpRequest decorator = new ServerHttpRequestDecorator( - exchange.getRequest()) { + ServerHttpRequest decorator = new ServerHttpRequestDecorator(exchange.getRequest()) { @Override public Flux getBody() { return Mono.fromSupplier(() -> { - if (exchange.getAttributeOrDefault(CACHED_REQUEST_BODY_ATTR, - null) == null) { + if (exchange.getAttributeOrDefault(CACHED_REQUEST_BODY_ATTR, null) == null) { // probably == downstream closed or no body return null; } @@ -388,8 +358,7 @@ public final class ServerWebExchangeUtils { } }; if (cacheDecoratedRequest) { - exchange.getAttributes().put(CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR, - decorator); + exchange.getAttributes().put(CACHED_SERVER_HTTP_REQUEST_DECORATOR_ATTR, decorator); } return decorator; } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServiceUnavailableException.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServiceUnavailableException.java index 9d06e3b6..94f6e9ba 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServiceUnavailableException.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ServiceUnavailableException.java @@ -20,8 +20,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import static org.springframework.http.HttpStatus.SERVICE_UNAVAILABLE; -@ResponseStatus(value = SERVICE_UNAVAILABLE, - reason = "Upstream service is temporarily unavailable") +@ResponseStatus(value = SERVICE_UNAVAILABLE, reason = "Upstream service is temporarily unavailable") public class ServiceUnavailableException extends Exception { public ServiceUnavailableException() { diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java index 599c8296..43456533 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/ShortcutConfigurable.java @@ -36,20 +36,17 @@ import org.springframework.util.Assert; */ public interface ShortcutConfigurable { - static String normalizeKey(String key, int entryIdx, ShortcutConfigurable argHints, - Map args) { + static String normalizeKey(String key, int entryIdx, ShortcutConfigurable argHints, Map args) { // RoutePredicateFactory has name hints and this has a fake key name // replace with the matching key hint - if (key.startsWith(NameUtils.GENERATED_NAME_PREFIX) - && !argHints.shortcutFieldOrder().isEmpty() && entryIdx < args.size() - && entryIdx < argHints.shortcutFieldOrder().size()) { + if (key.startsWith(NameUtils.GENERATED_NAME_PREFIX) && !argHints.shortcutFieldOrder().isEmpty() + && entryIdx < args.size() && entryIdx < argHints.shortcutFieldOrder().size()) { key = argHints.shortcutFieldOrder().get(entryIdx); } return key; } - static Object getValue(SpelExpressionParser parser, BeanFactory beanFactory, - String entryValue) { + static Object getValue(SpelExpressionParser parser, BeanFactory beanFactory, String entryValue) { Object value; String rawValue = entryValue; if (rawValue != null) { @@ -59,8 +56,7 @@ public interface ShortcutConfigurable { // assume it's spel StandardEvaluationContext context = new StandardEvaluationContext(); context.setBeanResolver(new BeanFactoryResolver(beanFactory)); - Expression expression = parser.parseExpression(entryValue, - new TemplateParserContext()); + Expression expression = parser.parseExpression(entryValue, new TemplateParserContext()); value = expression.getValue(context); } else { @@ -89,14 +85,12 @@ public interface ShortcutConfigurable { DEFAULT { @Override - public Map normalize(Map args, - ShortcutConfigurable shortcutConf, SpelExpressionParser parser, - BeanFactory beanFactory) { + public Map normalize(Map args, ShortcutConfigurable shortcutConf, + SpelExpressionParser parser, BeanFactory beanFactory) { Map map = new HashMap<>(); int entryIdx = 0; for (Map.Entry entry : args.entrySet()) { - String key = normalizeKey(entry.getKey(), entryIdx, shortcutConf, - args); + String key = normalizeKey(entry.getKey(), entryIdx, shortcutConf, args); Object value = getValue(parser, beanFactory, entry.getValue()); map.put(key, value); @@ -108,19 +102,16 @@ public interface ShortcutConfigurable { GATHER_LIST { @Override - public Map normalize(Map args, - ShortcutConfigurable shortcutConf, SpelExpressionParser parser, - BeanFactory beanFactory) { + public Map normalize(Map args, ShortcutConfigurable shortcutConf, + SpelExpressionParser parser, BeanFactory beanFactory) { Map map = new HashMap<>(); // field order should be of size 1 List fieldOrder = shortcutConf.shortcutFieldOrder(); Assert.isTrue(fieldOrder != null && fieldOrder.size() == 1, "Shortcut Configuration Type GATHER_LIST must have shortcutFieldOrder of size 1"); String fieldName = fieldOrder.get(0); - map.put(fieldName, - args.values().stream() - .map(value -> getValue(parser, beanFactory, value)) - .collect(Collectors.toList())); + map.put(fieldName, args.values().stream().map(value -> getValue(parser, beanFactory, value)) + .collect(Collectors.toList())); return map; } }, @@ -128,9 +119,8 @@ public interface ShortcutConfigurable { // list is all elements except last which is a boolean flag GATHER_LIST_TAIL_FLAG { @Override - public Map normalize(Map args, - ShortcutConfigurable shortcutConf, SpelExpressionParser parser, - BeanFactory beanFactory) { + public Map normalize(Map args, ShortcutConfigurable shortcutConf, + SpelExpressionParser parser, BeanFactory beanFactory) { Map map = new HashMap<>(); // field order should be of size 1 List fieldOrder = shortcutConf.shortcutFieldOrder(); @@ -141,24 +131,20 @@ public interface ShortcutConfigurable { // strip boolean flag if last entry is true or false int lastIdx = values.size() - 1; String lastValue = values.get(lastIdx); - if (lastValue.equalsIgnoreCase("true") - || lastValue.equalsIgnoreCase("false")) { + if (lastValue.equalsIgnoreCase("true") || lastValue.equalsIgnoreCase("false")) { values = values.subList(0, lastIdx); - map.put(fieldOrder.get(1), - getValue(parser, beanFactory, lastValue)); + map.put(fieldOrder.get(1), getValue(parser, beanFactory, lastValue)); } } String fieldName = fieldOrder.get(0); - map.put(fieldName, - values.stream().map(value -> getValue(parser, beanFactory, value)) - .collect(Collectors.toList())); + map.put(fieldName, values.stream().map(value -> getValue(parser, beanFactory, value)) + .collect(Collectors.toList())); return map; } }; - public abstract Map normalize(Map args, - ShortcutConfigurable shortcutConf, SpelExpressionParser parser, - BeanFactory beanFactory); + public abstract Map normalize(Map args, ShortcutConfigurable shortcutConf, + SpelExpressionParser parser, BeanFactory beanFactory); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/StringToZonedDateTimeConverter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/StringToZonedDateTimeConverter.java index 191418b1..2327c95b 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/StringToZonedDateTimeConverter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/StringToZonedDateTimeConverter.java @@ -30,8 +30,7 @@ public class StringToZonedDateTimeConverter implements Converter extractXForwardedValues(ServerWebExchange exchange) { - List xForwardedValues = exchange.getRequest().getHeaders() - .get(X_FORWARDED_FOR); + List xForwardedValues = exchange.getRequest().getHeaders().get(X_FORWARDED_FOR); if (xForwardedValues == null || xForwardedValues.isEmpty()) { return Collections.emptyList(); } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProvider.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProvider.java index e3af95af..57468fa6 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProvider.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProvider.java @@ -39,8 +39,7 @@ public class GatewayHttpTagsProvider implements GatewayTagsProvider { // it needs to be checked for first, otherwise the delegate response // who's status DIDN'T change, will be used if (exchange.getResponse() instanceof AbstractServerHttpResponse) { - Integer statusInt = ((AbstractServerHttpResponse) exchange.getResponse()) - .getStatusCodeValue(); + Integer statusInt = ((AbstractServerHttpResponse) exchange.getResponse()).getStatusCodeValue(); if (statusInt != null) { status = String.valueOf(statusInt); httpStatusCodeStr = status; @@ -61,8 +60,8 @@ public class GatewayHttpTagsProvider implements GatewayTagsProvider { } } - return Tags.of("outcome", outcome, "status", status, "httpStatusCode", - httpStatusCodeStr, "httpMethod", httpMethod); + return Tags.of("outcome", outcome, "status", status, "httpStatusCode", httpStatusCodeStr, "httpMethod", + httpMethod); } } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProvider.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProvider.java index 63be70a7..07296762 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProvider.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProvider.java @@ -33,8 +33,7 @@ public class GatewayRouteTagsProvider implements GatewayTagsProvider { Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR); if (route != null) { - return Tags.of("routeId", route.getId(), "routeUri", - route.getUri().toString()); + return Tags.of("routeId", route.getId(), "routeUri", route.getUri().toString()); } return Tags.empty(); diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProvider.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProvider.java index 92b73d80..6cd3eb2a 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProvider.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProvider.java @@ -32,8 +32,7 @@ public class PropertiesTagsProvider implements GatewayTagsProvider { private final Tags propertiesTags; public PropertiesTagsProvider(Map tagsMap) { - this.propertiesTags = Tags.of(tagsMap.entrySet().stream() - .map(entry -> Tag.of(entry.getKey(), entry.getValue())) + this.propertiesTags = Tags.of(tagsMap.entrySet().stream().map(entry -> Tag.of(entry.getKey(), entry.getValue())) .collect(Collectors.toList())); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java index 79851275..da1e5617 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/actuate/GatewayControllerEndpointTests.java @@ -54,10 +54,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) -@SpringBootTest( - properties = { "management.endpoints.web.exposure.include=*", - "spring.cloud.gateway.actuator.verbose.enabled=true" }, - webEnvironment = RANDOM_PORT) +@SpringBootTest(properties = { "management.endpoints.web.exposure.include=*", + "spring.cloud.gateway.actuator.verbose.enabled=true" }, webEnvironment = RANDOM_PORT) public class GatewayControllerEndpointTests { @Autowired @@ -68,15 +66,14 @@ public class GatewayControllerEndpointTests { @Test public void testRefresh() { - testClient.post().uri("http://localhost:" + port + "/actuator/gateway/refresh") - .exchange().expectStatus().isOk(); + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/refresh").exchange().expectStatus() + .isOk(); } @Test public void testRoutes() { - testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routes") - .exchange().expectStatus().isOk().expectBodyList(Map.class) - .consumeWith(result -> { + testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routes").exchange().expectStatus().isOk() + .expectBodyList(Map.class).consumeWith(result -> { List responseBody = result.getResponseBody(); assertThat(responseBody).isNotEmpty(); }); @@ -84,10 +81,8 @@ public class GatewayControllerEndpointTests { @Test public void testGetSpecificRoute() { - testClient.get() - .uri("http://localhost:" + port + "/actuator/gateway/routes/test-service") - .exchange().expectStatus().isOk().expectBodyList(Map.class) - .consumeWith(result -> { + testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routes/test-service").exchange() + .expectStatus().isOk().expectBodyList(Map.class).consumeWith(result -> { List responseBody = result.getResponseBody(); assertThat(responseBody).isNotNull(); assertThat(responseBody.size()).isEqualTo(1); @@ -97,22 +92,17 @@ public class GatewayControllerEndpointTests { @Test public void testRouteReturnsMetadata() { - testClient.get() - .uri("http://localhost:" + port - + "/actuator/gateway/routes/route_with_metadata") - .exchange().expectStatus().isOk().expectBody().jsonPath("$.metadata") + testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routes/route_with_metadata").exchange() + .expectStatus().isOk().expectBody().jsonPath("$.metadata") .value(map -> assertThat((Map) map).hasSize(3) - .containsEntry("optionName", "OptionValue") - .containsEntry("iAmNumber", 1).containsEntry("compositeObject", - Maps.newHashMap("name", "value"))); + .containsEntry("optionName", "OptionValue").containsEntry("iAmNumber", 1) + .containsEntry("compositeObject", Maps.newHashMap("name", "value"))); } @Test public void testRouteFilters() { - testClient.get() - .uri("http://localhost:" + port + "/actuator/gateway/routefilters") - .exchange().expectStatus().isOk().expectBody(Map.class) - .consumeWith(result -> { + testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routefilters").exchange().expectStatus() + .isOk().expectBody(Map.class).consumeWith(result -> { Map responseBody = result.getResponseBody(); assertThat(responseBody).isNotEmpty(); }); @@ -120,10 +110,8 @@ public class GatewayControllerEndpointTests { @Test public void testRoutePredicates() { - testClient.get() - .uri("http://localhost:" + port + "/actuator/gateway/routepredicates") - .exchange().expectStatus().isOk().expectBody(Map.class) - .consumeWith(result -> { + testClient.get().uri("http://localhost:" + port + "/actuator/gateway/routepredicates").exchange().expectStatus() + .isOk().expectBody(Map.class).consumeWith(result -> { Map responseBody = result.getResponseBody(); assertThat(responseBody).isNotEmpty(); }); @@ -135,27 +123,20 @@ public class GatewayControllerEndpointTests { RouteDefinition testRouteDefinition = new RouteDefinition(); testRouteDefinition.setUri(URI.create("http://example.org")); - FilterDefinition prefixPathFilterDefinition = new FilterDefinition( - "PrefixPath=/test-path"); - FilterDefinition redirectToFilterDefinition = new FilterDefinition( - "RemoveResponseHeader=Sensitive-Header"); + FilterDefinition prefixPathFilterDefinition = new FilterDefinition("PrefixPath=/test-path"); + FilterDefinition redirectToFilterDefinition = new FilterDefinition("RemoveResponseHeader=Sensitive-Header"); FilterDefinition testFilterDefinition = new FilterDefinition("TestFilter"); - testRouteDefinition.setFilters(Arrays.asList(prefixPathFilterDefinition, - redirectToFilterDefinition, testFilterDefinition)); + testRouteDefinition.setFilters( + Arrays.asList(prefixPathFilterDefinition, redirectToFilterDefinition, testFilterDefinition)); - PredicateDefinition hostRoutePredicateDefinition = new PredicateDefinition( - "Host=myhost.org"); - PredicateDefinition methodRoutePredicateDefinition = new PredicateDefinition( - "Method=GET"); - PredicateDefinition testPredicateDefinition = new PredicateDefinition( - "Test=value"); - testRouteDefinition.setPredicates(Arrays.asList(hostRoutePredicateDefinition, - methodRoutePredicateDefinition, testPredicateDefinition)); + PredicateDefinition hostRoutePredicateDefinition = new PredicateDefinition("Host=myhost.org"); + PredicateDefinition methodRoutePredicateDefinition = new PredicateDefinition("Method=GET"); + PredicateDefinition testPredicateDefinition = new PredicateDefinition("Test=value"); + testRouteDefinition.setPredicates( + Arrays.asList(hostRoutePredicateDefinition, methodRoutePredicateDefinition, testPredicateDefinition)); - testClient.post() - .uri("http://localhost:" + port + "/actuator/gateway/routes/test-route") - .accept(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue(testRouteDefinition)).exchange() + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/routes/test-route") + .accept(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(testRouteDefinition)).exchange() .expectStatus().isCreated(); } @@ -165,14 +146,11 @@ public class GatewayControllerEndpointTests { RouteDefinition testRouteDefinition = new RouteDefinition(); testRouteDefinition.setUri(URI.create("http://example.org")); - FilterDefinition filterDefinition = new FilterDefinition( - "NotExistingFilter=test-config"); + FilterDefinition filterDefinition = new FilterDefinition("NotExistingFilter=test-config"); testRouteDefinition.setFilters(Collections.singletonList(filterDefinition)); - testClient.post() - .uri("http://localhost:" + port + "/actuator/gateway/routes/test-route") - .accept(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue(testRouteDefinition)).exchange() + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/routes/test-route") + .accept(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(testRouteDefinition)).exchange() .expectStatus().isBadRequest(); } @@ -182,14 +160,11 @@ public class GatewayControllerEndpointTests { RouteDefinition testRouteDefinition = new RouteDefinition(); testRouteDefinition.setUri(URI.create("http://example.org")); - PredicateDefinition predicateDefinition = new PredicateDefinition( - "NotExistingPredicate=test-config"); + PredicateDefinition predicateDefinition = new PredicateDefinition("NotExistingPredicate=test-config"); testRouteDefinition.setPredicates(Collections.singletonList(predicateDefinition)); - testClient.post() - .uri("http://localhost:" + port + "/actuator/gateway/routes/test-route") - .accept(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue(testRouteDefinition)).exchange() + testClient.post().uri("http://localhost:" + port + "/actuator/gateway/routes/test-route") + .accept(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue(testRouteDefinition)).exchange() .expectStatus().isBadRequest(); } @@ -201,9 +176,7 @@ public class GatewayControllerEndpointTests { @Bean RouteLocator testRouteLocator(RouteLocatorBuilder routeLocatorBuilder) { return routeLocatorBuilder.routes() - .route("test-service", - r -> r.path("/test-service/**").uri("lb://test-service")) - .build(); + .route("test-service", r -> r.path("/test-service/**").uri("lb://test-service")).build(); } @Bean @@ -218,8 +191,7 @@ public class GatewayControllerEndpointTests { } - private static class TestFilterGatewayFilterFactory - extends AbstractGatewayFilterFactory { + private static class TestFilterGatewayFilterFactory extends AbstractGatewayFilterFactory { @Override public GatewayFilter apply(Object config) { diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java index 975d00ba..f36f0d34 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayAutoConfigurationTests.java @@ -44,11 +44,10 @@ public class GatewayAutoConfigurationTests { @Test public void noHiddenHttpMethodFilter() { - try (ConfigurableApplicationContext ctx = SpringApplication.run(Config.class, - "--spring.jmx.enabled=false", "--server.port=0")) { - assertThat(ctx.getEnvironment() - .getProperty("spring.webflux.hiddenmethod.filter.enabled")) - .isEqualTo("false"); + try (ConfigurableApplicationContext ctx = SpringApplication.run(Config.class, "--spring.jmx.enabled=false", + "--server.port=0")) { + assertThat(ctx.getEnvironment().getProperty("spring.webflux.hiddenmethod.filter.enabled")) + .isEqualTo("false"); assertThat(ctx.getBeanNamesForType(HiddenHttpMethodFilter.class)).isEmpty(); } } @@ -56,10 +55,8 @@ public class GatewayAutoConfigurationTests { @Test public void nettyHttpClientDefaults() { new ReactiveWebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class, - MetricsAutoConfiguration.class, - SimpleMetricsExportAutoConfiguration.class, - GatewayAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class, MetricsAutoConfiguration.class, + SimpleMetricsExportAutoConfiguration.class, GatewayAutoConfiguration.class)) .withPropertyValues("debug=true").run(context -> { assertThat(context).hasSingleBean(HttpClient.class); assertThat(context).hasBean("gatewayHttpClient"); @@ -83,12 +80,10 @@ public class GatewayAutoConfigurationTests { @Test public void nettyHttpClientConfigured() { new ReactiveWebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class, - MetricsAutoConfiguration.class, - SimpleMetricsExportAutoConfiguration.class, - GatewayAutoConfiguration.class, HttpClientCustomizedConfig.class)) - .withPropertyValues( - "spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager=true", + .withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class, MetricsAutoConfiguration.class, + SimpleMetricsExportAutoConfiguration.class, GatewayAutoConfiguration.class, + HttpClientCustomizedConfig.class)) + .withPropertyValues("spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager=true", "spring.cloud.gateway.httpclient.connect-timeout=10", "spring.cloud.gateway.httpclient.response-timeout=10s", "spring.cloud.gateway.httpclient.pool.type=fixed", @@ -99,10 +94,8 @@ public class GatewayAutoConfigurationTests { .run(context -> { assertThat(context).hasSingleBean(HttpClient.class); HttpClient httpClient = context.getBean(HttpClient.class); - HttpClientProperties properties = context - .getBean(HttpClientProperties.class); - assertThat(properties.getMaxInitialLineLength().toBytes()) - .isLessThanOrEqualTo(Integer.MAX_VALUE); + HttpClientProperties properties = context.getBean(HttpClientProperties.class); + assertThat(properties.getMaxInitialLineLength().toBytes()).isLessThanOrEqualTo(Integer.MAX_VALUE); /* * FIXME: 2.1.0 HttpClientOptions options = httpClient.options(); * @@ -119,42 +112,33 @@ public class GatewayAutoConfigurationTests { * assertThat(sslContext).isNotNull(); */ // TODO: howto test SslContext - assertThat(context) - .hasSingleBean(ReactorNettyRequestUpgradeStrategy.class); + assertThat(context).hasSingleBean(ReactorNettyRequestUpgradeStrategy.class); ReactorNettyRequestUpgradeStrategy upgradeStrategy = context .getBean(ReactorNettyRequestUpgradeStrategy.class); - assertThat(upgradeStrategy.getMaxFramePayloadLength()) - .isEqualTo(1024); + assertThat(upgradeStrategy.getMaxFramePayloadLength()).isEqualTo(1024); assertThat(upgradeStrategy.getHandlePing()).isTrue(); assertThat(context).hasSingleBean(ReactorNettyWebSocketClient.class); - ReactorNettyWebSocketClient webSocketClient = context - .getBean(ReactorNettyWebSocketClient.class); - assertThat(webSocketClient.getMaxFramePayloadLength()) - .isEqualTo(1024); - HttpClientCustomizedConfig config = context - .getBean(HttpClientCustomizedConfig.class); + ReactorNettyWebSocketClient webSocketClient = context.getBean(ReactorNettyWebSocketClient.class); + assertThat(webSocketClient.getMaxFramePayloadLength()).isEqualTo(1024); + HttpClientCustomizedConfig config = context.getBean(HttpClientCustomizedConfig.class); assertThat(config.called.get()).isTrue(); }); } @Test public void verboseActuatorEnabledByDefault() { - try (ConfigurableApplicationContext ctx = SpringApplication.run(Config.class, - "--spring.jmx.enabled=false", "--server.port=0")) { - assertThat(ctx.getBeanNamesForType(GatewayControllerEndpoint.class)) - .hasSize(1); - assertThat(ctx.getBeanNamesForType(GatewayLegacyControllerEndpoint.class)) - .isEmpty(); + try (ConfigurableApplicationContext ctx = SpringApplication.run(Config.class, "--spring.jmx.enabled=false", + "--server.port=0")) { + assertThat(ctx.getBeanNamesForType(GatewayControllerEndpoint.class)).hasSize(1); + assertThat(ctx.getBeanNamesForType(GatewayLegacyControllerEndpoint.class)).isEmpty(); } } @Test public void verboseActuatorDisabled() { - try (ConfigurableApplicationContext ctx = SpringApplication.run(Config.class, - "--spring.jmx.enabled=false", "--server.port=0", - "--spring.cloud.gateway.actuator.verbose.enabled=false")) { - assertThat(ctx.getBeanNamesForType(GatewayLegacyControllerEndpoint.class)) - .hasSize(1); + try (ConfigurableApplicationContext ctx = SpringApplication.run(Config.class, "--spring.jmx.enabled=false", + "--server.port=0", "--spring.cloud.gateway.actuator.verbose.enabled=false")) { + assertThat(ctx.getBeanNamesForType(GatewayLegacyControllerEndpoint.class)).hasSize(1); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java index 50864961..9615eeaf 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfigurationTests.java @@ -60,8 +60,7 @@ public class GatewayMetricsAutoConfigurationTests { } @RunWith(SpringRunner.class) - @SpringBootTest(classes = Config.class, - properties = "spring.cloud.gateway.metrics.enabled=false") + @SpringBootTest(classes = Config.class, properties = "spring.cloud.gateway.metrics.enabled=false") public static class DisabledByProperty { @Autowired(required = false) @@ -87,8 +86,7 @@ public class GatewayMetricsAutoConfigurationTests { @Test public void gatewayMetricsBeansExists() { assertThat(filter).isNotNull(); - assertThat(tagsProviders).extracting("class") - .contains(CustomTagsProviderConfig.EmptyTagsProvider.class); + assertThat(tagsProviders).extracting("class").contains(CustomTagsProviderConfig.EmptyTagsProvider.class); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfigurationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfigurationTests.java index 78729c14..8d79c7b5 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfigurationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/config/GatewayNoLoadBalancerClientAutoConfigurationTests.java @@ -48,12 +48,10 @@ public class GatewayNoLoadBalancerClientAutoConfigurationTests { @Test public void noLoadBalancerClientReportsError() { - try (ConfigurableApplicationContext context = new SpringApplication(Config.class) - .run("--server.port=" + port, "--spring.jmx.enabled=false")) { - WebTestClient client = WebTestClient.bindToServer() - .baseUrl("http://localhost:" + port).build(); - client.get().header(HttpHeaders.HOST, "www.lbfail.org").exchange() - .expectStatus().is5xxServerError(); + try (ConfigurableApplicationContext context = new SpringApplication(Config.class).run("--server.port=" + port, + "--spring.jmx.enabled=false")) { + WebTestClient client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build(); + client.get().header(HttpHeaders.HOST, "www.lbfail.org").exchange().expectStatus().is5xxServerError(); } } @@ -64,9 +62,7 @@ public class GatewayNoLoadBalancerClientAutoConfigurationTests { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("lb_fail", r -> r.host("**.lbfail.org").uri("lb://fail")) - .build(); + return builder.routes().route("lb_fail", r -> r.host("**.lbfail.org").uri("lb://fail")).build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/CorsTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/CorsTests.java index 2a74142f..47b85eae 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/CorsTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/CorsTests.java @@ -44,39 +44,30 @@ public class CorsTests extends BaseWebClientTests { @Test public void testPreFlightCorsRequest() { - ClientResponse clientResponse = webClient.options().uri("/abc/123/function") - .header("Origin", "domain.com") + ClientResponse clientResponse = webClient.options().uri("/abc/123/function").header("Origin", "domain.com") .header("Access-Control-Request-Method", "GET").exchange().block(); HttpHeaders asHttpHeaders = clientResponse.headers().asHttpHeaders(); Mono bodyToMono = clientResponse.bodyToMono(String.class); // pre-flight request shouldn't return the response body assertThat(bodyToMono.block()).isNull(); assertThat(asHttpHeaders.getAccessControlAllowOrigin()) - .as("Missing header value in response: " - + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN) - .isEqualTo("*"); + .as("Missing header value in response: " + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN).isEqualTo("*"); assertThat(asHttpHeaders.getAccessControlAllowMethods()) - .as("Missing header value in response: " - + HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS) + .as("Missing header value in response: " + HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS) .isEqualTo(Arrays.asList(new HttpMethod[] { HttpMethod.GET })); - assertThat(clientResponse.statusCode()).as("Pre Flight call failed.") - .isEqualTo(HttpStatus.OK); + assertThat(clientResponse.statusCode()).as("Pre Flight call failed.").isEqualTo(HttpStatus.OK); } @Test public void testCorsRequest() { - ClientResponse clientResponse = webClient.get().uri("/abc/123/function") - .header("Origin", "domain.com").header(HttpHeaders.HOST, "www.path.org") - .exchange().block(); + ClientResponse clientResponse = webClient.get().uri("/abc/123/function").header("Origin", "domain.com") + .header(HttpHeaders.HOST, "www.path.org").exchange().block(); HttpHeaders asHttpHeaders = clientResponse.headers().asHttpHeaders(); Mono bodyToMono = clientResponse.bodyToMono(String.class); assertThat(bodyToMono.block()).isNotNull(); assertThat(asHttpHeaders.getAccessControlAllowOrigin()) - .as("Missing header value in response: " - + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN) - .isEqualTo("*"); - assertThat(clientResponse.statusCode()).as("CORS request failed.") - .isEqualTo(HttpStatus.OK); + .as("Missing header value in response: " + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN).isEqualTo("*"); + assertThat(clientResponse.statusCode()).as("CORS request failed.").isEqualTo(HttpStatus.OK); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/SimpleUrlHandlerCorsTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/SimpleUrlHandlerCorsTests.java index d088d8df..f986ee1f 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/SimpleUrlHandlerCorsTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/cors/SimpleUrlHandlerCorsTests.java @@ -49,39 +49,30 @@ public class SimpleUrlHandlerCorsTests extends BaseWebClientTests { @Test public void testPreFlightCorsRequestNotHandledByGW() { - ClientResponse clientResponse = webClient.options().uri("/abc/123/function") - .header("Origin", "domain.com") + ClientResponse clientResponse = webClient.options().uri("/abc/123/function").header("Origin", "domain.com") .header("Access-Control-Request-Method", "GET").exchange().block(); HttpHeaders asHttpHeaders = clientResponse.headers().asHttpHeaders(); Mono bodyToMono = clientResponse.bodyToMono(String.class); // pre-flight request shouldn't return the response body assertThat(bodyToMono.block()).isNull(); assertThat(asHttpHeaders.getAccessControlAllowOrigin()) - .as("Missing header value in response: " - + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN) - .isEqualTo("*"); + .as("Missing header value in response: " + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN).isEqualTo("*"); assertThat(asHttpHeaders.getAccessControlAllowMethods()) - .as("Missing header value in response: " - + HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS) + .as("Missing header value in response: " + HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS) .isEqualTo(Arrays.asList(new HttpMethod[] { HttpMethod.GET })); - assertThat(clientResponse.statusCode()).as("Pre Flight call failed.") - .isEqualTo(HttpStatus.OK); + assertThat(clientResponse.statusCode()).as("Pre Flight call failed.").isEqualTo(HttpStatus.OK); } @Test public void testCorsRequestNotHandledByGW() { - ClientResponse clientResponse = webClient.get().uri("/abc/123/function") - .header("Origin", "domain.com").header(HttpHeaders.HOST, "www.path.org") - .exchange().block(); + ClientResponse clientResponse = webClient.get().uri("/abc/123/function").header("Origin", "domain.com") + .header(HttpHeaders.HOST, "www.path.org").exchange().block(); HttpHeaders asHttpHeaders = clientResponse.headers().asHttpHeaders(); Mono bodyToMono = clientResponse.bodyToMono(String.class); assertThat(bodyToMono.block()).isNotNull(); assertThat(asHttpHeaders.getAccessControlAllowOrigin()) - .as("Missing header value in response: " - + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN) - .isEqualTo("*"); - assertThat(clientResponse.statusCode()).as("CORS request failed.") - .isEqualTo(HttpStatus.NOT_FOUND); + .as("Missing header value in response: " + HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN).isEqualTo("*"); + assertThat(clientResponse.statusCode()).as("CORS request failed.").isEqualTo(HttpStatus.NOT_FOUND); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorIntegrationTests.java index 3a6814f8..d94aa773 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorIntegrationTests.java @@ -40,8 +40,7 @@ import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.Assertions.assertThat; @RunWith(SpringRunner.class) -@SpringBootTest( - classes = DiscoveryClientRouteDefinitionLocatorIntegrationTests.Config.class, +@SpringBootTest(classes = DiscoveryClientRouteDefinitionLocatorIntegrationTests.Config.class, properties = { "spring.cloud.gateway.discovery.locator.enabled=true", "spring.cloud.gateway.discovery.locator.route-id-prefix=test__" }) public class DiscoveryClientRouteDefinitionLocatorIntegrationTests { @@ -57,8 +56,7 @@ public class DiscoveryClientRouteDefinitionLocatorIntegrationTests { @Test public void newServiceAddsRoute() throws Exception { - List routes = routeLocator.getRoutes() - .filter(route -> route.getId().startsWith("test__")).collectList() + List routes = routeLocator.getRoutes().filter(route -> route.getId().startsWith("test__")).collectList() .block(); assertThat(routes).hasSize(1); @@ -68,9 +66,7 @@ public class DiscoveryClientRouteDefinitionLocatorIntegrationTests { Thread.sleep(2000); - routes = routeLocator.getRoutes() - .filter(route -> route.getId().startsWith("test__")).collectList() - .block(); + routes = routeLocator.getRoutes().filter(route -> route.getId().startsWith("test__")).collectList().block(); assertThat(routes).hasSize(2); } @@ -89,11 +85,11 @@ public class DiscoveryClientRouteDefinitionLocatorIntegrationTests { AtomicBoolean single = new AtomicBoolean(true); - DefaultServiceInstance instance1 = new DefaultServiceInstance("service1_1", - "service1", "localhost", 8001, false); + DefaultServiceInstance instance1 = new DefaultServiceInstance("service1_1", "service1", "localhost", 8001, + false); - DefaultServiceInstance instance2 = new DefaultServiceInstance("service2_1", - "service2", "localhost", 8001, false); + DefaultServiceInstance instance2 = new DefaultServiceInstance("service2_1", "service2", "localhost", 8001, + false); public void multiple() { single.set(false); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorTests.java index 24b7d784..7a9c9955 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/DiscoveryClientRouteDefinitionLocatorTests.java @@ -65,11 +65,9 @@ public class DiscoveryClientRouteDefinitionLocatorTests { @Test public void includeExpressionWorks() { - assertThat(locator).as("DiscoveryClientRouteDefinitionLocator was null") - .isNotNull(); + assertThat(locator).as("DiscoveryClientRouteDefinitionLocator was null").isNotNull(); - List definitions = locator.getRouteDefinitions().collectList() - .block(); + List definitions = locator.getRouteDefinitions().collectList().block(); assertThat(definitions).hasSize(1); RouteDefinition definition = definitions.get(0); @@ -80,14 +78,12 @@ public class DiscoveryClientRouteDefinitionLocatorTests { assertThat(definition.getPredicates()).hasSize(1); PredicateDefinition predicate = definition.getPredicates().get(0); assertThat(predicate.getName()).isEqualTo("Path"); - assertThat(predicate.getArgs()).hasSize(1).containsEntry(PATTERN_KEY, - "/service1/**"); + assertThat(predicate.getArgs()).hasSize(1).containsEntry(PATTERN_KEY, "/service1/**"); assertThat(definition.getFilters()).hasSize(1); FilterDefinition filter = definition.getFilters().get(0); assertThat(filter.getName()).isEqualTo("RewritePath"); - assertThat(filter.getArgs()).hasSize(2) - .containsEntry(REGEXP_KEY, "/service1/(?.*)") + assertThat(filter.getArgs()).hasSize(2).containsEntry(REGEXP_KEY, "/service1/(?.*)") .containsEntry(REPLACEMENT_KEY, "/${remaining}"); } @@ -98,20 +94,17 @@ public class DiscoveryClientRouteDefinitionLocatorTests { @Bean ReactiveDiscoveryClient discoveryClient() { ReactiveDiscoveryClient discoveryClient = mock(ReactiveDiscoveryClient.class); - when(discoveryClient.getServices()) - .thenReturn(Flux.just("SERVICE1", "Service2")); - whenInstance(discoveryClient, "SERVICE1", - Collections.singletonMap("edge", "true")); + when(discoveryClient.getServices()).thenReturn(Flux.just("SERVICE1", "Service2")); + whenInstance(discoveryClient, "SERVICE1", Collections.singletonMap("edge", "true")); whenInstance(discoveryClient, "Service2", Collections.emptyMap()); return discoveryClient; } - private void whenInstance(ReactiveDiscoveryClient discoveryClient, - String serviceId, Map metadata) { - DefaultServiceInstance instance1 = new DefaultServiceInstance( - serviceId + "8001", serviceId, "localhost", 8001, false, metadata); - when(discoveryClient.getInstances(serviceId)) - .thenReturn(Flux.just(instance1)); + private void whenInstance(ReactiveDiscoveryClient discoveryClient, String serviceId, + Map metadata) { + DefaultServiceInstance instance1 = new DefaultServiceInstance(serviceId + "8001", serviceId, "localhost", + 8001, false, metadata); + when(discoveryClient.getInstances(serviceId)).thenReturn(Flux.just(instance1)); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/ReactiveGatewayDiscoveryClientAutoConfigurationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/ReactiveGatewayDiscoveryClientAutoConfigurationTests.java index f57a1cc5..7c09e833 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/ReactiveGatewayDiscoveryClientAutoConfigurationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/discovery/ReactiveGatewayDiscoveryClientAutoConfigurationTests.java @@ -36,10 +36,10 @@ import static org.assertj.core.api.Assertions.assertThat; public class ReactiveGatewayDiscoveryClientAutoConfigurationTests { @RunWith(SpringRunner.class) - @SpringBootTest(classes = Config.class, properties = { - "spring.cloud.gateway.discovery.locator.enabled=true", - "spring.cloud.gateway.loadbalancer.use404=true", - "spring.cloud.discovery.client.simple.instances.service[0].uri=https://service1:443" }) + @SpringBootTest(classes = Config.class, + properties = { "spring.cloud.gateway.discovery.locator.enabled=true", + "spring.cloud.gateway.loadbalancer.use404=true", + "spring.cloud.discovery.client.simple.instances.service[0].uri=https://service1:443" }) public static class EnabledByProperty { @Autowired(required = false) @@ -50,10 +50,8 @@ public class ReactiveGatewayDiscoveryClientAutoConfigurationTests { @Test public void routeLocatorBeanExists() { - assertThat(locator).as("DiscoveryClientRouteDefinitionLocator was null") - .isNotNull(); - List definitions = locator.getRouteDefinitions() - .collectList().block(); + assertThat(locator).as("DiscoveryClientRouteDefinitionLocator was null").isNotNull(); + List definitions = locator.getRouteDefinitions().collectList().block(); assertThat(definitions).hasSize(1); } @@ -73,8 +71,7 @@ public class ReactiveGatewayDiscoveryClientAutoConfigurationTests { @Test public void routeLocatorBeanMissing() { - assertThat(locator).as("DiscoveryClientRouteDefinitionLocator exists") - .isNull(); + assertThat(locator).as("DiscoveryClientRouteDefinitionLocator exists").isNull(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilterTests.java index 731cc8f1..d546c416 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ForwardRoutingFilterTests.java @@ -65,8 +65,7 @@ public class ForwardRoutingFilterTests { @Before public void setup() { - exchange = MockServerWebExchange - .from(MockServerHttpRequest.get("localendpoint").build()); + exchange = MockServerWebExchange.from(MockServerHttpRequest.get("localendpoint").build()); when(objectProvider.getIfAvailable()).thenReturn(this.dispatcherHandler); } @@ -83,8 +82,7 @@ public class ForwardRoutingFilterTests { @Test public void shouldFilterWhenGatewayRequestUrlSchemeIsForward() { - URI uri = UriComponentsBuilder.fromUriString("forward://endpoint").build() - .toUri(); + URI uri = UriComponentsBuilder.fromUriString("forward://endpoint").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, uri); assertThat(exchange.getAttributes().get(GATEWAY_ALREADY_ROUTED_ATTR)).isNull(); @@ -100,12 +98,10 @@ public class ForwardRoutingFilterTests { @Test public void shouldFilterAndKeepHostPathAsSpecified() { - URI uri = UriComponentsBuilder.fromUriString("forward://host/outage").build() - .toUri(); + URI uri = UriComponentsBuilder.fromUriString("forward://host/outage").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, uri); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); forwardRoutingFilter.filter(exchange, chain); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterCustomTagsTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterCustomTagsTests.java index ace0cf0e..a775083a 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterCustomTagsTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterCustomTagsTests.java @@ -72,8 +72,7 @@ public class GatewayMetricsFilterCustomTagsTests extends BaseWebClientTests { } private void assertMetricsContainsTag(String tagKey, String tagValue) { - assertThat(this.meterRegistry.get(REQUEST_METRICS_NAME).tag(tagKey, tagValue) - .timer().count()).isEqualTo(1); + assertThat(this.meterRegistry.get(REQUEST_METRICS_NAME).tag(tagKey, tagValue).timer().count()).isEqualTo(1); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterTests.java index 941de419..b99097d4 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilterTests.java @@ -70,12 +70,10 @@ public class GatewayMetricsFilterTests extends BaseWebClientTests { @Test public void gatewayRequestsMeterFilterHasTagsForBadTargetUri() { - testClient.get().uri("/badtargeturi").exchange().expectStatus() - .is5xxServerError(); + testClient.get().uri("/badtargeturi").exchange().expectStatus().is5xxServerError(); assertMetricsContainsTag("outcome", HttpStatus.Series.SERVER_ERROR.name()); assertMetricsContainsTag("status", HttpStatus.INTERNAL_SERVER_ERROR.name()); - assertMetricsContainsTag("httpStatusCode", - String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value())); + assertMetricsContainsTag("httpStatusCode", String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value())); assertMetricsContainsTag("httpMethod", HttpMethod.GET.toString()); assertMetricsContainsTag("routeId", "default_path_to_httpbin"); assertMetricsContainsTag("routeUri", testUri); @@ -86,9 +84,8 @@ public class GatewayMetricsFilterTests extends BaseWebClientTests { HttpHeaders headers = new HttpHeaders(); headers.set(HttpHeaders.HOST, "www.setcustomstatusmetrics.org"); // cannot use netty client since we cannot read custom http status - ResponseEntity response = new TestRestTemplate().exchange( - baseUri + "/headers", HttpMethod.POST, new HttpEntity<>(headers), - String.class); + ResponseEntity response = new TestRestTemplate().exchange(baseUri + "/headers", HttpMethod.POST, + new HttpEntity<>(headers), String.class); assertThat(response.getStatusCodeValue()).isEqualTo(432); assertMetricsContainsTag("outcome", "CUSTOM"); assertMetricsContainsTag("status", "432"); @@ -120,8 +117,7 @@ public class GatewayMetricsFilterTests extends BaseWebClientTests { public RouteLocator myRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("test_custom_http_status_metrics", - r -> r.host("*.setcustomstatusmetrics.org") - .filters(f -> f.setStatus(432)).uri(testUri)) + r -> r.host("*.setcustomstatusmetrics.org").filters(f -> f.setStatus(432)).uri(testUri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterCompatibleTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterCompatibleTests.java index 79e66583..bde33d62 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterCompatibleTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterCompatibleTests.java @@ -48,12 +48,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen "spring.cloud.gateway.routes[0].predicates[0].args[pattern]=/connect/delay/{timeout}", "spring.cloud.gateway.routes[0].metadata[connect-timeout]=5", "spring.cloud.gateway.routes[1].id=route_response_timeout", - "spring.cloud.gateway.routes[1].uri=lb://testservice", - "spring.cloud.gateway.routes[1].predicates[0].name=Path", + "spring.cloud.gateway.routes[1].uri=lb://testservice", "spring.cloud.gateway.routes[1].predicates[0].name=Path", "spring.cloud.gateway.routes[1].predicates[0].args[pattern]=/route/delay/{timeout}", "spring.cloud.gateway.routes[1].filters[0]=StripPrefix=1", - "spring.cloud.gateway.routes[1].metadata.response-timeout=1000" }, - webEnvironment = RANDOM_PORT) + "spring.cloud.gateway.routes[1].metadata.response-timeout=1000" }, webEnvironment = RANDOM_PORT) @DirtiesContext public class NettyRoutingFilterCompatibleTests extends BaseWebClientTests { @@ -65,11 +63,9 @@ public class NettyRoutingFilterCompatibleTests extends BaseWebClientTests { @Test public void shouldApplyResponseTimeoutPerRoute() { - testClient.get().uri("/route/delay/2").exchange().expectStatus() - .isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody().jsonPath("$.status") - .isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())) - .jsonPath("$.message") - .isEqualTo("Response took longer than timeout: PT1S"); + testClient.get().uri("/route/delay/2").exchange().expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT) + .expectBody().jsonPath("$.status").isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())) + .jsonPath("$.message").isEqualTo("Response took longer than timeout: PT1S"); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java index 73c44fd4..dfd0f524 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterIntegrationTests.java @@ -43,8 +43,7 @@ import static org.hamcrest.Matchers.containsString; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) -@SpringBootTest(properties = "spring.cloud.gateway.httpclient.response-timeout=3s", - webEnvironment = RANDOM_PORT) +@SpringBootTest(properties = "spring.cloud.gateway.httpclient.response-timeout=3s", webEnvironment = RANDOM_PORT) @DirtiesContext public class NettyRoutingFilterIntegrationTests extends BaseWebClientTests { @@ -53,11 +52,9 @@ public class NettyRoutingFilterIntegrationTests extends BaseWebClientTests { @Test public void responseTimeoutWorks() { - testClient.get().uri("/delay/5").exchange().expectStatus() - .isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody().jsonPath("$.status") - .isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())) - .jsonPath("$.message") - .isEqualTo("Response took longer than timeout: PT3S"); + testClient.get().uri("/delay/5").exchange().expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody() + .jsonPath("$.status").isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())) + .jsonPath("$.message").isEqualTo("Response took longer than timeout: PT3S"); } @Test @@ -65,68 +62,58 @@ public class NettyRoutingFilterIntegrationTests extends BaseWebClientTests { // different base url to have different host header in inbound / outbound requests // Host: 127.0.0.1 -> request to Gateway, Host: localhost -> request from Gateway, // resolved from lb://testservice - WebTestClient client = testClient.mutate().baseUrl("http://127.0.0.1:" + port) - .build(); + WebTestClient client = testClient.mutate().baseUrl("http://127.0.0.1:" + port).build(); - client.get().uri("/headers").exchange().expectBody().jsonPath("$.headers.host") - .isEqualTo("localhost:" + port); + client.get().uri("/headers").exchange().expectBody().jsonPath("$.headers.host").isEqualTo("localhost:" + port); } @Test public void canHandleDecoratedResponseWithNonStandardStatusValue() { final int NON_STANDARD_STATUS = 480; responseDecorator.decorateResponseTimes(1); - testClient.mutate().baseUrl("http://localhost:" + port).build().get() - .uri("/status/" + NON_STANDARD_STATUS).exchange().expectStatus() - .isEqualTo(NON_STANDARD_STATUS); + testClient.mutate().baseUrl("http://localhost:" + port).build().get().uri("/status/" + NON_STANDARD_STATUS) + .exchange().expectStatus().isEqualTo(NON_STANDARD_STATUS); } @Test public void canHandleUndecoratedResponseWithNonStandardStatusValue() { final int NON_STANDARD_STATUS = 480; responseDecorator.decorateResponseTimes(0); - testClient.mutate().baseUrl("http://localhost:" + port).build().get() - .uri("/status/" + NON_STANDARD_STATUS).exchange().expectStatus() - .isEqualTo(NON_STANDARD_STATUS); + testClient.mutate().baseUrl("http://localhost:" + port).build().get().uri("/status/" + NON_STANDARD_STATUS) + .exchange().expectStatus().isEqualTo(NON_STANDARD_STATUS); } @Test public void canHandleMultiplyDecoratedResponseWithNonStandardStatusValue() { final int NON_STANDARD_STATUS = 142; responseDecorator.decorateResponseTimes(14); - testClient.mutate().baseUrl("http://localhost:" + port).build().get() - .uri("/status/" + NON_STANDARD_STATUS).exchange().expectStatus() - .isEqualTo(NON_STANDARD_STATUS); + testClient.mutate().baseUrl("http://localhost:" + port).build().get().uri("/status/" + NON_STANDARD_STATUS) + .exchange().expectStatus().isEqualTo(NON_STANDARD_STATUS); } @Test public void shouldApplyConnectTimeoutPerRoute() { long currentTimeMillisBeforeCall = System.currentTimeMillis(); - testClient.get().uri("/connect/delay/2").exchange().expectStatus() - .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody() - .jsonPath("$.message") + testClient.get().uri("/connect/delay/2").exchange().expectStatus().isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR) + .expectBody().jsonPath("$.message") .value(containsString("Connection refused: localhost/127.0.0.1:32167")); // default connect timeout is 45 sec, this test verifies that it is possible to // reduce timeout via config - assertThat(System.currentTimeMillis() - currentTimeMillisBeforeCall).isCloseTo(5, - offset(100L)); + assertThat(System.currentTimeMillis() - currentTimeMillisBeforeCall).isCloseTo(5, offset(100L)); } @Test public void shouldApplyResponseTimeoutPerRoute() { - testClient.get().uri("/route/delay/2").exchange().expectStatus() - .isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody().jsonPath("$.status") - .isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())) - .jsonPath("$.message") - .isEqualTo("Response took longer than timeout: PT1S"); + testClient.get().uri("/route/delay/2").exchange().expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT) + .expectBody().jsonPath("$.status").isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())) + .jsonPath("$.message").isEqualTo("Response took longer than timeout: PT1S"); } @Test public void shouldNotApplyPerRouteTimeoutWhenItIsNotConfigured() { - testClient.get().uri("/delay/2").exchange().expectStatus() - .isEqualTo(HttpStatus.OK); + testClient.get().uri("/delay/2").exchange().expectStatus().isEqualTo(HttpStatus.OK); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterTests.java index 149b7a18..9ce56a89 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/NettyRoutingFilterTests.java @@ -44,10 +44,8 @@ public class NettyRoutingFilterTests { @Test @Ignore public void mockServerWorks() { - WebTestClient client = WebTestClient.bindToApplicationContext(this.context) - .build(); - client.get().uri("/mockexample").exchange().expectStatus() - .value(Matchers.lessThan(500)); + WebTestClient client = WebTestClient.bindToApplicationContext(this.context).build(); + client.get().uri("/mockexample").exchange().expectStatus().value(Matchers.lessThan(500)); } @SpringBootConfiguration @@ -58,9 +56,7 @@ public class NettyRoutingFilterTests { @Bean public RouteLocator routes(RouteLocatorBuilder builder) { return builder.routes() - .route(p -> p.path("/mockexample") - .filters(f -> f.prefixPath("/httpbin")) - .uri("http://example.com")) + .route(p -> p.path("/mockexample").filters(f -> f.prefixPath("/httpbin")).uri("http://example.com")) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilterTests.java index af4c3ae3..b54e4f12 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ReactiveLoadBalancerClientFilterTests.java @@ -79,8 +79,7 @@ public class ReactiveLoadBalancerClientFilterTests { @Before public void setup() { properties = new LoadBalancerProperties(); - exchange = MockServerWebExchange - .from(MockServerHttpRequest.get("/mypath").build()); + exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/mypath").build()); } @Test @@ -118,24 +117,20 @@ public class ReactiveLoadBalancerClientFilterTests { URI url = UriComponentsBuilder.fromUriString("lb://myservice").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, url); - ServiceInstance serviceInstance = new DefaultServiceInstance("myservice1", - "myservice", "localhost", 8080, true); + ServiceInstance serviceInstance = new DefaultServiceInstance("myservice1", "myservice", "localhost", 8080, + true); RoundRobinLoadBalancer loadBalancer = new RoundRobinLoadBalancer( - ServiceInstanceListSuppliers.toProvider("myservice", serviceInstance), - "myservice", -1); - when(clientFactory.getInstance("myservice", - ReactorServiceInstanceLoadBalancer.class)).thenReturn(loadBalancer); + ServiceInstanceListSuppliers.toProvider("myservice", serviceInstance), "myservice", -1); + when(clientFactory.getInstance("myservice", ReactorServiceInstanceLoadBalancer.class)).thenReturn(loadBalancer); when(chain.filter(exchange)).thenReturn(Mono.empty()); filter.filter(exchange, chain).block(); - assertThat((LinkedHashSet) exchange - .getAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR)).contains(url); + assertThat((LinkedHashSet) exchange.getAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR)).contains(url); - verify(clientFactory).getInstance("myservice", - ReactorServiceInstanceLoadBalancer.class); + verify(clientFactory).getInstance("myservice", ReactorServiceInstanceLoadBalancer.class); verifyNoMoreInteractions(clientFactory); @@ -148,20 +143,17 @@ public class ReactiveLoadBalancerClientFilterTests { @Test public void happyPath() { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost/get?a=b").build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get?a=b").build(); URI lbUri = URI.create("lb://service1?a=b"); ServerWebExchange webExchange = testFilter(request, lbUri); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(uri).hasScheme("http").hasHost("service1-host1").hasParameter("a", - "b"); + assertThat(uri).hasScheme("http").hasHost("service1-host1").hasParameter("a", "b"); } @Test public void noQueryParams() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get").build(); ServerWebExchange webExchange = testFilter(request, URI.create("lb://service1")); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); @@ -170,14 +162,12 @@ public class ReactiveLoadBalancerClientFilterTests { @Test public void encodedParameters() { - URI url = UriComponentsBuilder.fromUriString("http://localhost/get?a=b&c=d[]") - .buildAndExpand().encode().toUri(); + URI url = UriComponentsBuilder.fromUriString("http://localhost/get?a=b&c=d[]").buildAndExpand().encode() + .toUri(); - MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url).build(); - URI lbUrl = UriComponentsBuilder.fromUriString("lb://service1?a=b&c=d[]") - .buildAndExpand().encode().toUri(); + URI lbUrl = UriComponentsBuilder.fromUriString("lb://service1?a=b&c=d[]").buildAndExpand().encode().toUri(); // prove that it is encoded assertThat(lbUrl.getRawQuery()).isEqualTo("a=b&c=d%5B%5D"); @@ -186,8 +176,7 @@ public class ReactiveLoadBalancerClientFilterTests { ServerWebExchange webExchange = testFilter(request, lbUrl); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(uri).hasScheme("http").hasHost("service1-host1").hasParameter("a", "b") - .hasParameter("c", "d[]"); + assertThat(uri).hasScheme("http").hasHost("service1-host1").hasParameter("a", "b").hasParameter("c", "d[]"); // prove that it is not double encoded assertThat(uri.getRawQuery()).isEqualTo("a=b&c=d%5B%5D"); @@ -197,8 +186,7 @@ public class ReactiveLoadBalancerClientFilterTests { public void unencodedParameters() { URI url = URI.create("http://localhost/get?a=b&c=d[]"); - MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url).build(); URI lbUrl = URI.create("lb://service1?a=b&c=d[]"); @@ -208,8 +196,7 @@ public class ReactiveLoadBalancerClientFilterTests { ServerWebExchange webExchange = testFilter(request, lbUrl); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(uri).hasScheme("http").hasHost("service1-host1").hasParameter("a", "b") - .hasParameter("c", "d[]"); + assertThat(uri).hasScheme("http").hasHost("service1-host1").hasParameter("a", "b").hasParameter("c", "d[]"); // prove that it is NOT encoded assertThat(uri.getRawQuery()).isEqualTo("a=b&c=d[]"); @@ -217,8 +204,7 @@ public class ReactiveLoadBalancerClientFilterTests { @Test public void happyPathWithAttributeRatherThanScheme() { - MockServerHttpRequest request = MockServerHttpRequest - .get("ws://localhost/get?a=b").build(); + MockServerHttpRequest request = MockServerHttpRequest.get("ws://localhost/get?a=b").build(); URI lbUri = URI.create("ws://service1?a=b"); @@ -249,11 +235,9 @@ public class ReactiveLoadBalancerClientFilterTests { exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, uri); RoundRobinLoadBalancer loadBalancer = new RoundRobinLoadBalancer( ServiceInstanceListSuppliers.toProvider("service1"), "service1", -1); - when(clientFactory.getInstance("service1", - ReactorServiceInstanceLoadBalancer.class)).thenReturn(loadBalancer); + when(clientFactory.getInstance("service1", ReactorServiceInstanceLoadBalancer.class)).thenReturn(loadBalancer); properties.setUse404(true); - ReactiveLoadBalancerClientFilter filter = new ReactiveLoadBalancerClientFilter( - clientFactory, properties); + ReactiveLoadBalancerClientFilter filter = new ReactiveLoadBalancerClientFilter(clientFactory, properties); when(chain.filter(exchange)).thenReturn(Mono.empty()); try { filter.filter(exchange, chain).block(); @@ -270,20 +254,16 @@ public class ReactiveLoadBalancerClientFilterTests { private ServerWebExchange testFilter(ServerWebExchange exchange, URI uri) { exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, uri); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(chain.filter(captor.capture())).thenReturn(Mono.empty()); RoundRobinLoadBalancer loadBalancer = new RoundRobinLoadBalancer( ServiceInstanceListSuppliers.toProvider("service1", - new DefaultServiceInstance("service1_1", "service1", - "service1-host1", 8081, false)), + new DefaultServiceInstance("service1_1", "service1", "service1-host1", 8081, false)), "service1", -1); - when(clientFactory.getInstance("service1", - ReactorServiceInstanceLoadBalancer.class)).thenReturn(loadBalancer); + when(clientFactory.getInstance("service1", ReactorServiceInstanceLoadBalancer.class)).thenReturn(loadBalancer); - ReactiveLoadBalancerClientFilter filter = new ReactiveLoadBalancerClientFilter( - clientFactory, properties); + ReactiveLoadBalancerClientFilter filter = new ReactiveLoadBalancerClientFilter(clientFactory, properties); filter.filter(exchange, chain).block(); return captor.getValue(); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java index 8d57e926..e1d81781 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/RouteToRequestUrlFilterTests.java @@ -45,19 +45,16 @@ public class RouteToRequestUrlFilterTests { @Test public void happyPath() { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost/get?a=b").build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get?a=b").build(); ServerWebExchange webExchange = testFilter(request, "http://myhost/mypath"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(uri).hasScheme("http").hasHost("myhost").hasPath("/get") - .hasParameter("a", "b"); + assertThat(uri).hasScheme("http").hasHost("myhost").hasPath("/get").hasParameter("a", "b"); } @Test public void happyPathLb() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/getb") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/getb").build(); ServerWebExchange webExchange = testFilter(request, "lb://myhost"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); @@ -66,28 +63,24 @@ public class RouteToRequestUrlFilterTests { @Test(expected = IllegalStateException.class) public void invalidHost() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/getb") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/getb").build(); testFilter(request, "lb://my_host"); } @Test public void happyPathLbPlusScheme() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/getb") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/getb").build(); ServerWebExchange webExchange = testFilter(request, "lb:http://myhost"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); assertThat(uri).hasScheme("http").hasHost("myhost"); - String schemePrefix = webExchange - .getRequiredAttribute(GATEWAY_SCHEME_PREFIX_ATTR); + String schemePrefix = webExchange.getRequiredAttribute(GATEWAY_SCHEME_PREFIX_ATTR); assertThat(schemePrefix).isEqualTo("lb"); } @Test public void noQueryParams() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get").build(); ServerWebExchange webExchange = testFilter(request, "http://myhost"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); @@ -96,21 +89,19 @@ public class RouteToRequestUrlFilterTests { @Test public void encodedParameters() { - URI url = UriComponentsBuilder.fromUriString("http://localhost/get?a=b&c=d[]") - .buildAndExpand().encode().toUri(); + URI url = UriComponentsBuilder.fromUriString("http://localhost/get?a=b&c=d[]").buildAndExpand().encode() + .toUri(); // prove that it is encoded assertThat(url.getRawQuery()).isEqualTo("a=b&c=d%5B%5D"); assertThat(url).hasParameter("c", "d[]"); - MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url).build(); ServerWebExchange webExchange = testFilter(request, "http://myhost"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(uri).hasScheme("http").hasHost("myhost").hasParameter("a", "b") - .hasParameter("c", "d[]"); + assertThat(uri).hasScheme("http").hasHost("myhost").hasParameter("a", "b").hasParameter("c", "d[]"); // prove that it is not double encoded assertThat(uri.getRawQuery()).isEqualTo("a=b&c=d%5B%5D"); @@ -118,12 +109,10 @@ public class RouteToRequestUrlFilterTests { @Test public void partialEncodedParameters() { - assumeTrue("partialEncodedParameters ignored for boot 2.2", - SpringBootVersion.getVersion().startsWith("2.3.")); + assumeTrue("partialEncodedParameters ignored for boot 2.2", SpringBootVersion.getVersion().startsWith("2.3.")); - URI url = UriComponentsBuilder - .fromUriString("http://localhost/get?key[]=test= key&start=1533108081") - .build().toUri(); + URI url = UriComponentsBuilder.fromUriString("http://localhost/get?key[]=test= key&start=1533108081").build() + .toUri(); // prove that it is partial encoded assertThat(url.getRawQuery()).isEqualTo("key[]=test=%20key&start=1533108081"); @@ -131,8 +120,7 @@ public class RouteToRequestUrlFilterTests { assertThat(url).hasParameter("key[]", "test= key"); assertThat(url).hasParameter("start", "1533108081"); - MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url).build(); ServerWebExchange webExchange = testFilter(request, "http://myhost"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); @@ -148,19 +136,16 @@ public class RouteToRequestUrlFilterTests { @Test public void encodedUrl() { - URI url = UriComponentsBuilder.fromUriString("http://localhost/abc def/get") - .buildAndExpand().encode().toUri(); + URI url = UriComponentsBuilder.fromUriString("http://localhost/abc def/get").buildAndExpand().encode().toUri(); // prove that it is encoded assertThat(url.getRawPath()).isEqualTo("/abc%20def/get"); assertThat(url).hasPath("/abc def/get"); - MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url).build(); - ServerWebExchange webExchange = testFilter(request, - "http://myhost/abc%20def/get"); + ServerWebExchange webExchange = testFilter(request, "http://myhost/abc%20def/get"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); assertThat(uri).hasScheme("http").hasHost("myhost").hasPath("/abc def/get"); @@ -175,14 +160,12 @@ public class RouteToRequestUrlFilterTests { // prove that it is unencoded assertThat(url.getRawQuery()).isEqualTo("a=b&c=d[]"); - MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url).build(); ServerWebExchange webExchange = testFilter(request, "http://myhost"); URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(uri).hasScheme("http").hasHost("myhost").hasParameter("a", "b") - .hasParameter("c", "d[]"); + assertThat(uri).hasScheme("http").hasHost("myhost").hasParameter("a", "b").hasParameter("c", "d[]"); // prove that it is NOT encoded assertThat(uri.getRawQuery()).isEqualTo("a=b&c=d[]"); @@ -190,8 +173,7 @@ public class RouteToRequestUrlFilterTests { @Test public void matcherWorks() { - testMatcher(true, "lb:a123:stuff", "lb:abc:stuff", "lb:a.bc:stuff", - "lb:a-bc:stuff", "lb:a+bc:stuff"); + testMatcher(true, "lb:a123:stuff", "lb:abc:stuff", "lb:a.bc:stuff", "lb:a-bc:stuff", "lb:a+bc:stuff"); testMatcher(false, "lb:a", "lb:a123", "lb:123:stuff", "lb:a//:stuff"); } @@ -199,22 +181,19 @@ public class RouteToRequestUrlFilterTests { for (String s : uris) { URI uri = URI.create(s); boolean result = RouteToRequestUrlFilter.hasAnotherScheme(uri); - assertThat(result).as("%s should match: %s", s, result) - .isEqualTo(shouldMatch); + assertThat(result).as("%s should match: %s", s, result).isEqualTo(shouldMatch); } } private ServerWebExchange testFilter(MockServerHttpRequest request, String routeUri) { - Route value = Route.async().id("1").uri(URI.create(routeUri)).order(0) - .predicate(swe -> true).build(); + Route value = Route.async().id("1").uri(URI.create(routeUri)).order(0).predicate(swe -> true).build(); ServerWebExchange exchange = MockServerWebExchange.from(request); exchange.getAttributes().put(GATEWAY_ROUTE_ATTR, value); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); RouteToRequestUrlFilter filter = new RouteToRequestUrlFilter(); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilterTests.java index 69a907a8..b33f5f73 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WebsocketRoutingFilterTests.java @@ -43,15 +43,14 @@ public class WebsocketRoutingFilterTests { @Test public void testEncodedUrl() { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://not-matters-that").header(UPGRADE, "WebSocket").build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://not-matters-that") + .header(UPGRADE, "WebSocket").build(); ServerWebExchange exchange = MockServerWebExchange.from(request); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("http://microservice/my-service/websocket%20upgrade")); changeSchemeIfIsWebSocketUpgrade(exchange); URI wsRequestUrl = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(wsRequestUrl).isEqualTo( - URI.create("ws://microservice/my-service/websocket%20upgrade")); + assertThat(wsRequestUrl).isEqualTo(URI.create("ws://microservice/my-service/websocket%20upgrade")); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterConcurrentTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterConcurrentTests.java index b0db991b..ff7cf79e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterConcurrentTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterConcurrentTests.java @@ -97,8 +97,7 @@ public class WeightCalculatorWebFilterConcurrentTests { } private boolean isContinue() { - return (System.currentTimeMillis() - startTime) < TimeUnit.SECONDS - .toMillis(maxTestTimeSeconds); + return (System.currentTimeMillis() - startTime) < TimeUnit.SECONDS.toMillis(maxTestTimeSeconds); } private void generateEvents() { @@ -111,8 +110,7 @@ public class WeightCalculatorWebFilterConcurrentTests { private WeightDefinedEvent createWeightDefinedEvent() { int weight = ThreadLocalRandom.current().nextInt() & Integer.MAX_VALUE; - WeightConfig config = new WeightConfig("group_1", UUID.randomUUID().toString(), - weight); + WeightConfig config = new WeightConfig("group_1", UUID.randomUUID().toString(), weight); return new WeightDefinedEvent(new Object(), config); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterTests.java index 9f009437..7770e975 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/WeightCalculatorWebFilterTests.java @@ -52,21 +52,17 @@ public class WeightCalculatorWebFilterTests { assertWeightCalculation(filter, grp2, grp2idx++, 1, asList(1.0)); assertWeightCalculation(filter, grp1, grp1idx++, 3, asList(0.25, 0.75), 0.25); assertWeightCalculation(filter, grp2, grp2idx++, 1, asList(0.5, 0.5), 0.5); - assertWeightCalculation(filter, grp1, grp1idx++, 6, asList(0.1, 0.3, 0.6), 0.1, - 0.4); - assertWeightCalculation(filter, grp2, grp2idx++, 2, asList(0.25, 0.25, 0.5), 0.25, - 0.5); - assertWeightCalculation(filter, grp2, grp2idx++, 4, - asList(0.125, 0.125, 0.25, 0.5), 0.125, 0.25, 0.5); + assertWeightCalculation(filter, grp1, grp1idx++, 6, asList(0.1, 0.3, 0.6), 0.1, 0.4); + assertWeightCalculation(filter, grp2, grp2idx++, 2, asList(0.25, 0.25, 0.5), 0.25, 0.5); + assertWeightCalculation(filter, grp2, grp2idx++, 4, asList(0.125, 0.125, 0.25, 0.5), 0.125, 0.25, 0.5); } private WeightCalculatorWebFilter createFilter() { - return new WeightCalculatorWebFilter(null, - new ConfigurationService(null, () -> null, () -> null)); + return new WeightCalculatorWebFilter(null, new ConfigurationService(null, () -> null, () -> null)); } - private void assertWeightCalculation(WeightCalculatorWebFilter filter, String group, - int item, int weight, List normalized, Double... middleRanges) { + private void assertWeightCalculation(WeightCalculatorWebFilter filter, String group, int item, int weight, + List normalized, Double... middleRanges) { String routeId = route(item); filter.addWeightConfig(new WeightConfig(group, routeId, weight)); @@ -80,8 +76,7 @@ public class WeightCalculatorWebFilterTests { assertThat(config.normalizedWeights).hasSize(item); for (int i = 0; i < normalized.size(); i++) { - assertThat(config.normalizedWeights).containsEntry(route(i + 1), - normalized.get(i)); + assertThat(config.normalizedWeights).containsEntry(route(i + 1), normalized.get(i)); } for (int i = 0; i < normalized.size(); i++) { diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactoryTests.java index ddb8792c..b041f702 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeaderGatewayFilterFactoryTests.java @@ -52,28 +52,25 @@ public class AddRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest @Test public void addRequestHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.addrequestheader.org") - .exchange().expectBody(Map.class).consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.addrequestheader.org").exchange().expectBody(Map.class) + .consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).containsEntry("X-Request-Example", "ValueA"); }); } @Test public void addRequestHeaderFilterWorksJavaDsl() { - testClient.get().uri("/headers").header("Host", "www.addrequestheaderjava.org") - .exchange().expectBody(Map.class).consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.addrequestheaderjava.org").exchange().expectBody(Map.class) + .consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).containsEntry("X-Request-Acme", "ValueB-www"); }); } @Test public void toStringFormat() { - NameValueConfig config = new NameValueConfig().setName("myname") - .setValue("myvalue"); + NameValueConfig config = new NameValueConfig().setName("myname").setValue("myvalue"); GatewayFilter filter = new AddRequestHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname").contains("myvalue"); } @@ -90,8 +87,7 @@ public class AddRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route("add_request_header_java_test", r -> r.path("/headers").and().host("{sub}.addrequestheaderjava.org") - .filters(f -> f.prefixPath("/httpbin") - .addRequestHeader("X-Request-Acme", "ValueB-{sub}")) + .filters(f -> f.prefixPath("/httpbin").addRequestHeader("X-Request-Acme", "ValueB-{sub}")) .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactoryTests.java index 955d2027..f1332961 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddRequestParameterGatewayFilterFactoryTests.java @@ -68,16 +68,14 @@ public class AddRequestParameterGatewayFilterFactoryTests extends BaseWebClientT @Test public void addRequestParameterFilterWorksEncodedQueryJavaDsl() { - testRequestParameterFilter("www.addreqparamjava.org", "ValueB-www", "javaname", - "%E6%89%8E%E6%A0%B9"); + testRequestParameterFilter("www.addreqparamjava.org", "ValueB-www", "javaname", "%E6%89%8E%E6%A0%B9"); } private void testRequestParameterFilter(String name, String value) { testRequestParameterFilter("www.addrequestparameter.org", "ValueA", name, value); } - private void testRequestParameterFilter(String host, String expectedValue, - String name, String value) { + private void testRequestParameterFilter(String host, String expectedValue, String name, String value) { String query; if (name != null) { query = "?" + name + "=" + value; @@ -85,36 +83,31 @@ public class AddRequestParameterGatewayFilterFactoryTests extends BaseWebClientT else { query = ""; } - URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/get" + query) - .build(true).toUri(); + URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/get" + query).build(true).toUri(); boolean checkForEncodedValue = containsEncodedParts(uri); - testClient.get().uri(uri).header("Host", host).exchange().expectBody(Map.class) - .consumeWith(response -> { - Map args = getMap(response.getResponseBody(), "args"); - assertThat(args).containsEntry("example", expectedValue); - if (name != null) { - if (checkForEncodedValue) { - try { - assertThat(args).containsEntry(name, - URLDecoder.decode(value, "UTF-8")); - } - catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - else { - assertThat(args).containsEntry(name, value); - } + testClient.get().uri(uri).header("Host", host).exchange().expectBody(Map.class).consumeWith(response -> { + Map args = getMap(response.getResponseBody(), "args"); + assertThat(args).containsEntry("example", expectedValue); + if (name != null) { + if (checkForEncodedValue) { + try { + assertThat(args).containsEntry(name, URLDecoder.decode(value, "UTF-8")); } - }); + catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + else { + assertThat(args).containsEntry(name, value); + } + } + }); } @Test public void toStringFormat() { - NameValueConfig config = new NameValueConfig().setName("myname") - .setValue("myvalue"); - GatewayFilter filter = new AddRequestParameterGatewayFilterFactory() - .apply(config); + NameValueConfig config = new NameValueConfig().setName("myname").setValue("myvalue"); + GatewayFilter filter = new AddRequestParameterGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname").contains("myvalue"); } @@ -130,8 +123,7 @@ public class AddRequestParameterGatewayFilterFactoryTests extends BaseWebClientT public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route("add_request_param_java_test", r -> r.path("/get").and().host("{sub}.addreqparamjava.org") - .filters(f -> f.prefixPath("/httpbin") - .addRequestParameter("example", "ValueB-{sub}")) + .filters(f -> f.prefixPath("/httpbin").addRequestParameter("example", "ValueB-{sub}")) .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactoryTests.java index bf68a0ef..e050d35f 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/AddResponseHeaderGatewayFilterFactoryTests.java @@ -46,28 +46,24 @@ public class AddResponseHeaderGatewayFilterFactoryTests extends BaseWebClientTes @Test public void testResposneHeaderFilter() { - URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/headers") - .build(true).toUri(); + URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/headers").build(true).toUri(); String host = "www.addresponseheader.org"; String expectedValue = "Bar"; - testClient.get().uri(uri).header("Host", host).exchange().expectHeader() - .valueEquals("X-Request-Foo", expectedValue); + testClient.get().uri(uri).header("Host", host).exchange().expectHeader().valueEquals("X-Request-Foo", + expectedValue); } @Test public void testResposneHeaderFilterJavaDsl() { - URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/get").build(true) - .toUri(); + URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/get").build(true).toUri(); String host = "www.addresponseheaderjava.org"; String expectedValue = "myresponsevalue-www"; - testClient.get().uri(uri).header("Host", host).exchange().expectHeader() - .valueEquals("example", expectedValue); + testClient.get().uri(uri).header("Host", host).exchange().expectHeader().valueEquals("example", expectedValue); } @Test public void toStringFormat() { - NameValueConfig config = new NameValueConfig().setName("myname") - .setValue("myvalue"); + NameValueConfig config = new NameValueConfig().setName("myname").setValue("myvalue"); GatewayFilter filter = new AddResponseHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname").contains("myvalue"); } @@ -82,11 +78,11 @@ public class AddResponseHeaderGatewayFilterFactoryTests extends BaseWebClientTes @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("add_response_header_java_test", - r -> r.path("/get").and().host("{sub}.addresponseheaderjava.org") - .filters(f -> f.prefixPath("/httpbin").addResponseHeader( - "example", "myresponsevalue-{sub}")) - .uri(uri)) + return builder.routes() + .route("add_response_header_java_test", + r -> r.path("/get").and().host("{sub}.addresponseheaderjava.org").filters( + f -> f.prefixPath("/httpbin").addResponseHeader("example", "myresponsevalue-{sub}")) + .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryTests.java index 5d5d7148..75d268f6 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryTests.java @@ -36,11 +36,10 @@ public class DedupeResponseHeaderGatewayFilterFactoryTests extends BaseWebClient @Test public void dedupeResponseHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.deduperesponseheader.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals("Access-Control-Allow-Credentials", "true").expectHeader() - .valueEquals("Access-Control-Allow-Origin", "https://musk.mars") - .expectHeader().valueEquals("Scout-Cookie", "S'mores").expectHeader() + testClient.get().uri("/headers").header("Host", "www.deduperesponseheader.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals("Access-Control-Allow-Credentials", "true").expectHeader() + .valueEquals("Access-Control-Allow-Origin", "https://musk.mars").expectHeader() + .valueEquals("Scout-Cookie", "S'mores").expectHeader() .valueEquals("Next-Week-Lottery-Numbers", "4", "2", "42"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryUnitTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryUnitTests.java index 5db3867e..b4de5ef5 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryUnitTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/DedupeResponseHeaderGatewayFilterFactoryUnitTests.java @@ -53,8 +53,7 @@ public class DedupeResponseHeaderGatewayFilterFactoryUnitTests { public void dedupNullName() { filter.dedupe(headers, config); Mockito.verify(headers, Mockito.never()).get(Mockito.anyString()); - Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), - Mockito.anyString()); + Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), Mockito.anyString()); } @Test @@ -63,8 +62,7 @@ public class DedupeResponseHeaderGatewayFilterFactoryUnitTests { Mockito.when(headers.get(NAME_1)).thenReturn(null); filter.dedupe(headers, config); Mockito.verify(headers).get(NAME_1); - Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), - Mockito.anyString()); + Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), Mockito.anyString()); } @Test @@ -73,8 +71,7 @@ public class DedupeResponseHeaderGatewayFilterFactoryUnitTests { Mockito.when(headers.get(NAME_1)).thenReturn(new ArrayList<>()); filter.dedupe(headers, config); Mockito.verify(headers).get(NAME_1); - Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), - Mockito.anyString()); + Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), Mockito.anyString()); } @Test @@ -83,8 +80,7 @@ public class DedupeResponseHeaderGatewayFilterFactoryUnitTests { Mockito.when(headers.get(NAME_1)).thenReturn(Arrays.asList("1")); filter.dedupe(headers, config); Mockito.verify(headers).get(NAME_1); - Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), - Mockito.anyString()); + Mockito.verify(headers, Mockito.never()).set(Mockito.anyString(), Mockito.anyString()); } @Test @@ -97,8 +93,7 @@ public class DedupeResponseHeaderGatewayFilterFactoryUnitTests { Mockito.verify(headers).set(NAME_1, "2"); Mockito.verify(headers).get(NAME_2); Mockito.verify(headers).set(NAME_2, "true"); - Mockito.verify(headers, Mockito.times(2)).set(Mockito.anyString(), - Mockito.anyString()); + Mockito.verify(headers, Mockito.times(2)).set(Mockito.anyString(), Mockito.anyString()); } @Test @@ -119,8 +114,7 @@ public class DedupeResponseHeaderGatewayFilterFactoryUnitTests { Mockito.when(headers.get(NAME_1)).thenReturn(Arrays.asList("2", "3", "3", "4")); filter.dedupe(headers, config); Mockito.verify(headers).get(NAME_1); - Mockito.verify(headers).put(Mockito.eq(NAME_1), - Mockito.eq(Arrays.asList("2", "3", "4"))); + Mockito.verify(headers).put(Mockito.eq(NAME_1), Mockito.eq(Arrays.asList("2", "3", "4"))); Mockito.verify(headers).put(Mockito.anyString(), Mockito.anyList()); } @@ -129,10 +123,8 @@ public class DedupeResponseHeaderGatewayFilterFactoryUnitTests { Config config = new Config(); config.setName("myname"); config.setStrategy(Strategy.RETAIN_LAST); - GatewayFilter filter = new DedupeResponseHeaderGatewayFilterFactory() - .apply(config); - assertThat(filter.toString()).contains("myname") - .contains(Strategy.RETAIN_LAST.toString()); + GatewayFilter filter = new DedupeResponseHeaderGatewayFilterFactory().apply(config); + assertThat(filter.toString()).contains("myname").contains(Strategy.RETAIN_LAST.toString()); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactoryTests.java index 6373eac1..e9b836e3 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/MapRequestHeaderGatewayFilterFactoryTests.java @@ -52,22 +52,18 @@ public class MapRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest @Test public void mapRequestHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.maprequestheader.org") - .header("a", "tome").exchange().expectBody(Map.class) - .consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.maprequestheader.org").header("a", "tome").exchange() + .expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).containsEntry("X-Request-Example", "tome"); }); } @Test public void mapRequestHeaderFilterWorksJavaDsl() { - testClient.get().uri("/headers").header("Host", "www.maprequestheaderjava.org") - .header("b", "tome").exchange().expectBody(Map.class) - .consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.maprequestheaderjava.org").header("b", "tome").exchange() + .expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).containsEntry("X-Request-Example-Java", "tome"); }); } @@ -75,11 +71,9 @@ public class MapRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest @SuppressWarnings("unchecked") @Test public void mapRequestHeaderWithMultiValueFilterWorks() { - testClient.get().uri("/multivalueheaders") - .header("Host", "www.maprequestheader.org").header("a", "tome", "toyou") - .exchange().expectBody(Map.class).consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/multivalueheaders").header("Host", "www.maprequestheader.org") + .header("a", "tome", "toyou").exchange().expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).containsKey("X-Request-Example"); List values = (List) headers.get("X-Request-Example"); assertThat(values).contains("tome", "toyou"); @@ -88,29 +82,25 @@ public class MapRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest @Test public void mapRequestHeaderWithNullValueFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.maprequestheader.org") - .header("a", (String) null).exchange().expectBody(Map.class) - .consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.maprequestheader.org").header("a", (String) null) + .exchange().expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).doesNotContainKey("X-Request-Example"); }); } @Test public void mapRequestHeaderWhenInputHeaderDoesNotExist() { - testClient.get().uri("/headers").header("Host", "www.maprequestheader.org") - .exchange().expectBody(Map.class).consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.maprequestheader.org").exchange().expectBody(Map.class) + .consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).doesNotContainKey("X-Request-Example"); }); } @Test public void toStringFormat() { - Config config = new Config().setFromHeader("myfromheader") - .setToHeader("mytoheader"); + Config config = new Config().setFromHeader("myfromheader").setToHeader("mytoheader"); GatewayFilter filter = new MapRequestHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myfromheader").contains("mytoheader"); } @@ -127,8 +117,7 @@ public class MapRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route("map_request_header_java_test", r -> r.path("/headers").and().host("**.maprequestheaderjava.org") - .filters(f -> f.prefixPath("/httpbin").mapRequestHeader("b", - "X-Request-Example-Java")) + .filters(f -> f.prefixPath("/httpbin").mapRequestHeader("b", "X-Request-Example-Java")) .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactoryTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactoryTest.java index 73fe8654..1311696a 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactoryTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactoryTest.java @@ -47,17 +47,14 @@ public class PrefixPathGatewayFilterFactoryTest { } private void testPrefixPathFilter(String prefix, String path, String expectedPath) { - GatewayFilter filter = new PrefixPathGatewayFilterFactory() - .apply(c -> c.setPrefix(prefix)); - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost" + path).build(); + GatewayFilter filter = new PrefixPathGatewayFilterFactory().apply(c -> c.setPrefix(prefix)); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost" + path).build(); ServerWebExchange exchange = MockServerWebExchange.from(request); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); filter.filter(exchange, filterChain); @@ -65,8 +62,7 @@ public class PrefixPathGatewayFilterFactoryTest { ServerWebExchange webExchange = captor.getValue(); assertThat(webExchange.getRequest().getURI()).hasPath(expectedPath); - LinkedHashSet uris = webExchange - .getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + LinkedHashSet uris = webExchange.getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); assertThat(uris).contains(request.getURI()); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactoryTests.java index 94dc6cf1..c1c8e959 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/PreserveHostHeaderGatewayFilterFactoryTests.java @@ -50,11 +50,9 @@ public class PreserveHostHeaderGatewayFilterFactoryTests extends BaseWebClientTe @SuppressWarnings("unchecked") @Test public void preserveHostHeaderGatewayFilterFactoryWorks() { - testClient.get().uri("/multivalueheaders") - .header("Host", "www.preservehostheader.org").exchange().expectStatus() - .isOk().expectBody(Map.class).consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/multivalueheaders").header("Host", "www.preservehostheader.org").exchange() + .expectStatus().isOk().expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).containsKey("Host"); List values = (List) headers.get("Host"); assertThat(values).containsExactly("myhost.net"); @@ -77,10 +75,9 @@ public class PreserveHostHeaderGatewayFilterFactoryTests extends BaseWebClientTe @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("test_preserve_host_header", - r -> r.order(-1).host("**.preservehostheader.org") - .filters(f -> f.prefixPath("/httpbin").preserveHostHeader() - .setRequestHeader("Host", "myhost.net")) + return builder.routes() + .route("test_preserve_host_header", r -> r.order(-1).host("**.preservehostheader.org").filters( + f -> f.prefixPath("/httpbin").preserveHostHeader().setRequestHeader("Host", "myhost.net")) .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java index 6f00ae33..d9e5e0b5 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactoryTests.java @@ -44,16 +44,14 @@ public class RedirectToGatewayFilterFactoryTests extends BaseWebClientTests { @Test public void redirectToFilterWorks() { - testClient.get().uri("/").header("Host", "www.redirectto.org").exchange() - .expectStatus().isEqualTo(HttpStatus.FOUND).expectHeader() - .valueEquals(HttpHeaders.LOCATION, "https://example.org"); + testClient.get().uri("/").header("Host", "www.redirectto.org").exchange().expectStatus() + .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "https://example.org"); } @Test public void redirectToRelativeUrlFilterWorks() { - testClient.get().uri("/").header("Host", "www.relativeredirect.org").exchange() - .expectStatus().isEqualTo(HttpStatus.FOUND).expectHeader() - .valueEquals(HttpHeaders.LOCATION, "/index.html#/customers"); + testClient.get().uri("/").header("Host", "www.relativeredirect.org").exchange().expectStatus() + .isEqualTo(HttpStatus.FOUND).expectHeader().valueEquals(HttpHeaders.LOCATION, "/index.html#/customers"); } @Test @@ -72,11 +70,8 @@ public class RedirectToGatewayFilterFactoryTests extends BaseWebClientTests { @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("relative_redirect", - r -> r.host("**.relativeredirect.org") - .filters(f -> f.redirect(302, "/index.html#/customers")) - .uri("no://op")) - .build(); + return builder.routes().route("relative_redirect", r -> r.host("**.relativeredirect.org") + .filters(f -> f.redirect(302, "/index.html#/customers")).uri("no://op")).build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactoryTests.java index 22186a25..349e753a 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestHeaderGatewayFilterFactoryTests.java @@ -42,11 +42,9 @@ public class RemoveRequestHeaderGatewayFilterFactoryTests extends BaseWebClientT @Test public void removeRequestHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.removerequestheader.org") - .header("X-Request-Foo", "Bar").exchange().expectStatus().isOk() - .expectBody(Map.class).consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.removerequestheader.org").header("X-Request-Foo", "Bar") + .exchange().expectStatus().isOk().expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); assertThat(headers).doesNotContainKey("X-Request-Foo"); }); } @@ -55,8 +53,7 @@ public class RemoveRequestHeaderGatewayFilterFactoryTests extends BaseWebClientT public void toStringFormat() { NameConfig config = new NameConfig(); config.setName("myname"); - GatewayFilter filter = new RemoveRequestHeaderGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RemoveRequestHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java index 739f921c..8851ccf9 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryIntegrationTests.java @@ -42,13 +42,11 @@ import static org.springframework.cloud.gateway.test.TestUtils.getMap; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @DirtiesContext -public class RemoveRequestParameterGatewayFilterFactoryIntegrationTests - extends BaseWebClientTests { +public class RemoveRequestParameterGatewayFilterFactoryIntegrationTests extends BaseWebClientTests { @Test public void removeResponseHeaderFilterWorks() { - testClient.get().uri("/get?foo=bar&baz=bam%20bar") - .header("Host", "www.removerequestparamjava.org").exchange() + testClient.get().uri("/get?foo=bar&baz=bam%20bar").header("Host", "www.removerequestparamjava.org").exchange() .expectStatus().isOk().expectBody(Map.class).consumeWith(result -> { Map params = getMap(result.getResponseBody(), "args"); assertThat(params).doesNotContainKey("foo"); @@ -60,8 +58,7 @@ public class RemoveRequestParameterGatewayFilterFactoryIntegrationTests public void toStringFormat() { NameConfig config = new NameConfig(); config.setName("myname"); - GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname"); } @@ -75,10 +72,11 @@ public class RemoveRequestParameterGatewayFilterFactoryIntegrationTests @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("removerequestparam_java_test", r -> r - .path("/get").and().host("**.removerequestparamjava.org") - .filters(f -> f.prefixPath("/httpbin").removeRequestParameter("foo")) - .uri(uri)).build(); + return builder.routes() + .route("removerequestparam_java_test", + r -> r.path("/get").and().host("**.removerequestparamjava.org") + .filters(f -> f.prefixPath("/httpbin").removeRequestParameter("foo")).uri(uri)) + .build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java index c4acbdac..488642d0 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveRequestParameterGatewayFilterFactoryTests.java @@ -60,8 +60,7 @@ public class RemoveRequestParameterGatewayFilterFactoryTests { exchange = MockServerWebExchange.from(request); NameConfig config = new NameConfig(); config.setName("foo"); - GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory().apply(config); filter.filter(exchange, filterChain); @@ -71,13 +70,11 @@ public class RemoveRequestParameterGatewayFilterFactoryTests { @Test public void removeRequestParameterFilterWorksWhenParamIsNotPresentInRequest() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost").build(); exchange = MockServerWebExchange.from(request); NameConfig config = new NameConfig(); config.setName("foo"); - GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory().apply(config); filter.filter(exchange, filterChain); @@ -87,43 +84,36 @@ public class RemoveRequestParameterGatewayFilterFactoryTests { @Test public void removeRequestParameterFilterShouldOnlyRemoveSpecifiedParam() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") - .queryParam("foo", "bar").queryParam("abc", "xyz").build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost").queryParam("foo", "bar") + .queryParam("abc", "xyz").build(); exchange = MockServerWebExchange.from(request); NameConfig config = new NameConfig(); config.setName("foo"); - GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory().apply(config); filter.filter(exchange, filterChain); ServerHttpRequest actualRequest = captor.getValue().getRequest(); assertThat(actualRequest.getQueryParams()).doesNotContainKey("foo"); - assertThat(actualRequest.getQueryParams()).containsEntry("abc", - singletonList("xyz")); + assertThat(actualRequest.getQueryParams()).containsEntry("abc", singletonList("xyz")); } @Test public void removeRequestParameterFilterShouldHandleRemainingParamsWhichRequiringEncoding() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") - .queryParam("foo", "bar").queryParam("aaa", "abc xyz") - .queryParam("bbb", "[xyz").queryParam("ccc", ",xyz").build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost").queryParam("foo", "bar") + .queryParam("aaa", "abc xyz").queryParam("bbb", "[xyz").queryParam("ccc", ",xyz").build(); exchange = MockServerWebExchange.from(request); NameConfig config = new NameConfig(); config.setName("foo"); - GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RemoveRequestParameterGatewayFilterFactory().apply(config); filter.filter(exchange, filterChain); ServerHttpRequest actualRequest = captor.getValue().getRequest(); assertThat(actualRequest.getQueryParams()).doesNotContainKey("foo"); - assertThat(actualRequest.getQueryParams()).containsEntry("aaa", - singletonList("abc xyz")); - assertThat(actualRequest.getQueryParams()).containsEntry("bbb", - singletonList("[xyz")); - assertThat(actualRequest.getQueryParams()).containsEntry("ccc", - singletonList(",xyz")); + assertThat(actualRequest.getQueryParams()).containsEntry("aaa", singletonList("abc xyz")); + assertThat(actualRequest.getQueryParams()).containsEntry("bbb", singletonList("[xyz")); + assertThat(actualRequest.getQueryParams()).containsEntry("ccc", singletonList(",xyz")); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactoryTests.java index f1f723ee..010237cd 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RemoveResponseHeaderGatewayFilterFactoryTests.java @@ -39,17 +39,15 @@ public class RemoveResponseHeaderGatewayFilterFactoryTests extends BaseWebClient @Test public void removeResponseHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.removereresponseheader.org") - .exchange().expectStatus().isOk().expectHeader() - .doesNotExist("X-Request-Foo"); + testClient.get().uri("/headers").header("Host", "www.removereresponseheader.org").exchange().expectStatus() + .isOk().expectHeader().doesNotExist("X-Request-Foo"); } @Test public void toStringFormat() { NameConfig config = new NameConfig(); config.setName("myname"); - GatewayFilter filter = new RemoveResponseHeaderGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RemoveResponseHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java index 299b83c0..2cc9e0e3 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderSizeGatewayFilterFactoryTest.java @@ -54,9 +54,9 @@ public class RequestHeaderSizeGatewayFilterFactoryTest extends BaseWebClientTest @Test public void setRequestSizeFilterWorks() { testClient.get().uri("/headers").header("Host", "www.test.org") - .header("HeaderName", "Some Very Large Header Name").exchange() - .expectStatus().isEqualTo(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE) - .expectHeader().valueMatches("errorMessage", responseMesssage); + .header("HeaderName", "Some Very Large Header Name").exchange().expectStatus() + .isEqualTo(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE).expectHeader() + .valueMatches("errorMessage", responseMesssage); } @Test @@ -77,10 +77,10 @@ public class RequestHeaderSizeGatewayFilterFactoryTest extends BaseWebClientTest @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("test_request_header_size", - r -> r.order(-1).host("**.test.org").filters( - f -> f.setRequestHeaderSize(DataSize.of(46L, DataUnit.BYTES))) - .uri(uri)) + return builder.routes() + .route("test_request_header_size", + r -> r.order(-1).host("**.test.org") + .filters(f -> f.setRequestHeaderSize(DataSize.of(46L, DataUnit.BYTES))).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests.java index 13ca75c5..59d784d1 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests.java @@ -45,8 +45,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @DirtiesContext -public class RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests - extends BaseWebClientTests { +public class RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests extends BaseWebClientTests { @LocalServerPort int port; @@ -55,28 +54,22 @@ public class RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests @Ignore public void changeUriWorkWithProperties() { testClient.get().uri("/").header("Host", "www.changeuri.org") - .header("X-CF-Forwarded-Url", - "http://localhost:" + port + "/actuator/health") - .exchange().expectBody(JsonNode.class) - .consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); + .header("X-CF-Forwarded-Url", "http://localhost:" + port + "/actuator/health").exchange() + .expectBody(JsonNode.class).consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); } @Test @Ignore public void changeUriWorkWithDsl() { testClient.get().uri("/").header("Host", "www.changeuri.org") - .header("X-Next-Url", "http://localhost:" + port + "/actuator/health") - .exchange().expectBody(JsonNode.class) - .consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); + .header("X-Next-Url", "http://localhost:" + port + "/actuator/health").exchange() + .expectBody(JsonNode.class).consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); } @Test public void changeUriWorkWithCustomLogic() { testClient.get() - .uri(b -> b.path("/") - .queryParam("url", - "http://localhost:" + port + "/actuator/health") - .build()) + .uri(b -> b.path("/").queryParam("url", "http://localhost:" + port + "/actuator/health").build()) .header("Host", "www.changeuri.org").exchange().expectBody(JsonNode.class) .consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); } @@ -90,11 +83,10 @@ public class RequestHeaderToRequestUriGatewayFilterFactoryIntegrationTests public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.host("**.changeuri.org").and().header("X-Next-Url") - .filters(f -> f.requestHeaderToRequestUri("X-Next-Url")) - .uri("https://example.com")) + .filters(f -> f.requestHeaderToRequestUri("X-Next-Url")).uri("https://example.com")) .route(r -> r.host("**.changeuri.org").and().query("url") - .filters(f -> f.changeRequestUri(e -> Optional.of(URI.create( - e.getRequest().getQueryParams().getFirst("url"))))) + .filters(f -> f.changeRequestUri( + e -> Optional.of(URI.create(e.getRequest().getQueryParams().getFirst("url"))))) .uri("https://example.com")) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryTests.java index cccf0420..859a4fc5 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestHeaderToRequestUriGatewayFilterFactoryTests.java @@ -46,11 +46,9 @@ public class RequestHeaderToRequestUriGatewayFilterFactoryTests { MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") .header("X-CF-Forwarded-Url", "https://example.com").build(); ServerWebExchange exchange = MockServerWebExchange.from(request); - exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, - URI.create("http://localhost")); + exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("http://localhost")); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); filter.filter(exchange, filterChain); ServerWebExchange webExchange = captor.getValue(); @@ -63,14 +61,11 @@ public class RequestHeaderToRequestUriGatewayFilterFactoryTests { public void filterDoesNotChangeRequestUriIfHeaderIsAbsent() { RequestHeaderToRequestUriGatewayFilterFactory factory = new RequestHeaderToRequestUriGatewayFilterFactory(); GatewayFilter filter = factory.apply(c -> c.setName("X-CF-Forwarded-Url")); - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost").build(); ServerWebExchange exchange = MockServerWebExchange.from(request); - exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, - URI.create("http://localhost")); + exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("http://localhost")); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); filter.filter(exchange, filterChain); ServerWebExchange webExchange = captor.getValue(); @@ -86,11 +81,9 @@ public class RequestHeaderToRequestUriGatewayFilterFactoryTests { MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") .header("X-CF-Forwarded-Url", "example").build(); ServerWebExchange exchange = MockServerWebExchange.from(request); - exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, - URI.create("http://localhost")); + exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("http://localhost")); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); filter.filter(exchange, filterChain); ServerWebExchange webExchange = captor.getValue(); @@ -103,8 +96,7 @@ public class RequestHeaderToRequestUriGatewayFilterFactoryTests { public void toStringFormat() { NameConfig config = new NameConfig(); config.setName("myname"); - GatewayFilter filter = new RequestHeaderToRequestUriGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new RequestHeaderToRequestUriGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactoryTests.java index 3fe9dd90..32d4b272 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestRateLimiterGatewayFilterFactoryTests.java @@ -83,8 +83,7 @@ public class RequestRateLimiterGatewayFilterFactoryTests extends BaseWebClientTe @Test public void notAllowedWorks() { - assertFilterFactory(resolver2, "notallowedkey", false, - HttpStatus.TOO_MANY_REQUESTS); + assertFilterFactory(resolver2, "notallowedkey", false, HttpStatus.TOO_MANY_REQUESTS); } @Test @@ -97,30 +96,26 @@ public class RequestRateLimiterGatewayFilterFactoryTests extends BaseWebClientTe assertFilterFactory(exchange -> Mono.empty(), null, true, HttpStatus.OK, false); } - private void assertFilterFactory(KeyResolver keyResolver, String key, boolean allowed, - HttpStatus expectedStatus) { + private void assertFilterFactory(KeyResolver keyResolver, String key, boolean allowed, HttpStatus expectedStatus) { assertFilterFactory(keyResolver, key, allowed, expectedStatus, null); } - private void assertFilterFactory(KeyResolver keyResolver, String key, boolean allowed, - HttpStatus expectedStatus, Boolean denyEmptyKey) { + private void assertFilterFactory(KeyResolver keyResolver, String key, boolean allowed, HttpStatus expectedStatus, + Boolean denyEmptyKey) { String tokensRemaining = allowed ? "1" : "0"; - Map headers = Collections.singletonMap("X-Tokens-Remaining", - tokensRemaining); + Map headers = Collections.singletonMap("X-Tokens-Remaining", tokensRemaining); if (key != null) { - when(rateLimiter.isAllowed("myroute", key)) - .thenReturn(Mono.just(new Response(allowed, headers))); + when(rateLimiter.isAllowed("myroute", key)).thenReturn(Mono.just(new Response(allowed, headers))); } MockServerHttpRequest request = MockServerHttpRequest.get("/").build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); exchange.getResponse().setStatusCode(HttpStatus.OK); exchange.getAttributes().put(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR, - Route.async().id("myroute").predicate(ex -> true).uri("http://localhost") - .build()); + Route.async().id("myroute").predicate(ex -> true).uri("http://localhost").build()); when(this.filterChain.filter(exchange)).thenReturn(Mono.empty()); @@ -137,8 +132,8 @@ public class RequestRateLimiterGatewayFilterFactoryTests extends BaseWebClientTe Mono response = filter.filter(exchange, this.filterChain); response.subscribe(aVoid -> { assertThat(exchange.getResponse().getStatusCode()).isEqualTo(expectedStatus); - assertThat(exchange.getResponse().getHeaders()).containsEntry( - "X-Tokens-Remaining", Collections.singletonList(tokensRemaining)); + assertThat(exchange.getResponse().getHeaders()).containsEntry("X-Tokens-Remaining", + Collections.singletonList(tokensRemaining)); }); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactoryTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactoryTest.java index e8ee843c..2c3b7f2a 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactoryTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RequestSizeGatewayFilterFactoryTest.java @@ -52,9 +52,8 @@ public class RequestSizeGatewayFilterFactoryTest extends BaseWebClientTests { @Test public void setRequestSizeFilterWorks() { - testClient.post().uri("/post").header("Host", "www.setrequestsize.org") - .header("content-length", "6").bodyValue("123456").exchange() - .expectStatus().isEqualTo(HttpStatus.PAYLOAD_TOO_LARGE).expectHeader() + testClient.post().uri("/post").header("Host", "www.setrequestsize.org").header("content-length", "6") + .bodyValue("123456").exchange().expectStatus().isEqualTo(HttpStatus.PAYLOAD_TOO_LARGE).expectHeader() .valueMatches("errorMessage", responseMesssage); } @@ -78,8 +77,7 @@ public class RequestSizeGatewayFilterFactoryTest extends BaseWebClientTests { public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("test_request_size", - r -> r.order(-1).host("**.setrequestsize.org") - .filters(f -> f.setRequestSize(5L)).uri(uri)) + r -> r.order(-1).host("**.setrequestsize.org").filters(f -> f.setRequestSize(5L)).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactoryIntegrationTests.java index c366a1f1..0dc5c68d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactoryIntegrationTests.java @@ -63,10 +63,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = RANDOM_PORT, properties = { - "spring.cloud.gateway.httpclient.connect-timeout=500", - "spring.cloud.gateway.httpclient.response-timeout=2s", - "logging.level.org.springframework.cloud.gateway.filter.factory.RetryGatewayFilterFactory=TRACE" }) +@SpringBootTest(webEnvironment = RANDOM_PORT, + properties = { "spring.cloud.gateway.httpclient.connect-timeout=500", + "spring.cloud.gateway.httpclient.response-timeout=2s", + "logging.level.org.springframework.cloud.gateway.filter.factory.RetryGatewayFilterFactory=TRACE" }) @DirtiesContext // default filter AddResponseHeader suppresses bug // https://github.com/spring-cloud/spring-cloud-gateway/issues/1315, @@ -79,16 +79,14 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest @Test public void retryFilterGet() { - testClient.get().uri("/retry?key=get").exchange().expectStatus().isOk() - .expectBody(String.class).isEqualTo("3"); + testClient.get().uri("/retry?key=get").exchange().expectStatus().isOk().expectBody(String.class).isEqualTo("3"); } @Test public void retryFilterFailure() { testClient.mutate().responseTimeout(Duration.ofSeconds(10)).build().get() - .uri("/retryalwaysfail?key=getjavafailure&count=4") - .header(HttpHeaders.HOST, "www.retryjava.org").exchange().expectStatus() - .is5xxServerError().expectBody(String.class).consumeWith(result -> { + .uri("/retryalwaysfail?key=getjavafailure&count=4").header(HttpHeaders.HOST, "www.retryjava.org") + .exchange().expectStatus().is5xxServerError().expectBody(String.class).consumeWith(result -> { assertThat(result.getResponseBody()).contains("permanently broken"); }); } @@ -107,43 +105,37 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest @Test public void retryFilterGetJavaDsl() { - testClient.get().uri("/retry?key=getjava&count=2") - .header(HttpHeaders.HOST, "www.retryjava.org").exchange().expectStatus() - .isOk().expectBody(String.class).isEqualTo("2"); + testClient.get().uri("/retry?key=getjava&count=2").header(HttpHeaders.HOST, "www.retryjava.org").exchange() + .expectStatus().isOk().expectBody(String.class).isEqualTo("2"); } @Test public void retryFilterPost() { testClient.post().uri("/retrypost?key=postconfig&expectedbody=HelloConfig") - .header(HttpHeaders.HOST, "www.retrypostconfig.org") - .bodyValue("HelloConfig").exchange().expectStatus().isOk() - .expectBody(String.class).isEqualTo("3"); + .header(HttpHeaders.HOST, "www.retrypostconfig.org").bodyValue("HelloConfig").exchange().expectStatus() + .isOk().expectBody(String.class).isEqualTo("3"); } @Test public void retryFilterPostJavaDsl() { - testClient.post().uri("/retrypost?key=post&expectedbody=Hello") - .header(HttpHeaders.HOST, "www.retryjava.org").bodyValue("Hello") - .exchange().expectStatus().isOk().expectBody(String.class).isEqualTo("3"); + testClient.post().uri("/retrypost?key=post&expectedbody=Hello").header(HttpHeaders.HOST, "www.retryjava.org") + .bodyValue("Hello").exchange().expectStatus().isOk().expectBody(String.class).isEqualTo("3"); } @Test public void retryFilterPostOneTime() { - testClient.post().uri( - "/retrypost?key=retryFilterPostOneTime&expectedbody=HelloGateway&count=1") - .header(HttpHeaders.HOST, "www.retrypostonceconfig.org") - .bodyValue("HelloGateway").exchange().expectStatus().isOk(); + testClient.post().uri("/retrypost?key=retryFilterPostOneTime&expectedbody=HelloGateway&count=1") + .header(HttpHeaders.HOST, "www.retrypostonceconfig.org").bodyValue("HelloGateway").exchange() + .expectStatus().isOk(); assertThat(this.capture.toString()).contains("setting new iteration in attr 0"); - assertThat(this.capture.toString()) - .doesNotContain("setting new iteration in attr 1"); + assertThat(this.capture.toString()).doesNotContain("setting new iteration in attr 1"); } @Test public void retriesSleepyRequest() throws Exception { testClient.mutate().responseTimeout(Duration.ofSeconds(10)).build().get() - .uri("/sleep?key=sleepyRequest&millis=3000") - .header(HttpHeaders.HOST, "www.retryjava.org").exchange().expectStatus() - .isEqualTo(HttpStatus.GATEWAY_TIMEOUT); + .uri("/sleep?key=sleepyRequest&millis=3000").header(HttpHeaders.HOST, "www.retryjava.org").exchange() + .expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT); assertThat(TestConfig.map.get("sleepyRequest")).isNotNull().hasValue(3); } @@ -152,31 +144,27 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest public void shouldNotRetryWhenSleepyRequestPost() throws Exception { testClient.mutate().responseTimeout(Duration.ofSeconds(10)).build().post() .uri("/sleep?key=notRetriesSleepyRequestPost&millis=3000") - .header(HttpHeaders.HOST, "www.retry-only-get.org").exchange() - .expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT); + .header(HttpHeaders.HOST, "www.retry-only-get.org").exchange().expectStatus() + .isEqualTo(HttpStatus.GATEWAY_TIMEOUT); - assertThat(TestConfig.map.get("notRetriesSleepyRequestPost")).isNotNull() - .hasValue(1); + assertThat(TestConfig.map.get("notRetriesSleepyRequestPost")).isNotNull().hasValue(1); } @Test public void shouldNotRetryWhenSleepyRequestPostWithBody() throws Exception { testClient.mutate().responseTimeout(Duration.ofSeconds(10)).build().post() .uri("/sleep?key=notRetriesSleepyRequestPostWithBody&millis=3000") - .header(HttpHeaders.HOST, "www.retry-only-get.org") - .bodyValue("retry sleepy post with body").exchange().expectStatus() - .isEqualTo(HttpStatus.GATEWAY_TIMEOUT); + .header(HttpHeaders.HOST, "www.retry-only-get.org").bodyValue("retry sleepy post with body").exchange() + .expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT); - assertThat(TestConfig.map.get("notRetriesSleepyRequestPostWithBody")).isNotNull() - .hasValue(1); + assertThat(TestConfig.map.get("notRetriesSleepyRequestPostWithBody")).isNotNull().hasValue(1); } @Test public void shouldRetryWhenSleepyRequestGet() throws Exception { testClient.mutate().responseTimeout(Duration.ofSeconds(10)).build().get() - .uri("/sleep?key=sleepyRequestGet&millis=3000") - .header(HttpHeaders.HOST, "www.retry-only-get.org").exchange() - .expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT); + .uri("/sleep?key=sleepyRequestGet&millis=3000").header(HttpHeaders.HOST, "www.retry-only-get.org") + .exchange().expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT); assertThat(TestConfig.map.get("sleepyRequestGet")).isNotNull().hasValue(3); } @@ -185,12 +173,11 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest @SuppressWarnings("unchecked") public void retryFilterLoadBalancedWithMultipleServers() { String host = "www.retrywithloadbalancer.org"; - testClient.get().uri("/get").header(HttpHeaders.HOST, host).exchange() - .expectStatus().isOk().expectBody(Map.class).consumeWith(res -> { + testClient.get().uri("/get").header(HttpHeaders.HOST, host).exchange().expectStatus().isOk() + .expectBody(Map.class).consumeWith(res -> { Map body = res.getResponseBody(); assertThat(body).isNotNull(); - Map headers = (Map) body - .get("headers"); + Map headers = (Map) body.get("headers"); assertThat(headers).containsEntry("X-Forwarded-Host", host); }); } @@ -203,16 +190,15 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest config.setSeries(HttpStatus.Series.SERVER_ERROR); config.setExceptions(IOException.class); GatewayFilter filter = new RetryGatewayFilterFactory().apply(config); - assertThat(filter.toString()).contains("4").contains("[GET]") - .contains("[SERVER_ERROR]").contains("[IOException]"); + assertThat(filter.toString()).contains("4").contains("[GET]").contains("[SERVER_ERROR]") + .contains("[IOException]"); } @RestController @EnableAutoConfiguration @SpringBootConfiguration @Import(DefaultTestConfig.class) - @LoadBalancerClient(name = "badservice2", - configuration = TestBadLoadBalancerConfig.class) + @LoadBalancerClient(name = "badservice2", configuration = TestBadLoadBalancerConfig.class) public static class TestConfig { Log log = LogFactory.getLog(getClass()); @@ -228,10 +214,8 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest AtomicInteger num = getCount(key); int retryCount = num.incrementAndGet(); log.warn("Retry count: " + retryCount); - return Mono.delay(Duration.ofMillis(millisToSleep)) - .thenReturn(ResponseEntity.status(HttpStatus.OK) - .header("X-Retry-Count", String.valueOf(retryCount)) - .body("slept " + millisToSleep + " ms")); + return Mono.delay(Duration.ofMillis(millisToSleep)).thenReturn(ResponseEntity.status(HttpStatus.OK) + .header("X-Retry-Count", String.valueOf(retryCount)).body("slept " + millisToSleep + " ms")); } @RequestMapping("/httpbin/retryalwaysfail") @@ -240,22 +224,19 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest AtomicInteger num = getCount(key); int i = num.incrementAndGet(); log.warn("Retry count: " + i); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .header("X-Retry-Count", String.valueOf(i)) + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).header("X-Retry-Count", String.valueOf(i)) .body("permanently broken"); } @RequestMapping("/httpbin/retrypost") public ResponseEntity retrypost(@RequestParam("key") String key, @RequestParam(name = "count", defaultValue = "3") int count, - @RequestParam("expectedbody") String expectedbody, - @RequestBody String body) { + @RequestParam("expectedbody") String expectedbody, @RequestBody String body) { ResponseEntity response = retry(key, count); if (!expectedbody.equals(body)) { AtomicInteger num = getCount(key); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .header("X-Retry-Count", String.valueOf(num)) - .body("bodys did not match on try" + num); + .header("X-Retry-Count", String.valueOf(num)).body("bodys did not match on try" + num); } return response; } @@ -268,11 +249,10 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest log.warn("Retry count: " + i); String body = String.valueOf(i); if (i < count) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .header("X-Retry-Count", body).body("temporarily broken"); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).header("X-Retry-Count", body) + .body("temporarily broken"); } - return ResponseEntity.status(HttpStatus.OK).header("X-Retry-Count", body) - .body(body); + return ResponseEntity.status(HttpStatus.OK).header("X-Retry-Count", body).body(body); } AtomicInteger getCount(String key) { @@ -281,27 +261,24 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest @Bean public RouteLocator hystrixRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("retry_java", r -> r.host("**.retryjava.org") + return builder.routes().route("retry_java", + r -> r.host("**.retryjava.org") .filters(f -> f.prefixPath("/httpbin") - .retry(config -> config.setRetries(2) - .setMethods(HttpMethod.POST, HttpMethod.GET))) - .uri(uri)) - .route("retry_only_get", r -> r.host("**.retry-only-get.org") - .filters(f -> f.prefixPath("/httpbin") - .retry(config -> config.setRetries(2) - .setMethods(HttpMethod.GET))) + .retry(config -> config.setRetries(2).setMethods(HttpMethod.POST, HttpMethod.GET))) .uri(uri)) + .route("retry_only_get", + r -> r.host("**.retry-only-get.org") + .filters(f -> f.prefixPath("/httpbin") + .retry(config -> config.setRetries(2).setMethods(HttpMethod.GET))) + .uri(uri)) .route("retry_with_backoff", r -> r.host("**.retrywithbackoff.org") .filters(f -> f.prefixPath("/httpbin").retry(config -> { - config.setRetries(2).setBackoff(Duration.ofMillis(100), - null, 2, true); + config.setRetries(2).setBackoff(Duration.ofMillis(100), null, 2, true); })).uri(uri)) .route("retry_with_loadbalancer", r -> r.host("**.retrywithloadbalancer.org") - .filters(f -> f.prefixPath("/httpbin") - .retry(config -> config.setRetries(2))) + .filters(f -> f.prefixPath("/httpbin").retry(config -> config.setRetries(2))) .uri("lb://badservice2")) .build(); } @@ -314,12 +291,9 @@ public class RetryGatewayFilterFactoryIntegrationTests extends BaseWebClientTest protected int port = 0; @Bean - public ServiceInstanceListSupplier staticServiceInstanceListSupplier( - Environment env) { - return ServiceInstanceListSupplier.fixed(env) - .instance(new DefaultServiceInstance("doesnotexist1", "badservice2", - "localhost.domain.doesnot.exist", port, true)) - .instance(port, "badservice2").build(); + public ServiceInstanceListSupplier staticServiceInstanceListSupplier(Environment env) { + return ServiceInstanceListSupplier.fixed(env).instance(new DefaultServiceInstance("doesnotexist1", + "badservice2", "localhost.domain.doesnot.exist", port, true)).instance(port, "badservice2").build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryTests.java index ad05b2c7..01345eca 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryTests.java @@ -32,15 +32,13 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @DirtiesContext -public class RewriteLocationResponseHeaderGatewayFilterFactoryTests - extends BaseWebClientTests { +public class RewriteLocationResponseHeaderGatewayFilterFactoryTests extends BaseWebClientTests { @Test public void rewriteLocationResponseHeaderFilterWorks() { - testClient.post().uri("/headers") - .header("Host", "test1.rewritelocationresponseheader.org").exchange() - .expectStatus().isOk().expectHeader().valueEquals("Location", - "https://test1.rewritelocationresponseheader.org/some/object/id"); + testClient.post().uri("/headers").header("Host", "test1.rewritelocationresponseheader.org").exchange() + .expectStatus().isOk().expectHeader() + .valueEquals("Location", "https://test1.rewritelocationresponseheader.org/some/object/id"); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests.java index b3c89d8b..4fb42154 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests.java @@ -82,24 +82,21 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { public void rewriteLocationNullLocation() { setupTest(null, "host", "/path"); filter.rewriteLocation(exchange, config); - Mockito.verify(responseHeaders, Mockito.never()).set(Mockito.anyString(), - Mockito.anyString()); + Mockito.verify(responseHeaders, Mockito.never()).set(Mockito.anyString(), Mockito.anyString()); } @Test public void rewriteLocationNullHost() { setupTest("location", null, "/path"); filter.rewriteLocation(exchange, config); - Mockito.verify(responseHeaders, Mockito.never()).set(Mockito.anyString(), - Mockito.anyString()); + Mockito.verify(responseHeaders, Mockito.never()).set(Mockito.anyString(), Mockito.anyString()); } @Test public void rewriteLocation() { setupTest("location", "host", "/path"); filter.rewriteLocation(exchange, config); - Mockito.verify(responseHeaders).set(Mockito.eq("Location"), - Mockito.eq("location")); + Mockito.verify(responseHeaders).set(Mockito.eq("Location"), Mockito.eq("location")); } @Test @@ -116,8 +113,7 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { setupTest("https://replaceme/some/path", "host", "/some/path"); config.setHostValue("different.host"); filter.rewriteLocation(exchange, config); - Mockito.verify(responseHeaders).set(Mockito.eq("Location"), - Mockito.eq("https://different.host/some/path")); + Mockito.verify(responseHeaders).set(Mockito.eq("Location"), Mockito.eq("https://different.host/some/path")); } @Test @@ -125,8 +121,7 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { setupTest("https://replaceme/some/path", "host", "/some/path"); config.setProtocols("gopher|whatever"); filter.rewriteLocation(exchange, config); - Mockito.verify(responseHeaders).set(Mockito.eq("Location"), - Mockito.eq("https://replaceme/some/path")); + Mockito.verify(responseHeaders).set(Mockito.eq("Location"), Mockito.eq("https://replaceme/some/path")); } @Test @@ -135,9 +130,8 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { String host = "example.com:443"; String path = "/v1/path/to/riches"; setupTest(location, host, path); - assertThat(filter.fixedLocation(location, host, path, StripVersion.ALWAYS_STRIP, - config.getHostPortPattern(), config.getHostPortVersionPattern())) - .isEqualTo("https://example.com:443/path/to/riches"); + assertThat(filter.fixedLocation(location, host, path, StripVersion.ALWAYS_STRIP, config.getHostPortPattern(), + config.getHostPortVersionPattern())).isEqualTo("https://example.com:443/path/to/riches"); } @Test @@ -146,9 +140,8 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { String host = "example.com:443"; String path = "/v1/path/to/riches"; setupTest(location, host, path); - assertThat(filter.fixedLocation(location, host, path, StripVersion.AS_IN_REQUEST, - config.getHostPortPattern(), config.getHostPortVersionPattern())) - .isEqualTo("https://example.com:443/v1/path/to/riches"); + assertThat(filter.fixedLocation(location, host, path, StripVersion.AS_IN_REQUEST, config.getHostPortPattern(), + config.getHostPortVersionPattern())).isEqualTo("https://example.com:443/v1/path/to/riches"); } @Test @@ -157,9 +150,8 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { String host = "example.com:443"; String path = "/v1/path/to/riches"; setupTest(location, host, path); - assertThat(filter.fixedLocation(location, host, path, StripVersion.NEVER_STRIP, - config.getHostPortPattern(), config.getHostPortVersionPattern())) - .isEqualTo("https://example.com:443/v1/path/to/riches"); + assertThat(filter.fixedLocation(location, host, path, StripVersion.NEVER_STRIP, config.getHostPortPattern(), + config.getHostPortVersionPattern())).isEqualTo("https://example.com:443/v1/path/to/riches"); } @Test @@ -168,9 +160,8 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { String host = "api.example.com:443"; String path = "/path/to/riches"; setupTest(location, host, path); - assertThat(filter.fixedLocation(location, host, path, StripVersion.ALWAYS_STRIP, - config.getHostPortPattern(), config.getHostPortVersionPattern())) - .isEqualTo("https://api.example.com:443/path/to/riches"); + assertThat(filter.fixedLocation(location, host, path, StripVersion.ALWAYS_STRIP, config.getHostPortPattern(), + config.getHostPortVersionPattern())).isEqualTo("https://api.example.com:443/path/to/riches"); } @Test @@ -179,9 +170,8 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { String host = "api.example.com:443"; String path = "/path/to/riches"; setupTest(location, host, path); - assertThat(filter.fixedLocation(location, host, path, StripVersion.AS_IN_REQUEST, - config.getHostPortPattern(), config.getHostPortVersionPattern())) - .isEqualTo("https://api.example.com:443/path/to/riches"); + assertThat(filter.fixedLocation(location, host, path, StripVersion.AS_IN_REQUEST, config.getHostPortPattern(), + config.getHostPortVersionPattern())).isEqualTo("https://api.example.com:443/path/to/riches"); } @Test @@ -190,9 +180,8 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { String host = "api.example.com:443"; String path = "/path/to/riches"; setupTest(location, host, path); - assertThat(filter.fixedLocation(location, host, path, StripVersion.NEVER_STRIP, - config.getHostPortPattern(), config.getHostPortVersionPattern())) - .isEqualTo("https://api.example.com:443/v2/path/to/riches"); + assertThat(filter.fixedLocation(location, host, path, StripVersion.NEVER_STRIP, config.getHostPortPattern(), + config.getHostPortVersionPattern())).isEqualTo("https://api.example.com:443/v2/path/to/riches"); } @Test @@ -201,9 +190,8 @@ public class RewriteLocationResponseHeaderGatewayFilterFactoryUnitTests { String host = "api.example.com:443"; String path = "/path/to/riches"; setupTest(location, host, path); - assertThat(filter.fixedLocation(location, host, path, StripVersion.AS_IN_REQUEST, - config.getHostPortPattern(), config.getHostPortVersionPattern())) - .isEqualTo("https://api.example.com:443/path/to/riches"); + assertThat(filter.fixedLocation(location, host, path, StripVersion.AS_IN_REQUEST, config.getHostPortPattern(), + config.getHostPortVersionPattern())).isEqualTo("https://api.example.com:443/path/to/riches"); } @Test diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryIntegrationTests.java index 79cdc3e2..0aa27cdf 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryIntegrationTests.java @@ -36,8 +36,7 @@ public class RewritePathGatewayFilterFactoryIntegrationTests extends BaseWebClie @Test public void rewritePathFilterWorks() { - testClient.get().uri("/foo/get").header("Host", "www.baz.org").exchange() - .expectStatus().isOk(); + testClient.get().uri("/foo/get").header("Host", "www.baz.org").exchange().expectStatus().isOk(); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryTests.java index 366523ed..937bf797 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactoryTests.java @@ -55,26 +55,22 @@ public class RewritePathGatewayFilterFactoryTests { @Test public void rewritePathFilterWithNamedGroupWorks() { - testRewriteFilter("/foo/(?\\d.*)", "/bar/baz/$\\{id}", "/foo/123", - "/bar/baz/123"); + testRewriteFilter("/foo/(?\\d.*)", "/bar/baz/$\\{id}", "/foo/123", "/bar/baz/123"); } - private ServerWebExchange testRewriteFilter(String regex, String replacement, - String actualPath, String expectedPath) { + private ServerWebExchange testRewriteFilter(String regex, String replacement, String actualPath, + String expectedPath) { GatewayFilter filter = new RewritePathGatewayFilterFactory() .apply(c -> c.setRegexp(regex).setReplacement(replacement)); - URI url = UriComponentsBuilder.fromUriString("http://localhost" + actualPath) - .build(true).toUri(); - MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url) - .build(); + URI url = UriComponentsBuilder.fromUriString("http://localhost" + actualPath).build(true).toUri(); + MockServerHttpRequest request = MockServerHttpRequest.method(HttpMethod.GET, url).build(); ServerWebExchange exchange = MockServerWebExchange.from(request); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); filter.filter(exchange, filterChain); @@ -84,10 +80,8 @@ public class RewritePathGatewayFilterFactoryTests { assertThat(webExchange.getRequest().getURI()).hasPath(expectedPath); URI requestUrl = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(requestUrl).hasScheme("http").hasHost("localhost").hasNoPort() - .hasPath(expectedPath); - LinkedHashSet uris = webExchange - .getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + assertThat(requestUrl).hasScheme("http").hasHost("localhost").hasNoPort().hasPath(expectedPath); + LinkedHashSet uris = webExchange.getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); assertThat(uris).contains(request.getURI()); return webExchange; @@ -95,8 +89,7 @@ public class RewritePathGatewayFilterFactoryTests { @Test public void rewritePathWithEncodedParams() { - ServerWebExchange exchange = testRewriteFilter("/foo", "/baz", - "/foo/bar?name=%E6%89%8E%E6%A0%B9", "/baz/bar"); + ServerWebExchange exchange = testRewriteFilter("/foo", "/baz", "/foo/bar?name=%E6%89%8E%E6%A0%B9", "/baz/bar"); URI uri = exchange.getRequest().getURI(); assertThat(uri.getRawQuery()).isEqualTo("name=%E6%89%8E%E6%A0%B9"); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryTests.java index 76b374de..6451620e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryTests.java @@ -36,9 +36,8 @@ public class RewriteResponseHeaderGatewayFilterFactoryTests extends BaseWebClien @Test public void rewriteResponseHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.rewriteresponseheader.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-Request-Foo", "/42?user=ford&password=***&flag=true"); + testClient.get().uri("/headers").header("Host", "www.rewriteresponseheader.org").exchange().expectStatus() + .isOk().expectHeader().valueEquals("X-Request-Foo", "/42?user=ford&password=***&flag=true"); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryUnitTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryUnitTests.java index 08c02adf..ebd9ac8d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryUnitTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/RewriteResponseHeaderGatewayFilterFactoryUnitTests.java @@ -43,14 +43,13 @@ public class RewriteResponseHeaderGatewayFilterFactoryUnitTests { @Test public void testRewriteDollarSlash() { - assertThat(filterFactory.rewrite("/foo/bar", "/foo/(?.*)", - "/$\\{segment}/$\\{segment}/42")).isEqualTo("/bar/bar/42"); + assertThat(filterFactory.rewrite("/foo/bar", "/foo/(?.*)", "/$\\{segment}/$\\{segment}/42")) + .isEqualTo("/bar/bar/42"); } @Test public void testRewriteMultiple() { - assertThat(filterFactory.rewrite("/foo/bar/wat/bar", "bar", "cafe")) - .isEqualTo("/foo/cafe/wat/cafe"); + assertThat(filterFactory.rewrite("/foo/bar/wat/bar", "bar", "cafe")).isEqualTo("/foo/cafe/wat/cafe"); } @Test @@ -81,10 +80,8 @@ public class RewriteResponseHeaderGatewayFilterFactoryUnitTests { config.setName("myname"); config.setRegexp("myregexp"); config.setReplacement("myreplacement"); - GatewayFilter filter = new RewriteResponseHeaderGatewayFilterFactory() - .apply(config); - assertThat(filter.toString()).contains("myname").contains("myregexp") - .contains("myreplacement"); + GatewayFilter filter = new RewriteResponseHeaderGatewayFilterFactory().apply(config); + assertThat(filter.toString()).contains("myname").contains("myregexp").contains("myreplacement"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactoryTests.java index 4f3399bd..b17ff20b 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SaveSessionGatewayFilterFactoryTests.java @@ -62,8 +62,7 @@ public class SaveSessionGatewayFilterFactoryTests extends BaseWebClientTests { when(mockWebSession.getAttributes()).thenReturn(new HashMap<>()); when(mockWebSession.save()).thenReturn(Mono.empty()); - Mono result = webClient.get().uri("/get").exchange() - .flatMap(response -> response.body(toMono(Map.class))); + Mono result = webClient.get().uri("/get").exchange().flatMap(response -> response.body(toMono(Map.class))); StepVerifier.create(result).consumeNextWith(response -> { // Don't care about data, just need to catch signal diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryTests.java index 1ec2cae5..d853714e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryTests.java @@ -51,28 +51,23 @@ public class SecureHeadersGatewayFilterFactoryTests extends BaseWebClientTests { @Test public void secureHeadersFilterWorks() { - Mono result = webClient.get().uri("/headers") - .header("Host", "www.secureheaders.org").exchange(); + Mono result = webClient.get().uri("/headers").header("Host", "www.secureheaders.org") + .exchange(); SecureHeadersProperties defaults = new SecureHeadersProperties(); StepVerifier.create(result).consumeNextWith(response -> { assertStatus(response, HttpStatus.OK); HttpHeaders httpHeaders = response.headers().asHttpHeaders(); - assertThat(httpHeaders.getFirst(X_XSS_PROTECTION_HEADER)) - .isEqualTo(defaults.getXssProtectionHeader()); + assertThat(httpHeaders.getFirst(X_XSS_PROTECTION_HEADER)).isEqualTo(defaults.getXssProtectionHeader()); assertThat(httpHeaders.getFirst(STRICT_TRANSPORT_SECURITY_HEADER)) .isEqualTo(defaults.getStrictTransportSecurity()); - assertThat(httpHeaders.getFirst(X_FRAME_OPTIONS_HEADER)) - .isEqualTo(defaults.getFrameOptions()); - assertThat(httpHeaders.getFirst(X_CONTENT_TYPE_OPTIONS_HEADER)) - .isEqualTo(defaults.getContentTypeOptions()); - assertThat(httpHeaders.getFirst(REFERRER_POLICY_HEADER)) - .isEqualTo(defaults.getReferrerPolicy()); + assertThat(httpHeaders.getFirst(X_FRAME_OPTIONS_HEADER)).isEqualTo(defaults.getFrameOptions()); + assertThat(httpHeaders.getFirst(X_CONTENT_TYPE_OPTIONS_HEADER)).isEqualTo(defaults.getContentTypeOptions()); + assertThat(httpHeaders.getFirst(REFERRER_POLICY_HEADER)).isEqualTo(defaults.getReferrerPolicy()); assertThat(httpHeaders.getFirst(CONTENT_SECURITY_POLICY_HEADER)) .isEqualTo(defaults.getContentSecurityPolicy()); - assertThat(httpHeaders.getFirst(X_DOWNLOAD_OPTIONS_HEADER)) - .isEqualTo(defaults.getDownloadOptions()); + assertThat(httpHeaders.getFirst(X_DOWNLOAD_OPTIONS_HEADER)).isEqualTo(defaults.getDownloadOptions()); assertThat(httpHeaders.getFirst(X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER)) .isEqualTo(defaults.getPermittedCrossDomainPolicies()); }).expectComplete().verify(DURATION); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryUnitTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryUnitTests.java index b6699aad..6e2f2cbd 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryUnitTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryUnitTests.java @@ -58,8 +58,7 @@ public class SecureHeadersGatewayFilterFactoryUnitTests { @Before public void setUp() { - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost").build(); exchange = MockServerWebExchange.from(request); filterChain = mock(GatewayFilterChain.class); captor = ArgumentCaptor.forClass(ServerWebExchange.class); @@ -78,23 +77,19 @@ public class SecureHeadersGatewayFilterFactoryUnitTests { filter.filter(exchange, filterChain); ServerHttpResponse response = captor.getValue().getResponse(); - assertThat(response.getHeaders()).containsKeys(X_XSS_PROTECTION_HEADER, - STRICT_TRANSPORT_SECURITY_HEADER, X_FRAME_OPTIONS_HEADER, - X_CONTENT_TYPE_OPTIONS_HEADER, REFERRER_POLICY_HEADER, - CONTENT_SECURITY_POLICY_HEADER, X_DOWNLOAD_OPTIONS_HEADER, - X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER); + assertThat(response.getHeaders()).containsKeys(X_XSS_PROTECTION_HEADER, STRICT_TRANSPORT_SECURITY_HEADER, + X_FRAME_OPTIONS_HEADER, X_CONTENT_TYPE_OPTIONS_HEADER, REFERRER_POLICY_HEADER, + CONTENT_SECURITY_POLICY_HEADER, X_DOWNLOAD_OPTIONS_HEADER, X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER); } @Test public void doNotAddDisabledHeaders() { SecureHeadersProperties properties = new SecureHeadersProperties(); - properties.setDisable(asList("x-xss-protection", "strict-transport-security", - "x-frame-options", "x-content-type-options", "referrer-policy", - "content-security-policy", "x-download-options", + properties.setDisable(asList("x-xss-protection", "strict-transport-security", "x-frame-options", + "x-content-type-options", "referrer-policy", "content-security-policy", "x-download-options", "x-permitted-cross-domain-policies")); - SecureHeadersGatewayFilterFactory filterFactory = new SecureHeadersGatewayFilterFactory( - properties); + SecureHeadersGatewayFilterFactory filterFactory = new SecureHeadersGatewayFilterFactory(properties); NameConfig config = new NameConfig(); config.setName("SecureHeadersGatewayFilter"); filter = filterFactory.apply(config); @@ -102,18 +97,15 @@ public class SecureHeadersGatewayFilterFactoryUnitTests { filter.filter(exchange, filterChain); ServerHttpResponse response = captor.getValue().getResponse(); - assertThat(response.getHeaders()).doesNotContainKeys(X_XSS_PROTECTION_HEADER, - STRICT_TRANSPORT_SECURITY_HEADER, X_FRAME_OPTIONS_HEADER, - X_CONTENT_TYPE_OPTIONS_HEADER, REFERRER_POLICY_HEADER, - CONTENT_SECURITY_POLICY_HEADER, X_DOWNLOAD_OPTIONS_HEADER, - X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER); + assertThat(response.getHeaders()).doesNotContainKeys(X_XSS_PROTECTION_HEADER, STRICT_TRANSPORT_SECURITY_HEADER, + X_FRAME_OPTIONS_HEADER, X_CONTENT_TYPE_OPTIONS_HEADER, REFERRER_POLICY_HEADER, + CONTENT_SECURITY_POLICY_HEADER, X_DOWNLOAD_OPTIONS_HEADER, X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER); } @Test public void toStringFormat() { - GatewayFilter filter = new SecureHeadersGatewayFilterFactory( - new SecureHeadersProperties()).apply(""); + GatewayFilter filter = new SecureHeadersGatewayFilterFactory(new SecureHeadersProperties()).apply(""); Assertions.assertThat(filter.toString()).contains("SecureHeaders"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryIntegrationTests.java index 126ab89f..1fc0c78b 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryIntegrationTests.java @@ -36,15 +36,13 @@ public class SetPathGatewayFilterFactoryIntegrationTests extends BaseWebClientTe @Test public void setPathFilterDefaultValuesWork() { - testClient.get().uri("/foo/get").header("Host", "www.setpath.org").exchange() - .expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "set_path_test"); + testClient.get().uri("/foo/get").header("Host", "www.setpath.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(ROUTE_ID_HEADER, "set_path_test"); } @Test public void setPathViaHostFilterWork() { - testClient.get().uri("/").header("Host", "get.setpathhost.org").exchange() - .expectStatus().isOk().expectHeader() + testClient.get().uri("/").header("Host", "get.setpathhost.org").exchange().expectStatus().isOk().expectHeader() .valueEquals(ROUTE_ID_HEADER, "set_path_host_test"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryTests.java index f74bb9e7..c4495d2e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetPathGatewayFilterFactoryTests.java @@ -76,21 +76,17 @@ public class SetPathGatewayFilterFactoryTests { testFilter("/bar/baz/{id}", "/bar/baz/12 3", variables); } - private void testFilter(String template, String expectedPath, - HashMap variables) { - GatewayFilter filter = new SetPathGatewayFilterFactory() - .apply(c -> c.setTemplate(template)); + private void testFilter(String template, String expectedPath, HashMap variables) { + GatewayFilter filter = new SetPathGatewayFilterFactory().apply(c -> c.setTemplate(template)); - MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost").build(); ServerWebExchange exchange = MockServerWebExchange.from(request); ServerWebExchangeUtils.putUriTemplateVariables(exchange, variables); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); filter.filter(exchange, filterChain); @@ -98,8 +94,7 @@ public class SetPathGatewayFilterFactoryTests { ServerWebExchange webExchange = captor.getValue(); assertThat(webExchange.getRequest().getURI()).hasPath(expectedPath); - LinkedHashSet uris = webExchange - .getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + LinkedHashSet uris = webExchange.getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); assertThat(uris).contains(request.getURI()); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactoryTests.java index d27125e5..fb3fd1f1 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHeaderGatewayFilterFactoryTests.java @@ -50,11 +50,9 @@ public class SetRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest @Test public void setRequestHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.setrequestheader.org") - .exchange().expectStatus().isOk().expectBody(Map.class) - .consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); + testClient.get().uri("/headers").header("Host", "www.setrequestheader.org").exchange().expectStatus().isOk() + .expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); // add was called first, so sets will overwrite assertThat(headers).doesNotContainEntry("X-Req-Foo", "First"); assertThat(headers).containsEntry("X-Req-Foo", "Second-www"); @@ -63,8 +61,7 @@ public class SetRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest @Test public void toStringFormat() { - NameValueConfig config = new NameValueConfig().setName("myname") - .setValue("myvalue"); + NameValueConfig config = new NameValueConfig().setName("myname").setValue("myvalue"); GatewayFilter filter = new SetRequestHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname").contains("myvalue"); } @@ -80,10 +77,8 @@ public class SetRequestHeaderGatewayFilterFactoryTests extends BaseWebClientTest @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route("test_set_request_header", - r -> r.order(-1).host("{sub}.setrequestheader.org") - .filters(f -> f.prefixPath("/httpbin") - .addRequestHeader("X-Req-Foo", "First") - .setRequestHeader("X-Req-Foo", "Second-{sub}")) + r -> r.order(-1).host("{sub}.setrequestheader.org").filters(f -> f.prefixPath("/httpbin") + .addRequestHeader("X-Req-Foo", "First").setRequestHeader("X-Req-Foo", "Second-{sub}")) .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactoryTests.java index 2f82ec8a..19ba6a1e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetRequestHostHeaderGatewayFilterFactoryTests.java @@ -41,13 +41,10 @@ public class SetRequestHostHeaderGatewayFilterFactoryTests extends BaseWebClient @Test public void setRequestHostHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.setrequesthostheader.org") - .exchange().expectStatus().isOk().expectBody(Map.class) - .consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); - assertThat(headers).hasEntrySatisfying("Host", - val -> assertThat(val).isEqualTo("otherhost.io")); + testClient.get().uri("/headers").header("Host", "www.setrequesthostheader.org").exchange().expectStatus().isOk() + .expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); + assertThat(headers).hasEntrySatisfying("Host", val -> assertThat(val).isEqualTo("otherhost.io")); }); } @@ -55,8 +52,7 @@ public class SetRequestHostHeaderGatewayFilterFactoryTests extends BaseWebClient public void toStringFormat() { SetRequestHostHeaderGatewayFilterFactory.Config config = new SetRequestHostHeaderGatewayFilterFactory.Config(); config.setHost("myhost"); - GatewayFilter filter = new SetRequestHostHeaderGatewayFilterFactory() - .apply(config); + GatewayFilter filter = new SetRequestHostHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myhost"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactoryTests.java index 015399a9..a31e15ee 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetResponseHeaderGatewayFilterFactoryTests.java @@ -43,22 +43,19 @@ public class SetResponseHeaderGatewayFilterFactoryTests extends BaseWebClientTes @Test public void setResponseHeaderFilterWorks() { - testClient.get().uri("/headers").header("Host", "www.setreresponseheader.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-Response-Foo", "Bar"); + testClient.get().uri("/headers").header("Host", "www.setreresponseheader.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals("X-Response-Foo", "Bar"); } @Test public void setResponseHeaderFilterWorksJavaDsl() { - testClient.get().uri("/headers").header("Host", "www.setresponseheaderdsl.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-Res-Foo", "Second-www"); + testClient.get().uri("/headers").header("Host", "www.setresponseheaderdsl.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals("X-Res-Foo", "Second-www"); } @Test public void toStringFormat() { - NameValueConfig config = new NameValueConfig().setName("myname") - .setValue("myvalue"); + NameValueConfig config = new NameValueConfig().setName("myname").setValue("myvalue"); GatewayFilter filter = new SetResponseHeaderGatewayFilterFactory().apply(config); assertThat(filter.toString()).contains("myname").contains("myvalue"); } @@ -74,10 +71,8 @@ public class SetResponseHeaderGatewayFilterFactoryTests extends BaseWebClientTes @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route("test_set_response_header_dsl", - r -> r.order(-1).host("{sub}.setresponseheaderdsl.org") - .filters(f -> f.prefixPath("/httpbin") - .addResponseHeader("X-Res-Foo", "First") - .setResponseHeader("X-Res-Foo", "Second-{sub}")) + r -> r.order(-1).host("{sub}.setresponseheaderdsl.org").filters(f -> f.prefixPath("/httpbin") + .addResponseHeader("X-Res-Foo", "First").setResponseHeader("X-Res-Foo", "Second-{sub}")) .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactoryTests.java index c04326b5..3ab2ee7f 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SetStatusGatewayFilterFactoryTests.java @@ -67,9 +67,8 @@ public class SetStatusGatewayFilterFactoryTests extends BaseWebClientTests { public void nonStandardCodeWorks() { HttpHeaders headers = new HttpHeaders(); headers.set(HttpHeaders.HOST, "www.setcustomstatus.org"); - ResponseEntity response = new TestRestTemplate().exchange( - baseUri + "/headers", HttpMethod.GET, new HttpEntity<>(headers), - String.class); + ResponseEntity response = new TestRestTemplate().exchange(baseUri + "/headers", HttpMethod.GET, + new HttpEntity<>(headers), String.class); assertThat(response.getStatusCodeValue()).isEqualTo(432); // https://jira.spring.io/browse/SPR-16748 @@ -83,8 +82,8 @@ public class SetStatusGatewayFilterFactoryTests extends BaseWebClientTests { public void shouldSetStatusIntAndAddOriginalHeader() { String headerName = "original-http-status"; filterFactory.setOriginalStatusHeaderName(headerName); - setStatusStringTest("www.setstatusint.org", HttpStatus.UNAUTHORIZED) - .expectHeader().value(headerName, Matchers.is("[200]")); + setStatusStringTest("www.setstatusint.org", HttpStatus.UNAUTHORIZED).expectHeader().value(headerName, + Matchers.is("[200]")); } @@ -96,10 +95,8 @@ public class SetStatusGatewayFilterFactoryTests extends BaseWebClientTests { assertThat(filter.toString()).contains("401"); } - private WebTestClient.ResponseSpec setStatusStringTest(String host, - HttpStatus status) { - return testClient.get().uri("/headers").header("Host", host).exchange() - .expectStatus().isEqualTo(status); + private WebTestClient.ResponseSpec setStatusStringTest(String host, HttpStatus status) { + return testClient.get().uri("/headers").header("Host", host).exchange().expectStatus().isEqualTo(status); } @EnableAutoConfiguration @@ -112,9 +109,8 @@ public class SetStatusGatewayFilterFactoryTests extends BaseWebClientTests { @Bean public RouteLocator enumRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("test_enum_http_status", r -> r.host("*.setenumstatus.org") - .filters(f -> f.setStatus(HttpStatus.UNAUTHORIZED)).uri(uri)) + return builder.routes().route("test_enum_http_status", + r -> r.host("*.setenumstatus.org").filters(f -> f.setStatus(HttpStatus.UNAUTHORIZED)).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactoryTests.java index ba6137b4..a821b3f7 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerFilterFactoryTests.java @@ -26,21 +26,18 @@ import static org.springframework.http.MediaType.APPLICATION_JSON; /** * @author Ryan Baxter */ -public abstract class SpringCloudCircuitBreakerFilterFactoryTests - extends BaseWebClientTests { +public abstract class SpringCloudCircuitBreakerFilterFactoryTests extends BaseWebClientTests { @Test public void cbFilterWorks() { - testClient.get().uri("/get").header("Host", "www.sccbsuccess.org").exchange() - .expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "sccb_success_test"); + testClient.get().uri("/get").header("Host", "www.sccbsuccess.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(ROUTE_ID_HEADER, "sccb_success_test"); } @Test public void cbFilterTimesout() { - testClient.get().uri("/delay/3").header("Host", "www.sccbtimeout.org").exchange() - .expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody() - .jsonPath("$.status") + testClient.get().uri("/delay/3").header("Host", "www.sccbtimeout.org").exchange().expectStatus() + .isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody().jsonPath("$.status") .isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())); } @@ -53,73 +50,57 @@ public abstract class SpringCloudCircuitBreakerFilterFactoryTests */ @Test public void timeoutFromWebClient() { - testClient.get().uri("/delay/10") - .header("Host", "www.circuitbreakerresponsestall.org").exchange() + testClient.get().uri("/delay/10").header("Host", "www.circuitbreakerresponsestall.org").exchange() .expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT); } @Test public void filterFallback() { - testClient.get().uri("/delay/3?a=b") - .header("Host", "www.circuitbreakerfallback.org").exchange() - .expectStatus().isOk().expectBody() - .json("{\"from\":\"circuitbreakerfallbackcontroller\"}"); + testClient.get().uri("/delay/3?a=b").header("Host", "www.circuitbreakerfallback.org").exchange().expectStatus() + .isOk().expectBody().json("{\"from\":\"circuitbreakerfallbackcontroller\"}"); } @Test public void filterWorksJavaDsl() { - testClient.get().uri("/get").header("Host", "www.circuitbreakerjava.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "circuitbreaker_java"); + testClient.get().uri("/get").header("Host", "www.circuitbreakerjava.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(ROUTE_ID_HEADER, "circuitbreaker_java"); } @Test public void filterFallbackJavaDsl() { - testClient.get().uri("/delay/3").header("Host", "www.circuitbreakerjava.org") - .exchange().expectStatus().isOk().expectBody() - .json("{\"from\":\"circuitbreakerfallbackcontroller2\"}"); + testClient.get().uri("/delay/3").header("Host", "www.circuitbreakerjava.org").exchange().expectStatus().isOk() + .expectBody().json("{\"from\":\"circuitbreakerfallbackcontroller2\"}"); } @Test public void filterConnectFailure() { - testClient.get().uri("/delay/3") - .header("Host", "www.circuitbreakerconnectfail.org").exchange() - .expectStatus().is5xxServerError(); + testClient.get().uri("/delay/3").header("Host", "www.circuitbreakerconnectfail.org").exchange().expectStatus() + .is5xxServerError(); } @Test public void filterErrorPage() { - testClient.get().uri("/delay/3") - .header("Host", "www.circuitbreakerconnectfail.org") - .accept(APPLICATION_JSON).exchange().expectStatus().is5xxServerError() - .expectBody().jsonPath("$.status").isEqualTo(500).jsonPath("$.message") - .isNotEmpty().jsonPath("$.error").isEqualTo("Internal Server Error"); + testClient.get().uri("/delay/3").header("Host", "www.circuitbreakerconnectfail.org").accept(APPLICATION_JSON) + .exchange().expectStatus().is5xxServerError().expectBody().jsonPath("$.status").isEqualTo(500) + .jsonPath("$.message").isNotEmpty().jsonPath("$.error").isEqualTo("Internal Server Error"); } @Test public void filterFallbackForward() { - testClient.get().uri("/delay/3?a=c") - .header("Host", "www.circuitbreakerforward.org").exchange().expectStatus() - .isOk().expectBody() - .json("{\"from\":\"circuitbreakerfallbackcontroller3\"}"); + testClient.get().uri("/delay/3?a=c").header("Host", "www.circuitbreakerforward.org").exchange().expectStatus() + .isOk().expectBody().json("{\"from\":\"circuitbreakerfallbackcontroller3\"}"); } @Test public void filterStatusCodeFallback() { - testClient.get().uri("/status/500") - .header("Host", "www.circuitbreakerstatuscode.org").exchange() - .expectStatus().isOk().expectBody() - .json("{\"from\":\"statusCodeFallbackController\"}"); + testClient.get().uri("/status/500").header("Host", "www.circuitbreakerstatuscode.org").exchange().expectStatus() + .isOk().expectBody().json("{\"from\":\"statusCodeFallbackController\"}"); - testClient.get().uri("/status/404") - .header("Host", "www.circuitbreakerstatuscode.org").exchange() - .expectStatus().isOk().expectBody() - .json("{\"from\":\"statusCodeFallbackController\"}"); + testClient.get().uri("/status/404").header("Host", "www.circuitbreakerstatuscode.org").exchange().expectStatus() + .isOk().expectBody().json("{\"from\":\"statusCodeFallbackController\"}"); - testClient.get().uri("/status/200") - .header("Host", "www.circuitbreakerstatuscode.org").exchange() - .expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "circuitbreaker_fallback_test_statuscode"); + testClient.get().uri("/status/200").header("Host", "www.circuitbreakerstatuscode.org").exchange().expectStatus() + .isOk().expectHeader().valueEquals(ROUTE_ID_HEADER, "circuitbreaker_fallback_test_statuscode"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactoryTests.java index e86ec435..9b0d015a 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerResilience4JFilterFactoryTests.java @@ -44,10 +44,9 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author Ryan Baxter */ @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = RANDOM_PORT, properties = { "debug=true", - "spring.cloud.circuitbreaker.hystrix.enabled=false" }) -@ContextConfiguration( - classes = SpringCloudCircuitBreakerResilience4JFilterFactoryTests.Config.class) +@SpringBootTest(webEnvironment = RANDOM_PORT, + properties = { "debug=true", "spring.cloud.circuitbreaker.hystrix.enabled=false" }) +@ContextConfiguration(classes = SpringCloudCircuitBreakerResilience4JFilterFactoryTests.Config.class) @DirtiesContext public class SpringCloudCircuitBreakerResilience4JFilterFactoryTests extends SpringCloudCircuitBreakerFilterFactoryTests { @@ -59,25 +58,22 @@ public class SpringCloudCircuitBreakerResilience4JFilterFactoryTests @Test public void r4jFilterServiceUnavailable() { - testClient.get().uri("/delay/3").header("Host", "www.sccbfailure.org").exchange() - .expectStatus().isEqualTo(HttpStatus.SERVICE_UNAVAILABLE); + testClient.get().uri("/delay/3").header("Host", "www.sccbfailure.org").exchange().expectStatus() + .isEqualTo(HttpStatus.SERVICE_UNAVAILABLE); } @Test public void r4jFilterExceptionFallback() { - testClient.get().uri("/delay/3") - .header("Host", "www.circuitbreakerexceptionfallback.org").exchange() - .expectStatus().isOk().expectHeader() - .value(RETRIEVED_EXCEPTION, containsString("TimeoutException")); + testClient.get().uri("/delay/3").header("Host", "www.circuitbreakerexceptionfallback.org").exchange() + .expectStatus().isOk().expectHeader().value(RETRIEVED_EXCEPTION, containsString("TimeoutException")); } @Test public void cbFilterTimesoutMessage() { - testClient.get().uri("/delay/3").header("Host", "www.sccbtimeout.org").exchange() - .expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody() - .jsonPath("$.status") - .isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())) - .jsonPath("$.message").value(containsString("1000ms")); + testClient.get().uri("/delay/3").header("Host", "www.sccbtimeout.org").exchange().expectStatus() + .isEqualTo(HttpStatus.GATEWAY_TIMEOUT).expectBody().jsonPath("$.status") + .isEqualTo(String.valueOf(HttpStatus.GATEWAY_TIMEOUT.value())).jsonPath("$.message") + .value(containsString("1000ms")); } @Test @@ -98,8 +94,7 @@ public class SpringCloudCircuitBreakerResilience4JFilterFactoryTests @Bean public Customizer slowCusomtizer() { return factory -> { - factory.addCircuitBreakerCustomizer( - cb -> cb.transitionToForcedOpenState(), "failcmd"); + factory.addCircuitBreakerCustomizer(cb -> cb.transitionToForcedOpenState(), "failcmd"); }; } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerTestConfig.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerTestConfig.java index 819be43e..ee43bc93 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerTestConfig.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SpringCloudCircuitBreakerTestConfig.java @@ -78,22 +78,17 @@ public class SpringCloudCircuitBreakerTestConfig { @Bean public RouteLocator circuitBreakerRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("circuitbreaker_fallback_forward", - r -> r.host("**.circuitbreakerforward.org") - .filters(f -> f.circuitBreaker( - config -> config.setFallbackUri("forward:/fallback"))) - .uri(uri)) + return builder.routes() + .route("circuitbreaker_fallback_forward", r -> r.host("**.circuitbreakerforward.org") + .filters(f -> f.circuitBreaker(config -> config.setFallbackUri("forward:/fallback"))).uri(uri)) .route("fallback_controller_3", - r -> r.path("/fallback").filters( - f -> f.setPath("/circuitbreakerFallbackController3")) + r -> r.path("/fallback").filters(f -> f.setPath("/circuitbreakerFallbackController3")).uri(uri)) + .route("circuitbreaker_java", + r -> r.host("**.circuitbreakerjava.org") + .filters(f -> f.prefixPath("/httpbin").circuitBreaker( + config -> config.setFallbackUri("forward:/circuitbreakerFallbackController2"))) .uri(uri)) - .route("circuitbreaker_java", r -> r.host("**.circuitbreakerjava.org") - .filters(f -> f.prefixPath("/httpbin") - .circuitBreaker(config -> config.setFallbackUri( - "forward:/circuitbreakerFallbackController2"))) - .uri(uri)) - .route("circuitbreaker_connection_failure", r -> r - .host("**.circuitbreakerconnectfail.org") + .route("circuitbreaker_connection_failure", r -> r.host("**.circuitbreakerconnectfail.org") .filters(f -> f.prefixPath("/httpbin").circuitBreaker(config -> { })).uri("lb:badservice")) /* @@ -102,8 +97,8 @@ public class SpringCloudCircuitBreakerTestConfig { */ .route("circuitbreaker_response_stall", r -> r.host("**.circuitbreakerresponsestall.org") - .filters(f -> f.prefixPath("/httpbin").circuitBreaker( - config -> config.setName("stalling-command"))) + .filters(f -> f.prefixPath("/httpbin") + .circuitBreaker(config -> config.setName("stalling-command"))) .uri(uri)) .build(); } @@ -114,10 +109,8 @@ public class SpringCloudCircuitBreakerTestConfig { } @Bean - RouterFunction routerFunction( - CircuitBreakerExceptionFallbackHandler exceptionFallbackHandler) { - return route(GET("/circuitbreakerExceptionFallback"), - exceptionFallbackHandler::retrieveExceptionInfo); + RouterFunction routerFunction(CircuitBreakerExceptionFallbackHandler exceptionFallbackHandler) { + return route(GET("/circuitbreakerExceptionFallback"), exceptionFallbackHandler::retrieveExceptionInfo); } private static class CircuitBreakerExceptionFallbackHandler { @@ -125,8 +118,7 @@ public class SpringCloudCircuitBreakerTestConfig { static final String RETRIEVED_EXCEPTION = "Retrieved-Exception"; Mono retrieveExceptionInfo(ServerRequest serverRequest) { - String exceptionName = serverRequest - .attribute(CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR) + String exceptionName = serverRequest.attribute(CIRCUITBREAKER_EXECUTION_EXCEPTION_ATTR) .map(exception -> exception.getClass().getName()).orElse(""); return ServerResponse.ok().header(RETRIEVED_EXCEPTION, exceptionName).build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryIntegrationTests.java index ac2df1a3..dc9bb966 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryIntegrationTests.java @@ -39,8 +39,7 @@ public class StripPrefixGatewayFilterFactoryIntegrationTests extends BaseWebClie @Test public void stripPrefixFilterDefaultValuesWork() { - testClient.get().uri("/foo/bar/get").header("Host", "www.stripprefix.org") - .exchange().expectStatus().isOk(); + testClient.get().uri("/foo/bar/get").header("Host", "www.stripprefix.org").exchange().expectStatus().isOk(); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryTests.java index 8cf32ff7..8cac4dda 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/StripPrefixGatewayFilterFactoryTests.java @@ -52,24 +52,19 @@ public class StripPrefixGatewayFilterFactoryTests { testStripPrefixFilter("/", "/", 1); testStripPrefixFilter("/", "/", 2); testStripPrefixFilter("", "/", 2); - testStripPrefixFilter("/this/is/a/long/path/with/a/lot/of/slashes", - "/path/with/a/lot/of/slashes", 4); + testStripPrefixFilter("/this/is/a/long/path/with/a/lot/of/slashes", "/path/with/a/lot/of/slashes", 4); } - private void testStripPrefixFilter(String actualPath, String expectedPath, - int parts) { - GatewayFilter filter = new StripPrefixGatewayFilterFactory() - .apply(c -> c.setParts(parts)); + private void testStripPrefixFilter(String actualPath, String expectedPath, int parts) { + GatewayFilter filter = new StripPrefixGatewayFilterFactory().apply(c -> c.setParts(parts)); - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost" + actualPath).build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost" + actualPath).build(); ServerWebExchange exchange = MockServerWebExchange.from(request); GatewayFilterChain filterChain = mock(GatewayFilterChain.class); - ArgumentCaptor captor = ArgumentCaptor - .forClass(ServerWebExchange.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(ServerWebExchange.class); when(filterChain.filter(captor.capture())).thenReturn(Mono.empty()); filter.filter(exchange, filterChain); @@ -79,10 +74,8 @@ public class StripPrefixGatewayFilterFactoryTests { assertThat(webExchange.getRequest().getURI()).hasPath(expectedPath); URI requestUrl = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR); - assertThat(requestUrl).hasScheme("http").hasHost("localhost").hasNoPort() - .hasPath(expectedPath); - LinkedHashSet uris = webExchange - .getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + assertThat(requestUrl).hasScheme("http").hasHost("localhost").hasNoPort().hasPath(expectedPath); + LinkedHashSet uris = webExchange.getRequiredAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); assertThat(uris).contains(request.getURI()); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactorySslTimeoutTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactorySslTimeoutTests.java index 12f6e645..6c25e6eb 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactorySslTimeoutTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactorySslTimeoutTests.java @@ -63,8 +63,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen "spring.main.allow-bean-definition-overriding=true" }) @DirtiesContext @ActiveProfiles("single-cert-ssl") -public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests - extends BaseWebClientTests { +public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests extends BaseWebClientTests { @Autowired AtomicInteger releaseCount; @@ -72,12 +71,10 @@ public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests @BeforeEach public void setup() { try { - SslContext sslContext = SslContextBuilder.forClient() - .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); - HttpClient httpClient = HttpClient.create() - .secure(ssl -> ssl.sslContext(sslContext)); - setup(new ReactorClientHttpConnector(httpClient), - "https://localhost:" + port); + SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE) + .build(); + HttpClient httpClient = HttpClient.create().secure(ssl -> ssl.sslContext(sslContext)); + setup(new ReactorClientHttpConnector(httpClient), "https://localhost:" + port); } catch (SSLException e) { throw new RuntimeException(e); @@ -86,12 +83,11 @@ public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests @Test public void modifyRequestBodySSLTimeout() { - testClient.post().uri("/post") - .header("Host", "www.modifyrequestbodyssltimeout.org") + testClient.post().uri("/post").header("Host", "www.modifyrequestbodyssltimeout.org") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE) .body(BodyInserters.fromValue("request")).exchange().expectStatus() - .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody() - .jsonPath("message").isEqualTo("handshake timed out after 1ms"); + .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody().jsonPath("message") + .isEqualTo("handshake timed out after 1ms"); } @RetryingTest(3) @@ -99,8 +95,7 @@ public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests releaseCount.set(0); // long initialUsedDirectMemory = PlatformDependent.usedDirectMemory(); for (int i = 0; i < 10; i++) { - testClient.post().uri("/post") - .header("Host", "www.modifyrequestbodyssltimeout.org") + testClient.post().uri("/post").header("Host", "www.modifyrequestbodyssltimeout.org") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE) .body(BodyInserters.fromValue("request")).exchange().expectStatus() .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); @@ -113,12 +108,11 @@ public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests @Test public void modifyRequestBodyHappenedError() { - testClient.post().uri("/post") - .header("Host", "www.modifyrequestbodyexception.org") + testClient.post().uri("/post").header("Host", "www.modifyrequestbodyexception.org") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE) .body(BodyInserters.fromValue("request")).exchange().expectStatus() - .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody() - .jsonPath("message").isEqualTo("modify body exception"); + .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody().jsonPath("message") + .isEqualTo("modify body exception"); } @EnableAutoConfiguration @@ -132,24 +126,22 @@ public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests @Bean @DependsOn("testModifyRequestBodyGatewayFilterFactory") public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("test_modify_request_body_ssl_timeout", - r -> r.order(-1).host("**.modifyrequestbodyssltimeout.org") - .filters(f -> f.modifyRequestBody(String.class, String.class, - MediaType.APPLICATION_JSON_VALUE, - (serverWebExchange, aVoid) -> { - byte[] largeBody = new byte[10 * 1024 * 1024]; - return Mono.just(new String(largeBody)); - })) - .uri(uri)) - .route("test_modify_request_body_exception", r -> r.order(-1) - .host("**.modifyrequestbodyexception.org") - .filters(f -> f.modifyRequestBody(String.class, String.class, - MediaType.APPLICATION_JSON_VALUE, - (serverWebExchange, body) -> { - return Mono.error( - new Exception("modify body exception")); - })) - .uri(uri)) + return builder.routes() + .route("test_modify_request_body_ssl_timeout", + r -> r.order(-1).host("**.modifyrequestbodyssltimeout.org") + .filters(f -> f.modifyRequestBody(String.class, String.class, + MediaType.APPLICATION_JSON_VALUE, (serverWebExchange, aVoid) -> { + byte[] largeBody = new byte[10 * 1024 * 1024]; + return Mono.just(new String(largeBody)); + })) + .uri(uri)) + .route("test_modify_request_body_exception", + r -> r.order(-1).host("**.modifyrequestbodyexception.org") + .filters(f -> f.modifyRequestBody(String.class, String.class, + MediaType.APPLICATION_JSON_VALUE, (serverWebExchange, body) -> { + return Mono.error(new Exception("modify body exception")); + })) + .uri(uri)) .build(); } @@ -162,11 +154,10 @@ public class ModifyRequestBodyGatewayFilterFactorySslTimeoutTests @Primary public ModifyRequestBodyGatewayFilterFactory testModifyRequestBodyGatewayFilterFactory( ServerCodecConfigurer codecConfigurer, AtomicInteger count) { - return new ModifyRequestBodyGatewayFilterFactory( - codecConfigurer.getReaders()) { + return new ModifyRequestBodyGatewayFilterFactory(codecConfigurer.getReaders()) { @Override - protected Mono release(ServerWebExchange exchange, - CachedBodyOutputMessage outputMessage, Throwable throwable) { + protected Mono release(ServerWebExchange exchange, CachedBodyOutputMessage outputMessage, + Throwable throwable) { if (outputMessage.isCached()) { count.incrementAndGet(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryTests.java index f3c5c8d5..4fd7660e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryTests.java @@ -42,8 +42,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author Junghoon Song */ @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = RANDOM_PORT, - properties = "spring.codec.max-in-memory-size=13") +@SpringBootTest(webEnvironment = RANDOM_PORT, properties = "spring.codec.max-in-memory-size=13") @DirtiesContext public class ModifyRequestBodyGatewayFilterFactoryTests extends BaseWebClientTests { @@ -51,30 +50,25 @@ public class ModifyRequestBodyGatewayFilterFactoryTests extends BaseWebClientTes public void modifyRequestBody() { testClient.post().uri("/post").header("Host", "www.modifyrequestbody.org") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE) - .body(BodyInserters.fromValue("request")).exchange().expectStatus() - .isEqualTo(HttpStatus.OK).expectBody().jsonPath("headers.Content-Type") - .isEqualTo(MediaType.APPLICATION_JSON_VALUE).jsonPath("data") - .isEqualTo("modifyrequest"); + .body(BodyInserters.fromValue("request")).exchange().expectStatus().isEqualTo(HttpStatus.OK) + .expectBody().jsonPath("headers.Content-Type").isEqualTo(MediaType.APPLICATION_JSON_VALUE) + .jsonPath("data").isEqualTo("modifyrequest"); } @Test public void upstreamRequestBodyIsEmpty() { testClient.post().uri("/post").header("Host", "www.modifyrequestbodyempty.org") - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .exchange().expectStatus().isEqualTo(HttpStatus.OK).expectBody() - .jsonPath("headers.Content-Type") - .isEqualTo(MediaType.APPLICATION_JSON_VALUE).jsonPath("data") - .isEqualTo("modifyrequest"); + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).exchange().expectStatus() + .isEqualTo(HttpStatus.OK).expectBody().jsonPath("headers.Content-Type") + .isEqualTo(MediaType.APPLICATION_JSON_VALUE).jsonPath("data").isEqualTo("modifyrequest"); } @Test public void modifyRequestBodyToLarge() { - testClient.post().uri("/post") - .header("Host", "www.modifyrequestbodyemptytolarge.org") + testClient.post().uri("/post").header("Host", "www.modifyrequestbodyemptytolarge.org") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE) .body(BodyInserters.fromValue("request")).exchange().expectStatus() - .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody() - .jsonPath("message") + .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody().jsonPath("message") .isEqualTo("Exceeded limit on max bytes to buffer : 13"); } @@ -89,33 +83,28 @@ public class ModifyRequestBodyGatewayFilterFactoryTests extends BaseWebClientTes @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route("test_modify_request_body", - r -> r.order(-1).host("**.modifyrequestbody.org") - .filters(f -> f.modifyRequestBody(String.class, String.class, - MediaType.APPLICATION_JSON_VALUE, - (serverWebExchange, aVoid) -> { - return Mono.just("modifyrequest"); - })) - .uri(uri)) - .route("test_modify_request_body_empty", r -> r.order(-1) - .host("**.modifyrequestbodyempty.org") - .filters(f -> f.modifyRequestBody(String.class, String.class, - MediaType.APPLICATION_JSON_VALUE, - (serverWebExchange, body) -> { - if (body == null) { - return Mono.just("modifyrequest"); - } - return Mono.just(body.toUpperCase()); - })) - .uri(uri)) - .route("test_modify_request_body_to_large", r -> r.order(-1) - .host("**.modifyrequestbodyemptytolarge.org") - .filters(f -> f.modifyRequestBody(String.class, String.class, - MediaType.APPLICATION_JSON_VALUE, - (serverWebExchange, body) -> { - return Mono.just( - "tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge"); - })) - .uri(uri)) + r -> r.order(-1).host("**.modifyrequestbody.org").filters(f -> f.modifyRequestBody(String.class, + String.class, MediaType.APPLICATION_JSON_VALUE, (serverWebExchange, aVoid) -> { + return Mono.just("modifyrequest"); + })).uri(uri)) + .route("test_modify_request_body_empty", + r -> r.order(-1).host("**.modifyrequestbodyempty.org") + .filters(f -> f.modifyRequestBody(String.class, String.class, + MediaType.APPLICATION_JSON_VALUE, (serverWebExchange, body) -> { + if (body == null) { + return Mono.just("modifyrequest"); + } + return Mono.just(body.toUpperCase()); + })) + .uri(uri)) + .route("test_modify_request_body_to_large", + r -> r.order(-1).host("**.modifyrequestbodyemptytolarge.org") + .filters(f -> f.modifyRequestBody(String.class, String.class, + MediaType.APPLICATION_JSON_VALUE, (serverWebExchange, body) -> { + return Mono.just( + "tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge-tolarge"); + })) + .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryUnitTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryUnitTests.java index b1cb6ddb..2a4e7bad 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryUnitTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyRequestBodyGatewayFilterFactoryUnitTests.java @@ -32,8 +32,7 @@ public class ModifyRequestBodyGatewayFilterFactoryUnitTests { config.setOutClass(Integer.class); config.setContentType("mycontenttype"); GatewayFilter filter = new ModifyRequestBodyGatewayFilterFactory().apply(config); - assertThat(filter.toString()).contains("String").contains("Integer") - .contains("mycontenttype"); + assertThat(filter.toString()).contains("String").contains("Integer").contains("mycontenttype"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryGzipTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryGzipTests.java index a779fc5b..4962b965 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryGzipTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryGzipTests.java @@ -47,12 +47,10 @@ public class ModifyResponseBodyGatewayFilterFactoryGzipTests extends BaseWebClie @Test public void testModificationOfResponseBody() { - URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/gzip").build(true) - .toUri(); + URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/gzip").build(true).toUri(); - testClient.get().uri(uri).header("Host", "www.modifyresponsebodyjava.org") - .accept(MediaType.APPLICATION_JSON).exchange().expectBody() - .json("{\"length\":25,\"value\":\"\\\"httpbin compatible home\\\"\"}"); + testClient.get().uri(uri).header("Host", "www.modifyresponsebodyjava.org").accept(MediaType.APPLICATION_JSON) + .exchange().expectBody().json("{\"length\":25,\"value\":\"\\\"httpbin compatible home\\\"\"}"); } @EnableAutoConfiguration @@ -65,18 +63,14 @@ public class ModifyResponseBodyGatewayFilterFactoryGzipTests extends BaseWebClie @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("modify_response_java_test_gzip", - r -> r.path("/gzip").and().host("www.modifyresponsebodyjava.org") - .filters(f -> f.modifyResponseBody(String.class, Map.class, - (webExchange, originalResponse) -> { - Map modifiedResponse = new HashMap<>(); - modifiedResponse.put("value", originalResponse); - modifiedResponse.put("length", - originalResponse.length()); - return Mono.just(modifiedResponse); - })) - .uri(uri)) - .build(); + return builder.routes().route("modify_response_java_test_gzip", r -> r.path("/gzip").and() + .host("www.modifyresponsebodyjava.org") + .filters(f -> f.modifyResponseBody(String.class, Map.class, (webExchange, originalResponse) -> { + Map modifiedResponse = new HashMap<>(); + modifiedResponse.put("value", originalResponse); + modifiedResponse.put("length", originalResponse.length()); + return Mono.just(modifiedResponse); + })).uri(uri)).build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryTests.java index cd48ee9c..0b71e286 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryTests.java @@ -44,8 +44,7 @@ import org.springframework.web.util.UriComponentsBuilder; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = RANDOM_PORT, - properties = "spring.codec.max-in-memory-size=40") +@SpringBootTest(webEnvironment = RANDOM_PORT, properties = "spring.codec.max-in-memory-size=40") @DirtiesContext public class ModifyResponseBodyGatewayFilterFactoryTests extends BaseWebClientTests { @@ -61,22 +60,18 @@ public class ModifyResponseBodyGatewayFilterFactoryTests extends BaseWebClientTe @Test public void testModificationOfResponseBody() { - URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/").build(true) - .toUri(); + URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/").build(true).toUri(); - testClient.get().uri(uri).header("Host", "www.modifyresponsebodyjava.org") - .accept(MediaType.APPLICATION_JSON).exchange().expectBody() - .json("{\"value\": \"httpbin compatible home\", \"length\": 23}"); + testClient.get().uri(uri).header("Host", "www.modifyresponsebodyjava.org").accept(MediaType.APPLICATION_JSON) + .exchange().expectBody().json("{\"value\": \"httpbin compatible home\", \"length\": 23}"); } @Test public void modifyResponeBodyToLarge() { - testClient.post().uri("/post") - .header("Host", "www.modifyresponsebodyjavatoolarge.org") + testClient.post().uri("/post").header("Host", "www.modifyresponsebodyjavatoolarge.org") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(BodyInserters.fromValue(toLarge)).exchange().expectStatus() - .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody() - .jsonPath("message") + .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody().jsonPath("message") .isEqualTo("Exceeded limit on max bytes to buffer : 40"); } @@ -91,25 +86,20 @@ public class ModifyResponseBodyGatewayFilterFactoryTests extends BaseWebClientTe @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes().route("modify_response_java_test", - r -> r.path("/").and().host("www.modifyresponsebodyjava.org") - .filters(f -> f.prefixPath("/httpbin").modifyResponseBody( - String.class, Map.class, - (webExchange, originalResponse) -> { - Map modifiedResponse = new HashMap<>(); - modifiedResponse.put("value", originalResponse); - modifiedResponse.put("length", - originalResponse.length()); - return Mono.just(modifiedResponse); - })) - .uri(uri)) - .route("modify_response_java_test_to_large", r -> r.path("/").and() - .host("www.modifyresponsebodyjavatoolarge.org") - .filters(f -> f.prefixPath("/httpbin").modifyResponseBody( - String.class, String.class, - (webExchange, originalResponse) -> { - return Mono.just(toLarge); - })) - .uri(uri)) + r -> r.path("/").and().host("www.modifyresponsebodyjava.org").filters(f -> f.prefixPath("/httpbin") + .modifyResponseBody(String.class, Map.class, (webExchange, originalResponse) -> { + Map modifiedResponse = new HashMap<>(); + modifiedResponse.put("value", originalResponse); + modifiedResponse.put("length", originalResponse.length()); + return Mono.just(modifiedResponse); + })).uri(uri)) + .route("modify_response_java_test_to_large", + r -> r.path("/").and().host("www.modifyresponsebodyjavatoolarge.org") + .filters(f -> f.prefixPath("/httpbin").modifyResponseBody(String.class, + String.class, (webExchange, originalResponse) -> { + return Mono.just(toLarge); + })) + .uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryUnitTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryUnitTests.java index 592d958e..722b715e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryUnitTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/rewrite/ModifyResponseBodyGatewayFilterFactoryUnitTests.java @@ -34,10 +34,8 @@ public class ModifyResponseBodyGatewayFilterFactoryUnitTests { config.setOutClass(Integer.class); config.setNewContentType("mycontenttype"); GatewayFilter filter = new ModifyResponseBodyGatewayFilterFactory( - new DefaultServerCodecConfigurer().getReaders(), emptySet(), emptySet()) - .apply(config); - assertThat(filter.toString()).contains("String").contains("Integer") - .contains("mycontenttype"); + new DefaultServerCodecConfigurer().getReaders(), emptySet(), emptySet()).apply(config); + assertThat(filter.toString()).contains("String").contains("Integer").contains("mycontenttype"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java index c7e8e9e4..096485df 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/ForwardedHeadersFilterTests.java @@ -43,8 +43,7 @@ public class ForwardedHeadersFilterTests { public static Map map(String... values) { if (values.length % 2 != 0) { - throw new IllegalArgumentException( - "values must have even number of items: " + Arrays.asList(values)); + throw new IllegalArgumentException("values must have even number of items: " + Arrays.asList(values)); } HashMap map = new HashMap<>(); for (int i = 0; i < values.length; i++) { @@ -56,125 +55,102 @@ public class ForwardedHeadersFilterTests { @Test public void forwardedHeaderDoesNotExist() throws UnknownHostException { MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) .header(HttpHeaders.HOST, "myhost").build(); ForwardedHeadersFilter filter = new ForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); assertThat(headers.get(FORWARDED_HEADER)).hasSize(1); - List forwardeds = ForwardedHeadersFilter - .parse(headers.get(FORWARDED_HEADER)); + List forwardeds = ForwardedHeadersFilter.parse(headers.get(FORWARDED_HEADER)); assertThat(forwardeds).hasSize(1); Forwarded forwarded = forwardeds.get(0); - assertThat(forwarded.getValues()).containsEntry("host", "myhost") - .containsEntry("proto", "http").containsEntry("for", "\"10.0.0.1:80\""); + assertThat(forwarded.getValues()).containsEntry("host", "myhost").containsEntry("proto", "http") + .containsEntry("for", "\"10.0.0.1:80\""); } @Test public void forwardedHeaderExists() throws UnknownHostException { MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .header(FORWARDED_HEADER, - "for=12.34.56.78;host=example.com;proto=https; for=23.45.67.89") - .build(); + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + .header(FORWARDED_HEADER, "for=12.34.56.78;host=example.com;proto=https; for=23.45.67.89").build(); ForwardedHeadersFilter filter = new ForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); assertThat(headers.get(FORWARDED_HEADER)).hasSize(2); - List forwardeds = ForwardedHeadersFilter - .parse(headers.get(FORWARDED_HEADER)); + List forwardeds = ForwardedHeadersFilter.parse(headers.get(FORWARDED_HEADER)); assertThat(forwardeds).hasSize(2); Forwarded addedForwardedHeader = forwardeds.get(0); Forwarded existingForwardedHeader = forwardeds.get(1); - assertThat(existingForwardedHeader.getValues()).containsEntry("proto", "http") - .containsEntry("for", "\"10.0.0.1:80\""); + assertThat(existingForwardedHeader.getValues()).containsEntry("proto", "http").containsEntry("for", + "\"10.0.0.1:80\""); - assertThat(addedForwardedHeader.getValues()).containsEntry("proto", "https") - .containsEntry("for", "23.45.67.89"); + assertThat(addedForwardedHeader.getValues()).containsEntry("proto", "https").containsEntry("for", + "23.45.67.89"); } @Test public void noHostHeader() throws UnknownHostException { MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .build(); + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)).build(); ForwardedHeadersFilter filter = new ForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); assertThat(headers.get(FORWARDED_HEADER)).hasSize(1); - List forwardeds = ForwardedHeadersFilter - .parse(headers.get(FORWARDED_HEADER)); + List forwardeds = ForwardedHeadersFilter.parse(headers.get(FORWARDED_HEADER)); assertThat(forwardeds).hasSize(1); Forwarded forwarded = forwardeds.get(0); - assertThat(forwarded.getValues()).containsEntry("proto", "http") - .containsEntry("for", "\"10.0.0.1:80\""); + assertThat(forwarded.getValues()).containsEntry("proto", "http").containsEntry("for", "\"10.0.0.1:80\""); } @Test public void unresolvedRemoteAddressFallsBackToHostName() throws UnknownHostException { MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get") - .remoteAddress( - InetSocketAddress.createUnresolved("unresolvable-hostname", 80)) - .build(); + .remoteAddress(InetSocketAddress.createUnresolved("unresolvable-hostname", 80)).build(); ForwardedHeadersFilter filter = new ForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); assertThat(headers.get(FORWARDED_HEADER)).hasSize(1); - List forwardeds = ForwardedHeadersFilter - .parse(headers.get(FORWARDED_HEADER)); + List forwardeds = ForwardedHeadersFilter.parse(headers.get(FORWARDED_HEADER)); assertThat(forwardeds).hasSize(1); Forwarded forwarded = forwardeds.get(0); - assertThat(forwarded.getValues()).containsEntry("proto", "http") - .containsEntry("for", "\"unresolvable-hostname:80\""); + assertThat(forwarded.getValues()).containsEntry("proto", "http").containsEntry("for", + "\"unresolvable-hostname:80\""); } @Test public void forwardedParsedCorrectly() { - String[] valid = new String[] { "for=\"_gazonk\"", - "for=192.0.2.60;proto=http;by=203.0.113.43", - "for=192.0.2.43, for=198.51.100.17", - "for=12.34.56.78;host=example.com;proto=https, for=23.45.67.89", + String[] valid = new String[] { "for=\"_gazonk\"", "for=192.0.2.60;proto=http;by=203.0.113.43", + "for=192.0.2.43, for=198.51.100.17", "for=12.34.56.78;host=example.com;proto=https, for=23.45.67.89", "for=12.34.56.78, for=23.45.67.89;secret=egah2CGj55fSJFs, for=10.1.2.3", "For=\"[2001:db8:cafe::17]:4711\"", }; List>> expectedFor = new ArrayList<>(); expectedFor.add(Arrays.asList(map("for", "\"_gazonk\""))); - expectedFor.add(Arrays - .asList(map("for", "192.0.2.60", "proto", "http", "by", "203.0.113.43"))); - expectedFor.add( - Arrays.asList(map("for", "192.0.2.43"), map("for", "198.51.100.17"))); - expectedFor.add(Arrays.asList( - map("for", "12.34.56.78", "host", "example.com", "proto", "https"), + expectedFor.add(Arrays.asList(map("for", "192.0.2.60", "proto", "http", "by", "203.0.113.43"))); + expectedFor.add(Arrays.asList(map("for", "192.0.2.43"), map("for", "198.51.100.17"))); + expectedFor.add(Arrays.asList(map("for", "12.34.56.78", "host", "example.com", "proto", "https"), map("for", "23.45.67.89"))); - expectedFor.add(Arrays.asList(map("for", "12.34.56.78"), - map("for", "23.45.67.89", "secret", "egah2CGj55fSJFs"), + expectedFor.add(Arrays.asList(map("for", "12.34.56.78"), map("for", "23.45.67.89", "secret", "egah2CGj55fSJFs"), map("for", "10.1.2.3"))); expectedFor.add(Arrays.asList(map("for", "\"[2001:db8:cafe::17]:4711\""))); @@ -194,8 +170,7 @@ public class ForwardedHeadersFilterTests { for (int j = 0; j < results.size(); j++) { Forwarded forwarded = results.get(j); - assertThat(forwarded.getValues()).hasSize(expected.get(j).size()) - .containsAllEntriesOf(expected.get(j)); + assertThat(forwarded.getValues()).hasSize(expected.get(j).size()).containsAllEntriesOf(expected.get(j)); } } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterMixedTypeTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterMixedTypeTests.java index c25a1cc6..768aff21 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterMixedTypeTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterMixedTypeTests.java @@ -37,16 +37,15 @@ public class HttpHeadersFilterMixedTypeTests { @Test public void relevantDownstreamFiltersShouldActOnHeaders() { - MockServerHttpRequest mockRequest = MockServerHttpRequest.get("/get") - .header("header1", "value1").header("header2", "value2") - .header("header3", "value3").build(); + MockServerHttpRequest mockRequest = MockServerHttpRequest.get("/get").header("header1", "value1") + .header("header2", "value2").header("header3", "value3").build(); HttpHeadersFilter filter1 = filterRemovingHeaders(Type.RESPONSE, "header1"); HttpHeadersFilter filter2 = filterRemovingHeaders(Type.REQUEST, "header2"); - HttpHeaders result = HttpHeadersFilter.filterRequest( - Arrays.asList(filter1, filter2), MockServerWebExchange.from(mockRequest)); + HttpHeaders result = HttpHeadersFilter.filterRequest(Arrays.asList(filter1, filter2), + MockServerWebExchange.from(mockRequest)); assertThat(result).containsOnlyKeys("header1", "header3"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterTests.java index dbca8b77..c8fca113 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/HttpHeadersFilterTests.java @@ -35,16 +35,13 @@ public class HttpHeadersFilterTests { @Test public void httpHeadersFilterTests() { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost:8080/get").header("X-A", "aValue") + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost:8080/get").header("X-A", "aValue") .header("X-B", "bValue").header("X-C", "cValue").build(); - List filters = Arrays.asList( - (h, e) -> HttpHeadersFilterTests.this.filter(h, "X-A"), + List filters = Arrays.asList((h, e) -> HttpHeadersFilterTests.this.filter(h, "X-A"), (h, e) -> HttpHeadersFilterTests.this.filter(h, "X-B")); - HttpHeaders headers = HttpHeadersFilter.filterRequest(filters, - MockServerWebExchange.from(request)); + HttpHeaders headers = HttpHeadersFilter.filterRequest(filters, MockServerWebExchange.from(request)); assertThat(headers).containsOnlyKeys("X-C"); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/NonStandardHeadersInResponseTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/NonStandardHeadersInResponseTests.java index 6beb91a7..b3a2997b 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/NonStandardHeadersInResponseTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/NonStandardHeadersInResponseTests.java @@ -53,12 +53,10 @@ public class NonStandardHeadersInResponseTests extends BaseWebClientTests { @Test public void nonStandardHeadersInResponse() { - URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/get-image") - .build(true).toUri(); + URI uri = UriComponentsBuilder.fromUriString(this.baseUri + "/get-image").build(true).toUri(); - String contentType = WebClient.builder().baseUrl(baseUri).build().get().uri(uri) - .exchange().map(clientResponse -> clientResponse.headers().asHttpHeaders() - .getFirst(HttpHeaders.CONTENT_TYPE)) + String contentType = WebClient.builder().baseUrl(baseUri).build().get().uri(uri).exchange() + .map(clientResponse -> clientResponse.headers().asHttpHeaders().getFirst(HttpHeaders.CONTENT_TYPE)) .block(); assertThat(contentType).isEqualTo(CONTENT_TYPE_IMAGE); @@ -84,21 +82,17 @@ public class NonStandardHeadersInResponseTests extends BaseWebClientTests { log.info("addNonStandardHeaderFilter pre phase"); return chain.filter(exchange).then(Mono.fromRunnable(() -> { log.info("addNonStandardHeaderFilter post phase"); - exchange.getResponse().getHeaders().set(HttpHeaders.CONTENT_TYPE, - CONTENT_TYPE_IMAGE); + exchange.getResponse().getHeaders().set(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE_IMAGE); })); }; } @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("non_standard_header_route", r -> r.path("/get-image/**") - .filters(f -> f.addRequestHeader(HttpHeaders.HOST, - "www.addrequestparameter.org").stripPrefix(1)) - .uri("http://localhost:" + port + "/get")) - .route("internal_route", r -> r.path("/get/**") - .filters(f -> f.prefixPath("/httpbin")).uri(uri)) + return builder.routes().route("non_standard_header_route", r -> r.path("/get-image/**") + .filters(f -> f.addRequestHeader(HttpHeaders.HOST, "www.addrequestparameter.org").stripPrefix(1)) + .uri("http://localhost:" + port + "/get")) + .route("internal_route", r -> r.path("/get/**").filters(f -> f.prefixPath("/httpbin")).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilterTests.java index f74719a9..5d98d439 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/RemoveHopByHopHeadersFilterTests.java @@ -36,30 +36,25 @@ public class RemoveHopByHopHeadersFilterTests { @Test public void happyPath() { - MockServerHttpRequest.BaseBuilder builder = MockServerHttpRequest - .get("http://localhost/get"); + MockServerHttpRequest.BaseBuilder builder = MockServerHttpRequest.get("http://localhost/get"); - HEADERS_REMOVED_ON_REQUEST - .forEach(header -> builder.header(header, header + "1")); + HEADERS_REMOVED_ON_REQUEST.forEach(header -> builder.header(header, header + "1")); testFilter(MockServerWebExchange.from(builder)); } @Test public void caseInsensitive() { - MockServerHttpRequest.BaseBuilder builder = MockServerHttpRequest - .get("http://localhost/get"); + MockServerHttpRequest.BaseBuilder builder = MockServerHttpRequest.get("http://localhost/get"); - HEADERS_REMOVED_ON_REQUEST - .forEach(header -> builder.header(header.toLowerCase(), header + "1")); + HEADERS_REMOVED_ON_REQUEST.forEach(header -> builder.header(header.toLowerCase(), header + "1")); testFilter(MockServerWebExchange.from(builder)); } @Test public void removesHeadersListedInConnectionHeader() { - MockServerHttpRequest.BaseBuilder builder = MockServerHttpRequest - .get("http://localhost/get"); + MockServerHttpRequest.BaseBuilder builder = MockServerHttpRequest.get("http://localhost/get"); builder.header(HttpHeaders.CONNECTION, "upgrade", "keep-alive"); builder.header(HttpHeaders.UPGRADE, "WebSocket"); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java index d1541e6c..b16bbe2d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/headers/XForwardedHeadersFilterTests.java @@ -45,17 +45,14 @@ public class XForwardedHeadersFilterTests { @Test public void remoteAddressIsNull() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost:8080/get").header(HttpHeaders.HOST, "myhost") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost:8080/get") + .header(HttpHeaders.HOST, "myhost").build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); - assertThat(headers).containsKeys(X_FORWARDED_HOST_HEADER, X_FORWARDED_PORT_HEADER, - X_FORWARDED_PROTO_HEADER); + assertThat(headers).containsKeys(X_FORWARDED_HOST_HEADER, X_FORWARDED_PORT_HEADER, X_FORWARDED_PROTO_HEADER); assertThat(headers.getFirst(X_FORWARDED_HOST_HEADER)).isEqualTo("localhost:8080"); assertThat(headers.getFirst(X_FORWARDED_PORT_HEADER)).isEqualTo("8080"); @@ -64,19 +61,16 @@ public class XForwardedHeadersFilterTests { @Test public void xForwardedHeadersDoNotExist() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost:8080/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost:8080/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) .header(HttpHeaders.HOST, "myhost").build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); - assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, - X_FORWARDED_PORT_HEADER, X_FORWARDED_PROTO_HEADER); + assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, X_FORWARDED_PORT_HEADER, + X_FORWARDED_PROTO_HEADER); assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)).isEqualTo("10.0.0.1"); assertThat(headers.getFirst(X_FORWARDED_HOST_HEADER)).isEqualTo("localhost:8080"); @@ -87,17 +81,15 @@ public class XForwardedHeadersFilterTests { @Test public void defaultPort() throws Exception { MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) .header(HttpHeaders.HOST, "myhost").build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); - assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, - X_FORWARDED_PORT_HEADER, X_FORWARDED_PROTO_HEADER); + assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, X_FORWARDED_PORT_HEADER, + X_FORWARDED_PROTO_HEADER); assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)).isEqualTo("10.0.0.1"); assertThat(headers.getFirst(X_FORWARDED_HOST_HEADER)).isEqualTo("localhost"); @@ -107,41 +99,30 @@ public class XForwardedHeadersFilterTests { @Test public void appendsValues() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost:8080/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .header(X_FORWARDED_FOR_HEADER, "192.168.0.2") - .header(X_FORWARDED_HOST_HEADER, "example.com") - .header(X_FORWARDED_PORT_HEADER, "443") - .header(X_FORWARDED_PROTO_HEADER, "https").build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost:8080/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + .header(X_FORWARDED_FOR_HEADER, "192.168.0.2").header(X_FORWARDED_HOST_HEADER, "example.com") + .header(X_FORWARDED_PORT_HEADER, "443").header(X_FORWARDED_PROTO_HEADER, "https").build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); - assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, - X_FORWARDED_PORT_HEADER, X_FORWARDED_PROTO_HEADER); + assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, X_FORWARDED_PORT_HEADER, + X_FORWARDED_PROTO_HEADER); - assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)) - .isEqualTo("192.168.0.2,10.0.0.1"); - assertThat(headers.getFirst(X_FORWARDED_HOST_HEADER)) - .isEqualTo("example.com,localhost:8080"); + assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)).isEqualTo("192.168.0.2,10.0.0.1"); + assertThat(headers.getFirst(X_FORWARDED_HOST_HEADER)).isEqualTo("example.com,localhost:8080"); assertThat(headers.getFirst(X_FORWARDED_PORT_HEADER)).isEqualTo("443,8080"); assertThat(headers.getFirst(X_FORWARDED_PROTO_HEADER)).isEqualTo("https,http"); } @Test public void appendDisabled() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost:8080/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .header(X_FORWARDED_FOR_HEADER, "192.168.0.2") - .header(X_FORWARDED_HOST_HEADER, "example.com") - .header(X_FORWARDED_PORT_HEADER, "443") - .header(X_FORWARDED_PROTO_HEADER, "https") + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost:8080/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + .header(X_FORWARDED_FOR_HEADER, "192.168.0.2").header(X_FORWARDED_HOST_HEADER, "example.com") + .header(X_FORWARDED_PORT_HEADER, "443").header(X_FORWARDED_PROTO_HEADER, "https") .header(X_FORWARDED_PREFIX_HEADER, "/prefix").build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); @@ -151,12 +132,10 @@ public class XForwardedHeadersFilterTests { filter.setProtoAppend(false); filter.setPrefixAppend(false); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); - assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, - X_FORWARDED_PORT_HEADER, X_FORWARDED_PROTO_HEADER, - X_FORWARDED_PREFIX_HEADER); + assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER, X_FORWARDED_HOST_HEADER, X_FORWARDED_PORT_HEADER, + X_FORWARDED_PROTO_HEADER, X_FORWARDED_PREFIX_HEADER); assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)).isEqualTo("10.0.0.1"); assertThat(headers.getFirst(X_FORWARDED_HOST_HEADER)).isEqualTo("localhost:8080"); @@ -167,11 +146,8 @@ public class XForwardedHeadersFilterTests { @Test public void prefixToInfer() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("https://originalhost:8080/prefix/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("https://originalhost:8080/prefix/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)).build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); filter.setPrefixAppend(true); @@ -179,12 +155,10 @@ public class XForwardedHeadersFilterTests { ServerWebExchange exchange = MockServerWebExchange.from(request); LinkedHashSet originalUris = new LinkedHashSet<>(); - originalUris.add(UriComponentsBuilder - .fromUriString("https://originalhost:8080/prefix/get/").build().toUri()); // trailing - // slash + originalUris.add(UriComponentsBuilder.fromUriString("https://originalhost:8080/prefix/get/").build().toUri()); // trailing + // slash exchange.getAttributes().put(GATEWAY_ORIGINAL_REQUEST_URL_ATTR, originalUris); - URI requestUri = UriComponentsBuilder - .fromUriString("https://routedservice:8090/get").build().toUri(); + URI requestUri = UriComponentsBuilder.fromUriString("https://routedservice:8090/get").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUri); HttpHeaders headers = filter.filter(request.getHeaders(), exchange); @@ -196,11 +170,8 @@ public class XForwardedHeadersFilterTests { @Test public void prefixToInferWhenEqualsResource() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("https://originalhost:8080/resource/resource/") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("https://originalhost:8080/resource/resource/") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)).build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); filter.setPrefixAppend(true); @@ -208,12 +179,11 @@ public class XForwardedHeadersFilterTests { ServerWebExchange exchange = MockServerWebExchange.from(request); LinkedHashSet originalUris = new LinkedHashSet<>(); - originalUris.add(UriComponentsBuilder - .fromUriString("https://originalhost:8080/resource/resource/").build() - .toUri()); // trailing slash + originalUris.add( + UriComponentsBuilder.fromUriString("https://originalhost:8080/resource/resource/").build().toUri()); // trailing + // slash exchange.getAttributes().put(GATEWAY_ORIGINAL_REQUEST_URL_ATTR, originalUris); - URI requestUri = UriComponentsBuilder - .fromUriString("https://routedservice:8090/resource").build().toUri(); + URI requestUri = UriComponentsBuilder.fromUriString("https://routedservice:8090/resource").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUri); HttpHeaders headers = filter.filter(request.getHeaders(), exchange); @@ -225,11 +195,8 @@ public class XForwardedHeadersFilterTests { @Test public void prefixAddedWithoutTrailingSlash() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("https://originalhost:8080/foo/bar") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("https://originalhost:8080/foo/bar") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)).build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); filter.setPrefixAppend(true); @@ -237,11 +204,9 @@ public class XForwardedHeadersFilterTests { ServerWebExchange exchange = MockServerWebExchange.from(request); LinkedHashSet originalUris = new LinkedHashSet<>(); - originalUris.add(UriComponentsBuilder - .fromUriString("https://originalhost:8080/foo/bar").build().toUri()); + originalUris.add(UriComponentsBuilder.fromUriString("https://originalhost:8080/foo/bar").build().toUri()); exchange.getAttributes().put(GATEWAY_ORIGINAL_REQUEST_URL_ATTR, originalUris); - URI requestUri = UriComponentsBuilder.fromUriString("https://routedservice:8090/") - .build().toUri(); + URI requestUri = UriComponentsBuilder.fromUriString("https://routedservice:8090/").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUri); HttpHeaders headers = filter.filter(request.getHeaders(), exchange); @@ -251,11 +216,8 @@ public class XForwardedHeadersFilterTests { @Test public void noPrefixToInfer() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("https://originalhost:8080/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("https://originalhost:8080/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)).build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); filter.setPrefixAppend(true); @@ -267,11 +229,9 @@ public class XForwardedHeadersFilterTests { ServerWebExchange exchange = MockServerWebExchange.from(request); LinkedHashSet originalUris = new LinkedHashSet<>(); - originalUris.add(UriComponentsBuilder - .fromUriString("https://originalhost:8080/get/").build().toUri()); + originalUris.add(UriComponentsBuilder.fromUriString("https://originalhost:8080/get/").build().toUri()); exchange.getAttributes().put(GATEWAY_ORIGINAL_REQUEST_URL_ATTR, originalUris); - URI requestUri = UriComponentsBuilder - .fromUriString("https://routedservice:8090/get").build().toUri(); + URI requestUri = UriComponentsBuilder.fromUriString("https://routedservice:8090/get").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUri); HttpHeaders headers = filter.filter(request.getHeaders(), exchange); @@ -281,11 +241,8 @@ public class XForwardedHeadersFilterTests { @Test public void routedPathInRequestPathButNotPrefix() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("https://originalhost:8080/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("https://originalhost:8080/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)).build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); filter.setPrefixAppend(true); @@ -297,12 +254,9 @@ public class XForwardedHeadersFilterTests { ServerWebExchange exchange = MockServerWebExchange.from(request); LinkedHashSet originalUris = new LinkedHashSet<>(); - originalUris.add(UriComponentsBuilder - .fromUriString("https://originalhost:8080/one/two/three").build() - .toUri()); + originalUris.add(UriComponentsBuilder.fromUriString("https://originalhost:8080/one/two/three").build().toUri()); exchange.getAttributes().put(GATEWAY_ORIGINAL_REQUEST_URL_ATTR, originalUris); - URI requestUri = UriComponentsBuilder - .fromUriString("https://routedservice:8090/two").build().toUri(); + URI requestUri = UriComponentsBuilder.fromUriString("https://routedservice:8090/two").build().toUri(); exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUri); HttpHeaders headers = filter.filter(request.getHeaders(), exchange); @@ -312,11 +266,8 @@ public class XForwardedHeadersFilterTests { @Test public void allDisabled() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost:8080/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost:8080/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)).build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); filter.setForEnabled(false); @@ -325,29 +276,24 @@ public class XForwardedHeadersFilterTests { filter.setProtoEnabled(false); filter.setPrefixEnabled(false); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); assertThat(headers).isEmpty(); } @Test public void allowDuplicateEntriesInXForwardedForHeader() throws Exception { - MockServerHttpRequest request = MockServerHttpRequest - .get("http://localhost:8080/get") - .remoteAddress( - new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) + MockServerHttpRequest request = MockServerHttpRequest.get("http://localhost:8080/get") + .remoteAddress(new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80)) .header(X_FORWARDED_FOR_HEADER, "10.0.0.1").build(); XForwardedHeadersFilter filter = new XForwardedHeadersFilter(); - HttpHeaders headers = filter.filter(request.getHeaders(), - MockServerWebExchange.from(request)); + HttpHeaders headers = filter.filter(request.getHeaders(), MockServerWebExchange.from(request)); assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER); - assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)) - .isEqualTo("10.0.0.1,10.0.0.1"); + assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER)).isEqualTo("10.0.0.1,10.0.0.1"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverIntegrationTests.java index 2e0f78a5..50a09964 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverIntegrationTests.java @@ -67,8 +67,7 @@ public class PrincipalNameKeyResolverIntegrationTests { @BeforeClass public static void beforeClass() { - System.setProperty("server.port", - String.valueOf(SocketUtils.findAvailableTcpPort())); + System.setProperty("server.port", String.valueOf(SocketUtils.findAvailableTcpPort())); } @AfterClass @@ -84,9 +83,8 @@ public class PrincipalNameKeyResolverIntegrationTests { @Test public void keyResolverWorks() { - this.client.mutate().filter(basicAuthentication("user", "password")).build().get() - .uri("/myapi/1").exchange().expectStatus().isOk().expectBody() - .json("{\"user\":\"1\"}"); + this.client.mutate().filter(basicAuthentication("user", "password")).build().get().uri("/myapi/1").exchange() + .expectStatus().isOk().expectBody().json("{\"user\":\"1\"}"); } @RestController @@ -105,11 +103,11 @@ public class PrincipalNameKeyResolverIntegrationTests { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route(r -> r.path("/myapi/**") - .filters(f -> f - .requestRateLimiter(c -> c.setRateLimiter(myRateLimiter())) - .prefixPath("/downstream")) - .uri("http://localhost:" + port)).build(); + return builder.routes() + .route(r -> r.path("/myapi/**").filters( + f -> f.requestRateLimiter(c -> c.setRateLimiter(myRateLimiter())).prefixPath("/downstream")) + .uri("http://localhost:" + port)) + .build(); } @Bean @@ -120,14 +118,13 @@ public class PrincipalNameKeyResolverIntegrationTests { @Bean SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) { - return http.httpBasic().and().authorizeExchange().pathMatchers("/myapi/**") - .authenticated().anyExchange().permitAll().and().build(); + return http.httpBasic().and().authorizeExchange().pathMatchers("/myapi/**").authenticated().anyExchange() + .permitAll().and().build(); } @Bean public MapReactiveUserDetailsService reactiveUserDetailsService() { - UserDetails user = User.withUsername("user").password("{noop}password") - .roles("USER").build(); + UserDetails user = User.withUsername("user").password("{noop}password").roles("USER").build(); return new MapReactiveUserDetailsService(user); } @@ -137,8 +134,7 @@ public class PrincipalNameKeyResolverIntegrationTests { @Override public Mono isAllowed(String routeId, String id) { - return Mono.just(new RateLimiter.Response(true, - Collections.singletonMap("X-Value", "5000000"))); + return Mono.just(new RateLimiter.Response(true, Collections.singletonMap("X-Value", "5000000"))); } @Override diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverTests.java index 581073fa..c2656749 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/PrincipalNameKeyResolverTests.java @@ -35,8 +35,7 @@ public class PrincipalNameKeyResolverTests { PrincipalNameKeyResolver keyResolver = new PrincipalNameKeyResolver(); ServerWebExchange exchange = mock(ServerWebExchange.class); when(exchange.getPrincipal()).thenReturn(Mono.just(mock(Principal.class))); - StepVerifier.create(keyResolver.resolve(exchange)).expectComplete() - .verify(Duration.ofSeconds(5)); + StepVerifier.create(keyResolver.resolve(exchange)).expectComplete().verify(Duration.ofSeconds(5)); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java index 9e01c810..7fe96f74 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterConfigTests.java @@ -75,8 +75,8 @@ public class RedisRateLimiterConfigTests { assertFilter("alt_custom_redis_rate_limiter", 30, 60, 20, true); } - private void assertFilter(String key, int replenishRate, int burstCapacity, - int requestedTokens, boolean useDefaultConfig) { + private void assertFilter(String key, int replenishRate, int burstCapacity, int requestedTokens, + boolean useDefaultConfig) { RedisRateLimiter.Config config; if (useDefaultConfig) { @@ -91,8 +91,7 @@ public class RedisRateLimiterConfigTests { assertThat(config.getBurstCapacity()).isEqualTo(burstCapacity); assertThat(config.getRequestedTokens()).isEqualTo(requestedTokens); - Route route = routeLocator.getRoutes().filter(r -> r.getId().equals(key)).next() - .block(); + Route route = routeLocator.getRoutes().filter(r -> r.getId().equals(key)).next().block(); assertThat(route).isNotNull(); assertThat(route.getFilters()).hasSize(1); } @@ -103,16 +102,15 @@ public class RedisRateLimiterConfigTests { @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("custom_redis_rate_limiter", - r -> r.path("/custom").filters(f -> f.requestRateLimiter() + return builder.routes().route("custom_redis_rate_limiter", r -> r.path("/custom") + .filters(f -> f.requestRateLimiter() .rateLimiter(RedisRateLimiter.class, - rl -> rl.setBurstCapacity(40).setReplenishRate(20) - .setRequestedTokens(10)) - .and()).uri("http://localhost")) + rl -> rl.setBurstCapacity(40).setReplenishRate(20).setRequestedTokens(10)) + .and()) + .uri("http://localhost")) .route("alt_custom_redis_rate_limiter", r -> r.path("/custom") - .filters(f -> f.requestRateLimiter( - c -> c.setRateLimiter(myRateLimiter()))) + .filters(f -> f.requestRateLimiter(c -> c.setRateLimiter(myRateLimiter()))) .uri("http://localhost")) .build(); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterDefaultFilterConfigTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterDefaultFilterConfigTests.java index aef7fb03..4c5c864b 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterDefaultFilterConfigTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterDefaultFilterConfigTests.java @@ -61,15 +61,14 @@ public class RedisRateLimiterDefaultFilterConfigTests { assertConfigAndRoute(routeId, 70, 80, 10, config); } - private void assertConfigAndRoute(String key, int replenishRate, int burstCapacity, - int requestedTokens, RedisRateLimiter.Config config) { + private void assertConfigAndRoute(String key, int replenishRate, int burstCapacity, int requestedTokens, + RedisRateLimiter.Config config) { assertThat(config).isNotNull(); assertThat(config.getReplenishRate()).isEqualTo(replenishRate); assertThat(config.getBurstCapacity()).isEqualTo(burstCapacity); assertThat(config.getRequestedTokens()).isEqualTo(requestedTokens); - Route route = routeLocator.getRoutes().filter(r -> r.getId().equals(key)).next() - .block(); + Route route = routeLocator.getRoutes().filter(r -> r.getId().equals(key)).next().block(); assertThat(route).isNotNull(); assertThat(route.getFilters()).isNotEmpty(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java index 4a510c99..0876c3ed 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java @@ -55,8 +55,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen public class RedisRateLimiterTests extends BaseWebClientTests { @Container - public GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine") - .withExposedPorts(6379); + public GenericContainer redis = new GenericContainer<>("redis:5.0.9-alpine").withExposedPorts(6379); @Autowired private RedisRateLimiter rateLimiter; @@ -80,10 +79,8 @@ public class RedisRateLimiterTests extends BaseWebClientTests { int requestedTokens = 1; String routeId = "myroute"; - rateLimiter.getConfig().put(routeId, - new RedisRateLimiter.Config().setBurstCapacity(burstCapacity) - .setReplenishRate(replenishRate) - .setRequestedTokens(requestedTokens)); + rateLimiter.getConfig().put(routeId, new RedisRateLimiter.Config().setBurstCapacity(burstCapacity) + .setReplenishRate(replenishRate).setRequestedTokens(requestedTokens)); checkLimitEnforced(id, replenishRate, burstCapacity, requestedTokens, routeId); } @@ -97,10 +94,8 @@ public class RedisRateLimiterTests extends BaseWebClientTests { int requestedTokens = 3; String routeId = "low_rate_route"; - rateLimiter.getConfig().put(routeId, - new RedisRateLimiter.Config().setBurstCapacity(burstCapacity) - .setReplenishRate(replenishRate) - .setRequestedTokens(requestedTokens)); + rateLimiter.getConfig().put(routeId, new RedisRateLimiter.Config().setBurstCapacity(burstCapacity) + .setReplenishRate(replenishRate).setRequestedTokens(requestedTokens)); checkLimitEnforced(id, replenishRate, burstCapacity, requestedTokens, routeId); } @@ -114,10 +109,8 @@ public class RedisRateLimiterTests extends BaseWebClientTests { int requestedTokens = 1; String routeId = "zero_burst_capacity_route"; - rateLimiter.getConfig().put(routeId, - new RedisRateLimiter.Config().setBurstCapacity(burstCapacity) - .setReplenishRate(replenishRate) - .setRequestedTokens(requestedTokens)); + rateLimiter.getConfig().put(routeId, new RedisRateLimiter.Config().setBurstCapacity(burstCapacity) + .setReplenishRate(replenishRate).setRequestedTokens(requestedTokens)); Response response = rateLimiter.isAllowed(routeId, id).block(); assertThat(response.isAllowed()).isFalse(); @@ -125,8 +118,8 @@ public class RedisRateLimiterTests extends BaseWebClientTests { @Test public void keysUseRedisKeyHashTags() { - assertThat(RedisRateLimiter.getKeys("1")).containsExactly( - "request_rate_limiter.{1}.tokens", "request_rate_limiter.{1}.timestamp"); + assertThat(RedisRateLimiter.getKeys("1")).containsExactly("request_rate_limiter.{1}.tokens", + "request_rate_limiter.{1}.timestamp"); } @Test @@ -138,18 +131,14 @@ public class RedisRateLimiterTests extends BaseWebClientTests { Response response = rateLimiter.isAllowed(routeId, id).block(); assertThat(response.isAllowed()).isTrue(); - assertThat(response.getHeaders()) - .doesNotContainKey(RedisRateLimiter.REMAINING_HEADER); - assertThat(response.getHeaders()) - .doesNotContainKey(RedisRateLimiter.REPLENISH_RATE_HEADER); - assertThat(response.getHeaders()) - .doesNotContainKey(RedisRateLimiter.BURST_CAPACITY_HEADER); - assertThat(response.getHeaders()) - .doesNotContainKey(RedisRateLimiter.REQUESTED_TOKENS_HEADER); + assertThat(response.getHeaders()).doesNotContainKey(RedisRateLimiter.REMAINING_HEADER); + assertThat(response.getHeaders()).doesNotContainKey(RedisRateLimiter.REPLENISH_RATE_HEADER); + assertThat(response.getHeaders()).doesNotContainKey(RedisRateLimiter.BURST_CAPACITY_HEADER); + assertThat(response.getHeaders()).doesNotContainKey(RedisRateLimiter.REQUESTED_TOKENS_HEADER); } - private void checkLimitEnforced(String id, int replenishRate, int burstCapacity, - int requestedTokens, String routeId) throws InterruptedException { + private void checkLimitEnforced(String id, int replenishRate, int burstCapacity, int requestedTokens, + String routeId) throws InterruptedException { // Bursts work simulateBurst(id, replenishRate, burstCapacity, requestedTokens, routeId); @@ -161,21 +150,16 @@ public class RedisRateLimiterTests extends BaseWebClientTests { checkSteadyState(id, replenishRate, routeId); } - private void simulateBurst(String id, int replenishRate, int burstCapacity, - int requestedTokens, String routeId) { + private void simulateBurst(String id, int replenishRate, int burstCapacity, int requestedTokens, String routeId) { for (int i = 0; i < burstCapacity / requestedTokens; i++) { Response response = rateLimiter.isAllowed(routeId, id).block(); assertThat(response.isAllowed()).as("Burst # %s is allowed", i).isTrue(); - assertThat(response.getHeaders()) - .containsKey(RedisRateLimiter.REMAINING_HEADER); - assertThat(response.getHeaders()).containsEntry( - RedisRateLimiter.REPLENISH_RATE_HEADER, + assertThat(response.getHeaders()).containsKey(RedisRateLimiter.REMAINING_HEADER); + assertThat(response.getHeaders()).containsEntry(RedisRateLimiter.REPLENISH_RATE_HEADER, String.valueOf(replenishRate)); - assertThat(response.getHeaders()).containsEntry( - RedisRateLimiter.BURST_CAPACITY_HEADER, + assertThat(response.getHeaders()).containsEntry(RedisRateLimiter.BURST_CAPACITY_HEADER, String.valueOf(burstCapacity)); - assertThat(response.getHeaders()).containsEntry( - RedisRateLimiter.REQUESTED_TOKENS_HEADER, + assertThat(response.getHeaders()).containsEntry(RedisRateLimiter.REQUESTED_TOKENS_HEADER, String.valueOf(requestedTokens)); } } @@ -185,21 +169,18 @@ public class RedisRateLimiterTests extends BaseWebClientTests { if (response.isAllowed()) { // TODO: sometimes there is an off by one error response = rateLimiter.isAllowed(routeId, id).block(); } - assertThat(response.isAllowed()).as("Burst # %s is not allowed", burstCapacity) - .isFalse(); + assertThat(response.isAllowed()).as("Burst # %s is not allowed", burstCapacity).isFalse(); } private void checkSteadyState(String id, int replenishRate, String routeId) { Response response; for (int i = 0; i < replenishRate; i++) { response = rateLimiter.isAllowed(routeId, id).block(); - assertThat(response.isAllowed()).as("steady state # %s is allowed", i) - .isTrue(); + assertThat(response.isAllowed()).as("steady state # %s is allowed", i).isTrue(); } response = rateLimiter.isAllowed(routeId, id).block(); - assertThat(response.isAllowed()).as("steady state # %s is allowed", replenishRate) - .isFalse(); + assertThat(response.isAllowed()).as("steady state # %s is allowed", replenishRate).isFalse(); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterUnitTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterUnitTests.java index 4e5a76b4..0deeddca 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterUnitTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterUnitTests.java @@ -52,8 +52,7 @@ public class RedisRateLimiterUnitTests { public static final String[] CONFIGURATION_SERVICE_BEANS = new String[0]; - public static final RedisException REDIS_EXCEPTION = new RedisException( - "Mocked problem"); + public static final RedisException REDIS_EXCEPTION = new RedisException("Mocked problem"); @Mock private ApplicationContext applicationContext; @@ -65,12 +64,10 @@ public class RedisRateLimiterUnitTests { @Before public void setUp() { - when(applicationContext.getBean(ReactiveStringRedisTemplate.class)) - .thenReturn(redisTemplate); + when(applicationContext.getBean(ReactiveStringRedisTemplate.class)).thenReturn(redisTemplate); when(applicationContext.getBeanNamesForType(ConfigurationService.class)) .thenReturn(CONFIGURATION_SERVICE_BEANS); - redisRateLimiter = new RedisRateLimiter(DEFAULT_REPLENISH_RATE, - DEFAULT_BURST_CAPACITY); + redisRateLimiter = new RedisRateLimiter(DEFAULT_REPLENISH_RATE, DEFAULT_BURST_CAPACITY); } @After @@ -85,28 +82,20 @@ public class RedisRateLimiterUnitTests { @Test public void shouldAllowRequestWhenRedisIssueOccurs() { - when(redisTemplate.execute(any(), anyList(), anyList())) - .thenThrow(REDIS_EXCEPTION); + when(redisTemplate.execute(any(), anyList(), anyList())).thenThrow(REDIS_EXCEPTION); redisRateLimiter.setApplicationContext(applicationContext); - Mono response = redisRateLimiter.isAllowed(ROUTE_ID, - REQUEST_ID); - assertThat(response.block()).extracting(RateLimiter.Response::isAllowed) - .isEqualTo(true); + Mono response = redisRateLimiter.isAllowed(ROUTE_ID, REQUEST_ID); + assertThat(response.block()).extracting(RateLimiter.Response::isAllowed).isEqualTo(true); } @Test public void shouldReturnHeadersWhenRedisIssueOccurs() { - when(redisTemplate.execute(any(), anyList(), anyList())) - .thenThrow(REDIS_EXCEPTION); + when(redisTemplate.execute(any(), anyList(), anyList())).thenThrow(REDIS_EXCEPTION); redisRateLimiter.setApplicationContext(applicationContext); - Mono response = redisRateLimiter.isAllowed(ROUTE_ID, - REQUEST_ID); - assertThat(response.block().getHeaders()).containsOnly( - entry(redisRateLimiter.getRemainingHeader(), "-1"), - entry(redisRateLimiter.getBurstCapacityHeader(), - DEFAULT_BURST_CAPACITY + ""), - entry(redisRateLimiter.getReplenishRateHeader(), - DEFAULT_REPLENISH_RATE + ""), + Mono response = redisRateLimiter.isAllowed(ROUTE_ID, REQUEST_ID); + assertThat(response.block().getHeaders()).containsOnly(entry(redisRateLimiter.getRemainingHeader(), "-1"), + entry(redisRateLimiter.getBurstCapacityHeader(), DEFAULT_BURST_CAPACITY + ""), + entry(redisRateLimiter.getReplenishRateHeader(), DEFAULT_REPLENISH_RATE + ""), entry(redisRateLimiter.getRequestedTokensHeader(), "1")); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java index 1627bc5a..eef41bd3 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingIntegrationTests.java @@ -40,8 +40,7 @@ import org.springframework.web.bind.annotation.RestController; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = RANDOM_PORT, - properties = "management.server.port=${test.port}") +@SpringBootTest(webEnvironment = RANDOM_PORT, properties = "management.server.port=${test.port}") @DirtiesContext public class RoutePredicateHandlerMappingIntegrationTests extends BaseWebClientTests { @@ -60,20 +59,19 @@ public class RoutePredicateHandlerMappingIntegrationTests extends BaseWebClientT @Test public void requestsToManagementPortReturn404() { - testClient.mutate().baseUrl("http://localhost:" + managementPort).build().get() - .uri("/get").exchange().expectStatus().isNotFound(); + testClient.mutate().baseUrl("http://localhost:" + managementPort).build().get().uri("/get").exchange() + .expectStatus().isNotFound(); } @Test public void andNotWorksWithMissingParameter() { - testClient.get().uri("/andnotquery").exchange().expectBody(String.class) - .isEqualTo("notsupplied"); + testClient.get().uri("/andnotquery").exchange().expectBody(String.class).isEqualTo("notsupplied"); } @Test public void andNotWorksWithParameter() { - testClient.get().uri("/andnotquery?myquery=shouldnotsee").exchange() - .expectBody(String.class).isEqualTo("hasquery"); + testClient.get().uri("/andnotquery?myquery=shouldnotsee").exchange().expectBody(String.class) + .isEqualTo("hasquery"); } @EnableAutoConfiguration @@ -86,8 +84,7 @@ public class RoutePredicateHandlerMappingIntegrationTests extends BaseWebClientT String uri; @GetMapping("/httpbin/andnotquery") - String andnotquery(@RequestParam(name = "myquery", - defaultValue = "notsupplied") String myquery) { + String andnotquery(@RequestParam(name = "myquery", defaultValue = "notsupplied") String myquery) { return myquery; } @@ -102,10 +99,8 @@ public class RoutePredicateHandlerMappingIntegrationTests extends BaseWebClientT .route("and_not_missing_myquery", r -> r.path("/andnotquery").and().not(p -> p.query("myquery")) .filters(f -> f.prefixPath("/httpbin")).uri(uri)) - .route("and_not_has_myquery", - r -> r.path("/andnotquery").and().query("myquery") - .filters(f -> f.setPath("/httpbin/hasquery")) - .uri(uri)) + .route("and_not_has_myquery", r -> r.path("/andnotquery").and().query("myquery") + .filters(f -> f.setPath("/httpbin/hasquery")).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingSameManagementPortIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingSameManagementPortIntegrationTests.java index 24f894f1..6b51b612 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingSameManagementPortIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingSameManagementPortIntegrationTests.java @@ -35,8 +35,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = DEFINED_PORT) @DirtiesContext -public class RoutePredicateHandlerMappingSameManagementPortIntegrationTests - extends BaseWebClientTests { +public class RoutePredicateHandlerMappingSameManagementPortIntegrationTests extends BaseWebClientTests { private static int samePort; @@ -55,8 +54,8 @@ public class RoutePredicateHandlerMappingSameManagementPortIntegrationTests @Test public void requestsToGatewaySucceed() { - testClient.mutate().baseUrl("http://localhost:" + samePort).build().get() - .uri("/get").exchange().expectStatus().isOk(); + testClient.mutate().baseUrl("http://localhost:" + samePort).build().get().uri("/get").exchange().expectStatus() + .isOk(); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingTests.java index 229384f1..6d533e36 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMappingTests.java @@ -42,27 +42,20 @@ public class RoutePredicateHandlerMappingTests { @Test public void lookupRouteFromSyncPredicates() { - Route routeFalse = Route.async().id("routeFalse").uri("http://localhost") - .predicate(swe -> false).build(); - Route routeFail = Route.async().id("routeFail").uri("http://localhost") - .predicate(swe -> { - throw new IllegalStateException("boom"); - }).build(); - Route routeTrue = Route.async().id("routeTrue").uri("http://localhost") - .predicate(swe -> true).build(); - RouteLocator routeLocator = () -> Flux.just(routeFalse, routeFail, routeTrue) - .hide(); - RoutePredicateHandlerMapping mapping = new RoutePredicateHandlerMapping(null, - routeLocator, new GlobalCorsProperties(), new MockEnvironment()); + Route routeFalse = Route.async().id("routeFalse").uri("http://localhost").predicate(swe -> false).build(); + Route routeFail = Route.async().id("routeFail").uri("http://localhost").predicate(swe -> { + throw new IllegalStateException("boom"); + }).build(); + Route routeTrue = Route.async().id("routeTrue").uri("http://localhost").predicate(swe -> true).build(); + RouteLocator routeLocator = () -> Flux.just(routeFalse, routeFail, routeTrue).hide(); + RoutePredicateHandlerMapping mapping = new RoutePredicateHandlerMapping(null, routeLocator, + new GlobalCorsProperties(), new MockEnvironment()); - final Mono routeMono = mapping - .lookupRoute(Mockito.mock(ServerWebExchange.class)); + final Mono routeMono = mapping.lookupRoute(Mockito.mock(ServerWebExchange.class)); - StepVerifier.create(routeMono.map(Route::getId)).expectNext("routeTrue") - .verifyComplete(); + StepVerifier.create(routeMono.map(Route::getId)).expectNext("routeTrue").verifyComplete(); - outputCapture - .expect(containsString("Error applying predicate for route: routeFail")); + outputCapture.expect(containsString("Error applying predicate for route: routeFail")); outputCapture.expect(containsString("java.lang.IllegalStateException: boom")); } @@ -71,31 +64,24 @@ public class RoutePredicateHandlerMappingTests { Route routeFalse = Route.async().id("routeFalse").uri("http://localhost") .asyncPredicate(swe -> Mono.just(false)).build(); Route routeError = Route.async().id("routeError").uri("http://localhost") - .asyncPredicate(swe -> Mono.error(new IllegalStateException("boom1"))) + .asyncPredicate(swe -> Mono.error(new IllegalStateException("boom1"))).build(); + Route routeFail = Route.async().id("routeFail").uri("http://localhost").asyncPredicate(swe -> { + throw new IllegalStateException("boom2"); + }).build(); + Route routeTrue = Route.async().id("routeTrue").uri("http://localhost").asyncPredicate(swe -> Mono.just(true)) .build(); - Route routeFail = Route.async().id("routeFail").uri("http://localhost") - .asyncPredicate(swe -> { - throw new IllegalStateException("boom2"); - }).build(); - Route routeTrue = Route.async().id("routeTrue").uri("http://localhost") - .asyncPredicate(swe -> Mono.just(true)).build(); - RouteLocator routeLocator = () -> Flux - .just(routeFalse, routeError, routeFail, routeTrue).hide(); - RoutePredicateHandlerMapping mapping = new RoutePredicateHandlerMapping(null, - routeLocator, new GlobalCorsProperties(), new MockEnvironment()); + RouteLocator routeLocator = () -> Flux.just(routeFalse, routeError, routeFail, routeTrue).hide(); + RoutePredicateHandlerMapping mapping = new RoutePredicateHandlerMapping(null, routeLocator, + new GlobalCorsProperties(), new MockEnvironment()); - final Mono routeMono = mapping - .lookupRoute(Mockito.mock(ServerWebExchange.class)); + final Mono routeMono = mapping.lookupRoute(Mockito.mock(ServerWebExchange.class)); - StepVerifier.create(routeMono.map(Route::getId)).expectNext("routeTrue") - .verifyComplete(); + StepVerifier.create(routeMono.map(Route::getId)).expectNext("routeTrue").verifyComplete(); - outputCapture - .expect(containsString("Error applying predicate for route: routeError")); + outputCapture.expect(containsString("Error applying predicate for route: routeError")); outputCapture.expect(containsString("java.lang.IllegalStateException: boom1")); - outputCapture - .expect(containsString("Error applying predicate for route: routeFail")); + outputCapture.expect(containsString("Error applying predicate for route: routeFail")); outputCapture.expect(containsString("java.lang.IllegalStateException: boom2")); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactoryTests.java index 22f2cbad..1054272d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateFactoryTests.java @@ -76,8 +76,7 @@ public class AfterRoutePredicateFactoryTests { @Test public void testPredicates() { - boolean result = new AfterRoutePredicateFactory() - .apply(c -> c.setDatetime(ZonedDateTime.now().minusHours(2))) + boolean result = new AfterRoutePredicateFactory().apply(c -> c.setDatetime(ZonedDateTime.now().minusHours(2))) .test(getExchange()); assertThat(result).isTrue(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java index ff40eac5..a02959e9 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BeforeRoutePredicateFactoryTests.java @@ -74,8 +74,7 @@ public class BeforeRoutePredicateFactoryTests { @Test public void testPredicates() { - boolean result = new BeforeRoutePredicateFactory() - .apply(c -> c.setDatetime(ZonedDateTime.now().minusHours(2))) + boolean result = new BeforeRoutePredicateFactory().apply(c -> c.setDatetime(ZonedDateTime.now().minusHours(2))) .test(getExchange()); assertThat(result).isFalse(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryIntegrationTests.java index b2a2aece..bb35cbc9 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryIntegrationTests.java @@ -44,19 +44,15 @@ public class BetweenRoutePredicateFactoryIntegrationTests extends BaseWebClientT @Test public void betweenPredicateWithValidDates() { - testClient.get().uri("/get").header(HttpHeaders.HOST, "www.betweenvalid.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) + testClient.get().uri("/get").header(HttpHeaders.HOST, "www.betweenvalid.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()) .expectHeader().valueEquals(ROUTE_ID_HEADER, "test_between_valid"); } @Test public void notBetweenPredicateWorks() { - testClient.get().uri("/get").header(HttpHeaders.HOST, "www.notbetween.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) + testClient.get().uri("/get").header(HttpHeaders.HOST, "www.notbetween.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()) // should NOT be not_between_test because Between dates are in the past .expectHeader().valueEquals(ROUTE_ID_HEADER, "default_path_to_httpbin"); } @@ -74,8 +70,7 @@ public class BetweenRoutePredicateFactoryIntegrationTests extends BaseWebClientT return builder.routes() .route("test_between_valid", r -> r.host("**.betweenvalid.org").and() - .between(ZonedDateTime.now().minusDays(1), - ZonedDateTime.now().plusDays(1)) + .between(ZonedDateTime.now().minusDays(1), ZonedDateTime.now().plusDays(1)) .filters(f -> f.prefixPath("/httpbin")).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java index 1043562f..633e8e07 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/BetweenRoutePredicateFactoryTests.java @@ -39,8 +39,7 @@ import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePr */ public class BetweenRoutePredicateFactoryTests { - static T bindConfig(HashMap properties, - AbstractRoutePredicateFactory factory) { + static T bindConfig(HashMap properties, AbstractRoutePredicateFactory factory) { ApplicationConversionService conversionService = new ApplicationConversionService(); conversionService.addConverter(new StringToZonedDateTimeConverter()); // @formatter:off @@ -64,18 +63,15 @@ public class BetweenRoutePredicateFactoryTests { } static String minusHours(int hours) { - return ZonedDateTime.now().minusHours(hours) - .format(DateTimeFormatter.ISO_ZONED_DATE_TIME); + return ZonedDateTime.now().minusHours(hours).format(DateTimeFormatter.ISO_ZONED_DATE_TIME); } static String plusHours(int hours) { - return ZonedDateTime.now().plusHours(hours) - .format(DateTimeFormatter.ISO_ZONED_DATE_TIME); + return ZonedDateTime.now().plusHours(hours).format(DateTimeFormatter.ISO_ZONED_DATE_TIME); } static ServerWebExchange getExchange() { - MockServerHttpRequest request = MockServerHttpRequest.get("https://example.com") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("https://example.com").build(); return MockServerWebExchange.from(request); } @@ -98,8 +94,7 @@ public class BetweenRoutePredicateFactoryTests { final boolean result = runPredicate(dateString1, dateString2); - assertThat(result).as("Now is not between %s and %s", dateString1, dateString2) - .isTrue(); + assertThat(result).as("Now is not between %s and %s", dateString1, dateString2).isTrue(); } @Test @@ -129,8 +124,7 @@ public class BetweenRoutePredicateFactoryTests { final boolean result = runPredicate(dateString1, dateString2); - assertThat(result).as("Now is not between %s and %s", dateString1, dateString2) - .isTrue(); + assertThat(result).as("Now is not between %s and %s", dateString1, dateString2).isTrue(); } @Test @@ -145,9 +139,8 @@ public class BetweenRoutePredicateFactoryTests { @Test public void testPredicates() { - boolean result = new BetweenRoutePredicateFactory() - .apply(c -> c.setDatetime1(ZonedDateTime.now().minusHours(2)) - .setDatetime2(ZonedDateTime.now().plusHours(1))) + boolean result = new BetweenRoutePredicateFactory().apply( + c -> c.setDatetime1(ZonedDateTime.now().minusHours(2)).setDatetime2(ZonedDateTime.now().plusHours(1))) .test(getExchange()); assertThat(result).isTrue(); } @@ -170,8 +163,8 @@ public class BetweenRoutePredicateFactoryTests { config.setDatetime1(ZonedDateTime.now()); config.setDatetime2(ZonedDateTime.now().plusHours(1)); Predicate predicate = new BetweenRoutePredicateFactory().apply(config); - assertThat(predicate.toString()).contains( - "Between: " + config.getDatetime1() + " and " + config.getDatetime2()); + assertThat(predicate.toString()) + .contains("Between: " + config.getDatetime1() + " and " + config.getDatetime2()); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests.java index 8e711eee..ca6968b3 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests.java @@ -41,8 +41,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @DirtiesContext -public class CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests - extends BaseWebClientTests { +public class CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests extends BaseWebClientTests { @LocalServerPort int port; @@ -50,32 +49,25 @@ public class CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests @Test public void predicateWorkWithProperties() { testClient.get().uri("/").header("Host", "props.routeservice.example.com") - .header("X-CF-Forwarded-Url", - "http://localhost:" + port + "/actuator/health") - .header("X-CF-Proxy-Signature", "foo") - .header("X-CF-Proxy-Metadata", "bar").exchange() - .expectBody(JsonNode.class) - .consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); + .header("X-CF-Forwarded-Url", "http://localhost:" + port + "/actuator/health") + .header("X-CF-Proxy-Signature", "foo").header("X-CF-Proxy-Metadata", "bar").exchange() + .expectBody(JsonNode.class).consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); } @Test public void predicateWillNotWorkUnlessHeadersAreEnough() { testClient.get().uri("/").header("Host", "props.routeservice.example.com") - .header("X-CF-Forwarded-Url", - "http://localhost:" + port + "/actuator/health") - .header("X-CF-Proxy-Metadata", "bar").exchange().expectStatus().isOk() - .expectHeader().valueEquals(ROUTE_ID_HEADER, "default_path_to_httpbin"); + .header("X-CF-Forwarded-Url", "http://localhost:" + port + "/actuator/health") + .header("X-CF-Proxy-Metadata", "bar").exchange().expectStatus().isOk().expectHeader() + .valueEquals(ROUTE_ID_HEADER, "default_path_to_httpbin"); } @Test public void predicateWorkWithDsl() { testClient.get().uri("/").header("Host", "dsl.routeservice.example.com") - .header("X-CF-Forwarded-Url", - "http://localhost:" + port + "/actuator/health") - .header("X-CF-Proxy-Signature", "foo") - .header("X-CF-Proxy-Metadata", "bar").exchange() - .expectBody(JsonNode.class) - .consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); + .header("X-CF-Forwarded-Url", "http://localhost:" + port + "/actuator/health") + .header("X-CF-Proxy-Signature", "foo").header("X-CF-Proxy-Metadata", "bar").exchange() + .expectBody(JsonNode.class).consumeWith(r -> assertThat(r.getResponseBody().has("status")).isTrue()); } @EnableAutoConfiguration @@ -85,10 +77,10 @@ public class CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { - return builder.routes().route(r -> r.cloudFoundryRouteService().and() - .header("Host", "dsl.routeservice.example.com") - .filters(f -> f.requestHeaderToRequestUri("X-CF-Forwarded-Url")) - .uri("https://example.com")).build(); + return builder.routes() + .route(r -> r.cloudFoundryRouteService().and().header("Host", "dsl.routeservice.example.com") + .filters(f -> f.requestHeaderToRequestUri("X-CF-Forwarded-Url")).uri("https://example.com")) + .build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryTest.java index 326f8603..9b38bc6f 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CloudFoundryRouteServiceRoutePredicateFactoryTest.java @@ -43,13 +43,9 @@ public class CloudFoundryRouteServiceRoutePredicateFactoryTest { @Test public void itReturnsTrueWithAllHeadersPresent() { MockServerHttpRequest request = MockServerHttpRequest.get("someurl") - .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_FORWARDED_URL, - "url") - .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_PROXY_METADATA, - "metadata") - .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_PROXY_SIGNATURE, - "signature") - .build(); + .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_FORWARDED_URL, "url") + .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_PROXY_METADATA, "metadata") + .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_PROXY_SIGNATURE, "signature").build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); assertThat(predicate.test(exchange)).isTrue(); @@ -58,11 +54,8 @@ public class CloudFoundryRouteServiceRoutePredicateFactoryTest { @Test public void itReturnsFalseWithAHeadersMissing() { MockServerHttpRequest request = MockServerHttpRequest.get("someurl") - .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_FORWARDED_URL, - "url") - .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_PROXY_METADATA, - "metadata") - .build(); + .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_FORWARDED_URL, "url") + .header(CloudFoundryRouteServiceRoutePredicateFactory.X_CF_PROXY_METADATA, "metadata").build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); assertThat(predicate.test(exchange)).isFalse(); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryIntegrationTests.java index 3f1d6476..14666011 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryIntegrationTests.java @@ -44,9 +44,8 @@ public class CookieRoutePredicateFactoryIntegrationTests extends BaseWebClientTe } private void assertCookieValue(String value) { - testClient.get().uri("/cookie").header(HttpHeaders.HOST, "www.cookieregex.org") - .cookie("mycookie", value).exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "cookie_regex_test") + testClient.get().uri("/cookie").header(HttpHeaders.HOST, "www.cookieregex.org").cookie("mycookie", value) + .exchange().expectStatus().isOk().expectHeader().valueEquals(ROUTE_ID_HEADER, "cookie_regex_test") .expectBody(String.class).isEqualTo(value); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java index faf9dc43..a959f0ca 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/CookieRoutePredicateFactoryTests.java @@ -33,8 +33,7 @@ public class CookieRoutePredicateFactoryTests extends BaseWebClientTests { @Test public void noCookiesForYou() { - MockServerHttpRequest request = MockServerHttpRequest.get("https://example.com") - .build(); + MockServerHttpRequest request = MockServerHttpRequest.get("https://example.com").build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); Predicate predicate = new CookieRoutePredicateFactory() @@ -46,9 +45,7 @@ public class CookieRoutePredicateFactoryTests extends BaseWebClientTests { @Test public void okOneCookieForYou() { MockServerHttpRequest request = MockServerHttpRequest.get("https://example.com") - .cookie(new HttpCookie("yourcookie", "sugar"), - new HttpCookie("mycookie", "chip")) - .build(); + .cookie(new HttpCookie("yourcookie", "sugar"), new HttpCookie("mycookie", "chip")).build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); Predicate predicate = new CookieRoutePredicateFactory() @@ -63,8 +60,7 @@ public class CookieRoutePredicateFactoryTests extends BaseWebClientTests { config.setName("mycookie"); config.setRegexp("myregexp"); Predicate predicate = new CookieRoutePredicateFactory().apply(config); - assertThat(predicate.toString()) - .contains("Cookie: name=mycookie regexp=myregexp"); + assertThat(predicate.toString()).contains("Cookie: name=mycookie regexp=myregexp"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java index 6ed73d4a..2c134a30 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactoryTests.java @@ -45,11 +45,9 @@ public class HeaderRoutePredicateFactoryTests extends BaseWebClientTests { @Test public void headerRouteWorks() { - testClient.get().uri("/get").header("Foo", "bar").exchange().expectStatus().isOk() - .expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader().valueEquals(ROUTE_ID_HEADER, "header_test"); + testClient.get().uri("/get").header("Foo", "bar").exchange().expectStatus().isOk().expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, "header_test"); } @Test @@ -58,18 +56,15 @@ public class HeaderRoutePredicateFactoryTests extends BaseWebClientTests { testClient.get().uri("/get") // no headers set. Test used to throw a null pointer exception. .exchange().expectStatus().isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader().valueEquals(ROUTE_ID_HEADER, "default_path_to_httpbin"); + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, "default_path_to_httpbin"); } @Test public void headerExistsWorksWithDsl() { - testClient.get().uri("/get").header("X-Foo", "bar").exchange().expectStatus() - .isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader().valueEquals(ROUTE_ID_HEADER, "header_exists_dsl"); + testClient.get().uri("/get").header("X-Foo", "bar").exchange().expectStatus().isOk().expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, "header_exists_dsl"); } @Test @@ -91,8 +86,9 @@ public class HeaderRoutePredicateFactoryTests extends BaseWebClientTests { @Bean RouteLocator queryRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("header_exists_dsl", r -> r.header("X-Foo") - .filters(f -> f.prefixPath("/httpbin")).uri(uri)).build(); + return builder.routes() + .route("header_exists_dsl", r -> r.header("X-Foo").filters(f -> f.prefixPath("/httpbin")).uri(uri)) + .build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactoryTests.java index f1e6f872..35b9cd8a 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/HostRoutePredicateFactoryTests.java @@ -50,11 +50,9 @@ public class HostRoutePredicateFactoryTests extends BaseWebClientTests { } public void expectHostRoute(String host, String routeId) { - testClient.get().uri("/get").header("Host", host).exchange().expectStatus().isOk() - .expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader().valueEquals(ROUTE_ID_HEADER, routeId); + testClient.get().uri("/get").header("Host", host).exchange().expectStatus().isOk().expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, routeId); } @Test @@ -64,8 +62,7 @@ public class HostRoutePredicateFactoryTests extends BaseWebClientTests { @Test public void hostRouteBackwardsCompatibleShortcutWorks() { - expectHostRoute("www.hostpatternshortcut.org", - "host_backwards_compatible_shortcut_test"); + expectHostRoute("www.hostpatternshortcut.org", "host_backwards_compatible_shortcut_test"); } @Test @@ -97,11 +94,8 @@ public class HostRoutePredicateFactoryTests extends BaseWebClientTests { @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("host_multi_dsl", - r -> r.host("**.hostmultidsl1.org", "**.hostmultidsl2.org") - .filters(f -> f.prefixPath("/httpbin")).uri(uri)) - .build(); + return builder.routes().route("host_multi_dsl", r -> r.host("**.hostmultidsl1.org", "**.hostmultidsl2.org") + .filters(f -> f.prefixPath("/httpbin")).uri(uri)).build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactoryTests.java index 647e59f4..074db693 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/MethodRoutePredicateFactoryTests.java @@ -47,37 +47,27 @@ public class MethodRoutePredicateFactoryTests extends BaseWebClientTests { @Test public void methodRouteWorks() { - testClient.get().uri("/get").header("Host", "www.method.org").exchange() - .expectStatus().isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader().valueEquals(ROUTE_ID_HEADER, "method_test_get"); + testClient.get().uri("/get").header("Host", "www.method.org").exchange().expectStatus().isOk().expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, "method_test_get"); } @Test public void methodGetAndPostRouteWorks() { - testClient.post().uri("/multivalueheaders").header("Host", "www.method.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) + testClient.post().uri("/multivalueheaders").header("Host", "www.method.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()) .expectHeader().valueEquals(ROUTE_ID_HEADER, "method_test_get_and_post"); - testClient.get().uri("/multivalueheaders").header("Host", "www.method.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) + testClient.get().uri("/multivalueheaders").header("Host", "www.method.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()) .expectHeader().valueEquals(ROUTE_ID_HEADER, "method_test_get_and_post"); } @Test public void methodRouteNotMatching() { - testClient.delete().uri("/multivalueheaders").header("Host", "www.method.org") - .exchange().expectStatus() - .value(integer -> integer.equals(HttpStatus.METHOD_NOT_ALLOWED)) - .expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader() + testClient.delete().uri("/multivalueheaders").header("Host", "www.method.org").exchange().expectStatus() + .value(integer -> integer.equals(HttpStatus.METHOD_NOT_ALLOWED)).expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() /* * Fallback to route with '/**' path predicate matches, see * application.yml in test resources @@ -113,11 +103,9 @@ public class MethodRoutePredicateFactoryTests extends BaseWebClientTests { public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("method_test_get", - r -> r.method("GET").and().path("/get") - .filters(f -> f.prefixPath("/httpbin")).uri(uri)) - .route("method_test_get_and_post", - r -> r.method("GET", "POST").and().path("/multivalueheaders") - .filters(f -> f.prefixPath("/httpbin")).uri(uri)) + r -> r.method("GET").and().path("/get").filters(f -> f.prefixPath("/httpbin")).uri(uri)) + .route("method_test_get_and_post", r -> r.method("GET", "POST").and().path("/multivalueheaders") + .filters(f -> f.prefixPath("/httpbin")).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactoryTests.java index ee9c03db..dae6d2b0 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactoryTests.java @@ -54,49 +54,41 @@ public class PathRoutePredicateFactoryTests extends BaseWebClientTests { @Test public void trailingSlashReturns404() { // since the configuration does not allow the trailing / to match this should fail - testClient.get().uri("/abc/123/function/") - .header(HttpHeaders.HOST, "www.path.org").exchange().expectStatus() + testClient.get().uri("/abc/123/function/").header(HttpHeaders.HOST, "www.path.org").exchange().expectStatus() .isNotFound(); } @Test public void defaultPathRouteWorks() { - expectPathRoute("/get", "www.thispathshouldnotmatch.org", - "default_path_to_httpbin"); + expectPathRoute("/get", "www.thispathshouldnotmatch.org", "default_path_to_httpbin"); } private void expectPathRoute(String uri, String host, String routeId) { - testClient.get().uri(uri).header(HttpHeaders.HOST, host).exchange().expectStatus() - .isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader().valueEquals(ROUTE_ID_HEADER, routeId); + testClient.get().uri(uri).header(HttpHeaders.HOST, host).exchange().expectStatus().isOk().expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, routeId); } @Test public void mulitPathRouteWorks() { expectPathRoute("/anything/multi11", "www.pathmulti.org", "path_multi"); expectPathRoute("/anything/multi22", "www.pathmulti.org", "path_multi"); - expectPathRoute("/anything/multi33", "www.pathmulti.org", - "default_path_to_httpbin"); + expectPathRoute("/anything/multi33", "www.pathmulti.org", "default_path_to_httpbin"); } @Test public void mulitPathDslRouteWorks() { expectPathRoute("/anything/multidsl1", "www.pathmultidsl.org", "path_multi_dsl"); - expectPathRoute("/anything/multidsl2", "www.pathmultidsl.org", - "default_path_to_httpbin"); + expectPathRoute("/anything/multidsl2", "www.pathmultidsl.org", "default_path_to_httpbin"); expectPathRoute("/anything/multidsl3", "www.pathmultidsl.org", "path_multi_dsl"); } @Test public void pathRouteWorksWithPercent() { - testClient.get().uri("/abc/123%/function") - .header(HttpHeaders.HOST, "www.path.org").exchange().expectStatus().isOk() - .expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader().valueEquals(ROUTE_ID_HEADER, "path_test"); + testClient.get().uri("/abc/123%/function").header(HttpHeaders.HOST, "www.path.org").exchange().expectStatus() + .isOk().expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, "path_test"); } @Test @@ -111,18 +103,14 @@ public class PathRoutePredicateFactoryTests extends BaseWebClientTests { Config config = new Config().setPatterns(Arrays.asList("patternA", "patternB")) .setMatchOptionalTrailingSeparator(false); Predicate predicate = new PathRoutePredicateFactory().apply(config); - assertThat(predicate.toString()).contains("patternA").contains("patternB") - .contains("false"); + assertThat(predicate.toString()).contains("patternA").contains("patternB").contains("false"); } @Test public void toStringFormatMatchTrailingSlashTrue() { - Config config = new Config().setPatterns(Arrays.asList("patternA", "patternB")) - .setMatchTrailingSlash(true); - Predicate predicate = new PathRoutePredicateFactory() - .apply(config); - assertThat(predicate.toString()).contains("patternA").contains("patternB") - .contains("true"); + Config config = new Config().setPatterns(Arrays.asList("patternA", "patternB")).setMatchTrailingSlash(true); + Predicate predicate = new PathRoutePredicateFactory().apply(config); + assertThat(predicate.toString()).contains("patternA").contains("patternB").contains("true"); } @EnableAutoConfiguration @@ -136,9 +124,10 @@ public class PathRoutePredicateFactoryTests extends BaseWebClientTests { @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { return builder.routes() - .route("path_multi_dsl", r -> r.host("**.pathmultidsl.org").and() - .path(false, "/anything/multidsl1", "/anything/multidsl3") - .filters(f -> f.prefixPath("/httpbin")).uri(uri)) + .route("path_multi_dsl", + r -> r.host("**.pathmultidsl.org").and() + .path(false, "/anything/multidsl1", "/anything/multidsl3") + .filters(f -> f.prefixPath("/httpbin")).uri(uri)) .build(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java index 4ecead9f..84255516 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/QueryRoutePredicateFactoryTests.java @@ -51,24 +51,22 @@ public class QueryRoutePredicateFactoryTests extends BaseWebClientTests { @Test public void noQueryParamWorks() { - testClient.get().uri("/get").exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "default_path_to_httpbin"); - output.expect(not( - containsString("Error applying predicate for route: foo_query_param"))); + testClient.get().uri("/get").exchange().expectStatus().isOk().expectHeader().valueEquals(ROUTE_ID_HEADER, + "default_path_to_httpbin"); + output.expect(not(containsString("Error applying predicate for route: foo_query_param"))); } @Test public void queryParamWorks() { - testClient.get().uri("/get?foo=bar").exchange().expectStatus().isOk() - .expectHeader().valueEquals(ROUTE_ID_HEADER, "foo_query_param"); + testClient.get().uri("/get?foo=bar").exchange().expectStatus().isOk().expectHeader() + .valueEquals(ROUTE_ID_HEADER, "foo_query_param"); } @Test public void emptyQueryParamWorks() { - testClient.get().uri("/get?foo").exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "default_path_to_httpbin"); - output.expect(not( - containsString("Error applying predicate for route: foo_query_param"))); + testClient.get().uri("/get?foo").exchange().expectStatus().isOk().expectHeader().valueEquals(ROUTE_ID_HEADER, + "default_path_to_httpbin"); + output.expect(not(containsString("Error applying predicate for route: foo_query_param"))); } @Test @@ -90,11 +88,8 @@ public class QueryRoutePredicateFactoryTests extends BaseWebClientTests { @Bean RouteLocator queryRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("foo_query_param", - r -> r.query("foo", "bar") - .filters(f -> f.prefixPath("/httpbin")).uri(uri)) - .build(); + return builder.routes().route("foo_query_param", + r -> r.query("foo", "bar").filters(f -> f.prefixPath("/httpbin")).uri(uri)).build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactoryTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactoryTest.java index 65a0a5c3..39ad15c6 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactoryTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/ReadBodyPredicateFactoryTest.java @@ -66,13 +66,11 @@ public class ReadBodyPredicateFactoryTest { Event messageEvent = new Event("message", "bar"); Event messageChannelEvent = new Event("message.channels", "bar"); - webClient.post().uri("/events").body(BodyInserters.fromValue(messageEvent)) - .exchange().expectStatus().isOk().expectBody().jsonPath("$.headers.Hello") - .isEqualTo("World"); + webClient.post().uri("/events").body(BodyInserters.fromValue(messageEvent)).exchange().expectStatus().isOk() + .expectBody().jsonPath("$.headers.Hello").isEqualTo("World"); - webClient.post().uri("/events").body(BodyInserters.fromValue(messageChannelEvent)) - .exchange().expectStatus().isOk().expectBody().jsonPath("$.headers.World") - .isEqualTo("Hello"); + webClient.post().uri("/events").body(BodyInserters.fromValue(messageChannelEvent)).exchange().expectStatus() + .isOk().expectBody().jsonPath("$.headers.World").isEqualTo("Hello"); } @@ -80,18 +78,14 @@ public class ReadBodyPredicateFactoryTest { public void toStringFormat() { Config config = new Config(); config.setInClass(String.class); - AsyncPredicate predicate = new ReadBodyPredicateFactory() - .applyAsync(config); + AsyncPredicate predicate = new ReadBodyPredicateFactory().applyAsync(config); assertThat(predicate.toString()).contains("ReadBody: " + config.getInClass()); } @EnableAutoConfiguration @SpringBootConfiguration - @LoadBalancerClients({ - @LoadBalancerClient(name = "message", - configuration = TestLoadBalancerConfig.class), - @LoadBalancerClient(name = "messageChannel", - configuration = TestLoadBalancerConfig.class) }) + @LoadBalancerClients({ @LoadBalancerClient(name = "message", configuration = TestLoadBalancerConfig.class), + @LoadBalancerClient(name = "messageChannel", configuration = TestLoadBalancerConfig.class) }) @Import(PermitAllSecurityConfiguration.class) @RestController public static class TestConfig { @@ -101,11 +95,9 @@ public class ReadBodyPredicateFactoryTest { return builder.routes() .route(p -> p.path("/events").and().method(HttpMethod.POST).and() .readBody(Event.class, eventPredicate("message.channels")) - .filters(f -> f.setPath("/messageChannel/events")) - .uri("lb://messageChannel")) + .filters(f -> f.setPath("/messageChannel/events")).uri("lb://messageChannel")) .route(p -> p.path("/events").and().method(HttpMethod.POST).and() - .readBody(Event.class, eventPredicate("message")) - .filters(f -> f.setPath("/message/events")) + .readBody(Event.class, eventPredicate("message")).filters(f -> f.setPath("/message/events")) .uri("lb://message")) .build(); } @@ -119,8 +111,7 @@ public class ReadBodyPredicateFactoryTest { return "{\"headers\":{\"Hello\":\"World\"}}"; } - @PostMapping(path = "messageChannel/events", - produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(path = "messageChannel/events", produces = MediaType.APPLICATION_JSON_VALUE) public String messageChannelEvents(@RequestBody Event e) { return "{\"headers\":{\"World\":\"Hello\"}}"; } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java index 78962b07..2088d0ba 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/RemoteAddrRoutePredicateFactoryTests.java @@ -55,28 +55,25 @@ public class RemoteAddrRoutePredicateFactoryTests extends BaseWebClientTests { public void remoteAddrWorks() { Mono result = webClient.get().uri("/ok/httpbin/").exchange(); - StepVerifier.create(result) - .consumeNextWith(response -> assertStatus(response, HttpStatus.OK)) - .expectComplete().verify(DURATION); + StepVerifier.create(result).consumeNextWith(response -> assertStatus(response, HttpStatus.OK)).expectComplete() + .verify(DURATION); } @Test public void remoteAddrRejects() { Mono result = webClient.get().uri("/nok/httpbin/").exchange(); - StepVerifier.create(result) - .consumeNextWith(response -> assertStatus(response, HttpStatus.NOT_FOUND)) + StepVerifier.create(result).consumeNextWith(response -> assertStatus(response, HttpStatus.NOT_FOUND)) .expectComplete().verify(DURATION); } @Test public void remoteAddrWorksWithXForwardedRemoteAddress() { - Mono result = webClient.get().uri("/xforwardfor") - .header("X-Forwarded-For", "12.34.56.78").exchange(); + Mono result = webClient.get().uri("/xforwardfor").header("X-Forwarded-For", "12.34.56.78") + .exchange(); - StepVerifier.create(result) - .consumeNextWith(response -> assertStatus(response, HttpStatus.OK)) - .expectComplete().verify(Duration.ofSeconds(20)); + StepVerifier.create(result).consumeNextWith(response -> assertStatus(response, HttpStatus.OK)).expectComplete() + .verify(Duration.ofSeconds(20)); } @Test @@ -97,11 +94,12 @@ public class RemoteAddrRoutePredicateFactoryTests extends BaseWebClientTests { @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes().route("x_forwarded_for_test", r -> r - .path("/xforwardfor").and() - .remoteAddr(XForwardedRemoteAddressResolver.maxTrustedIndex(1), - "12.34.56.78") - .filters(f -> f.setStatus(200)).uri(uri)).build(); + return builder.routes() + .route("x_forwarded_for_test", + r -> r.path("/xforwardfor").and() + .remoteAddr(XForwardedRemoteAddressResolver.maxTrustedIndex(1), "12.34.56.78") + .filters(f -> f.setStatus(200)).uri(uri)) + .build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryIntegrationTests.java index cefe4333..d7e5d2ec 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryIntegrationTests.java @@ -61,18 +61,16 @@ public class WeightRoutePredicateFactoryIntegrationTests extends BaseWebClientTe public void highWeight() { filter.setRandom(getRandom(0.9)); - testClient.get().uri("/get").header(HttpHeaders.HOST, "www.weighthigh.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "weight_high_test"); + testClient.get().uri("/get").header(HttpHeaders.HOST, "www.weighthigh.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(ROUTE_ID_HEADER, "weight_high_test"); } @Test public void lowWeight() { filter.setRandom(getRandom(0.1)); - testClient.get().uri("/get").header(HttpHeaders.HOST, "www.weightlow.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "weight_low_test"); + testClient.get().uri("/get").header(HttpHeaders.HOST, "www.weightlow.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(ROUTE_ID_HEADER, "weight_low_test"); } @Test @@ -98,11 +96,8 @@ public class WeightRoutePredicateFactoryIntegrationTests extends BaseWebClientTe @Bean public RouteLocator testRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("weight_low_test", - r -> r.weight("group1", 2).and().host("**.weightlow.org") - .filters(f -> f.prefixPath("/httpbin")).uri(this.uri)) - .build(); + return builder.routes().route("weight_low_test", r -> r.weight("group1", 2).and().host("**.weightlow.org") + .filters(f -> f.prefixPath("/httpbin")).uri(this.uri)).build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryYaml404Tests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryYaml404Tests.java index d1e74b6d..9bb136e3 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryYaml404Tests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/handler/predicate/WeightRoutePredicateFactoryYaml404Tests.java @@ -56,9 +56,8 @@ public class WeightRoutePredicateFactoryYaml404Tests extends BaseWebClientTests public void weightsFromYamlNot404() { filter.setRandom(getRandom(0.5)); - testClient.get().uri("/get").header(HttpHeaders.HOST, "www.weight4041.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "weight_first_404_test_1"); + testClient.get().uri("/get").header(HttpHeaders.HOST, "www.weight4041.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(ROUTE_ID_HEADER, "weight_first_404_test_1"); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocatorTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocatorTests.java index 3128c3cb..b1757ecc 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocatorTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteDefinitionLocatorTests.java @@ -37,8 +37,7 @@ public class CachingRouteDefinitionLocatorTests { CachingRouteDefinitionLocator locator = new CachingRouteDefinitionLocator( () -> Flux.just(routeDef2, routeDef1)); - List routes = locator.getRouteDefinitions().collectList() - .block(); + List routes = locator.getRouteDefinitions().collectList().block(); assertThat(routes).containsExactlyInAnyOrder(routeDef1, routeDef2); } @@ -48,11 +47,9 @@ public class CachingRouteDefinitionLocatorTests { RouteDefinition routeDef1 = routeDef(1); RouteDefinition routeDef2 = routeDef(2); CachingRouteDefinitionLocator locator = new CachingRouteDefinitionLocator( - new StubRouteDefinitionLocator(Flux.just(routeDef2), - Flux.just(routeDef1, routeDef2))); + new StubRouteDefinitionLocator(Flux.just(routeDef2), Flux.just(routeDef1, routeDef2))); - List routes = locator.getRouteDefinitions().collectList() - .block(); + List routes = locator.getRouteDefinitions().collectList().block(); assertThat(routes).containsExactlyInAnyOrder(routeDef2); routes = locator.refresh().collectList().block(); @@ -77,8 +74,7 @@ public class CachingRouteDefinitionLocatorTests { return Flux.just(routeDef1, routeDef2); }).subscribeOn(Schedulers.single()))); - List routes = locator.getRouteDefinitions().collectList() - .block(); + List routes = locator.getRouteDefinitions().collectList().block(); assertThat(routes).containsExactlyInAnyOrder(routeDef1); locator.onApplicationEvent(new RefreshRoutesEvent(this)); @@ -94,18 +90,15 @@ public class CachingRouteDefinitionLocatorTests { RouteDefinition routeDef1 = routeDef(1); RouteDefinition routeDef2 = routeDef(2); - CachingRouteDefinitionLocator locator = new CachingRouteDefinitionLocator( - new StubRouteDefinitionLocator(Flux.just(routeDef1), - Flux.defer(() -> Flux.just(routeDef1, routeDef2)))); + CachingRouteDefinitionLocator locator = new CachingRouteDefinitionLocator(new StubRouteDefinitionLocator( + Flux.just(routeDef1), Flux.defer(() -> Flux.just(routeDef1, routeDef2)))); - List routes = locator.getRouteDefinitions().collectList() - .block(); + List routes = locator.getRouteDefinitions().collectList().block(); assertThat(routes).containsExactlyInAnyOrder(routeDef1); locator.onApplicationEvent(new RefreshRoutesEvent(this)); - List updatedRoutes = locator.getRouteDefinitions().collectList() - .block(); + List updatedRoutes = locator.getRouteDefinitions().collectList().block(); assertThat(updatedRoutes).containsExactlyInAnyOrder(routeDef1, routeDef2); } @@ -117,8 +110,7 @@ public class CachingRouteDefinitionLocatorTests { return def; } - private static final class StubRouteDefinitionLocator - implements RouteDefinitionLocator { + private static final class StubRouteDefinitionLocator implements RouteDefinitionLocator { private final Flux first; @@ -126,8 +118,7 @@ public class CachingRouteDefinitionLocatorTests { int i; - private StubRouteDefinitionLocator(Flux first, - Flux second) { + private StubRouteDefinitionLocator(Flux first, Flux second) { this.first = first; this.second = second; i = 0; diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteLocatorTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteLocatorTests.java index 744a0dad..182dac1c 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteLocatorTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/CachingRouteLocatorTests.java @@ -36,8 +36,7 @@ public class CachingRouteLocatorTests { public void getRoutesWorks() { Route route1 = route(1); Route route2 = route(2); - CachingRouteLocator locator = new CachingRouteLocator( - () -> Flux.just(route2, route1)); + CachingRouteLocator locator = new CachingRouteLocator(() -> Flux.just(route2, route1)); List routes = locator.getRoutes().collectList().block(); @@ -69,8 +68,7 @@ public class CachingRouteLocatorTests { @Test @Ignore // FIXME: 3.0.0 - public void refreshWorksWhenFirstRefreshSuccessAndOtherError() - throws InterruptedException { + public void refreshWorksWhenFirstRefreshSuccessAndOtherError() throws InterruptedException { Route route1 = route(1); Route route2 = route(2); @@ -104,15 +102,13 @@ public class CachingRouteLocatorTests { waitUntilRefreshFinished(locator, resultEvents); assertThat(resultEvents).hasSize(1); - assertThat(resultEvents.get(0).getThrowable().getCause().getMessage()) - .isEqualTo("in chain."); + assertThat(resultEvents.get(0).getThrowable().getCause().getMessage()).isEqualTo("in chain."); assertThat(resultEvents.get(0).isSuccess()).isEqualTo(false); assertThat(locator.getRoutes().collectList().block()).containsExactly(route1); waitUntilRefreshFinished(locator, resultEvents); assertThat(resultEvents).hasSize(2); - assertThat(resultEvents.get(1).getThrowable().getMessage()) - .isEqualTo("call getRoutes error."); + assertThat(resultEvents.get(1).getThrowable().getMessage()).isEqualTo("call getRoutes error."); assertThat(resultEvents.get(1).isSuccess()).isEqualTo(false); assertThat(locator.getRoutes().collectList().block()).containsExactly(route1); @@ -123,8 +119,8 @@ public class CachingRouteLocatorTests { } - private void waitUntilRefreshFinished(CachingRouteLocator locator, - List resultEvents) throws InterruptedException { + private void waitUntilRefreshFinished(CachingRouteLocator locator, List resultEvents) + throws InterruptedException { CountDownLatch cdl = new CountDownLatch(1); locator.setApplicationEventPublisher(o -> { resultEvents.add((RefreshRoutesResultEvent) o); @@ -136,8 +132,8 @@ public class CachingRouteLocatorTests { } Route route(int id) { - return Route.async().id(String.valueOf(id)).uri("http://localhost/" + id) - .order(id).predicate(exchange -> true).build(); + return Route.async().id(String.valueOf(id)).uri("http://localhost/" + id).order(id).predicate(exchange -> true) + .build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocatorTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocatorTests.java index 25c4cbc8..837d8fbd 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocatorTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionRouteLocatorTests.java @@ -48,21 +48,17 @@ public class RouteDefinitionRouteLocatorTests { @Test public void contextLoads() { - List predicates = Arrays - .asList(new HostRoutePredicateFactory()); + List predicates = Arrays.asList(new HostRoutePredicateFactory()); List gatewayFilterFactories = Arrays.asList( - new RemoveResponseHeaderGatewayFilterFactory(), - new AddResponseHeaderGatewayFilterFactory(), + new RemoveResponseHeaderGatewayFilterFactory(), new AddResponseHeaderGatewayFilterFactory(), new TestOrderedGatewayFilterFactory()); GatewayProperties gatewayProperties = new GatewayProperties(); gatewayProperties.setRoutes(Arrays.asList(new RouteDefinition() { { setId("foo"); setUri(URI.create("https://foo.example.com")); - setPredicates( - Arrays.asList(new PredicateDefinition("Host=*.example.com"))); - setFilters(Arrays.asList( - new FilterDefinition("RemoveResponseHeader=Server"), + setPredicates(Arrays.asList(new PredicateDefinition("Host=*.example.com"))); + setFilters(Arrays.asList(new FilterDefinition("RemoveResponseHeader=Server"), new FilterDefinition("TestOrdered="), new FilterDefinition("AddResponseHeader=X-Response-Foo, Bar"))); } @@ -72,15 +68,13 @@ public class RouteDefinitionRouteLocatorTests { gatewayProperties); @SuppressWarnings("deprecation") RouteDefinitionRouteLocator routeDefinitionRouteLocator = new RouteDefinitionRouteLocator( - new CompositeRouteDefinitionLocator(Flux.just(routeDefinitionLocator)), - predicates, gatewayFilterFactories, gatewayProperties, - new ConfigurationService(null, () -> null, () -> null)); + new CompositeRouteDefinitionLocator(Flux.just(routeDefinitionLocator)), predicates, + gatewayFilterFactories, gatewayProperties, new ConfigurationService(null, () -> null, () -> null)); StepVerifier.create(routeDefinitionRouteLocator.getRoutes()).assertNext(route -> { List filters = route.getFilters(); assertThat(filters).hasSize(3); - assertThat(getFilterClassName(filters.get(0))) - .contains("RemoveResponseHeader"); + assertThat(getFilterClassName(filters.get(0))).contains("RemoveResponseHeader"); assertThat(getFilterClassName(filters.get(1))).contains("AddResponseHeader"); assertThat(getFilterClassName(filters.get(2))) .contains("RouteDefinitionRouteLocatorTests$TestOrderedGateway"); @@ -89,11 +83,9 @@ public class RouteDefinitionRouteLocatorTests { @Test public void contextLoadsWithErrorRecovery() { - List predicates = Arrays - .asList(new HostRoutePredicateFactory()); + List predicates = Arrays.asList(new HostRoutePredicateFactory()); List gatewayFilterFactories = Arrays.asList( - new RemoveResponseHeaderGatewayFilterFactory(), - new AddResponseHeaderGatewayFilterFactory(), + new RemoveResponseHeaderGatewayFilterFactory(), new AddResponseHeaderGatewayFilterFactory(), new TestOrderedGatewayFilterFactory()); GatewayProperties gatewayProperties = new GatewayProperties(); gatewayProperties.setRoutes(containsInvalidRoutes()); @@ -103,15 +95,13 @@ public class RouteDefinitionRouteLocatorTests { gatewayProperties); @SuppressWarnings("deprecation") RouteDefinitionRouteLocator routeDefinitionRouteLocator = new RouteDefinitionRouteLocator( - new CompositeRouteDefinitionLocator(Flux.just(routeDefinitionLocator)), - predicates, gatewayFilterFactories, gatewayProperties, - new ConfigurationService(null, () -> null, () -> null)); + new CompositeRouteDefinitionLocator(Flux.just(routeDefinitionLocator)), predicates, + gatewayFilterFactories, gatewayProperties, new ConfigurationService(null, () -> null, () -> null)); StepVerifier.create(routeDefinitionRouteLocator.getRoutes()).assertNext(route -> { List filters = route.getFilters(); assertThat(filters).hasSize(3); - assertThat(getFilterClassName(filters.get(0))) - .contains("RemoveResponseHeader"); + assertThat(getFilterClassName(filters.get(0))).contains("RemoveResponseHeader"); assertThat(getFilterClassName(filters.get(1))).contains("AddResponseHeader"); assertThat(getFilterClassName(filters.get(2))) .contains("RouteDefinitionRouteLocatorTests$TestOrderedGateway"); @@ -124,8 +114,7 @@ public class RouteDefinitionRouteLocatorTests { foo.setUri(URI.create("https://foo.example.com")); foo.setPredicates(Arrays.asList(new PredicateDefinition("Host=*.example.com"))); foo.setFilters(Arrays.asList(new FilterDefinition("RemoveResponseHeader=Server"), - new FilterDefinition("TestOrdered="), - new FilterDefinition("AddResponseHeader=X-Response-Foo, Bar"))); + new FilterDefinition("TestOrdered="), new FilterDefinition("AddResponseHeader=X-Response-Foo, Bar"))); RouteDefinition bad = new RouteDefinition(); bad.setId("exceptionRaised"); bad.setUri(URI.create("https://foo.example.com")); @@ -152,8 +141,7 @@ public class RouteDefinitionRouteLocatorTests { @Override public GatewayFilter apply(Object config) { - return new OrderedGatewayFilter((exchange, chain) -> chain.filter(exchange), - 9999); + return new OrderedGatewayFilter((exchange, chain) -> chain.filter(exchange), 9999); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionTest.java index 24876cf7..5282ec22 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteDefinitionTest.java @@ -37,8 +37,8 @@ public class RouteDefinitionTest { routeDefinition.setMetadata(originalMetadata); routeDefinition.getMetadata().putAll(newMetadata); - assertThat(routeDefinition.getMetadata()).hasSize(2) - .containsAllEntriesOf(originalMetadata).containsAllEntriesOf(newMetadata); + assertThat(routeDefinition.getMetadata()).hasSize(2).containsAllEntriesOf(originalMetadata) + .containsAllEntriesOf(newMetadata); } @Test @@ -61,8 +61,8 @@ public class RouteDefinitionTest { routeDefinition.setMetadata(originalMetadata); routeDefinition.getMetadata().put("key2", "value2"); - assertThat(routeDefinition.getMetadata()).hasSize(2) - .containsAllEntriesOf(originalMetadata).containsEntry("key2", "value2"); + assertThat(routeDefinition.getMetadata()).hasSize(2).containsAllEntriesOf(originalMetadata) + .containsEntry("key2", "value2"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteRefreshListenerTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteRefreshListenerTests.java index 6e94b548..880c8537 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteRefreshListenerTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteRefreshListenerTests.java @@ -41,8 +41,7 @@ public class RouteRefreshListenerTests { ApplicationEventPublisher publisher = mock(ApplicationEventPublisher.class); RouteRefreshListener listener = new RouteRefreshListener(publisher); - WebServerApplicationContext applicationContext = mock( - WebServerApplicationContext.class); + WebServerApplicationContext applicationContext = mock(WebServerApplicationContext.class); when(applicationContext.getServerNamespace()).thenReturn("management"); listener.onApplicationEvent(new ContextRefreshedEvent(applicationContext)); @@ -54,8 +53,7 @@ public class RouteRefreshListenerTests { ApplicationEventPublisher publisher = mock(ApplicationEventPublisher.class); RouteRefreshListener listener = new RouteRefreshListener(publisher); - listener.onApplicationEvent( - new ContextRefreshedEvent(mock(ApplicationContext.class))); + listener.onApplicationEvent(new ContextRefreshedEvent(mock(ApplicationContext.class))); verify(publisher).publishEvent(any(RefreshRoutesEvent.class)); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteTests.java index 6a1b4e32..b70dba26 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/RouteTests.java @@ -29,51 +29,44 @@ public class RouteTests { @Test public void defaultHttpPort() { - Route route = Route.async().id("1").predicate(exchange -> true) - .uri("http://acme.com").build(); + Route route = Route.async().id("1").predicate(exchange -> true).uri("http://acme.com").build(); assertThat(route.getUri()).hasHost("acme.com").hasScheme("http").hasPort(80); } @Test public void defaultHttpsPort() { - Route route = Route.async().id("1").predicate(exchange -> true) - .uri("https://acme.com").build(); + Route route = Route.async().id("1").predicate(exchange -> true).uri("https://acme.com").build(); assertThat(route.getUri()).hasHost("acme.com").hasScheme("https").hasPort(443); } @Test public void fullUri() { - Route route = Route.async().id("1").predicate(exchange -> true) - .uri("http://acme.com:8080").build(); + Route route = Route.async().id("1").predicate(exchange -> true).uri("http://acme.com:8080").build(); assertThat(route.getUri()).hasHost("acme.com").hasScheme("http").hasPort(8080); } @Test public void nullScheme() { - assertThatThrownBy( - () -> Route.async().id("1").predicate(exchange -> true).uri("/pathonly")) - .isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> Route.async().id("1").predicate(exchange -> true).uri("/pathonly")) + .isInstanceOf(IllegalArgumentException.class); } @Test public void defaultMetadataToEmpty() { - Route route = Route.async().id("1").predicate(exchange -> true) - .uri("http://acme.com:8080").build(); + Route route = Route.async().id("1").predicate(exchange -> true).uri("http://acme.com:8080").build(); assertThat(route.getMetadata()).isEmpty(); } @Test public void isAbleToAddMetadata() { - Route route = Route.async().id("1").predicate(exchange -> true) - .uri("http://acme.com:8080").metadata(Maps.newHashMap("key", "value")) - .metadata("key2", "value2").build(); + Route route = Route.async().id("1").predicate(exchange -> true).uri("http://acme.com:8080") + .metadata(Maps.newHashMap("key", "value")).metadata("key2", "value2").build(); - assertThat(route.getMetadata()).hasSize(2).containsEntry("key", "value") - .containsEntry("key2", "value2"); + assertThat(route.getMetadata()).hasSize(2).containsEntry("key", "value").containsEntry("key2", "value2"); } @Test @@ -87,8 +80,7 @@ public class RouteTests { definition.setMetadata(metadata); Route route = Route.async(definition).predicate(exchange -> true).build(); - assertThat(route.getMetadata()).hasSize(2).containsEntry("key", "value") - .containsEntry("key2", "value2"); + assertThat(route.getMetadata()).hasSize(2).containsEntry("key", "value").containsEntry("key2", "value2"); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpecTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpecTests.java index 58bbb07b..98f7166c 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpecTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpecTests.java @@ -49,12 +49,9 @@ public class GatewayFilterSpecTests { testFilter(OrderedGatewayFilter.class, new MyUnorderedFilter(), 0); } - private void testFilter(Class type, - GatewayFilter gatewayFilter, int order) { - ConfigurableApplicationContext context = mock( - ConfigurableApplicationContext.class); - Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123") - .predicate(exchange -> true); + private void testFilter(Class type, GatewayFilter gatewayFilter, int order) { + ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class); + Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123").predicate(exchange -> true); RouteLocatorBuilder.Builder routes = new RouteLocatorBuilder(context).routes(); GatewayFilterSpec spec = new GatewayFilterSpec(routeBuilder, routes); spec.filter(gatewayFilter); @@ -64,8 +61,7 @@ public class GatewayFilterSpecTests { assertFilter(route.getFilters().get(0), type, order); } - private void assertFilter(GatewayFilter filter, Class type, - int order) { + private void assertFilter(GatewayFilter filter, Class type, int order) { assertThat(filter).isInstanceOf(type); Ordered ordered = (Ordered) filter; assertThat(ordered.getOrder()).isEqualTo(order); @@ -73,10 +69,8 @@ public class GatewayFilterSpecTests { @Test public void testFilters() { - ConfigurableApplicationContext context = mock( - ConfigurableApplicationContext.class); - Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123") - .predicate(exchange -> true); + ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class); + Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123").predicate(exchange -> true); RouteLocatorBuilder.Builder routes = new RouteLocatorBuilder(context).routes(); GatewayFilterSpec spec = new GatewayFilterSpec(routeBuilder, routes); spec.filters(new MyUnorderedFilter(), new MyOrderedFilter()); @@ -90,20 +84,16 @@ public class GatewayFilterSpecTests { @Test public void shouldSetModifyBodyResponseFilterWithRewriteFunction() { - ConfigurableApplicationContext context = mock( - ConfigurableApplicationContext.class); - Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123") - .predicate(exchange -> true); + ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class); + Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123").predicate(exchange -> true); - when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)) - .thenReturn(new ModifyResponseBodyGatewayFilterFactory( - HandlerStrategies.withDefaults().messageReaders(), + when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)).thenReturn( + new ModifyResponseBodyGatewayFilterFactory(HandlerStrategies.withDefaults().messageReaders(), Collections.emptySet(), Collections.emptySet())); RouteLocatorBuilder.Builder routes = new RouteLocatorBuilder(context).routes(); GatewayFilterSpec spec = new GatewayFilterSpec(routeBuilder, routes); - spec.modifyResponseBody(String.class, String.class, - (exchange, s) -> Mono.just(s)); + spec.modifyResponseBody(String.class, String.class, (exchange, s) -> Mono.just(s)); Route route = routeBuilder.build(); assertThat(route.getFilters()).hasSize(1); @@ -115,20 +105,16 @@ public class GatewayFilterSpecTests { @Test public void shouldSetModifyBodyResponseFilterWithRewriteFunctionAndEmptyBodySupplier() { - ConfigurableApplicationContext context = mock( - ConfigurableApplicationContext.class); - Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123") - .predicate(exchange -> true); + ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class); + Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123").predicate(exchange -> true); - when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)) - .thenReturn(new ModifyResponseBodyGatewayFilterFactory( - HandlerStrategies.withDefaults().messageReaders(), + when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)).thenReturn( + new ModifyResponseBodyGatewayFilterFactory(HandlerStrategies.withDefaults().messageReaders(), Collections.emptySet(), Collections.emptySet())); RouteLocatorBuilder.Builder routes = new RouteLocatorBuilder(context).routes(); GatewayFilterSpec spec = new GatewayFilterSpec(routeBuilder, routes); - spec.modifyResponseBody(String.class, String.class, - (exchange, s) -> Mono.just(s == null ? "emptybody" : s)); + spec.modifyResponseBody(String.class, String.class, (exchange, s) -> Mono.just(s == null ? "emptybody" : s)); Route route = routeBuilder.build(); assertThat(route.getFilters()).hasSize(1); @@ -140,20 +126,17 @@ public class GatewayFilterSpecTests { @Test public void shouldSetModifyBodyResponseFilterWithRewriteFunctionAndNewContentType() { - ConfigurableApplicationContext context = mock( - ConfigurableApplicationContext.class); - Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123") - .predicate(exchange -> true); + ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class); + Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123").predicate(exchange -> true); - when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)) - .thenReturn(new ModifyResponseBodyGatewayFilterFactory( - HandlerStrategies.withDefaults().messageReaders(), + when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)).thenReturn( + new ModifyResponseBodyGatewayFilterFactory(HandlerStrategies.withDefaults().messageReaders(), Collections.emptySet(), Collections.emptySet())); RouteLocatorBuilder.Builder routes = new RouteLocatorBuilder(context).routes(); GatewayFilterSpec spec = new GatewayFilterSpec(routeBuilder, routes); - spec.modifyResponseBody(String.class, String.class, - MediaType.APPLICATION_JSON_VALUE, (exchange, s) -> Mono.just(s)); + spec.modifyResponseBody(String.class, String.class, MediaType.APPLICATION_JSON_VALUE, + (exchange, s) -> Mono.just(s)); Route route = routeBuilder.build(); assertThat(route.getFilters()).hasSize(1); @@ -165,22 +148,17 @@ public class GatewayFilterSpecTests { @Test public void shouldSetModifyBodyResponseFilterWithConfigConsumer() { - ConfigurableApplicationContext context = mock( - ConfigurableApplicationContext.class); - Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123") - .predicate(exchange -> true); + ConfigurableApplicationContext context = mock(ConfigurableApplicationContext.class); + Route.AsyncBuilder routeBuilder = Route.async().id("123").uri("abc:123").predicate(exchange -> true); - when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)) - .thenReturn(new ModifyResponseBodyGatewayFilterFactory( - HandlerStrategies.withDefaults().messageReaders(), + when(context.getBean(ModifyResponseBodyGatewayFilterFactory.class)).thenReturn( + new ModifyResponseBodyGatewayFilterFactory(HandlerStrategies.withDefaults().messageReaders(), Collections.emptySet(), Collections.emptySet())); RouteLocatorBuilder.Builder routes = new RouteLocatorBuilder(context).routes(); GatewayFilterSpec spec = new GatewayFilterSpec(routeBuilder, routes); - spec.modifyResponseBody( - (smth) -> new ModifyResponseBodyGatewayFilterFactory.Config() - .setRewriteFunction(String.class, String.class, - (exchange, s) -> Mono.just(s))); + spec.modifyResponseBody((smth) -> new ModifyResponseBodyGatewayFilterFactory.Config() + .setRewriteFunction(String.class, String.class, (exchange, s) -> Mono.just(s))); Route route = routeBuilder.build(); assertThat(route.getFilters()).hasSize(1); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/RouteBuilderTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/RouteBuilderTests.java index e3a93d42..afcc86e6 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/RouteBuilderTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/route/builder/RouteBuilderTests.java @@ -48,23 +48,20 @@ public class RouteBuilderTests { @Test public void testASetOfRoutes() { RouteLocator routeLocator = this.routeLocatorBuilder.routes() - .route("test1", r -> r.host("*.somehost.org").and().path("/somepath") - .filters(f -> f.addRequestHeader("header1", "header-value-1")) - .uri("http://someuri")) - .route("test2", r -> r.host("*.somehost2.org") - .filters(f -> f.addResponseHeader("header-response-1", - "header-response-1")) - .uri("https://httpbin.org:9090")) + .route("test1", + r -> r.host("*.somehost.org").and().path("/somepath") + .filters(f -> f.addRequestHeader("header1", "header-value-1")).uri("http://someuri")) + .route("test2", + r -> r.host("*.somehost2.org") + .filters(f -> f.addResponseHeader("header-response-1", "header-response-1")) + .uri("https://httpbin.org:9090")) .build(); StepVerifier.create(routeLocator.getRoutes()) - .expectNextMatches( - r -> r.getId().equals("test1") && r.getFilters().size() == 1 - && r.getUri().equals(URI.create("http://someuri:80"))) - .expectNextMatches( - r -> r.getId().equals("test2") && r.getFilters().size() == 1 - && r.getUri() - .equals(URI.create("https://httpbin.org:9090"))) + .expectNextMatches(r -> r.getId().equals("test1") && r.getFilters().size() == 1 + && r.getUri().equals(URI.create("http://someuri:80"))) + .expectNextMatches(r -> r.getId().equals("test2") && r.getFilters().size() == 1 + && r.getUri().equals(URI.create("https://httpbin.org:9090"))) .expectComplete().verify(); } @@ -72,52 +69,43 @@ public class RouteBuilderTests { public void testRouteOptionsPropagatedToRoute() { Map routeMetadata = Maps.newHashMap("key", "value"); RouteLocator routeLocator = this.routeLocatorBuilder.routes() - .route("test1", r -> r.host("*.somehost.org").and().path("/somepath") - .filters(f -> f.addRequestHeader("header1", "header-value-1")) - .metadata("key", "value").uri("http://someuri")) - .route("test2", r -> r.host("*.somehost2.org") - .filters(f -> f.addResponseHeader("header-response-1", - "header-response-1")) - .uri("https://httpbin.org:9090")) + .route("test1", + r -> r.host("*.somehost.org").and().path("/somepath") + .filters(f -> f.addRequestHeader("header1", "header-value-1")).metadata("key", "value") + .uri("http://someuri")) + .route("test2", + r -> r.host("*.somehost2.org") + .filters(f -> f.addResponseHeader("header-response-1", "header-response-1")) + .uri("https://httpbin.org:9090")) .build(); StepVerifier.create(routeLocator.getRoutes()) - .expectNextMatches( - r -> r.getId().equals("test1") && r.getFilters().size() == 1 - && r.getUri().equals(URI.create("http://someuri:80")) - && r.getMetadata().equals(routeMetadata)) - .expectNextMatches(r -> r.getId().equals("test2") - && r.getFilters().size() == 1 - && r.getUri().equals(URI.create("https://httpbin.org:9090")) - && r.getMetadata().isEmpty()) + .expectNextMatches(r -> r.getId().equals("test1") && r.getFilters().size() == 1 + && r.getUri().equals(URI.create("http://someuri:80")) && r.getMetadata().equals(routeMetadata)) + .expectNextMatches(r -> r.getId().equals("test2") && r.getFilters().size() == 1 + && r.getUri().equals(URI.create("https://httpbin.org:9090")) && r.getMetadata().isEmpty()) .expectComplete().verify(); } @Test public void testRoutesWithTimeout() { - RouteLocator routeLocator = this.routeLocatorBuilder.routes() - .route("test1", r -> { - return r.host("*.somehost.org").and().path("/somepath") - .filters(f -> f.addRequestHeader("header1", "header-value-1")) - .metadata(RESPONSE_TIMEOUT_ATTR, 1) - .metadata(CONNECT_TIMEOUT_ATTR, 1).uri("http://someuri"); - }) - .route("test2", r -> r.host("*.somehost2.org") - .filters(f -> f.addResponseHeader("header-response-1", - "header-response-1")) + RouteLocator routeLocator = this.routeLocatorBuilder.routes().route("test1", r -> { + return r.host("*.somehost.org").and().path("/somepath") + .filters(f -> f.addRequestHeader("header1", "header-value-1")).metadata(RESPONSE_TIMEOUT_ATTR, 1) + .metadata(CONNECT_TIMEOUT_ATTR, 1).uri("http://someuri"); + }).route("test2", + r -> r.host("*.somehost2.org") + .filters(f -> f.addResponseHeader("header-response-1", "header-response-1")) .uri("https://httpbin.org:9090")) .build(); StepVerifier.create(routeLocator.getRoutes()) - .expectNextMatches( - r -> r.getId().equals("test1") && r.getFilters().size() == 1 - && r.getUri().equals(URI.create("http://someuri:80")) - && r.getMetadata().get(RESPONSE_TIMEOUT_ATTR).equals(1) - && r.getMetadata().get(CONNECT_TIMEOUT_ATTR).equals(1)) - .expectNextMatches( - r -> r.getId().equals("test2") && r.getFilters().size() == 1 - && r.getUri() - .equals(URI.create("https://httpbin.org:9090"))) + .expectNextMatches(r -> r.getId().equals("test1") && r.getFilters().size() == 1 + && r.getUri().equals(URI.create("http://someuri:80")) + && r.getMetadata().get(RESPONSE_TIMEOUT_ATTR).equals(1) + && r.getMetadata().get(CONNECT_TIMEOUT_ATTR).equals(1)) + .expectNextMatches(r -> r.getId().equals("test2") && r.getFilters().size() == 1 + && r.getUri().equals(URI.create("https://httpbin.org:9090"))) .expectComplete().verify(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ConfigurationServiceTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ConfigurationServiceTests.java index c483545c..8418425d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ConfigurationServiceTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ConfigurationServiceTests.java @@ -44,16 +44,15 @@ public class ConfigurationServiceTests { Map map = Collections.singletonMap("config.value", 11); - ConfigurationService.bindOrCreate(Bindable.of(ValidatedConfig.class), map, - "config", getValidator(), null); + ConfigurationService.bindOrCreate(Bindable.of(ValidatedConfig.class), map, "config", getValidator(), null); } @Test public void createWorks() { Map map = Collections.singletonMap("config.value", 9); - ValidatedConfig config = ConfigurationService.bindOrCreate( - Bindable.of(ValidatedConfig.class), map, "config", getValidator(), null); + ValidatedConfig config = ConfigurationService.bindOrCreate(Bindable.of(ValidatedConfig.class), map, "config", + getValidator(), null); assertThat(config).isNotNull().extracting(ValidatedConfig::getValue).isEqualTo(9); } @@ -65,8 +64,7 @@ public class ConfigurationServiceTests { Map map = Collections.singletonMap("config.value", 11); ValidatedConfig config = new ValidatedConfig(); - ConfigurationService.bindOrCreate(Bindable.ofInstance(config), map, "config", - getValidator(), null); + ConfigurationService.bindOrCreate(Bindable.ofInstance(config), map, "config", getValidator(), null); } @Test @@ -74,8 +72,7 @@ public class ConfigurationServiceTests { Map map = Collections.singletonMap("config.value", 9); ValidatedConfig config = new ValidatedConfig(); - ConfigurationService.bindOrCreate(Bindable.ofInstance(config), map, "config", - getValidator(), null); + ConfigurationService.bindOrCreate(Bindable.ofInstance(config), map, "config", getValidator(), null); assertThat(config).isNotNull().extracting(ValidatedConfig::getValue).isEqualTo(9); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java index dc9444a7..54ac5dbc 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ShortcutConfigurableTests.java @@ -56,10 +56,8 @@ public class ShortcutConfigurableTests { Map args = new HashMap<>(); args.put("bean", "#{@foo}"); args.put("arg1", "val1"); - Map map = ShortcutType.DEFAULT.normalize(args, - shortcutConfigurable, parser, this.beanFactory); - assertThat(map).isNotNull().containsEntry("bean", 42).containsEntry("arg1", - "val1"); + Map map = ShortcutType.DEFAULT.normalize(args, shortcutConfigurable, parser, this.beanFactory); + assertThat(map).isNotNull().containsEntry("bean", 42).containsEntry("arg1", "val1"); } @Test @@ -81,8 +79,8 @@ public class ShortcutConfigurableTests { args.put("1", "#{@foo}"); args.put("2", "val1"); args.put("3", "val2"); - Map map = ShortcutType.GATHER_LIST.normalize(args, - shortcutConfigurable, parser, this.beanFactory); + Map map = ShortcutType.GATHER_LIST.normalize(args, shortcutConfigurable, parser, + this.beanFactory); assertThat(map).isNotNull().containsKey("values"); assertThat((List) map.get("values")).containsExactly(42, "val1", "val2"); } @@ -118,8 +116,8 @@ public class ShortcutConfigurableTests { if (hasTailFlag) { args.put("4", "false"); } - Map map = ShortcutType.GATHER_LIST_TAIL_FLAG.normalize(args, - shortcutConfigurable, parser, this.beanFactory); + Map map = ShortcutType.GATHER_LIST_TAIL_FLAG.normalize(args, shortcutConfigurable, parser, + this.beanFactory); assertThat(map).isNotNull().containsKey("values"); assertThat((List) map.get("values")).containsExactly("val0", "val1", "val2"); if (hasTailFlag) { diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ipresolver/XForwardedRemoteAddressResolverTest.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ipresolver/XForwardedRemoteAddressResolverTest.java index fbb21d98..37d48ee6 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ipresolver/XForwardedRemoteAddressResolverTest.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/ipresolver/XForwardedRemoteAddressResolverTest.java @@ -28,14 +28,11 @@ import static org.assertj.core.api.Assertions.assertThat; public class XForwardedRemoteAddressResolverTest { - private final InetSocketAddress remote0000Address = InetSocketAddress - .createUnresolved("0.0.0.0", 1234); + private final InetSocketAddress remote0000Address = InetSocketAddress.createUnresolved("0.0.0.0", 1234); - private final XForwardedRemoteAddressResolver trustOne = XForwardedRemoteAddressResolver - .maxTrustedIndex(1); + private final XForwardedRemoteAddressResolver trustOne = XForwardedRemoteAddressResolver.maxTrustedIndex(1); - private final XForwardedRemoteAddressResolver trustAll = XForwardedRemoteAddressResolver - .trustAll(); + private final XForwardedRemoteAddressResolver trustAll = XForwardedRemoteAddressResolver.trustAll(); @Test public void maxIndexOneReturnsLastForwardedIp() { @@ -66,8 +63,7 @@ public class XForwardedRemoteAddressResolverTest { @Test public void trustOneFallsBackOnEmptyHeader() { - ServerWebExchange exchange = buildExchange( - remoteAddressOnlyBuilder().header("X-Forwarded-For", "")); + ServerWebExchange exchange = buildExchange(remoteAddressOnlyBuilder().header("X-Forwarded-For", "")); InetSocketAddress address = trustOne.resolve(exchange); @@ -78,8 +74,7 @@ public class XForwardedRemoteAddressResolverTest { @Test public void trustOneFallsBackOnMultipleHeaders() { ServerWebExchange exchange = buildExchange( - remoteAddressOnlyBuilder().header("X-Forwarded-For", "0.0.0.1") - .header("X-Forwarded-For", "0.0.0.2")); + remoteAddressOnlyBuilder().header("X-Forwarded-For", "0.0.0.1").header("X-Forwarded-For", "0.0.0.2")); InetSocketAddress address = trustOne.resolve(exchange); @@ -115,8 +110,7 @@ public class XForwardedRemoteAddressResolverTest { @Test public void trustAllFallsBackOnEmptyHeader() { - ServerWebExchange exchange = buildExchange( - remoteAddressOnlyBuilder().header("X-Forwarded-For", "")); + ServerWebExchange exchange = buildExchange(remoteAddressOnlyBuilder().header("X-Forwarded-For", "")); InetSocketAddress address = trustAll.resolve(exchange); @@ -127,8 +121,7 @@ public class XForwardedRemoteAddressResolverTest { @Test public void trustAllFallsBackOnMultipleHeaders() { ServerWebExchange exchange = buildExchange( - remoteAddressOnlyBuilder().header("X-Forwarded-For", "0.0.0.1") - .header("X-Forwarded-For", "0.0.0.2")); + remoteAddressOnlyBuilder().header("X-Forwarded-For", "0.0.0.1").header("X-Forwarded-For", "0.0.0.2")); InetSocketAddress address = trustAll.resolve(exchange); @@ -144,12 +137,11 @@ public class XForwardedRemoteAddressResolverTest { } private MockServerHttpRequest.BaseBuilder oneTwoThreeBuilder() { - return MockServerHttpRequest.get("someUrl").remoteAddress(remote0000Address) - .header("X-Forwarded-For", "0.0.0.1, 0.0.0.2, 0.0.0.3"); + return MockServerHttpRequest.get("someUrl").remoteAddress(remote0000Address).header("X-Forwarded-For", + "0.0.0.1, 0.0.0.2, 0.0.0.3"); } - private ServerWebExchange buildExchange( - MockServerHttpRequest.BaseBuilder requestBuilder) { + private ServerWebExchange buildExchange(MockServerHttpRequest.BaseBuilder requestBuilder) { return MockServerWebExchange.from(requestBuilder.build()); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProviderTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProviderTests.java index 2e181935..88677194 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProviderTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayHttpTagsProviderTests.java @@ -39,14 +39,12 @@ public class GatewayHttpTagsProviderTests { private static final String ROUTE_URI = "http://gatewaytagsprovider.org:80"; - private static final Tags DEFAULT_TAGS = Tags.of("outcome", OK.series().name(), - "status", OK.name(), "httpStatusCode", String.valueOf(OK.value()), - "httpMethod", "GET"); + private static final Tags DEFAULT_TAGS = Tags.of("outcome", OK.series().name(), "status", OK.name(), + "httpStatusCode", String.valueOf(OK.value()), "httpMethod", "GET"); @Test public void httpTags() { - ServerWebExchange exchange = MockServerWebExchange - .from(MockServerHttpRequest.get(ROUTE_URI).build()); + ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get(ROUTE_URI).build()); exchange.getResponse().setStatusCode(OK); Tags tags = tagsProvider.apply(exchange); @@ -55,23 +53,20 @@ public class GatewayHttpTagsProviderTests { @Test public void statusNotChanged() { - ServerWebExchange exchange = MockServerWebExchange - .from(MockServerHttpRequest.get(ROUTE_URI).build()); + ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get(ROUTE_URI).build()); Tags tags = tagsProvider.apply(exchange); - assertThat(tags).isEqualTo(Tags.of("outcome", "CUSTOM", "status", "CUSTOM", - "httpStatusCode", "NA", "httpMethod", "GET")); + assertThat(tags).isEqualTo( + Tags.of("outcome", "CUSTOM", "status", "CUSTOM", "httpStatusCode", "NA", "httpMethod", "GET")); } @Test public void notAbstractServerHttpResponse() { ServerWebExchange mockExchange = mock(ServerWebExchange.class); - ServerHttpResponseDecorator responseDecorator = new ServerHttpResponseDecorator( - new MockServerHttpResponse()); + ServerHttpResponseDecorator responseDecorator = new ServerHttpResponseDecorator(new MockServerHttpResponse()); responseDecorator.setStatusCode(OK); - when(mockExchange.getRequest()) - .thenReturn(MockServerHttpRequest.get(ROUTE_URI).build()); + when(mockExchange.getRequest()).thenReturn(MockServerHttpRequest.get(ROUTE_URI).build()); when(mockExchange.getResponse()).thenReturn(responseDecorator); Tags tags = tagsProvider.apply(mockExchange); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProviderTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProviderTests.java index 6077d4be..b575ee74 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProviderTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/GatewayRouteTagsProviderTests.java @@ -38,16 +38,13 @@ public class GatewayRouteTagsProviderTests { private static final String ROUTE_ID = "test-route"; - private static final Route ROUTE = Route.async().id(ROUTE_ID).uri(ROUTE_URI) - .predicate(swe -> true).build(); + private static final Route ROUTE = Route.async().id(ROUTE_ID).uri(ROUTE_URI).predicate(swe -> true).build(); - private static final Tags DEFAULT_TAGS = Tags.of("routeId", ROUTE_ID, "routeUri", - ROUTE_URI); + private static final Tags DEFAULT_TAGS = Tags.of("routeId", ROUTE_ID, "routeUri", ROUTE_URI); @Test public void routeTags() { - ServerWebExchange exchange = MockServerWebExchange - .from(MockServerHttpRequest.get(ROUTE_URI).build()); + ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get(ROUTE_URI).build()); exchange.getAttributes().put(GATEWAY_ROUTE_ATTR, ROUTE); Tags tags = tagsProvider.apply(exchange); @@ -56,8 +53,7 @@ public class GatewayRouteTagsProviderTests { @Test public void emptyRoute() { - ServerWebExchange exchange = MockServerWebExchange - .from(MockServerHttpRequest.get(ROUTE_URI).build()); + ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get(ROUTE_URI).build()); Tags tags = tagsProvider.apply(exchange); assertThat(tags).isEqualTo(Tags.empty()); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProviderTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProviderTests.java index 46d2c093..7a803710 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProviderTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/support/tagsprovider/PropertiesTagsProviderTests.java @@ -36,16 +36,12 @@ public class PropertiesTagsProviderTests { @Test public void test() { - contextRunner - .withConfiguration( - AutoConfigurations.of(GatewayMetricsAutoConfiguration.class)) + contextRunner.withConfiguration(AutoConfigurations.of(GatewayMetricsAutoConfiguration.class)) .withPropertyValues("spring.cloud.gateway.metrics.tags.foo1=bar1", "spring.cloud.gateway.metrics.tags.foo2=bar2") .run(context -> { - PropertiesTagsProvider provider = context - .getBean(PropertiesTagsProvider.class); - Tags tags = provider.apply(MockServerWebExchange - .from(MockServerHttpRequest.get("").build())); + PropertiesTagsProvider provider = context.getBean(PropertiesTagsProvider.class); + Tags tags = provider.apply(MockServerWebExchange.from(MockServerHttpRequest.get("").build())); assertThat(tags).isEqualTo(Tags.of("foo1", "bar1", "foo2", "bar2")); }); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java index 03d6f880..b0a9ec2f 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/AdhocTestSuite.java @@ -37,8 +37,7 @@ import static org.junit.Assume.assumeThat; * @author Spencer Gibb */ @RunWith(Suite.class) -@SuiteClasses({ - org.springframework.cloud.gateway.handler.RoutePredicateHandlerMappingIntegrationTests.class, +@SuiteClasses({ org.springframework.cloud.gateway.handler.RoutePredicateHandlerMappingIntegrationTests.class, org.springframework.cloud.gateway.handler.predicate.AfterRoutePredicateFactoryTests.class, org.springframework.cloud.gateway.handler.predicate.CloudFoundryRouteServiceRoutePredicateFactoryIntegrationTests.class, org.springframework.cloud.gateway.handler.predicate.HostRoutePredicateFactoryTests.class, @@ -96,8 +95,7 @@ import static org.junit.Assume.assumeThat; org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiterConfigTests.class, org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiterTests.class, org.springframework.cloud.gateway.filter.NettyRoutingFilterIntegrationTests.class, - GatewayMetricsFilterTests.class, - org.springframework.cloud.gateway.filter.ForwardRoutingFilterTests.class, + GatewayMetricsFilterTests.class, org.springframework.cloud.gateway.filter.ForwardRoutingFilterTests.class, org.springframework.cloud.gateway.route.RouteDefinitionRouteLocatorTests.class, org.springframework.cloud.gateway.route.RouteTests.class, org.springframework.cloud.gateway.route.CachingRouteLocatorTests.class, @@ -134,8 +132,7 @@ public class AdhocTestSuite { @Override public Statement apply(Statement base, Description description) { - assumeThat("Adhoc Tests ignored", System.getenv("GATEWAY_ADHOC_ENABLED"), - is(equalTo("true"))); + assumeThat("Adhoc Tests ignored", System.getenv("GATEWAY_ADHOC_ENABLED"), is(equalTo("true"))); return base; } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java index c9c1651a..3f7fc4bf 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/BaseWebClientTests.java @@ -74,15 +74,12 @@ public class BaseWebClientTests { protected void setup(ClientHttpConnector httpConnector, String baseUri) { this.baseUri = baseUri; - this.webClient = WebClient.builder().clientConnector(httpConnector) - .baseUrl(this.baseUri).build(); - this.testClient = WebTestClient.bindToServer(httpConnector).baseUrl(this.baseUri) - .build(); + this.webClient = WebClient.builder().clientConnector(httpConnector).baseUrl(this.baseUri).build(); + this.testClient = WebTestClient.bindToServer(httpConnector).baseUrl(this.baseUri).build(); } @Configuration(proxyBeanMethods = false) - @LoadBalancerClient(name = "testservice", - configuration = TestLoadBalancerConfig.class) + @LoadBalancerClient(name = "testservice", configuration = TestLoadBalancerConfig.class) @Import(PermitAllSecurityConfiguration.class) public static class DefaultTestConfig { @@ -103,16 +100,14 @@ public class BaseWebClientTests { public GlobalFilter modifyResponseFilter() { return (exchange, chain) -> { log.info("modifyResponseFilter start"); - String value = exchange.getAttributeOrDefault(GATEWAY_HANDLER_MAPPER_ATTR, - "N/A"); + String value = exchange.getAttributeOrDefault(GATEWAY_HANDLER_MAPPER_ATTR, "N/A"); if (!exchange.getResponse().isCommitted()) { exchange.getResponse().getHeaders().add(HANDLER_MAPPER_HEADER, value); } Route route = exchange.getAttributeOrDefault(GATEWAY_ROUTE_ATTR, null); if (route != null) { if (!exchange.getResponse().isCommitted()) { - exchange.getResponse().getHeaders().add(ROUTE_ID_HEADER, - route.getId()); + exchange.getResponse().getHeaders().add(ROUTE_ID_HEADER, route.getId()); } } return chain.filter(exchange); @@ -126,8 +121,7 @@ public class BaseWebClientTests { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (exchange.getRequest().getPath().toString().contains("httpbin/httpbin")) { - return Mono - .error(new IllegalStateException("recursive call to /httpbin")); + return Mono.error(new IllegalStateException("recursive call to /httpbin")); } return chain.filter(exchange); } @@ -147,10 +141,8 @@ public class BaseWebClientTests { protected int port = 0; @Bean - public ServiceInstanceListSupplier staticServiceInstanceListSupplier( - Environment env) { - return ServiceInstanceListSupplier.fixed(env).instance(port, SERVICE_ID) - .build(); + public ServiceInstanceListSupplier staticServiceInstanceListSupplier(Environment env) { + return ServiceInstanceListSupplier.fixed(env).instance(port, SERVICE_ID).build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/CustomBlockHoundIntegration.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/CustomBlockHoundIntegration.java index 953f7da3..89ae2601 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/CustomBlockHoundIntegration.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/CustomBlockHoundIntegration.java @@ -33,8 +33,7 @@ public class CustomBlockHoundIntegration implements BlockHoundIntegration { // }); // Uses Unsafe#park - builder.allowBlockingCallsInside("reactor.core.scheduler.SchedulerTask", - "dispose"); + builder.allowBlockingCallsInside("reactor.core.scheduler.SchedulerTask", "dispose"); // Uses // ch.qos.logback.classic.spi.PackagingDataCalculator#getImplementationVersion @@ -47,51 +46,40 @@ public class CustomBlockHoundIntegration implements BlockHoundIntegration { // Uses org.springframework.util.JdkIdGenerator#generateId // Uses UUID#randomUUID - builder.allowBlockingCallsInside( - "org.springframework.web.server.session.InMemoryWebSessionStore", + builder.allowBlockingCallsInside("org.springframework.web.server.session.InMemoryWebSessionStore", "lambda$createWebSession$0"); // Uses java.util.Random#nextInt - builder.allowBlockingCallsInside("org.springframework.util.MimeTypeUtils", - "generateMultipartBoundary"); + builder.allowBlockingCallsInside("org.springframework.util.MimeTypeUtils", "generateMultipartBoundary"); // SPRING DATA REDIS RELATED // Uses Unsafe#park - builder.allowBlockingCallsInside( - "org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory", + builder.allowBlockingCallsInside("org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory", "getReactiveConnection"); // NETTY RELATED // Uses Thread#sleep - builder.allowBlockingCallsInside("io.netty.channel.nio.NioEventLoop", - "handleLoopException"); - builder.allowBlockingCallsInside( - "io.netty.util.concurrent.SingleThreadEventExecutor", "confirmShutdown"); + builder.allowBlockingCallsInside("io.netty.channel.nio.NioEventLoop", "handleLoopException"); + builder.allowBlockingCallsInside("io.netty.util.concurrent.SingleThreadEventExecutor", "confirmShutdown"); // Uses Unsafe#park - builder.allowBlockingCallsInside("io.netty.util.concurrent.GlobalEventExecutor", - "execute"); - builder.allowBlockingCallsInside( - "io.netty.util.concurrent.SingleThreadEventExecutor$6", "run"); + builder.allowBlockingCallsInside("io.netty.util.concurrent.GlobalEventExecutor", "execute"); + builder.allowBlockingCallsInside("io.netty.util.concurrent.SingleThreadEventExecutor$6", "run"); // builder.allowBlockingCallsInside("io.netty.util.concurrent.GlobalEventExecutor", // "takeTask"); // builder.allowBlockingCallsInside("io.netty.util.concurrent.GlobalEventExecutor", // "addTask"); - builder.allowBlockingCallsInside( - "io.netty.util.concurrent.FastThreadLocalRunnable", "run"); + builder.allowBlockingCallsInside("io.netty.util.concurrent.FastThreadLocalRunnable", "run"); // SECURITY RELATED // For HTTPS traffic - builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", - "channelActive"); - builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", - "channelInactive"); + builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", "channelActive"); + builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", "channelInactive"); builder.allowBlockingCallsInside("io.netty.handler.ssl.SslHandler", "unwrap"); - builder.allowBlockingCallsInside("io.netty.handler.ssl.SslContext", - "newClientContextInternal"); + builder.allowBlockingCallsInside("io.netty.handler.ssl.SslContext", "newClientContextInternal"); // Uses org.springframework.security.crypto.bcrypt.BCrypt#gensalt // Uses java.security.SecureRandom#nextBytes diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/FormIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/FormIntegrationTests.java index b5855e95..5fc08bc1 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/FormIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/FormIntegrationTests.java @@ -51,8 +51,8 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA; @SuppressWarnings("unchecked") public class FormIntegrationTests extends BaseWebClientTests { - public static final MediaType FORM_URL_ENCODED_CONTENT_TYPE = new MediaType( - APPLICATION_FORM_URLENCODED, StandardCharsets.UTF_8); + public static final MediaType FORM_URL_ENCODED_CONTENT_TYPE = new MediaType(APPLICATION_FORM_URLENCODED, + StandardCharsets.UTF_8); @Test public void formUrlencodedWorks() { @@ -93,8 +93,7 @@ public class FormIntegrationTests extends BaseWebClientTests { MultiValueMap> formData = createMultipartData(); TestRestTemplate rest = new TestRestTemplate(); - ResponseEntity response = rest.postForEntity(baseUri + "/post", formData, - Map.class); + ResponseEntity response = rest.postForEntity(baseUri + "/post", formData, Map.class); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); assertMultipartData(response.getBody()); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ForwardTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ForwardTests.java index 7119bf56..8c455f4a 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ForwardTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ForwardTests.java @@ -56,16 +56,14 @@ public class ForwardTests { @Test public void forwardWorks() { - this.client.get().uri("/localcontroller") - .header(HttpHeaders.HOST, "www.forward.org").exchange().expectStatus() + this.client.get().uri("/localcontroller").header(HttpHeaders.HOST, "www.forward.org").exchange().expectStatus() .isOk().expectBody().json("{\"from\":\"localcontroller\"}"); } @Test public void forwardWithCorrectPath() { - this.client.get().uri("/foo").header(HttpHeaders.HOST, "www.forward.org") - .exchange().expectStatus().isOk().expectBody() - .json("{\"from\":\"localcontroller\"}"); + this.client.get().uri("/foo").header(HttpHeaders.HOST, "www.forward.org").exchange().expectStatus().isOk() + .expectBody().json("{\"from\":\"localcontroller\"}"); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java index 3e79850b..b0074e78 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayIntegrationTests.java @@ -75,77 +75,57 @@ public class GatewayIntegrationTests extends BaseWebClientTests { public void listenersInOrder() { assertThat(context).isInstanceOf(AbstractApplicationContext.class); AbstractApplicationContext ctxt = (AbstractApplicationContext) context; - List> applicationListeners = new ArrayList<>( - ctxt.getApplicationListeners()); + List> applicationListeners = new ArrayList<>(ctxt.getApplicationListeners()); AnnotationAwareOrderComparator.sort(applicationListeners); - int weightFilterIndex = applicationListeners - .indexOf(context.getBean(WeightCalculatorWebFilter.class)); - int routeLocatorIndex = applicationListeners - .indexOf(context.getBean(CachingRouteLocator.class)); - assertThat(weightFilterIndex > routeLocatorIndex) - .as("CachingRouteLocator is after WeightCalculatorWebFilter").isTrue(); + int weightFilterIndex = applicationListeners.indexOf(context.getBean(WeightCalculatorWebFilter.class)); + int routeLocatorIndex = applicationListeners.indexOf(context.getBean(CachingRouteLocator.class)); + assertThat(weightFilterIndex > routeLocatorIndex).as("CachingRouteLocator is after WeightCalculatorWebFilter") + .isTrue(); } @Test public void complexContentTypeWorks() { - testClient.post().uri("/headers").contentType(MediaType.APPLICATION_JSON) - .bodyValue("testdata").header("Host", "www.complexcontenttype.org") - .exchange().expectStatus().isOk().expectBody(Map.class) + testClient.post().uri("/headers").contentType(MediaType.APPLICATION_JSON).bodyValue("testdata") + .header("Host", "www.complexcontenttype.org").exchange().expectStatus().isOk().expectBody(Map.class) .consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); - assertThat(headers).containsEntry(HttpHeaders.CONTENT_TYPE, - MediaType.APPLICATION_JSON_VALUE); + Map headers = getMap(result.getResponseBody(), "headers"); + assertThat(headers).containsEntry(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); }); } @Test public void forwardedHeadersWork() { - testClient.get().uri("/headers").exchange().expectStatus().isOk() - .expectBody(Map.class).consumeWith(result -> { - Map headers = getMap(result.getResponseBody(), - "headers"); - assertThat(headers).containsKeys( - ForwardedHeadersFilter.FORWARDED_HEADER, - XForwardedHeadersFilter.X_FORWARDED_FOR_HEADER, - XForwardedHeadersFilter.X_FORWARDED_HOST_HEADER, - XForwardedHeadersFilter.X_FORWARDED_PORT_HEADER, - XForwardedHeadersFilter.X_FORWARDED_PROTO_HEADER); - assertThat(headers.get(ForwardedHeadersFilter.FORWARDED_HEADER)) - .asString().contains("proto=http") - .contains("host=\"localhost:").contains("for=\"127.0.0.1:"); - assertThat( - headers.get(XForwardedHeadersFilter.X_FORWARDED_HOST_HEADER)) - .asString().isEqualTo("localhost:" + this.port); - assertThat( - headers.get(XForwardedHeadersFilter.X_FORWARDED_PORT_HEADER)) - .asString().isEqualTo("" + this.port); - assertThat( - headers.get(XForwardedHeadersFilter.X_FORWARDED_PROTO_HEADER)) - .asString().isEqualTo("http"); - }); + testClient.get().uri("/headers").exchange().expectStatus().isOk().expectBody(Map.class).consumeWith(result -> { + Map headers = getMap(result.getResponseBody(), "headers"); + assertThat(headers).containsKeys(ForwardedHeadersFilter.FORWARDED_HEADER, + XForwardedHeadersFilter.X_FORWARDED_FOR_HEADER, XForwardedHeadersFilter.X_FORWARDED_HOST_HEADER, + XForwardedHeadersFilter.X_FORWARDED_PORT_HEADER, XForwardedHeadersFilter.X_FORWARDED_PROTO_HEADER); + assertThat(headers.get(ForwardedHeadersFilter.FORWARDED_HEADER)).asString().contains("proto=http") + .contains("host=\"localhost:").contains("for=\"127.0.0.1:"); + assertThat(headers.get(XForwardedHeadersFilter.X_FORWARDED_HOST_HEADER)).asString() + .isEqualTo("localhost:" + this.port); + assertThat(headers.get(XForwardedHeadersFilter.X_FORWARDED_PORT_HEADER)).asString() + .isEqualTo("" + this.port); + assertThat(headers.get(XForwardedHeadersFilter.X_FORWARDED_PROTO_HEADER)).asString().isEqualTo("http"); + }); } @Test public void compositeRouteWorks() { - testClient.get().uri("/headers?foo=bar&baz").header("Host", "www.foo.org") - .header("X-Request-Id", "123").cookie("chocolate", "chip").exchange() - .expectStatus().isOk().expectHeader() - .valueEquals(HANDLER_MAPPER_HEADER, - RoutePredicateHandlerMapping.class.getSimpleName()) - .expectHeader() - .valueEquals(ROUTE_ID_HEADER, "host_foo_path_headers_to_httpbin") - .expectHeader().valueEquals("X-Response-Foo", "Bar"); + testClient.get().uri("/headers?foo=bar&baz").header("Host", "www.foo.org").header("X-Request-Id", "123") + .cookie("chocolate", "chip").exchange().expectStatus().isOk().expectHeader() + .valueEquals(HANDLER_MAPPER_HEADER, RoutePredicateHandlerMapping.class.getSimpleName()).expectHeader() + .valueEquals(ROUTE_ID_HEADER, "host_foo_path_headers_to_httpbin").expectHeader() + .valueEquals("X-Response-Foo", "Bar"); } @Test public void defaultFiltersWorks() { assertThat(this.properties.getDefaultFilters()).isNotEmpty(); - testClient.get().uri("/headers").header("Host", "www.addresponseheader.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals("X-Response-Default-Foo", "Default-Bar") - .returnResult(Object.class).consumeWith(result -> { + testClient.get().uri("/headers").header("Host", "www.addresponseheader.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals("X-Response-Default-Foo", "Default-Bar").returnResult(Object.class) + .consumeWith(result -> { HttpHeaders httpHeaders = result.getResponseHeaders(); assertThat(httpHeaders.get("X-Response-Default-Foo")).hasSize(1); }); @@ -153,15 +133,14 @@ public class GatewayIntegrationTests extends BaseWebClientTests { @Test public void loadBalancerFilterWorks() { - testClient.get().uri("/get").header("Host", "www.loadbalancerclient.org") - .exchange().expectStatus().isOk().expectHeader() - .valueEquals(ROUTE_ID_HEADER, "load_balancer_client_test"); + testClient.get().uri("/get").header("Host", "www.loadbalancerclient.org").exchange().expectStatus().isOk() + .expectHeader().valueEquals(ROUTE_ID_HEADER, "load_balancer_client_test"); } @Test public void loadBalancerFilterNoClientWorks() { - testClient.get().uri("/get").header("Host", "www.loadbalancerclientempty.org") - .exchange().expectStatus().value(new BaseMatcher() { + testClient.get().uri("/get").header("Host", "www.loadbalancerclientempty.org").exchange().expectStatus() + .value(new BaseMatcher() { @Override public boolean matches(Object item) { if (Integer.class.isInstance(item)) { @@ -181,8 +160,7 @@ public class GatewayIntegrationTests extends BaseWebClientTests { @Test // gh-374 no content type/empty body causes NPR in NettyRoutingFilter public void noContentType() { - testClient.get().uri("/nocontenttype").exchange().expectStatus() - .is2xxSuccessful(); + testClient.get().uri("/nocontenttype").exchange().expectStatus().is2xxSuccessful(); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java index d018d876..76b1ed9e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/GatewayTestApplication.java @@ -49,8 +49,7 @@ public class GatewayTestApplication { @Bean public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator( - ReactiveDiscoveryClient discoveryClient, - DiscoveryLocatorProperties properties) { + ReactiveDiscoveryClient discoveryClient, DiscoveryLocatorProperties properties) { return new DiscoveryClientRouteDefinitionLocator(discoveryClient, properties); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpBinCompatibleController.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpBinCompatibleController.java index f915a8a9..ffb3150f 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpBinCompatibleController.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpBinCompatibleController.java @@ -71,8 +71,7 @@ public class HttpBinCompatibleController { return result; } - @RequestMapping(path = "/multivalueheaders", - method = { RequestMethod.GET, RequestMethod.POST }, + @RequestMapping(path = "/multivalueheaders", method = { RequestMethod.GET, RequestMethod.POST }, produces = MediaType.APPLICATION_JSON_VALUE) public Map multiValueHeaders(ServerWebExchange exchange) { Map result = new HashMap<>(); @@ -81,16 +80,14 @@ public class HttpBinCompatibleController { } @RequestMapping(path = "/delay/{sec}", produces = MediaType.APPLICATION_JSON_VALUE) - public Mono> get(ServerWebExchange exchange, - @PathVariable int sec) throws InterruptedException { + public Mono> get(ServerWebExchange exchange, @PathVariable int sec) + throws InterruptedException { int delay = Math.min(sec, 10); return Mono.just(get(exchange)).delayElement(Duration.ofSeconds(delay)); } - @RequestMapping(path = "/anything/{anything}", - produces = MediaType.APPLICATION_JSON_VALUE) - public Map anything(ServerWebExchange exchange, - @PathVariable(required = false) String anything) { + @RequestMapping(path = "/anything/{anything}", produces = MediaType.APPLICATION_JSON_VALUE) + public Map anything(ServerWebExchange exchange, @PathVariable(required = false) String anything) { return get(exchange); } @@ -111,33 +108,27 @@ public class HttpBinCompatibleController { @RequestMapping(value = "/post", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public Mono> postFormData( - @RequestBody Mono> parts) { + public Mono> postFormData(@RequestBody Mono> parts) { // StringDecoder decoder = StringDecoder.allMimeTypes(true); - return parts.flux().flatMap(map -> Flux.fromIterable(map.values())) - .flatMap(Flux::fromIterable).filter(part -> part instanceof FilePart) - .reduce(new HashMap(), (files, part) -> { + return parts.flux().flatMap(map -> Flux.fromIterable(map.values())).flatMap(Flux::fromIterable) + .filter(part -> part instanceof FilePart).reduce(new HashMap(), (files, part) -> { MediaType contentType = part.headers().getContentType(); long contentLength = part.headers().getContentLength(); // TODO: get part data - files.put(part.name(), - "data:" + contentType + ";base64," + contentLength); + files.put(part.name(), "data:" + contentType + ";base64," + contentLength); return files; }).map(files -> Collections.singletonMap("files", files)); } - @RequestMapping(path = "/post", - consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, + @RequestMapping(path = "/post", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public Mono> postUrlEncoded(ServerWebExchange exchange) - throws IOException { + public Mono> postUrlEncoded(ServerWebExchange exchange) throws IOException { return post(exchange, null); } - @RequestMapping(path = "/post", method = RequestMethod.POST, - produces = MediaType.APPLICATION_JSON_VALUE) - public Mono> post(ServerWebExchange exchange, - @RequestBody(required = false) String body) throws IOException { + @RequestMapping(path = "/post", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + public Mono> post(ServerWebExchange exchange, @RequestBody(required = false) String body) + throws IOException { HashMap ret = new HashMap<>(); ret.put("headers", getHeaders(exchange)); ret.put("data", body); @@ -159,8 +150,7 @@ public class HttpBinCompatibleController { return ResponseEntity.status(status).body("Failed with " + status); } - @RequestMapping(path = "/post/empty", method = RequestMethod.POST, - produces = MediaType.APPLICATION_JSON_VALUE) + @RequestMapping(path = "/post/empty", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) public Mono emptyResponse() { return Mono.empty(); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpStatusTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpStatusTests.java index 72347c5d..58d3ee11 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpStatusTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/HttpStatusTests.java @@ -49,15 +49,13 @@ public class HttpStatusTests extends BaseWebClientTests { @Test public void notFoundResponseWorks() { - testClient.get().uri("/status/404").exchange().expectStatus() - .isEqualTo(HttpStatus.NOT_FOUND).expectBody(String.class) - .isEqualTo("Failed with 404"); + testClient.get().uri("/status/404").exchange().expectStatus().isEqualTo(HttpStatus.NOT_FOUND) + .expectBody(String.class).isEqualTo("Failed with 404"); } @Test public void nonStandardCodeWorks() { - ResponseEntity response = new TestRestTemplate() - .getForEntity(baseUri + "/status/432", String.class); + ResponseEntity response = new TestRestTemplate().getForEntity(baseUri + "/status/432", String.class); assertThat(response.getStatusCodeValue()).isEqualTo(432); assertThat(response.getBody()).isEqualTo("Failed with 432"); @@ -69,17 +67,15 @@ public class HttpStatusTests extends BaseWebClientTests { @Test public void serverErrorResponseWorks() { - testClient.get().uri("/status/500").exchange().expectStatus() - .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody(String.class) - .isEqualTo("Failed with 500"); + testClient.get().uri("/status/500").exchange().expectStatus().isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR) + .expectBody(String.class).isEqualTo("Failed with 500"); } @Test public void normalErrorPageWorks() { - testClient.get().uri("/exception").exchange().expectStatus() - .isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR).expectBody(Map.class) - .consumeWith(result -> assertThat(result.getResponseBody()) - .hasSizeGreaterThanOrEqualTo(5) + testClient.get().uri("/exception").exchange().expectStatus().isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR) + .expectBody(Map.class) + .consumeWith(result -> assertThat(result.getResponseBody()).hasSizeGreaterThanOrEqualTo(5) .containsKeys("timestamp", "path", "status", "error", "message")); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PermitAllSecurityConfiguration.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PermitAllSecurityConfiguration.java index 16a5b6e6..78594f8d 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PermitAllSecurityConfiguration.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PermitAllSecurityConfiguration.java @@ -25,10 +25,8 @@ import org.springframework.security.web.server.SecurityWebFilterChain; public class PermitAllSecurityConfiguration { @Bean - SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) - throws Exception { - return http.authorizeExchange().anyExchange().permitAll().and().csrf().disable() - .build(); + SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) throws Exception { + return http.authorizeExchange().anyExchange().permitAll().and().csrf().disable().build(); } } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PostTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PostTests.java index 51d709a4..488bd42e 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PostTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/PostTests.java @@ -43,12 +43,10 @@ public class PostTests extends BaseWebClientTests { @Test public void postWorks() { - Mono result = webClient.post().uri("/post").header("Host", "www.example.org") - .bodyValue("testdata").exchange() - .flatMap(response -> response.body(toMono(Map.class))); + Mono result = webClient.post().uri("/post").header("Host", "www.example.org").bodyValue("testdata") + .exchange().flatMap(response -> response.body(toMono(Map.class))); - StepVerifier.create(result) - .consumeNextWith(map -> assertThat(map).containsEntry("data", "testdata")) + StepVerifier.create(result).consumeNextWith(map -> assertThat(map).containsEntry("data", "testdata")) .expectComplete().verify(DURATION); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/RouteConstructionIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/RouteConstructionIntegrationTests.java index 035a3145..f5669522 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/RouteConstructionIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/RouteConstructionIntegrationTests.java @@ -33,9 +33,8 @@ public class RouteConstructionIntegrationTests { @Test @Ignore // FIXME: https://github.com/spring-cloud/spring-cloud-gateway/issues/1676 public void routesWithVerificationShouldFail() { - assertThatThrownBy(() -> new SpringApplicationBuilder(TestConfig.class) - .profiles("verification-route").run()) - .hasMessageContaining("Stop right now!"); + assertThatThrownBy(() -> new SpringApplicationBuilder(TestConfig.class).profiles("verification-route").run()) + .hasMessageContaining("Stop right now!"); } @EnableAutoConfiguration diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/sse/SseIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/sse/SseIntegrationTests.java index 7dffcdcf..eec5884b 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/sse/SseIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/sse/SseIntegrationTests.java @@ -95,16 +95,12 @@ public class SseIntegrationTests { logger.info("SSE Port: " + this.serverPort); this.gatewayContext = new SpringApplicationBuilder(GatewayConfig.class) - .properties("sse.server.port:" + this.serverPort, "server.port=0", - "spring.jmx.enabled=false") - .run(); + .properties("sse.server.port:" + this.serverPort, "server.port=0", "spring.jmx.enabled=false").run(); - ConfigurableEnvironment env = this.gatewayContext - .getBean(ConfigurableEnvironment.class); + ConfigurableEnvironment env = this.gatewayContext.getBean(ConfigurableEnvironment.class); this.gatewayPort = Integer.valueOf(env.getProperty("local.server.port")); - this.webClient = WebClient - .create("http://localhost:" + this.gatewayPort + "/sse"); + this.webClient = WebClient.create("http://localhost:" + this.gatewayPort + "/sse"); logger.info("Gateway Port: " + this.gatewayPort); } @@ -128,22 +124,18 @@ public class SseIntegrationTests { @Test public void sseAsString() { - Flux result = this.webClient.get().uri("/string") - .accept(TEXT_EVENT_STREAM).exchange() + Flux result = this.webClient.get().uri("/string").accept(TEXT_EVENT_STREAM).exchange() .flatMapMany(response -> response.bodyToFlux(String.class)); - StepVerifier.create(result).expectNext("foo 0").expectNext("foo 1").thenCancel() - .verify(Duration.ofSeconds(5L)); + StepVerifier.create(result).expectNext("foo 0").expectNext("foo 1").thenCancel().verify(Duration.ofSeconds(5L)); } @Test public void sseAsPerson() { - Flux result = this.webClient.get().uri("/person") - .accept(TEXT_EVENT_STREAM).exchange() + Flux result = this.webClient.get().uri("/person").accept(TEXT_EVENT_STREAM).exchange() .flatMapMany(response -> response.bodyToFlux(Person.class)); - StepVerifier.create(result).expectNext(new Person("foo 0")) - .expectNext(new Person("foo 1")).thenCancel() + StepVerifier.create(result).expectNext(new Person("foo 0")).expectNext(new Person("foo 1")).thenCancel() .verify(Duration.ofSeconds(5L)); } @@ -151,10 +143,9 @@ public class SseIntegrationTests { @SuppressWarnings("Duplicates") public void sseAsEvent() { ResolvableType type = forClassWithGenerics(ServerSentEvent.class, String.class); - Flux> result = this.webClient.get().uri("/event") - .accept(TEXT_EVENT_STREAM).exchange() - .flatMapMany(response -> response.body( - toFlux(new ParameterizedTypeReference>() { + Flux> result = this.webClient.get().uri("/event").accept(TEXT_EVENT_STREAM).exchange() + .flatMapMany( + response -> response.body(toFlux(new ParameterizedTypeReference>() { }))); StepVerifier.create(result).consumeNextWith(event -> { @@ -175,10 +166,9 @@ public class SseIntegrationTests { @Test @SuppressWarnings("Duplicates") public void sseAsEventWithoutAcceptHeader() { - Flux> result = this.webClient.get().uri("/event") - .accept(TEXT_EVENT_STREAM).exchange() - .flatMapMany(response -> response.body( - toFlux(new ParameterizedTypeReference>() { + Flux> result = this.webClient.get().uri("/event").accept(TEXT_EVENT_STREAM).exchange() + .flatMapMany( + response -> response.body(toFlux(new ParameterizedTypeReference>() { }))); StepVerifier.create(result).consumeNextWith(event -> { @@ -214,8 +204,7 @@ public class SseIntegrationTests { @RequestMapping("/sse/event") Flux> sse() { - return INTERVAL.map(l -> ServerSentEvent.builder("foo").id(Long.toString(l)) - .comment("bar").build()); + return INTERVAL.map(l -> ServerSentEvent.builder("foo").id(Long.toString(l)).comment("bar").build()); } } @@ -242,9 +231,7 @@ public class SseIntegrationTests { @Bean public RouteLocator sseRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route("sse_route", - r -> r.alwaysTrue().uri("http://localhost:" + this.port)) + return builder.routes().route("sse_route", r -> r.alwaysTrue().uri("http://localhost:" + this.port)) .build(); } @@ -279,8 +266,7 @@ public class SseIntegrationTests { return false; } Person person = (Person) o; - return !(this.name != null ? !this.name.equals(person.name) - : person.name != null); + return !(this.name != null ? !this.name.equals(person.name) : person.name != null); } @Override diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/ClientCertAuthSSLTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/ClientCertAuthSSLTests.java index fcf7598d..a2210e49 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/ClientCertAuthSSLTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/ClientCertAuthSSLTests.java @@ -62,18 +62,14 @@ public class ClientCertAuthSSLTests extends SingleCertSSLTests { try { URL url = ResourceUtils.getURL(keyStore); - store.load(url.openStream(), - keyStorePassword != null ? keyStorePassword.toCharArray() : null); + store.load(url.openStream(), keyStorePassword != null ? keyStorePassword.toCharArray() : null); } catch (Exception e) { - throw new WebServerException("Could not load key store ' " + keyStore + "'", - e); + throw new WebServerException("Could not load key store ' " + keyStore + "'", e); } - KeyManagerFactory keyManagerFactory = KeyManagerFactory - .getInstance(KeyManagerFactory.getDefaultAlgorithm()); - char[] keyPasswordCharArray = keyPassword != null ? keyPassword.toCharArray() - : null; + KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + char[] keyPasswordCharArray = keyPassword != null ? keyPassword.toCharArray() : null; if (keyPasswordCharArray == null && keyStorePassword != null) { keyPasswordCharArray = keyStorePassword.toCharArray(); @@ -82,13 +78,10 @@ public class ClientCertAuthSSLTests extends SingleCertSSLTests { keyManagerFactory.init(store, keyPasswordCharArray); try { - SslContext sslContext = SslContextBuilder.forClient() - .trustManager(InsecureTrustManagerFactory.INSTANCE) + SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE) .keyManager(keyManagerFactory).build(); - HttpClient httpClient = HttpClient.create() - .secure(ssl -> ssl.sslContext(sslContext)); - setup(new ReactorClientHttpConnector(httpClient), - "https://localhost:" + port); + HttpClient httpClient = HttpClient.create().secure(ssl -> ssl.sslContext(sslContext)); + setup(new ReactorClientHttpConnector(httpClient), "https://localhost:" + port); } catch (SSLException e) { throw new RuntimeException(e); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/SingleCertSSLTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/SingleCertSSLTests.java index 36235d89..be50ada9 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/SingleCertSSLTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/ssl/SingleCertSSLTests.java @@ -50,12 +50,10 @@ public class SingleCertSSLTests extends BaseWebClientTests { @Before public void setup() throws Exception { try { - SslContext sslContext = SslContextBuilder.forClient() - .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); - HttpClient httpClient = HttpClient.create() - .secure(ssl -> ssl.sslContext(sslContext)); - setup(new ReactorClientHttpConnector(httpClient), - "https://localhost:" + port); + SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE) + .build(); + HttpClient httpClient = HttpClient.create().secure(ssl -> ssl.sslContext(sslContext)); + setup(new ReactorClientHttpConnector(httpClient), "https://localhost:" + port); } catch (SSLException e) { throw new RuntimeException(e); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/AbstractHttpServer.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/AbstractHttpServer.java index 74ba6572..3165cc32 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/AbstractHttpServer.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/AbstractHttpServer.java @@ -86,9 +86,7 @@ public abstract class AbstractHttpServer implements HttpServer { } protected HttpHandler resolveHttpHandler() { - return (getHttpHandlerMap() != null - ? new ContextPathCompositeHandler(getHttpHandlerMap()) - : getHttpHandler()); + return (getHttpHandlerMap() != null ? new ContextPathCompositeHandler(getHttpHandlerMap()) : getHttpHandler()); } // InitializingBean @@ -97,8 +95,7 @@ public abstract class AbstractHttpServer implements HttpServer { public final void afterPropertiesSet() throws Exception { Assert.notNull(this.host, "Host must not be null"); Assert.isTrue(this.port >= 0, "Port must not be a negative number"); - Assert.isTrue(this.httpHandler != null || this.handlerMap != null, - "No HttpHandler configured"); + Assert.isTrue(this.httpHandler != null || this.handlerMap != null, "No HttpHandler configured"); Assert.state(!this.running, "Cannot reconfigure while running"); synchronized (this.lifecycleMonitor) { @@ -125,8 +122,7 @@ public abstract class AbstractHttpServer implements HttpServer { startInternal(); long millis = stopWatch.getTotalTimeMillis(); if (logger.isDebugEnabled()) { - logger.debug("Server started on port " + getPort() + "(" + millis - + " millis)."); + logger.debug("Server started on port " + getPort() + "(" + millis + " millis)."); } } catch (Throwable ex) { @@ -150,8 +146,7 @@ public abstract class AbstractHttpServer implements HttpServer { StopWatch stopWatch = new StopWatch(); stopWatch.start(); stopInternal(); - logger.debug("Server stopped (" + stopWatch.getTotalTimeMillis() - + " millis)."); + logger.debug("Server stopped (" + stopWatch.getTotalTimeMillis() + " millis)."); } catch (Throwable ex) { throw new IllegalStateException(ex); diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/ReactorHttpServer.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/ReactorHttpServer.java index 1aaaac60..b80fbced 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/ReactorHttpServer.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/support/ReactorHttpServer.java @@ -46,8 +46,7 @@ public class ReactorHttpServer extends AbstractHttpServer { @Override protected void startInternal() { - DisposableServer server = this.reactorServer.handle(this.reactorHandler).bind() - .block(); + DisposableServer server = this.reactorServer.handle(this.reactorHandler).bind().block(); setPort(server.port()); this.serverRef.set(server); } diff --git a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java index a86d4519..be15b0ac 100644 --- a/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java +++ b/spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java @@ -99,8 +99,7 @@ public class WebSocketIntegrationTests { private int gatewayPort; - private static Mono doSend(WebSocketSession session, - Publisher output) { + private static Mono doSend(WebSocketSession session, Publisher output) { return session.send(output); // workaround for suspected RxNetty WebSocket client issue // https://github.com/ReactiveX/RxNetty/issues/560 @@ -124,12 +123,9 @@ public class WebSocketIntegrationTests { } this.gatewayContext = new SpringApplicationBuilder(GatewayConfig.class) - .properties("ws.server.port:" + this.serverPort, "server.port=0", - "spring.jmx.enabled=false") - .run(); + .properties("ws.server.port:" + this.serverPort, "server.port=0", "spring.jmx.enabled=false").run(); - ConfigurableEnvironment env = this.gatewayContext - .getBean(ConfigurableEnvironment.class); + ConfigurableEnvironment env = this.gatewayContext.getBean(ConfigurableEnvironment.class); this.gatewayPort = Integer.valueOf(env.getProperty("local.server.port")); } @@ -168,15 +164,11 @@ public class WebSocketIntegrationTests { client.execute(getUrl("/echo"), session -> { logger.debug("Starting to send messages"); - return session - .send(input.doOnNext(s -> logger.debug("outbound " + s)) - .map(s -> session.textMessage(s))) - .thenMany(session.receive().take(count) - .map(WebSocketMessage::getPayloadAsText)) - .subscribeWith(output).doOnNext(s -> logger.debug("inbound " + s)) - .then().doOnSuccess(aVoid -> logger.debug("Done with success")) - .doOnError(ex -> logger.debug( - "Done with " + (ex != null ? ex.getMessage() : "error"))); + return session.send(input.doOnNext(s -> logger.debug("outbound " + s)).map(s -> session.textMessage(s))) + .thenMany(session.receive().take(count).map(WebSocketMessage::getPayloadAsText)) + .subscribeWith(output).doOnNext(s -> logger.debug("inbound " + s)).then() + .doOnSuccess(aVoid -> logger.debug("Done with success")) + .doOnError(ex -> logger.debug("Done with " + (ex != null ? ex.getMessage() : "error"))); }).block(Duration.ofMillis(5000)); assertThat(output.collectList().block(Duration.ofMillis(5000))) @@ -191,15 +183,11 @@ public class WebSocketIntegrationTests { client.execute(getHttpUrl("/echoForHttp"), session -> { logger.debug("Starting to send messages"); - return session - .send(input.doOnNext(s -> logger.debug("outbound " + s)) - .map(s -> session.textMessage(s))) - .thenMany(session.receive().take(count) - .map(WebSocketMessage::getPayloadAsText)) - .subscribeWith(output).doOnNext(s -> logger.debug("inbound " + s)) - .then().doOnSuccess(aVoid -> logger.debug("Done with success")) - .doOnError(ex -> logger.debug( - "Done with " + (ex != null ? ex.getMessage() : "error"))); + return session.send(input.doOnNext(s -> logger.debug("outbound " + s)).map(s -> session.textMessage(s))) + .thenMany(session.receive().take(count).map(WebSocketMessage::getPayloadAsText)) + .subscribeWith(output).doOnNext(s -> logger.debug("inbound " + s)).then() + .doOnSuccess(aVoid -> logger.debug("Done with success")) + .doOnError(ex -> logger.debug("Done with " + (ex != null ? ex.getMessage() : "error"))); }).block(Duration.ofMillis(5000)); assertThat(output.collectList().block(Duration.ofMillis(5000))) @@ -223,21 +211,17 @@ public class WebSocketIntegrationTests { @Override public Mono handle(WebSocketSession session) { infoRef.set(session.getHandshakeInfo()); - return session.receive().map(WebSocketMessage::getPayloadAsText) - .subscribeWith(output).then(); + return session.receive().map(WebSocketMessage::getPayloadAsText).subscribeWith(output).then(); } }).block(Duration.ofMillis(5000)); HandshakeInfo info = infoRef.get(); - assertThat(info.getHeaders().getFirst("Upgrade")) - .isEqualToIgnoringCase("websocket"); + assertThat(info.getHeaders().getFirst("Upgrade")).isEqualToIgnoringCase("websocket"); - assertThat(info.getHeaders().getFirst("Sec-WebSocket-Protocol")) + assertThat(info.getHeaders().getFirst("Sec-WebSocket-Protocol")).isEqualTo(protocol); + assertThat(info.getSubProtocol()).as("Wrong protocol accepted").isEqualTo(protocol); + assertThat(output.block(Duration.ofSeconds(5))).as("Wrong protocol detected on the server side") .isEqualTo(protocol); - assertThat(info.getSubProtocol()).as("Wrong protocol accepted") - .isEqualTo(protocol); - assertThat(output.block(Duration.ofSeconds(5))) - .as("Wrong protocol detected on the server side").isEqualTo(protocol); } @Test @@ -247,8 +231,8 @@ public class WebSocketIntegrationTests { headers.add("my-header", "my-value"); MonoProcessor output = MonoProcessor.create(); - client.execute(getUrl("/custom-header"), headers, session -> session.receive() - .map(WebSocketMessage::getPayloadAsText).subscribeWith(output).then()) + client.execute(getUrl("/custom-header"), headers, + session -> session.receive().map(WebSocketMessage::getPayloadAsText).subscribeWith(output).then()) .block(Duration.ofMillis(5000)); assertThat(output.block(Duration.ofMillis(5000))).isEqualTo("my-header:my-value"); @@ -258,10 +242,9 @@ public class WebSocketIntegrationTests { public void sessionClosing() throws Exception { this.client.execute(getUrl("/close"), session -> { logger.debug("Starting.."); - return session.receive().doOnNext(s -> logger.debug("inbound " + s)).then() - .doFinally(signalType -> { - logger.debug("Completed with: " + signalType); - }); + return session.receive().doOnNext(s -> logger.debug("inbound " + s)).then().doFinally(signalType -> { + logger.debug("Completed with: " + signalType); + }); }).block(Duration.ofMillis(5000)); } @@ -326,8 +309,7 @@ public class WebSocketIntegrationTests { if (!StringUtils.hasText(protocol)) { return Mono.error(new IllegalStateException("Missing protocol")); } - List protocols = session.getHandshakeInfo().getHeaders() - .get(SEC_WEBSOCKET_PROTOCOL); + List protocols = session.getHandshakeInfo().getHeaders().get(SEC_WEBSOCKET_PROTOCOL); assertThat(protocols).contains("echo-v1,echo-v2"); WebSocketMessage message = session.textMessage(protocol); return doSend(session, Mono.just(message)); @@ -362,14 +344,12 @@ public class WebSocketIntegrationTests { @Configuration(proxyBeanMethods = false) @EnableAutoConfiguration @Import(PermitAllSecurityConfiguration.class) - @LoadBalancerClient(name = "wsservice", - configuration = LocalLoadBalancerClientConfiguration.class) + @LoadBalancerClient(name = "wsservice", configuration = LocalLoadBalancerClientConfiguration.class) protected static class GatewayConfig { @Bean public RouteLocator wsRouteLocator(RouteLocatorBuilder builder) { - return builder.routes() - .route(r -> r.path("/echoForHttp").uri("lb://wsservice")) + return builder.routes().route(r -> r.path("/echoForHttp").uri("lb://wsservice")) .route(r -> r.alwaysTrue().uri("lb:ws://wsservice")).build(); } @@ -381,10 +361,8 @@ public class WebSocketIntegrationTests { private int wsPort; @Bean - public ServiceInstanceListSupplier staticServiceInstanceListSupplier( - Environment env) { - return ServiceInstanceListSupplier.fixed(env).instance(wsPort, "wsservice") - .build(); + public ServiceInstanceListSupplier staticServiceInstanceListSupplier(Environment env) { + return ServiceInstanceListSupplier.fixed(env).instance(wsPort, "wsservice").build(); } } diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java index 22ea0eb6..cbb81f80 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java @@ -113,8 +113,7 @@ public class ProxyExchange { /** * Contains headers that are considered case-sensitive by default. */ - public static Set DEFAULT_SENSITIVE = new HashSet<>( - Arrays.asList("cookie", "authorization")); + public static Set DEFAULT_SENSITIVE = new HashSet<>(Arrays.asList("cookie", "authorization")); private HttpMethod httpMethod; @@ -136,8 +135,7 @@ public class ProxyExchange { private Type responseType; - public ProxyExchange(WebClient rest, ServerWebExchange exchange, - BindingContext bindingContext, Type type) { + public ProxyExchange(WebClient rest, ServerWebExchange exchange, BindingContext bindingContext, Type type) { this.exchange = exchange; this.bindingContext = bindingContext; this.responseType = type; @@ -236,86 +234,71 @@ public class ProxyExchange { public String path(String prefix) { String path = path(); if (!path.startsWith(prefix)) { - throw new IllegalArgumentException( - "Path does not start with prefix (" + prefix + "): " + path); + throw new IllegalArgumentException("Path does not start with prefix (" + prefix + "): " + path); } return path.substring(prefix.length()); } public Mono> get() { - RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.get(uri)) - .build(); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.get(uri)).build(); return exchange(requestEntity); } - public Mono> get( - Function, ResponseEntity> converter) { + public Mono> get(Function, ResponseEntity> converter) { return get().map(converter::apply); } public Mono> head() { - RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.head(uri)) - .build(); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.head(uri)).build(); return exchange(requestEntity); } - public Mono> head( - Function, ResponseEntity> converter) { + public Mono> head(Function, ResponseEntity> converter) { return head().map(converter::apply); } public Mono> options() { - RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.options(uri)) - .build(); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.options(uri)).build(); return exchange(requestEntity); } - public Mono> options( - Function, ResponseEntity> converter) { + public Mono> options(Function, ResponseEntity> converter) { return options().map(converter::apply); } public Mono> post() { - RequestEntity requestEntity = headers(RequestEntity.post(uri)) - .body(body()); + RequestEntity requestEntity = headers(RequestEntity.post(uri)).body(body()); return exchange(requestEntity); } - public Mono> post( - Function, ResponseEntity> converter) { + public Mono> post(Function, ResponseEntity> converter) { return post().map(converter::apply); } public Mono> delete() { - RequestEntity requestEntity = headers( - (BodyBuilder) RequestEntity.delete(uri)).build(); + RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.delete(uri)).build(); return exchange(requestEntity); } - public Mono> delete( - Function, ResponseEntity> converter) { + public Mono> delete(Function, ResponseEntity> converter) { return delete().map(converter::apply); } public Mono> put() { - RequestEntity requestEntity = headers(RequestEntity.put(uri)) - .body(body()); + RequestEntity requestEntity = headers(RequestEntity.put(uri)).body(body()); return exchange(requestEntity); } - public Mono> put( - Function, ResponseEntity> converter) { + public Mono> put(Function, ResponseEntity> converter) { return put().map(converter::apply); } public Mono> patch() { - RequestEntity requestEntity = headers(RequestEntity.patch(uri)) - .body(body()); + RequestEntity requestEntity = headers(RequestEntity.patch(uri)).body(body()); return exchange(requestEntity); } - public Mono> patch( - Function, ResponseEntity> converter) { + public Mono> patch(Function, ResponseEntity> converter) { return patch().map(converter::apply); } @@ -340,8 +323,7 @@ public class ProxyExchange { } } - public Mono> forward( - Function, ResponseEntity> converter) { + public Mono> forward(Function, ResponseEntity> converter) { switch (httpMethod) { case GET: return get(converter); @@ -364,8 +346,7 @@ public class ProxyExchange { private Mono> exchange(RequestEntity requestEntity) { Type type = this.responseType; - RequestBodySpec builder = rest.method(requestEntity.getMethod()) - .uri(requestEntity.getUrl()) + RequestBodySpec builder = rest.method(requestEntity.getMethod()).uri(requestEntity.getUrl()) .headers(headers -> addHeaders(headers, requestEntity.getHeaders())); Mono result; if (requestEntity.getBody() instanceof Publisher) { @@ -374,24 +355,18 @@ public class ProxyExchange { result = builder.body(publisher, Object.class).exchange(); } else if (requestEntity.getBody() != null) { - result = builder.body(BodyInserters.fromValue(requestEntity.getBody())) - .exchange(); + result = builder.body(BodyInserters.fromValue(requestEntity.getBody())).exchange(); } else { if (hasBody) { - result = builder - .headers(headers -> addHeaders(headers, - exchange.getRequest().getHeaders())) - .body(exchange.getRequest().getBody(), DataBuffer.class) - .exchange(); + result = builder.headers(headers -> addHeaders(headers, exchange.getRequest().getHeaders())) + .body(exchange.getRequest().getBody(), DataBuffer.class).exchange(); } else { - result = builder.headers(headers -> addHeaders(headers, - exchange.getRequest().getHeaders())).exchange(); + result = builder.headers(headers -> addHeaders(headers, exchange.getRequest().getHeaders())).exchange(); } } - return result.flatMap( - response -> response.toEntity(ParameterizedTypeReference.forType(type))); + return result.flatMap(response -> response.toEntity(ParameterizedTypeReference.forType(type))); } private void addHeaders(HttpHeaders headers, HttpHeaders toAdd) { @@ -401,8 +376,7 @@ public class ProxyExchange { } private Set filterHeaderKeys(HttpHeaders headers) { - return headers.keySet().stream() - .filter(header -> !sensitive.contains(header.toLowerCase())) + return headers.keySet().stream().filter(header -> !sensitive.contains(header.toLowerCase())) .collect(Collectors.toSet()); } @@ -444,8 +418,7 @@ public class ProxyExchange { else { forwarded = ""; } - forwarded = forwarded - + forwarded(uri, exchange.getRequest().getHeaders().getFirst("host")); + forwarded = forwarded + forwarded(uri, exchange.getRequest().getHeaders().getFirst("host")); headers.set("forwarded", forwarded); } @@ -478,8 +451,7 @@ public class ProxyExchange { private Mono getRequestBody() { for (String key : bindingContext.getModel().asMap().keySet()) { if (key.startsWith(BindingResult.MODEL_KEY_PREFIX)) { - BindingResult result = (BindingResult) bindingContext.getModel().asMap() - .get(key); + BindingResult result = (BindingResult) bindingContext.getModel().asMap().get(key); return Mono.just(result.getTarget()); } } diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java index baecff03..7c37b83d 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyExchangeArgumentResolver.java @@ -80,10 +80,9 @@ public class ProxyExchangeArgumentResolver implements HandlerMethodArgumentResol } @Override - public Mono resolveArgument(MethodParameter parameter, - BindingContext bindingContext, ServerWebExchange exchange) { - ProxyExchange proxy = new ProxyExchange<>(rest, exchange, bindingContext, - type(parameter)); + public Mono resolveArgument(MethodParameter parameter, BindingContext bindingContext, + ServerWebExchange exchange) { + ProxyExchange proxy = new ProxyExchange<>(rest, exchange, bindingContext, type(parameter)); proxy.headers(headers); if (this.autoForwardedHeaders.size() > 0) { proxy.headers(extractAutoForwardedHeaders(exchange)); diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java index c5fd7837..89011553 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/config/ProxyResponseAutoConfiguration.java @@ -50,12 +50,11 @@ public class ProxyResponseAutoConfiguration implements WebFluxConfigurer { @Bean @ConditionalOnMissingBean - public ProxyExchangeArgumentResolver proxyExchangeArgumentResolver( - Optional optional, ProxyProperties proxy) { + public ProxyExchangeArgumentResolver proxyExchangeArgumentResolver(Optional optional, + ProxyProperties proxy) { WebClient.Builder builder = optional.orElse(WebClient.builder()); WebClient template = builder.build(); - ProxyExchangeArgumentResolver resolver = new ProxyExchangeArgumentResolver( - template); + ProxyExchangeArgumentResolver resolver = new ProxyExchangeArgumentResolver(template); resolver.setHeaders(proxy.convertHeaders()); resolver.setAutoForwardedHeaders(proxy.getAutoForward()); resolver.setSensitive(proxy.getSensitive()); // can be null @@ -65,8 +64,7 @@ public class ProxyResponseAutoConfiguration implements WebFluxConfigurer { @Override public void configureArgumentResolvers(ArgumentResolverConfigurer configurer) { WebFluxConfigurer.super.configureArgumentResolvers(configurer); - configurer - .addCustomResolver(context.getBean(ProxyExchangeArgumentResolver.class)); + configurer.addCustomResolver(context.getBean(ProxyExchangeArgumentResolver.class)); } } diff --git a/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ProductionConfigurationTests.java b/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ProductionConfigurationTests.java index 78bedee6..80693fb6 100644 --- a/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ProductionConfigurationTests.java +++ b/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ProductionConfigurationTests.java @@ -85,32 +85,27 @@ public class ProductionConfigurationTests { @Test public void forwardGet() throws Exception { - assertThat(rest.getForObject("/proxy/forward/0", Foo.class).getName()) - .isEqualTo("bye"); + assertThat(rest.getForObject("/proxy/forward/0", Foo.class).getName()).isEqualTo("bye"); } @Test public void path() throws Exception { - assertThat(rest.getForObject("/proxy/path/1", Foo.class).getName()) - .isEqualTo("foo"); + assertThat(rest.getForObject("/proxy/path/1", Foo.class).getName()).isEqualTo("foo"); } @Test public void resource() throws Exception { - assertThat(rest.getForObject("/proxy/html/test.html", String.class)) - .contains("Test"); + assertThat(rest.getForObject("/proxy/html/test.html", String.class)).contains("Test"); } @Test public void resourceWithNoType() throws Exception { - assertThat(rest.getForObject("/proxy/typeless/test.html", String.class)) - .contains("Test"); + assertThat(rest.getForObject("/proxy/typeless/test.html", String.class)).contains("Test"); } @Test public void missing() throws Exception { - assertThat(rest.getForEntity("/proxy/missing/0", Foo.class).getStatusCode()) - .isEqualTo(HttpStatus.NOT_FOUND); + assertThat(rest.getForEntity("/proxy/missing/0", Foo.class).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); } @Test @@ -120,74 +115,59 @@ public class ProductionConfigurationTests { @Test public void post() throws Exception { - assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), - Bar.class).getName()).isEqualTo("host=localhost:" + port + ";foo"); - } - - @Test - public void forwardPost() throws Exception { - assertThat(rest.postForObject("/proxy/forward/0", - Collections.singletonMap("name", "foo"), Bar.class).getName()) - .isEqualTo("host=localhost:" + port + ";foo"); - } - - @Test - public void list() throws Exception { - ResponseEntity> result = rest - .exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy")) - .contentType(MediaType.APPLICATION_JSON) - .body(Collections.singletonList( - Collections.singletonMap("name", "foo"))), - new ParameterizedTypeReference>() { - }); - assertThat(result.getBody().iterator().next().getName()) + assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), Bar.class).getName()) .isEqualTo("host=localhost:" + port + ";foo"); } + @Test + public void forwardPost() throws Exception { + assertThat(rest.postForObject("/proxy/forward/0", Collections.singletonMap("name", "foo"), Bar.class).getName()) + .isEqualTo("host=localhost:" + port + ";foo"); + } + + @Test + public void list() throws Exception { + ResponseEntity> result = rest.exchange( + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy")) + .contentType(MediaType.APPLICATION_JSON) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), + new ParameterizedTypeReference>() { + }); + assertThat(result.getBody().iterator().next().getName()).isEqualTo("host=localhost:" + port + ";foo"); + } + @Test public void bodyless() throws Exception { - assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), - Bar.class).getName()).isEqualTo("host=localhost:" + port + ";foo"); + assertThat(rest.postForObject("/proxy/0", Collections.singletonMap("name", "foo"), Bar.class).getName()) + .isEqualTo("host=localhost:" + port + ";foo"); } @Test public void entity() throws Exception { - assertThat(rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/entity")) - .body(Collections.singletonMap("name", "foo")), - new ParameterizedTypeReference>() { - }).getBody().iterator().next().getName()) - .isEqualTo("host=localhost:" + port + ";foo"); + assertThat( + rest.exchange(RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/entity")) + .body(Collections.singletonMap("name", "foo")), new ParameterizedTypeReference>() { + }).getBody().iterator().next().getName()).isEqualTo("host=localhost:" + port + ";foo"); } @Test public void entityWithType() throws Exception { - assertThat(rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/type")) - .body(Collections.singletonMap("name", "foo")), - new ParameterizedTypeReference>() { - }).getBody().iterator().next().getName()) - .isEqualTo("host=localhost:" + port + ";foo"); + assertThat( + rest.exchange(RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/type")) + .body(Collections.singletonMap("name", "foo")), new ParameterizedTypeReference>() { + }).getBody().iterator().next().getName()).isEqualTo("host=localhost:" + port + ";foo"); } @Test public void single() throws Exception { - assertThat(rest.postForObject("/proxy/single", - Collections.singletonMap("name", "foobar"), Bar.class).getName()) - .isEqualTo("host=localhost:" + port + ";foobar"); + assertThat(rest.postForObject("/proxy/single", Collections.singletonMap("name", "foobar"), Bar.class).getName()) + .isEqualTo("host=localhost:" + port + ";foobar"); } @Test public void converter() throws Exception { - assertThat(rest.postForObject("/proxy/converter", - Collections.singletonMap("name", "foobar"), Bar.class).getName()) + assertThat( + rest.postForObject("/proxy/converter", Collections.singletonMap("name", "foobar"), Bar.class).getName()) .isEqualTo("host=localhost:" + port + ";foobar"); } @@ -195,16 +175,10 @@ public class ProductionConfigurationTests { @SuppressWarnings({ "Duplicates", "unchecked" }) public void headers() throws Exception { Map> headers = rest - .exchange( - RequestEntity - .get(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/headers")) - .header("foo", "bar").header("abc", "xyz") - .header("baz", "fob").build(), - Map.class) + .exchange(RequestEntity.get(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/headers")) + .header("foo", "bar").header("abc", "xyz").header("baz", "fob").build(), Map.class) .getBody(); - assertThat(headers).doesNotContainKey("foo").doesNotContainKey("hello") - .containsKeys("bar", "abc"); + assertThat(headers).doesNotContainKey("foo").doesNotContainKey("hello").containsKeys("bar", "abc"); assertThat(headers.get("bar")).containsOnly("hello"); assertThat(headers.get("abc")).containsOnly("123"); @@ -214,9 +188,7 @@ public class ProductionConfigurationTests { @Test public void forwardedHeaderUsesHost() throws Exception { Map> headers = rest - .exchange(RequestEntity - .get(rest.getRestTemplate().getUriTemplateHandler() - .expand("/proxy/headers")) + .exchange(RequestEntity.get(rest.getRestTemplate().getUriTemplateHandler().expand("/proxy/headers")) .header("host", "foo:1234").build(), Map.class) .getBody(); @@ -245,86 +217,79 @@ public class ProductionConfigurationTests { } @GetMapping("/proxy/{id}") - public Mono> proxyFoos(@PathVariable Integer id, - ProxyExchange proxy) throws Exception { + public Mono> proxyFoos(@PathVariable Integer id, ProxyExchange proxy) + throws Exception { return proxy.uri(home.toString() + "/foos/" + id).get(); } @GetMapping("/proxy/path/**") - public Mono> proxyPath(ProxyExchange proxy, - UriComponentsBuilder uri) throws Exception { + public Mono> proxyPath(ProxyExchange proxy, UriComponentsBuilder uri) + throws Exception { String path = proxy.path("/proxy/path/"); return proxy.uri(home.toString() + "/foos/" + path).get(); } @GetMapping("/proxy/html/**") - public Mono> proxyHtml(ProxyExchange proxy, - UriComponentsBuilder uri) throws Exception { + public Mono> proxyHtml(ProxyExchange proxy, UriComponentsBuilder uri) + throws Exception { String path = proxy.path("/proxy/html"); return proxy.uri(home.toString() + path).get(); } @GetMapping("/proxy/typeless/**") - public Mono> proxyTypeless(ProxyExchange proxy, - UriComponentsBuilder uri) throws Exception { + public Mono> proxyTypeless(ProxyExchange proxy, UriComponentsBuilder uri) + throws Exception { String path = proxy.path("/proxy/typeless"); return proxy.uri(home.toString() + path).get(); } @GetMapping("/proxy/missing/{id}") - public Mono> proxyMissing(@PathVariable Integer id, - ProxyExchange proxy) throws Exception { + public Mono> proxyMissing(@PathVariable Integer id, ProxyExchange proxy) + throws Exception { return proxy.uri(home.toString() + "/missing/" + id).get(); } @GetMapping("/proxy") - public Mono> proxyUri(ProxyExchange proxy) - throws Exception { + public Mono> proxyUri(ProxyExchange proxy) throws Exception { return proxy.uri(home.toString() + "/foos").get(); } @PostMapping("/proxy/{id}") public Mono> proxyBars(@PathVariable Integer id, - @RequestBody Map body, - ProxyExchange> proxy) throws Exception { + @RequestBody Map body, ProxyExchange> proxy) throws Exception { body.put("id", id); - return proxy.uri(home.toString() + "/bars").body(Arrays.asList(body)) - .post(this::first); + return proxy.uri(home.toString() + "/bars").body(Arrays.asList(body)).post(this::first); } @PostMapping("/proxy") - public Mono>> barsWithNoBody( - ProxyExchange> proxy) throws Exception { + public Mono>> barsWithNoBody(ProxyExchange> proxy) + throws Exception { return proxy.uri(home.toString() + "/bars").post(); } @PostMapping("/proxy/entity") - public Mono> explicitEntity(@RequestBody Mono foo, - ProxyExchange proxy) throws Exception { + public Mono> explicitEntity(@RequestBody Mono foo, ProxyExchange proxy) + throws Exception { return proxy.uri(home.toString() + "/bars").body(Flux.from(foo)).post(); } @PostMapping("/proxy/type") - public Mono>> explicitEntityWithType( - @RequestBody Mono foo, ProxyExchange> proxy) - throws Exception { + public Mono>> explicitEntityWithType(@RequestBody Mono foo, + ProxyExchange> proxy) throws Exception { return proxy.uri(home.toString() + "/bars").body(Flux.from(foo)).post(); } @PostMapping("/proxy/single") public Mono> implicitEntity(@RequestBody Mono foo, ProxyExchange> proxy) throws Exception { - return proxy.uri(home.toString() + "/bars").body(Flux.from(foo)) - .post(this::first); + return proxy.uri(home.toString() + "/bars").body(Flux.from(foo)).post(this::first); } @PostMapping("/proxy/converter") - public Mono> implicitEntityWithConverter( - @RequestBody Foo foo, ProxyExchange> proxy) - throws Exception { + public Mono> implicitEntityWithConverter(@RequestBody Foo foo, + ProxyExchange> proxy) throws Exception { return proxy.uri(home.toString() + "/bars").body(Arrays.asList(foo)) - .post(response -> ResponseEntity.status(response.getStatusCode()) - .headers(response.getHeaders()) + .post(response -> ResponseEntity.status(response.getStatusCode()).headers(response.getHeaders()) .body(response.getBody().iterator().next())); } @@ -340,24 +305,21 @@ public class ProductionConfigurationTests { } private ResponseEntity first(ResponseEntity> response) { - return ResponseEntity.status(response.getStatusCode()) - .headers(response.getHeaders()) + return ResponseEntity.status(response.getStatusCode()).headers(response.getHeaders()) .body(response.getBody().iterator().next()); } @GetMapping("/proxy/forward/{id}") - public Mono> proxyForwardFoos(@PathVariable Integer id, - ProxyExchange proxy) throws Exception { + public Mono> proxyForwardFoos(@PathVariable Integer id, ProxyExchange proxy) + throws Exception { return proxy.uri(home.toString() + "/foos/" + id).forward(); } @PostMapping("/proxy/forward/{id}") public Mono> proxyForwardBars(@PathVariable Integer id, - @RequestBody Map body, - ProxyExchange> proxy) throws Exception { + @RequestBody Map body, ProxyExchange> proxy) throws Exception { body.put("id", id); - return proxy.uri(home.toString() + "/bars").body(Arrays.asList(body)) - .forward(this::first); + return proxy.uri(home.toString() + "/bars").body(Arrays.asList(body)).forward(this::first); } } @@ -377,12 +339,10 @@ public class ProductionConfigurationTests { } @PostMapping("/bars") - public List bars(@RequestBody List foos, - @RequestHeader HttpHeaders headers) { + public List bars(@RequestBody List foos, @RequestHeader HttpHeaders headers) { String custom = headers.getFirst("X-Custom"); custom = custom == null ? "" : custom; - custom = headers.getFirst("forwarded") == null ? custom - : headers.getFirst("forwarded") + ";" + custom; + custom = headers.getFirst("forwarded") == null ? custom : headers.getFirst("forwarded") + ";" + custom; return Arrays.asList(new Bar(custom + foos.iterator().next().getName())); } diff --git a/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ReactiveTests.java b/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ReactiveTests.java index 5bd22343..f1540394 100644 --- a/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ReactiveTests.java +++ b/spring-cloud-gateway-webflux/src/test/java/org/springframework/cloud/gateway/webflux/ReactiveTests.java @@ -67,10 +67,8 @@ public class ReactiveTests { @Test public void postBytes() throws Exception { - ResponseEntity> result = rest.exchange( - RequestEntity.post( - rest.getRestTemplate().getUriTemplateHandler().expand("/bytes")) - .body("hello foo".getBytes()), + ResponseEntity> result = rest.exchange(RequestEntity + .post(rest.getRestTemplate().getUriTemplateHandler().expand("/bytes")).body("hello foo".getBytes()), new ParameterizedTypeReference>() { }); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -80,11 +78,8 @@ public class ReactiveTests { @Test public void post() throws Exception { ResponseEntity> result = rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/bars")) - .body(Collections - .singletonList(Collections.singletonMap("name", "foo"))), + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/bars")) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), new ParameterizedTypeReference>() { }); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -94,11 +89,8 @@ public class ReactiveTests { @Test public void postFlux() throws Exception { ResponseEntity> result = rest.exchange( - RequestEntity - .post(rest.getRestTemplate().getUriTemplateHandler() - .expand("/flux/bars")) - .body(Collections - .singletonList(Collections.singletonMap("name", "foo"))), + RequestEntity.post(rest.getRestTemplate().getUriTemplateHandler().expand("/flux/bars")) + .body(Collections.singletonList(Collections.singletonMap("name", "foo"))), new ParameterizedTypeReference>() { }); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -107,9 +99,9 @@ public class ReactiveTests { @Test public void get() throws Exception { - ResponseEntity> result = rest.exchange(RequestEntity - .get(rest.getRestTemplate().getUriTemplateHandler().expand("/foos")) - .build(), new ParameterizedTypeReference>() { + ResponseEntity> result = rest.exchange( + RequestEntity.get(rest.getRestTemplate().getUriTemplateHandler().expand("/foos")).build(), + new ParameterizedTypeReference>() { }); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); assertThat(result.getBody().iterator().next().getName()).isEqualTo("hello"); @@ -118,8 +110,7 @@ public class ReactiveTests { @Test public void forward() throws Exception { ResponseEntity> result = rest.exchange( - RequestEntity.get(rest.getRestTemplate().getUriTemplateHandler() - .expand("/forward/foos")).build(), + RequestEntity.get(rest.getRestTemplate().getUriTemplateHandler().expand("/forward/foos")).build(), new ParameterizedTypeReference>() { }); assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -136,16 +127,13 @@ public class ReactiveTests { private DispatcherHandler handler; @PostMapping("/bars") - public List bars(@RequestBody List foos, - @RequestHeader HttpHeaders headers) { + public List bars(@RequestBody List foos, @RequestHeader HttpHeaders headers) { String custom = "hello "; - return foos.stream().map(foo -> new Bar(custom + foo.getName())) - .collect(Collectors.toList()); + return foos.stream().map(foo -> new Bar(custom + foo.getName())).collect(Collectors.toList()); } @PostMapping("/flux/bars") - public Flux fluxbars(@RequestBody Flux foos, - @RequestHeader HttpHeaders headers) { + public Flux fluxbars(@RequestBody Flux foos, @RequestHeader HttpHeaders headers) { String custom = "hello "; return foos.map(foo -> new Bar(custom + foo.getName())); } @@ -157,14 +145,12 @@ public class ReactiveTests { @GetMapping("/forward/foos") public Mono forwardFoos(ServerWebExchange exchange) { - return handler.handle(exchange.mutate() - .request(request -> request.path("/foos").build()).build()); + return handler.handle(exchange.mutate().request(request -> request.path("/foos").build()).build()); } @PostMapping("/bytes") public Flux forwardBars(@RequestBody Flux body) { - return Flux.from(body.reduce(this::concatenate) - .map(value -> new Foo(new String(value)))); + return Flux.from(body.reduce(this::concatenate).map(value -> new Foo(new String(value)))); } byte[] concatenate(@Nullable byte[] array1, @Nullable byte[] array2) {