Use ApplicationContextRunner in auto-config tests.

Closes gh-261.
Related ticket: gh-254.
This commit is contained in:
Mark Paluch
2018-11-13 08:52:20 +01:00
parent ec721513bd
commit 2a19b8397f
2 changed files with 91 additions and 69 deletions

View File

@@ -24,10 +24,10 @@ import lombok.Data;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.vault.client.VaultEndpoint;
@@ -44,55 +44,60 @@ import static org.mockito.Mockito.*;
*/
public class DiscoveryClientVaultBootstrapConfigurationTests {
private AnnotationConfigApplicationContext context;
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(
DiscoveryClientVaultBootstrapConfiguration.class,
VaultBootstrapConfiguration.class));
@Test
public void shouldRegisterDefaultBeans() {
load(DiscoveryConfiguration.class, "spring.cloud.vault.token=foo",
"spring.cloud.vault.discovery.enabled=true");
contextRunner
.withUserConfiguration(DiscoveryConfiguration.class)
.withPropertyValues("spring.cloud.vault.token=foo",
"spring.cloud.vault.discovery.enabled=true")
.run(context -> {
assertThat(context.getBean(VaultServiceInstanceProvider.class)).isInstanceOf(
DiscoveryClientVaultServiceInstanceProvider.class);
assertThat(context.getBean(VaultServiceInstanceProvider.class))
.isInstanceOf(
DiscoveryClientVaultServiceInstanceProvider.class);
VaultEndpointProvider endpointProvider = context
.getBean(VaultEndpointProvider.class);
VaultEndpoint vaultEndpoint = endpointProvider.getVaultEndpoint();
assertThat(vaultEndpoint.getPort()).isEqualTo(1234);
VaultEndpointProvider endpointProvider = context
.getBean(VaultEndpointProvider.class);
VaultEndpoint vaultEndpoint = endpointProvider.getVaultEndpoint();
assertThat(vaultEndpoint.getPort()).isEqualTo(1234);
});
}
@Test
public void shouldNotRegisterBeansIfDiscoveryDisabled() {
load(DiscoveryConfiguration.class, "spring.cloud.vault.token=foo",
"spring.cloud.vault.discovery.enabled=false");
contextRunner
.withUserConfiguration(DiscoveryConfiguration.class)
.withPropertyValues("spring.cloud.vault.token=foo",
"spring.cloud.vault.discovery.enabled=false")
.run(context -> {
assertThat(context.getBeanNamesForType(VaultServiceInstanceProvider.class))
.isEmpty();
assertThat(
context.getBeanNamesForType(VaultServiceInstanceProvider.class))
.isEmpty();
});
}
@Test
public void shouldNotRegisterBeansIfVaultDisabled() {
load(DiscoveryConfiguration.class, "spring.cloud.vault.token=foo",
"spring.cloud.vault.enabled=false");
contextRunner
.withUserConfiguration(DiscoveryConfiguration.class)
.withPropertyValues("spring.cloud.vault.token=foo",
"spring.cloud.vault.enabled=false")
.run(context -> {
assertThat(context.getBeanNamesForType(VaultServiceInstanceProvider.class))
.isEmpty();
}
assertThat(
context.getBeanNamesForType(VaultServiceInstanceProvider.class))
.isEmpty();
});
private void load(Class<?> config, String... environment) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
TestPropertyValues.of(environment).applyTo(ctx);
ctx.register(config);
ctx.register(DiscoveryClientVaultBootstrapConfiguration.class);
ctx.register(VaultBootstrapConfiguration.class);
ctx.refresh();
this.context = ctx;
}
@Configuration

View File

@@ -18,8 +18,9 @@ package org.springframework.cloud.vault.config;
import org.junit.Test;
import reactor.core.publisher.Mono;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.vault.authentication.AuthenticationSteps;
@@ -41,58 +42,74 @@ import static org.assertj.core.api.Assertions.*;
*/
public class VaultReactiveBootstrapConfigurationTests {
private AnnotationConfigApplicationContext context;
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations
.of(VaultReactiveBootstrapConfiguration.class));
@Test
public void shouldConfigureTemplate() {
load(AuthenticationFactoryConfiguration.class,
"spring.cloud.vault.config.lifecycle.enabled=false");
contextRunner
.withUserConfiguration(AuthenticationFactoryConfiguration.class)
.withPropertyValues("spring.cloud.vault.config.lifecycle.enabled=false")
.run(context -> {
assertThat(context.getBean(ReactiveVaultOperations.class)).isNotNull();
assertThat(context.getBean(AuthenticationStepsFactory.class)).isNotNull();
assertThat(context.getBean(SessionManager.class)).isNotNull()
.isNotInstanceOf(LifecycleAwareSessionManager.class)
.isNotInstanceOf(SimpleSessionManager.class);
assertThat(context.getBeanNamesForType(WebClient.class)).isEmpty();
assertThat(context.getBean(ReactiveVaultOperations.class))
.isNotNull();
assertThat(context.getBean(AuthenticationStepsFactory.class))
.isNotNull();
assertThat(context.getBean(SessionManager.class)).isNotNull()
.isNotInstanceOf(LifecycleAwareSessionManager.class)
.isNotInstanceOf(SimpleSessionManager.class);
assertThat(context.getBeanNamesForType(WebClient.class)).isEmpty();
});
}
@Test
public void shouldNotConfigureIfHttpClientIsMissing() {
contextRunner
.withUserConfiguration(AuthenticationFactoryConfiguration.class)
.withClassLoader(
new FilteredClassLoader("reactor.netty.http.client.HttpClient"))
.run(context -> {
assertThat(context.getBeanNamesForType(ReactiveVaultOperations.class))
.isEmpty();
});
}
@Test
public void shouldConfigureTemplateWithTokenSupplier() {
load(TokenSupplierConfiguration.class,
"spring.cloud.vault.config.lifecycle.enabled=false");
contextRunner
.withUserConfiguration(TokenSupplierConfiguration.class)
.withPropertyValues("spring.cloud.vault.config.lifecycle.enabled=false")
.run(context -> {
assertThat(context.getBean(ReactiveVaultOperations.class)).isNotNull();
assertThat(context.getBean(SessionManager.class)).isNotNull()
.isNotInstanceOf(LifecycleAwareSessionManager.class)
.isNotInstanceOf(SimpleSessionManager.class);
assertThat(context.getBeanNamesForType(WebClient.class)).isEmpty();
assertThat(context.getBean(ReactiveVaultOperations.class))
.isNotNull();
assertThat(context.getBean(SessionManager.class)).isNotNull()
.isNotInstanceOf(LifecycleAwareSessionManager.class)
.isNotInstanceOf(SimpleSessionManager.class);
assertThat(context.getBeanNamesForType(WebClient.class)).isEmpty();
});
}
@Test
public void shouldNotConfigureReactiveSupport() {
load(VaultBootstrapConfiguration.class,
"spring.cloud.vault.reactive.enabled=false",
"spring.cloud.vault.token=foo");
contextRunner
.withUserConfiguration(VaultBootstrapConfiguration.class)
.withPropertyValues("spring.cloud.vault.reactive.enabled=false",
"spring.cloud.vault.token=foo")
.run(context -> {
assertThat(context.getBeanNamesForType(ReactiveVaultOperations.class)).isEmpty();
assertThat(context.getBean(SessionManager.class)).isInstanceOf(
LifecycleAwareSessionManager.class);
}
private void load(Class<?> config, String... environment) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
TestPropertyValues.of(environment).applyTo(ctx);
ctx.register(config);
ctx.register(VaultReactiveBootstrapConfiguration.class);
ctx.refresh();
this.context = ctx;
assertThat(context.getBeanNamesForType(ReactiveVaultOperations.class))
.isEmpty();
assertThat(context.getBean(SessionManager.class)).isInstanceOf(
LifecycleAwareSessionManager.class);
});
}
@Configuration