Skip to content

Commit a16309e

Browse files
committed
Add autoconfiguration tests.
Signed-off-by: Olga Maciaszek-Sharma <olga.maciaszek-sharma@broadcom.com>
1 parent c990c92 commit a16309e

File tree

1 file changed

+81
-59
lines changed

1 file changed

+81
-59
lines changed

spring-cloud-gateway-server-mvc/src/test/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfigurationTests.java

+81-59
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/*
2-
* Copyright 2013-2024 the original author or authors.
3-
*
2+
* Copyright 2013-2025
43
* Licensed under the Apache License, Version 2.0 (the "License");
54
* you may not use this file except in compliance with the License.
65
* You may obtain a copy of the License at
@@ -34,6 +33,7 @@
3433
import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder;
3534
import org.springframework.boot.http.client.ClientHttpRequestFactorySettings;
3635
import org.springframework.boot.http.client.SimpleClientHttpRequestFactoryBuilder;
36+
import org.springframework.boot.test.context.FilteredClassLoader;
3737
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3838
import org.springframework.cloud.gateway.server.mvc.filter.FilterAutoConfiguration;
3939
import org.springframework.cloud.gateway.server.mvc.filter.FormFilter;
@@ -47,6 +47,7 @@
4747
import org.springframework.cloud.gateway.server.mvc.filter.XForwardedRequestHeadersFilter;
4848
import org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctionAutoConfiguration;
4949
import org.springframework.cloud.gateway.server.mvc.predicate.PredicateAutoConfiguration;
50+
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
5051
import org.springframework.context.ConfigurableApplicationContext;
5152

5253
import static org.assertj.core.api.Assertions.assertThat;
@@ -76,7 +77,7 @@ public class GatewayServerMvcAutoConfigurationTests {
7677
fl1PiUDyPRIl2cnOJd+wCHKsyym/FL7yzk0OSEZ81I92LpGd/0b2Ld3m/bpe+C4Z
7778
ILzLXTnC6AhrLcDc9QN/EO+BiCL52n7EplNLtSn1LQ==
7879
-----END CERTIFICATE-----
79-
""";
80+
""";
8081

8182
private static final String key = """
8283
-----BEGIN PRIVATE KEY-----
@@ -112,44 +113,44 @@ public class GatewayServerMvcAutoConfigurationTests {
112113
@Test
113114
void filterEnabledPropertiesWork() {
114115
new ApplicationContextRunner()
115-
.withConfiguration(AutoConfigurations.of(FilterAutoConfiguration.class, PredicateAutoConfiguration.class,
116-
HandlerFunctionAutoConfiguration.class, GatewayServerMvcAutoConfiguration.class,
117-
HttpClientAutoConfiguration.class, RestTemplateAutoConfiguration.class,
118-
RestClientAutoConfiguration.class, SslAutoConfiguration.class))
119-
.withPropertyValues("spring.cloud.gateway.mvc.form-filter.enabled=false",
120-
"spring.cloud.gateway.mvc.forwarded-request-headers-filter.enabled=false",
121-
"spring.cloud.gateway.mvc.remove-content-length-request-headers-filter.enabled=false",
122-
"spring.cloud.gateway.mvc.remove-hop-by-hop-request-headers-filter.enabled=false",
123-
"spring.cloud.gateway.mvc.remove-hop-by-hop-response-headers-filter.enabled=false",
124-
"spring.cloud.gateway.mvc.remove-http2-status-response-headers-filter.enabled=false",
125-
"spring.cloud.gateway.mvc.transfer-encoding-normalization-request-headers-filter.enabled=false",
126-
"spring.cloud.gateway.mvc.weight-calculator-filter.enabled=false",
127-
"spring.cloud.gateway.mvc.x-forwarded-request-headers-filter.enabled=false")
128-
.run(context -> {
129-
assertThat(context).doesNotHaveBean(FormFilter.class);
130-
assertThat(context).doesNotHaveBean(ForwardedRequestHeadersFilter.class);
131-
assertThat(context).doesNotHaveBean(RemoveContentLengthRequestHeadersFilter.class);
132-
assertThat(context).doesNotHaveBean(RemoveHopByHopRequestHeadersFilter.class);
133-
assertThat(context).doesNotHaveBean(RemoveHopByHopResponseHeadersFilter.class);
134-
assertThat(context).doesNotHaveBean(RemoveHttp2StatusResponseHeadersFilter.class);
135-
assertThat(context).doesNotHaveBean(TransferEncodingNormalizationRequestHeadersFilter.class);
136-
assertThat(context).doesNotHaveBean(WeightCalculatorFilter.class);
137-
assertThat(context).doesNotHaveBean(XForwardedRequestHeadersFilter.class);
138-
});
116+
.withConfiguration(AutoConfigurations.of(FilterAutoConfiguration.class, PredicateAutoConfiguration.class,
117+
HandlerFunctionAutoConfiguration.class, GatewayServerMvcAutoConfiguration.class,
118+
HttpClientAutoConfiguration.class, RestTemplateAutoConfiguration.class,
119+
RestClientAutoConfiguration.class, SslAutoConfiguration.class))
120+
.withPropertyValues("spring.cloud.gateway.mvc.form-filter.enabled=false",
121+
"spring.cloud.gateway.mvc.forwarded-request-headers-filter.enabled=false",
122+
"spring.cloud.gateway.mvc.remove-content-length-request-headers-filter.enabled=false",
123+
"spring.cloud.gateway.mvc.remove-hop-by-hop-request-headers-filter.enabled=false",
124+
"spring.cloud.gateway.mvc.remove-hop-by-hop-response-headers-filter.enabled=false",
125+
"spring.cloud.gateway.mvc.remove-http2-status-response-headers-filter.enabled=false",
126+
"spring.cloud.gateway.mvc.transfer-encoding-normalization-request-headers-filter.enabled=false",
127+
"spring.cloud.gateway.mvc.weight-calculator-filter.enabled=false",
128+
"spring.cloud.gateway.mvc.x-forwarded-request-headers-filter.enabled=false")
129+
.run(context -> {
130+
assertThat(context).doesNotHaveBean(FormFilter.class);
131+
assertThat(context).doesNotHaveBean(ForwardedRequestHeadersFilter.class);
132+
assertThat(context).doesNotHaveBean(RemoveContentLengthRequestHeadersFilter.class);
133+
assertThat(context).doesNotHaveBean(RemoveHopByHopRequestHeadersFilter.class);
134+
assertThat(context).doesNotHaveBean(RemoveHopByHopResponseHeadersFilter.class);
135+
assertThat(context).doesNotHaveBean(RemoveHttp2StatusResponseHeadersFilter.class);
136+
assertThat(context).doesNotHaveBean(TransferEncodingNormalizationRequestHeadersFilter.class);
137+
assertThat(context).doesNotHaveBean(WeightCalculatorFilter.class);
138+
assertThat(context).doesNotHaveBean(XForwardedRequestHeadersFilter.class);
139+
});
139140
}
140141

141142
@DisabledForJreRange(min = JRE.JAVA_23)
142143
@Test
143144
void gatewayHttpClientPropertiesWork() {
144145
ConfigurableApplicationContext context = new SpringApplicationBuilder(TestConfig.class)
145-
.properties("spring.main.web-application-type=none",
146-
"spring.cloud.gateway.mvc.http-client.connect-timeout=1s",
147-
"spring.cloud.gateway.mvc.http-client.read-timeout=2s",
148-
"spring.cloud.gateway.mvc.http-client.ssl-bundle=mybundle",
149-
"spring.cloud.gateway.mvc.http-client.type=autodetect",
150-
"spring.ssl.bundle.pem.mybundle.keystore.certificate=" + cert,
151-
"spring.ssl.bundle.pem.mybundle.keystore.key=" + key)
152-
.run();
146+
.properties("spring.main.web-application-type=none",
147+
"spring.cloud.gateway.mvc.http-client.connect-timeout=1s",
148+
"spring.cloud.gateway.mvc.http-client.read-timeout=2s",
149+
"spring.cloud.gateway.mvc.http-client.ssl-bundle=mybundle",
150+
"spring.cloud.gateway.mvc.http-client.type=autodetect",
151+
"spring.ssl.bundle.pem.mybundle.keystore.certificate=" + cert,
152+
"spring.ssl.bundle.pem.mybundle.keystore.key=" + key)
153+
.run();
153154
ClientHttpRequestFactorySettings settings = context.getBean(ClientHttpRequestFactorySettings.class);
154155
HttpClientProperties properties = context.getBean(HttpClientProperties.class);
155156
assertThat(properties.getConnectTimeout()).hasSeconds(1);
@@ -165,39 +166,60 @@ void gatewayHttpClientPropertiesWork() {
165166
@Test
166167
void bootHttpClientPropertiesWork() {
167168
new ApplicationContextRunner()
168-
.withConfiguration(AutoConfigurations.of(FilterAutoConfiguration.class, PredicateAutoConfiguration.class,
169-
HandlerFunctionAutoConfiguration.class, GatewayServerMvcAutoConfiguration.class,
170-
HttpClientAutoConfiguration.class, RestTemplateAutoConfiguration.class,
171-
RestClientAutoConfiguration.class, SslAutoConfiguration.class))
172-
.withPropertyValues("spring.http.client.connect-timeout=1s", "spring.http.client.read-timeout=2s",
173-
"spring.http.client.ssl.bundle=mybundle",
174-
"spring.ssl.bundle.pem.mybundle.keystore.certificate=" + cert,
175-
"spring.ssl.bundle.pem.mybundle.keystore.key=" + key)
176-
.run(context -> {
177-
assertThat(context).hasSingleBean(ClientHttpRequestFactorySettings.class)
178-
.hasSingleBean(HttpClientProperties.class);
179-
HttpClientProperties httpClient = context.getBean(HttpClientProperties.class);
180-
assertThat(httpClient.getConnectTimeout()).hasSeconds(1);
181-
assertThat(httpClient.getReadTimeout()).hasSeconds(2);
182-
assertThat(httpClient.getSsl().getBundle()).isEqualTo("mybundle");
183-
assertThat(httpClient.getFactory()).isNull();
184-
ClientHttpRequestFactorySettings settings = context.getBean(ClientHttpRequestFactorySettings.class);
185-
assertThat(settings.readTimeout()).isEqualTo(Duration.ofSeconds(2));
186-
assertThat(settings.connectTimeout()).isEqualTo(Duration.ofSeconds(1));
187-
assertThat(settings.sslBundle()).isNotNull();
188-
// cant test redirects because EnvironmentPostProcessor is not run
189-
});
169+
.withConfiguration(AutoConfigurations.of(FilterAutoConfiguration.class, PredicateAutoConfiguration.class,
170+
HandlerFunctionAutoConfiguration.class, GatewayServerMvcAutoConfiguration.class,
171+
HttpClientAutoConfiguration.class, RestTemplateAutoConfiguration.class,
172+
RestClientAutoConfiguration.class, SslAutoConfiguration.class))
173+
.withPropertyValues("spring.http.client.connect-timeout=1s", "spring.http.client.read-timeout=2s",
174+
"spring.http.client.ssl.bundle=mybundle",
175+
"spring.ssl.bundle.pem.mybundle.keystore.certificate=" + cert,
176+
"spring.ssl.bundle.pem.mybundle.keystore.key=" + key)
177+
.run(context -> {
178+
assertThat(context).hasSingleBean(ClientHttpRequestFactorySettings.class)
179+
.hasSingleBean(HttpClientProperties.class);
180+
HttpClientProperties httpClient = context.getBean(HttpClientProperties.class);
181+
assertThat(httpClient.getConnectTimeout()).hasSeconds(1);
182+
assertThat(httpClient.getReadTimeout()).hasSeconds(2);
183+
assertThat(httpClient.getSsl().getBundle()).isEqualTo("mybundle");
184+
assertThat(httpClient.getFactory()).isNull();
185+
ClientHttpRequestFactorySettings settings = context.getBean(ClientHttpRequestFactorySettings.class);
186+
assertThat(settings.readTimeout()).isEqualTo(Duration.ofSeconds(2));
187+
assertThat(settings.connectTimeout()).isEqualTo(Duration.ofSeconds(1));
188+
assertThat(settings.sslBundle()).isNotNull();
189+
// cant test redirects because EnvironmentPostProcessor is not run
190+
});
190191
}
191192

192193
@Test
193194
void settingHttpClientFactoryWorks() {
194195
ConfigurableApplicationContext context = new SpringApplicationBuilder(TestConfig.class)
195-
.properties("spring.main.web-application-type=none", "spring.http.client.factory=simple")
196-
.run();
196+
.properties("spring.main.web-application-type=none", "spring.http.client.factory=simple")
197+
.run();
197198
ClientHttpRequestFactoryBuilder<?> builder = context.getBean(ClientHttpRequestFactoryBuilder.class);
198199
assertThat(builder).isInstanceOf(SimpleClientHttpRequestFactoryBuilder.class);
199200
}
200201

202+
@Test
203+
void loadBalancerFunctionHandlerAdded() {
204+
new ApplicationContextRunner()
205+
.withConfiguration(AutoConfigurations.of(FilterAutoConfiguration.class, PredicateAutoConfiguration.class,
206+
HandlerFunctionAutoConfiguration.class, GatewayServerMvcAutoConfiguration.class,
207+
HttpClientAutoConfiguration.class, RestTemplateAutoConfiguration.class,
208+
RestClientAutoConfiguration.class))
209+
.run(context -> assertThat(context).hasBean("lbHandlerFunctionDefinition"));
210+
}
211+
212+
@Test
213+
void loadBalancerFunctionHandlerNotAddedWhenNoLoadBalancerClientOnClasspath() {
214+
new ApplicationContextRunner()
215+
.withConfiguration(AutoConfigurations.of(FilterAutoConfiguration.class, PredicateAutoConfiguration.class,
216+
HandlerFunctionAutoConfiguration.class, GatewayServerMvcAutoConfiguration.class,
217+
HttpClientAutoConfiguration.class, RestTemplateAutoConfiguration.class,
218+
RestClientAutoConfiguration.class))
219+
.withClassLoader(new FilteredClassLoader(LoadBalancerClient.class))
220+
.run(context -> assertThat(context).doesNotHaveBean("lbHandlerFunctionDefinition"));
221+
}
222+
201223
@SpringBootConfiguration
202224
@EnableAutoConfiguration
203225
static class TestConfig {

0 commit comments

Comments
 (0)