@Test void testDecoratingDbcp2DataSource() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("spring.datasource.type:" + BasicDataSource.class.getName()); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); assertDataSourceOfType(dataSource, BasicDataSource.class); }); }
@Test public void shouldConfigureTemplateWithTokenSupplier() { 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(); }); }
@Test public void shouldConfigureTemplate() { 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(); }); }
@Test public void shouldNotRegisterBeansIfVaultDisabled() { contextRunner .withUserConfiguration(DiscoveryConfiguration.class) .withPropertyValues("spring.cloud.vault.token=foo", "spring.cloud.vault.enabled=false") .run(context -> { assertThat( context.getBeanNamesForType(VaultServiceInstanceProvider.class)) .isEmpty(); }); }
@Test public void shouldNotRegisterBeansIfDiscoveryDisabled() { contextRunner .withUserConfiguration(DiscoveryConfiguration.class) .withPropertyValues("spring.cloud.vault.token=foo", "spring.cloud.vault.discovery.enabled=false") .run(context -> { assertThat( context.getBeanNamesForType(VaultServiceInstanceProvider.class)) .isEmpty(); }); }
@Test public void shouldNotConfigureReactiveSupport() { 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); }); }
@Test public void shouldRegisterDefaultBeans() { 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); VaultEndpointProvider endpointProvider = context .getBean(VaultEndpointProvider.class); VaultEndpoint vaultEndpoint = endpointProvider.getVaultEndpoint(); assertThat(vaultEndpoint.getPort()).isEqualTo(1234); }); }
@Test void testDecoratingCanBeDisabled() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.enabled:false"); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); assertThat(dataSource).isInstanceOf(HikariDataSource.class); }); }
@Test void testDoesNotAddP6SpyListenerIfNoTracer() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("spring.sleuth.enabled:false"); contextRunner.run(context -> { JdbcEventListenerFactory jdbcEventListenerFactory = context.getBean(JdbcEventListenerFactory.class); CompoundJdbcEventListener jdbcEventListener = (CompoundJdbcEventListener) jdbcEventListenerFactory.createJdbcEventListener(); assertThat(jdbcEventListener.getEventListeners()).extracting("class").doesNotContain(TracingJdbcEventListener.class); }); } }
@Test void testNoDecoratingForExcludeBeans() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.exclude-beans:dataSource"); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); assertThat(dataSource).isInstanceOf(HikariDataSource.class); }); }
@Test void testDecoratedHikariSpecificPropertiesIsSet() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues( "spring.datasource.type:" + HikariDataSource.class.getName(), "spring.datasource.hikari.catalog:test_catalog" ); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); assertThat(dataSource).isNotNull(); assertThat(dataSource).isInstanceOf(DecoratedDataSource.class); DataSource realDataSource = ((DecoratedDataSource) dataSource).getRealDataSource(); assertThat(realDataSource).isInstanceOf(HikariDataSource.class); assertThat(((HikariDataSource) realDataSource).getCatalog()).isEqualTo("test_catalog"); }); }
@Test void testDoesNotAddDatasourceProxyListenerIfNoTracer() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("spring.sleuth.enabled:false"); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); ProxyDataSource proxyDataSource = (ProxyDataSource) ((DecoratedDataSource) dataSource).getDecoratedDataSource(); ChainListener chainListener = proxyDataSource.getProxyConfig().getQueryListener(); assertThat(chainListener.getListeners()).extracting("class").doesNotContain(TracingQueryExecutionListener.class); }); } }
@Test public void testDoesNotRegisterLoggingListenerIfDisabled() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.p6spy.enable-logging:false"); contextRunner.run(context -> { JdbcEventListenerFactory jdbcEventListenerFactory = context.getBean(JdbcEventListenerFactory.class); CompoundJdbcEventListener jdbcEventListener = (CompoundJdbcEventListener) jdbcEventListenerFactory.createJdbcEventListener(); assertThat(jdbcEventListener.getEventListeners()).extracting("class").doesNotContain(LoggingEventListener.class); }); }
@Test void testDecoratingHikariDataSourceWithDefaultStrategies() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("spring.datasource.type:" + HikariDataSource.class.getName()); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); assertDataSourceOfType(dataSource, HikariDataSource.class); FlexyPoolDataSource<HikariDataSource> flexyPoolDataSource = assertDataSourceOfType(dataSource, HikariDataSource.class); IncrementPoolOnTimeoutConnectionAcquiringStrategy strategy1 = findStrategy(flexyPoolDataSource, IncrementPoolOnTimeoutConnectionAcquiringStrategy.class); assertThat(strategy1).isNotNull(); assertThat(strategy1).hasFieldOrPropertyWithValue("maxOverflowPoolSize", 15); assertThat(strategy1).hasFieldOrPropertyWithValue("timeoutMillis", 500); RetryConnectionAcquiringStrategy strategy2 = findStrategy(flexyPoolDataSource, RetryConnectionAcquiringStrategy.class); assertThat(strategy2).isNotNull(); assertThat(strategy2).hasFieldOrPropertyWithValue("retryAttempts", 2); }); }
@Test void testDecoratingCanBeDisabledForSpecificBeans() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.exclude-beans:secondDataSource") .withUserConfiguration(TestMultiDataSourceConfiguration.class); contextRunner.run(context -> { DataSource dataSource = context.getBean("dataSource", DataSource.class); assertThat(dataSource).isInstanceOf(DecoratedDataSource.class); DataSource secondDataSource = context.getBean("secondDataSource", DataSource.class); assertThat(secondDataSource).isInstanceOf(BasicDataSource.class); }); }
@Test public void testCanSetCustomLoggingFormat() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.p6spy.log-format:test %{connectionId}"); contextRunner.run(context -> { JdbcEventListenerFactory jdbcEventListenerFactory = context.getBean(JdbcEventListenerFactory.class); CompoundJdbcEventListener jdbcEventListener = (CompoundJdbcEventListener) jdbcEventListenerFactory.createJdbcEventListener(); assertThat(jdbcEventListener.getEventListeners()).extracting("class").contains(LoggingEventListener.class); assertThat(P6LogQuery.getLogger()).extracting("strategy").extracting("class").contains(CustomLineFormat.class); }); }
@Test void testRegisterLogAndSlowQueryLogByUsingSlf4j() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.datasource-proxy.logging:slf4j"); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); ProxyDataSource proxyDataSource = (ProxyDataSource) ((DecoratedDataSource) dataSource).getDecoratedDataSource(); ChainListener chainListener = proxyDataSource.getProxyConfig().getQueryListener(); assertThat(chainListener.getListeners()).extracting("class").contains(SLF4JSlowQueryListener.class); assertThat(chainListener.getListeners()).extracting("class").contains(SLF4JQueryLoggingListener.class); }); }
@Test void testRegisterLogAndSlowQueryLogUsingApacheCommons() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.datasourceProxy.logging:commons"); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); ProxyDataSource proxyDataSource = (ProxyDataSource) ((DecoratedDataSource) dataSource).getDecoratedDataSource(); ChainListener chainListener = proxyDataSource.getProxyConfig().getQueryListener(); assertThat(chainListener.getListeners()).extracting("class").contains(CommonsSlowQueryListener.class); assertThat(chainListener.getListeners()).extracting("class").contains(CommonsQueryLoggingListener.class); }); }
@Test void testRegisterLogAndSlowQueryLogUsingSystemOut() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.datasource-proxy.logging:sysout"); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); ProxyDataSource proxyDataSource = (ProxyDataSource) ((DecoratedDataSource) dataSource).getDecoratedDataSource(); ChainListener chainListener = proxyDataSource.getProxyConfig().getQueryListener(); assertThat(chainListener.getListeners()).extracting("class").contains(SystemOutSlowQueryListener.class); assertThat(chainListener.getListeners()).extracting("class").contains(SystemOutQueryLoggingListener.class); }); }
@Test void testRegisterLogAndSlowQueryLogUsingJUL() { ApplicationContextRunner contextRunner = this.contextRunner.withPropertyValues("decorator.datasource.datasourceProxy.logging:jul"); contextRunner.run(context -> { DataSource dataSource = context.getBean(DataSource.class); ProxyDataSource proxyDataSource = (ProxyDataSource) ((DecoratedDataSource) dataSource).getDecoratedDataSource(); ChainListener chainListener = proxyDataSource.getProxyConfig().getQueryListener(); assertThat(chainListener.getListeners()).extracting("class").contains(JULSlowQueryListener.class); assertThat(chainListener.getListeners()).extracting("class").contains(JULQueryLoggingListener.class); }); }