Fixing GatewayServerMvcAutoConfiguration to align with correct Boot properties
This commit is contained in:
@@ -107,6 +107,16 @@
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.projectreactor.netty</groupId>
|
||||
<artifactId>reactor-netty</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-webflux</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- Third party test dependencies -->
|
||||
|
||||
@@ -216,18 +216,19 @@ public class GatewayServerMvcAutoConfiguration {
|
||||
static final boolean REACTOR_NETTY = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", null);
|
||||
static final boolean JDK = ClassUtils.isPresent("java.net.http.HttpClient", null);
|
||||
static final boolean HIGHER_PRIORITY = APACHE || JETTY || REACTOR_NETTY;
|
||||
static final String SPRING_REDIRECTS_PROPERTY = "spring.http.client.redirects";
|
||||
static final String SPRING_HTTP_FACTORY_PROPERTY = "spring.http.client.factory";
|
||||
|
||||
@Override
|
||||
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
|
||||
HttpRedirects redirects = environment.getProperty("spring.http.client.settings.redirects",
|
||||
HttpRedirects.class);
|
||||
HttpRedirects redirects = environment.getProperty(SPRING_REDIRECTS_PROPERTY, HttpRedirects.class);
|
||||
if (redirects == null) {
|
||||
// the user hasn't set anything, change the default
|
||||
environment.getPropertySources()
|
||||
.addFirst(new MapPropertySource("gatewayHttpClientProperties",
|
||||
Map.of("spring.http.client.settings.redirects", HttpRedirects.DONT_FOLLOW)));
|
||||
Map.of(SPRING_REDIRECTS_PROPERTY, HttpRedirects.DONT_FOLLOW)));
|
||||
}
|
||||
Factory factory = environment.getProperty("spring.http.client.settings.factory", Factory.class);
|
||||
Factory factory = environment.getProperty(SPRING_HTTP_FACTORY_PROPERTY, Factory.class);
|
||||
boolean setJdkHttpClientProperties = false;
|
||||
|
||||
if (factory == null && !HIGHER_PRIORITY) {
|
||||
|
||||
@@ -142,11 +142,8 @@ public class GatewayServerMvcAutoConfigurationTests {
|
||||
@Test
|
||||
void gatewayHttpClientPropertiesWork() {
|
||||
ConfigurableApplicationContext context = new SpringApplicationBuilder(TestConfig.class)
|
||||
.properties("spring.main.web-application-type=none",
|
||||
"spring.cloud.gateway.mvc.http-client.connect-timeout=1s",
|
||||
"spring.cloud.gateway.mvc.http-client.read-timeout=2s",
|
||||
"spring.cloud.gateway.mvc.http-client.ssl-bundle=mybundle",
|
||||
"spring.cloud.gateway.mvc.http-client.type=autodetect",
|
||||
.properties("spring.main.web-application-type=none", "spring.http.client.connect-timeout=1s",
|
||||
"spring.http.client.read-timeout=2s", "spring.http.client.ssl.bundle=mybundle",
|
||||
"spring.ssl.bundle.pem.mybundle.keystore.certificate=" + cert,
|
||||
"spring.ssl.bundle.pem.mybundle.keystore.key=" + key)
|
||||
.run();
|
||||
@@ -201,7 +198,7 @@ public class GatewayServerMvcAutoConfigurationTests {
|
||||
@Test
|
||||
void settingHttpClientFactoryWorks() {
|
||||
ConfigurableApplicationContext context = new SpringApplicationBuilder(TestConfig.class)
|
||||
.properties("spring.main.web-application-type=none", "spring.http.client.settings.factory=simple")
|
||||
.properties("spring.main.web-application-type=none", "spring.http.client.factory=simple")
|
||||
.run();
|
||||
ClientHttpRequestFactoryBuilder<?> builder = context.getBean(ClientHttpRequestFactoryBuilder.class);
|
||||
assertThat(builder).isInstanceOf(SimpleClientHttpRequestFactoryBuilder.class);
|
||||
|
||||
@@ -142,8 +142,7 @@ import static org.springframework.web.servlet.function.RequestPredicates.POST;
|
||||
import static org.springframework.web.servlet.function.RequestPredicates.path;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@SpringBootTest(
|
||||
properties = { "spring.cloud.gateway.mvc.http-client.type=jdk", "spring.cloud.gateway.function.enabled=false" },
|
||||
@SpringBootTest(properties = { "spring.http.client.factory=jdk", "spring.cloud.gateway.function.enabled=false" },
|
||||
webEnvironment = WebEnvironment.RANDOM_PORT)
|
||||
@ContextConfiguration(initializers = HttpbinTestcontainers.class)
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
|
||||
@@ -60,58 +60,58 @@ class AfterFilterFunctionsTests {
|
||||
@Test
|
||||
void doesNotRemoveJsonAttributes() {
|
||||
restClient.get()
|
||||
.uri("/anything/does_not/remove_json_attributes")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isOk()
|
||||
.expectBody(Map.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).containsEntry("foo", "bar");
|
||||
assertThat(res.getResponseBody()).containsEntry("baz", "qux");
|
||||
});
|
||||
.uri("/anything/does_not/remove_json_attributes")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isOk()
|
||||
.expectBody(Map.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).containsEntry("foo", "bar");
|
||||
assertThat(res.getResponseBody()).containsEntry("baz", "qux");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeJsonAttributesToAvoidBeingRecursive() {
|
||||
restClient.get()
|
||||
.uri("/anything/remove_json_attributes_to_avoid_being_recursive")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isOk()
|
||||
.expectBody(Map.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).doesNotContainKey("foo");
|
||||
assertThat(res.getResponseBody()).containsEntry("baz", "qux");
|
||||
});
|
||||
.uri("/anything/remove_json_attributes_to_avoid_being_recursive")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isOk()
|
||||
.expectBody(Map.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).doesNotContainKey("foo");
|
||||
assertThat(res.getResponseBody()).containsEntry("baz", "qux");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeJsonAttributesRecursively() {
|
||||
restClient.get()
|
||||
.uri("/anything/remove_json_attributes_recursively")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isOk()
|
||||
.expectBody(Map.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).containsKey("foo");
|
||||
assertThat((Map<String, String>) res.getResponseBody().get("foo")).containsEntry("bar", "A");
|
||||
assertThat(res.getResponseBody()).containsEntry("quux", "C");
|
||||
assertThat(res.getResponseBody()).doesNotContainKey("qux");
|
||||
});
|
||||
.uri("/anything/remove_json_attributes_recursively")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.isOk()
|
||||
.expectBody(Map.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).containsKey("foo");
|
||||
assertThat((Map<String, String>) res.getResponseBody().get("foo")).containsEntry("bar", "A");
|
||||
assertThat(res.getResponseBody()).containsEntry("quux", "C");
|
||||
assertThat(res.getResponseBody()).doesNotContainKey("qux");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void raisedErrorWhenRemoveJsonAttributes() {
|
||||
restClient.get()
|
||||
.uri("/anything/raised_error_when_remove_json_attributes")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.is5xxServerError()
|
||||
.expectBody(String.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).isEqualTo("Failed to process JSON of response body.");
|
||||
});
|
||||
.uri("/anything/raised_error_when_remove_json_attributes")
|
||||
.exchange()
|
||||
.expectStatus()
|
||||
.is5xxServerError()
|
||||
.expectBody(String.class)
|
||||
.consumeWith(res -> {
|
||||
assertThat(res.getResponseBody()).isEqualTo("Failed to process JSON of response body.");
|
||||
});
|
||||
}
|
||||
|
||||
@SpringBootConfiguration
|
||||
|
||||
Reference in New Issue
Block a user