Fixup tests to use new ApplicationContextTester
Update existing tests that previously use `ContextLoader` to the newly introduced `*ApplicationContextTester` classes. See gh-9634
This commit is contained in:
		
							parent
							
								
									24d086066b
								
							
						
					
					
						commit
						e1ef2a591f
					
				|  | @ -21,6 +21,7 @@ import java.util.Map; | |||
| import javax.sql.DataSource; | ||||
| 
 | ||||
| import io.searchbox.client.JestClient; | ||||
| import org.assertj.core.api.Condition; | ||||
| import org.junit.Test; | ||||
| import org.neo4j.ogm.session.SessionFactory; | ||||
| 
 | ||||
|  | @ -42,11 +43,14 @@ import org.springframework.boot.actuate.health.Neo4jHealthIndicator; | |||
| import org.springframework.boot.actuate.health.RabbitHealthIndicator; | ||||
| import org.springframework.boot.actuate.health.RedisHealthIndicator; | ||||
| import org.springframework.boot.actuate.health.SolrHealthIndicator; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigureBefore; | ||||
| import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; | ||||
| import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration; | ||||
|  | @ -56,8 +60,9 @@ import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; | |||
| import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration; | ||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | ||||
| import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.boot.test.context.AssertableApplicationContext; | ||||
| import org.springframework.boot.test.context.ContextConsumer; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.data.cassandra.core.CassandraOperations; | ||||
|  | @ -79,81 +84,86 @@ import static org.mockito.Mockito.mock; | |||
|  */ | ||||
| public class HealthIndicatorAutoConfigurationTests { | ||||
| 
 | ||||
| 	public final ContextLoader contextLoader = ContextLoader.standard().autoConfig( | ||||
| 			HealthIndicatorAutoConfiguration.class, ManagementServerProperties.class); | ||||
| 	public final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration( | ||||
| 					AutoConfigurations.of(HealthIndicatorAutoConfiguration.class, | ||||
| 							ManagementServerProperties.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultHealthIndicator() { | ||||
| 		this.contextLoader.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 		this.context.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultHealthIndicatorsDisabled() { | ||||
| 		this.contextLoader.env("management.health.defaults.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 		this.context.withPropertyValues("management.health.defaults.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultHealthIndicatorsDisabledWithCustomOne() { | ||||
| 		this.contextLoader.config(CustomHealthIndicator.class) | ||||
| 				.env("management.health.defaults.enabled:false").load(context -> { | ||||
| 					Map<String, HealthIndicator> beans = context | ||||
| 		this.context.withUserConfiguration(CustomHealthIndicator.class) | ||||
| 				.withPropertyValues("management.health.defaults.enabled:false") | ||||
| 				.run((loaded) -> { | ||||
| 					Map<String, HealthIndicator> beans = loaded | ||||
| 							.getBeansOfType(HealthIndicator.class); | ||||
| 					assertThat(beans).hasSize(1); | ||||
| 					assertThat(context.getBean("customHealthIndicator")) | ||||
| 					assertThat(loaded.getBean("customHealthIndicator")) | ||||
| 							.isSameAs(beans.values().iterator().next()); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultHealthIndicatorsDisabledButOne() { | ||||
| 		this.contextLoader | ||||
| 				.env("management.health.defaults.enabled:false", | ||||
| 		this.context | ||||
| 				.withPropertyValues("management.health.defaults.enabled:false", | ||||
| 						"management.health.diskspace.enabled:true") | ||||
| 				.load(hasSingleHealthIndicator(DiskSpaceHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(DiskSpaceHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void redisHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(RedisAutoConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(RedisHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(RedisHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notRedisHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(RedisAutoConfiguration.class) | ||||
| 				.env("management.health.redis.enabled:false", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.redis.enabled:false", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void mongoHealthIndicator() { | ||||
| 		this.contextLoader | ||||
| 				.autoConfigFirst(MongoAutoConfiguration.class, | ||||
| 						MongoDataAutoConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(MongoHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, | ||||
| 						MongoDataAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(MongoHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notMongoHealthIndicator() { | ||||
| 		this.contextLoader | ||||
| 				.autoConfigFirst(MongoAutoConfiguration.class, | ||||
| 						MongoDataAutoConfiguration.class) | ||||
| 				.env("management.health.mongo.enabled:false", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, | ||||
| 						MongoDataAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.mongo.enabled:false", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void combinedHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(MongoAutoConfiguration.class, | ||||
| 		this.context.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, | ||||
| 				RedisAutoConfiguration.class, MongoDataAutoConfiguration.class, | ||||
| 				SolrAutoConfiguration.class).load(context -> { | ||||
| 					Map<String, HealthIndicator> beans = context | ||||
| 				SolrAutoConfiguration.class)).run((loaded) -> { | ||||
| 					Map<String, HealthIndicator> beans = loaded | ||||
| 							.getBeansOfType(HealthIndicator.class); | ||||
| 					assertThat(beans).hasSize(4); | ||||
| 				}); | ||||
|  | @ -161,17 +171,21 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void dataSourceHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(EmbeddedDataSourceConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(DataSourceHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration( | ||||
| 						AutoConfigurations.of(DataSourceAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(DataSourceHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void dataSourceHealthIndicatorWithSeveralDataSources() { | ||||
| 		this.contextLoader | ||||
| 				.config(EmbeddedDataSourceConfiguration.class, DataSourceConfig.class) | ||||
| 				.env("management.health.diskspace.enabled:false").load(context -> { | ||||
| 					Map<String, HealthIndicator> beans = context | ||||
| 		this.context | ||||
| 				.withUserConfiguration(EmbeddedDataSourceConfiguration.class, | ||||
| 						DataSourceConfig.class) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run((loaded) -> { | ||||
| 					Map<String, HealthIndicator> beans = loaded | ||||
| 							.getBeansOfType(HealthIndicator.class); | ||||
| 					assertThat(beans).hasSize(1); | ||||
| 					HealthIndicator bean = beans.values().iterator().next(); | ||||
|  | @ -183,23 +197,24 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void dataSourceHealthIndicatorWithAbstractRoutingDataSource() { | ||||
| 		this.contextLoader | ||||
| 				.config(EmbeddedDataSourceConfiguration.class, | ||||
| 		this.context | ||||
| 				.withUserConfiguration(EmbeddedDataSourceConfiguration.class, | ||||
| 						RoutingDatasourceConfig.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(DataSourceHealthIndicator.class)); | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(DataSourceHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void dataSourceHealthIndicatorWithCustomValidationQuery() { | ||||
| 		this.contextLoader | ||||
| 				.config(DataSourceConfig.class, | ||||
| 		this.context | ||||
| 				.withUserConfiguration(DataSourceConfig.class, | ||||
| 						DataSourcePoolMetadataProvidersConfiguration.class, | ||||
| 						HealthIndicatorAutoConfiguration.class) | ||||
| 				.env("spring.datasource.test.validation-query:SELECT from FOOBAR", | ||||
| 				.withPropertyValues( | ||||
| 						"spring.datasource.test.validation-query:SELECT from FOOBAR", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(context -> { | ||||
| 					Map<String, HealthIndicator> beans = context | ||||
| 				.run((loaded) -> { | ||||
| 					Map<String, HealthIndicator> beans = loaded | ||||
| 							.getBeansOfType(HealthIndicator.class); | ||||
| 					assertThat(beans).hasSize(1); | ||||
| 					HealthIndicator healthIndicator = beans.values().iterator().next(); | ||||
|  | @ -213,178 +228,192 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void notDataSourceHealthIndicator() { | ||||
| 		this.contextLoader.config(EmbeddedDataSourceConfiguration.class) | ||||
| 				.env("management.health.db.enabled:false", | ||||
| 		this.context.withUserConfiguration(EmbeddedDataSourceConfiguration.class) | ||||
| 				.withPropertyValues("management.health.db.enabled:false", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void rabbitHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(RabbitAutoConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(RabbitHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(RabbitHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notRabbitHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(RabbitAutoConfiguration.class) | ||||
| 				.env("management.health.rabbit.enabled:false", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.rabbit.enabled:false", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void solrHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(SolrAutoConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(SolrHealthIndicator.class)); | ||||
| 		this.context.withConfiguration(AutoConfigurations.of(SolrAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(SolrHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notSolrHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(SolrAutoConfiguration.class) | ||||
| 				.env("management.health.solr.enabled:false", | ||||
| 		this.context.withConfiguration(AutoConfigurations.of(SolrAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.solr.enabled:false", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void diskSpaceHealthIndicator() { | ||||
| 		this.contextLoader.load(hasSingleHealthIndicator(DiskSpaceHealthIndicator.class)); | ||||
| 		this.context.run(hasSingleHealthIndicator(DiskSpaceHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void mailHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(MailSenderAutoConfiguration.class) | ||||
| 				.env("spring.mail.host:smtp.acme.org", | ||||
| 		this.context | ||||
| 				.withConfiguration( | ||||
| 						AutoConfigurations.of(MailSenderAutoConfiguration.class)) | ||||
| 				.withPropertyValues("spring.mail.host:smtp.acme.org", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(MailHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(MailHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notMailHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(MailSenderAutoConfiguration.class) | ||||
| 				.env("spring.mail.host:smtp.acme.org", | ||||
| 		this.context | ||||
| 				.withConfiguration( | ||||
| 						AutoConfigurations.of(MailSenderAutoConfiguration.class)) | ||||
| 				.withPropertyValues("spring.mail.host:smtp.acme.org", | ||||
| 						"management.health.mail.enabled:false", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void jmsHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(ActiveMQAutoConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(JmsHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(JmsHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notJmsHealthIndicator() { | ||||
| 		this.contextLoader.autoConfigFirst(ActiveMQAutoConfiguration.class) | ||||
| 				.env("management.health.jms.enabled:false", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.jms.enabled:false", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void elasticsearchHealthIndicator() { | ||||
| 		this.contextLoader | ||||
| 				.autoConfigFirst(JestClientConfiguration.class, | ||||
| 						JestAutoConfiguration.class, ElasticsearchAutoConfiguration.class) | ||||
| 				.env("spring.data.elasticsearch.cluster-nodes:localhost:0", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(JestClientConfiguration.class, | ||||
| 						JestAutoConfiguration.class, | ||||
| 						ElasticsearchAutoConfiguration.class)) | ||||
| 				.withPropertyValues("spring.data.elasticsearch.cluster-nodes:localhost:0", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.systemProperty("es.set.netty.runtime.available.processors", "false") | ||||
| 				.load(hasSingleHealthIndicator(ElasticsearchHealthIndicator.class)); | ||||
| 				.withSystemProperties("es.set.netty.runtime.available.processors=false") | ||||
| 				.run(hasSingleHealthIndicator(ElasticsearchHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void elasticsearchJestHealthIndicator() { | ||||
| 		this.contextLoader | ||||
| 				.autoConfigFirst(JestClientConfiguration.class, | ||||
| 						JestAutoConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.systemProperty("es.set.netty.runtime.available.processors", "false") | ||||
| 				.load(hasSingleHealthIndicator(ElasticsearchJestHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(JestClientConfiguration.class, | ||||
| 						JestAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.withSystemProperties("es.set.netty.runtime.available.processors=false") | ||||
| 				.run(hasSingleHealthIndicator(ElasticsearchJestHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notElasticsearchHealthIndicator() { | ||||
| 		this.contextLoader | ||||
| 				.autoConfigFirst(JestClientConfiguration.class, | ||||
| 						JestAutoConfiguration.class, ElasticsearchAutoConfiguration.class) | ||||
| 				.env("management.health.elasticsearch.enabled:false", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(JestClientConfiguration.class, | ||||
| 						JestAutoConfiguration.class, | ||||
| 						ElasticsearchAutoConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.elasticsearch.enabled:false", | ||||
| 						"spring.data.elasticsearch.properties.path.home:target", | ||||
| 						"management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void cassandraHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(CassandraConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(CassandraHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(CassandraConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(CassandraHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notCassandraHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(CassandraConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(CassandraConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false", | ||||
| 						"management.health.cassandra.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void couchbaseHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(CouchbaseConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(CouchbaseHealthIndicator.class)); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(CouchbaseConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(CouchbaseHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notCouchbaseHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(CouchbaseConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false", | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(CouchbaseConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false", | ||||
| 						"management.health.couchbase.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void ldapHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(LdapConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(LdapHealthIndicator.class)); | ||||
| 		this.context.withConfiguration(AutoConfigurations.of(LdapConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(LdapHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notLdapHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(LdapConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false", | ||||
| 		this.context.withConfiguration(AutoConfigurations.of(LdapConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false", | ||||
| 						"management.health.ldap.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void neo4jHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(Neo4jConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(Neo4jHealthIndicator.class)); | ||||
| 		this.context.withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false") | ||||
| 				.run(hasSingleHealthIndicator(Neo4jHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notNeo4jHealthIndicator() throws Exception { | ||||
| 		this.contextLoader.autoConfigFirst(Neo4jConfiguration.class) | ||||
| 				.env("management.health.diskspace.enabled:false", | ||||
| 		this.context.withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class)) | ||||
| 				.withPropertyValues("management.health.diskspace.enabled:false", | ||||
| 						"management.health.neo4j.enabled:false") | ||||
| 				.load(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 				.run(hasSingleHealthIndicator(ApplicationHealthIndicator.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	private ContextConsumer hasSingleHealthIndicator( | ||||
| 	private ContextConsumer<AssertableApplicationContext> hasSingleHealthIndicator( | ||||
| 			Class<? extends HealthIndicator> type) { | ||||
| 		return context -> { | ||||
| 			Map<String, HealthIndicator> beans = context | ||||
| 					.getBeansOfType(HealthIndicator.class); | ||||
| 			assertThat(beans).hasSize(1); | ||||
| 			assertThat(beans.values().iterator().next().getClass()).isEqualTo(type); | ||||
| 		return (loaded) -> { | ||||
| 			assertThat(loaded).getBeans(HealthIndicator.class).hasSize(1) | ||||
| 					.hasValueSatisfying(new Condition<>( | ||||
| 							(indicator) -> indicator.getClass().equals(type), | ||||
| 							"Wrong indicator type")); | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -429,6 +458,7 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) | ||||
| 	protected static class CassandraConfiguration { | ||||
| 
 | ||||
| 		@Bean | ||||
|  | @ -439,6 +469,7 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) | ||||
| 	protected static class CouchbaseConfiguration { | ||||
| 
 | ||||
| 		@Bean | ||||
|  | @ -448,6 +479,7 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	protected static class JestClientConfiguration { | ||||
| 
 | ||||
| 		@Bean | ||||
|  | @ -458,6 +490,7 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) | ||||
| 	protected static class LdapConfiguration { | ||||
| 
 | ||||
| 		@Bean | ||||
|  | @ -468,6 +501,7 @@ public class HealthIndicatorAutoConfigurationTests { | |||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) | ||||
| 	protected static class Neo4jConfiguration { | ||||
| 
 | ||||
| 		@Bean | ||||
|  |  | |||
|  | @ -52,10 +52,12 @@ import org.junit.runner.RunWith; | |||
| 
 | ||||
| import org.springframework.beans.DirectFieldAccessor; | ||||
| import org.springframework.beans.factory.BeanCreationException; | ||||
| import org.springframework.beans.factory.NoSuchBeanDefinitionException; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.autoconfigure.cache.support.MockCachingProvider; | ||||
| import org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.boot.test.context.AssertableApplicationContext; | ||||
| import org.springframework.boot.test.context.ContextConsumer; | ||||
| import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions; | ||||
| import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner; | ||||
| import org.springframework.cache.Cache; | ||||
|  | @ -72,7 +74,6 @@ import org.springframework.cache.interceptor.CacheResolver; | |||
| import org.springframework.cache.jcache.JCacheCacheManager; | ||||
| import org.springframework.cache.support.NoOpCacheManager; | ||||
| import org.springframework.cache.support.SimpleCacheManager; | ||||
| import org.springframework.context.ConfigurableApplicationContext; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | @ -101,85 +102,88 @@ public class CacheAutoConfigurationTests { | |||
| 	@Rule | ||||
| 	public final ExpectedException thrown = ExpectedException.none(); | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(CacheAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(CacheAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void noEnableCaching() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class).load(context -> { | ||||
| 			this.thrown.expect(NoSuchBeanDefinitionException.class); | ||||
| 			context.getBean(CacheManager.class); | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class).run((loaded) -> { | ||||
| 			assertThat(loaded).doesNotHaveBean(CacheManager.class); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void cacheManagerBackOff() { | ||||
| 		this.contextLoader.config(CustomCacheManagerConfiguration.class).load(context -> { | ||||
| 			ConcurrentMapCacheManager cacheManager = validateCacheManager(context, | ||||
| 					ConcurrentMapCacheManager.class); | ||||
| 			assertThat(cacheManager.getCacheNames()).containsOnly("custom1"); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(CustomCacheManagerConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(getCacheManager(loaded, ConcurrentMapCacheManager.class) | ||||
| 							.getCacheNames()).containsOnly("custom1"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void cacheManagerFromSupportBackOff() { | ||||
| 		this.contextLoader.config(CustomCacheManagerFromSupportConfiguration.class) | ||||
| 				.load(context -> { | ||||
| 					ConcurrentMapCacheManager cacheManager = validateCacheManager(context, | ||||
| 							ConcurrentMapCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("custom1"); | ||||
| 		this.context | ||||
| 				.withUserConfiguration(CustomCacheManagerFromSupportConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(getCacheManager(loaded, ConcurrentMapCacheManager.class) | ||||
| 							.getCacheNames()).containsOnly("custom1"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void cacheResolverFromSupportBackOff() throws Exception { | ||||
| 		this.contextLoader.config(CustomCacheResolverFromSupportConfiguration.class) | ||||
| 				.load(context -> { | ||||
| 					this.thrown.expect(NoSuchBeanDefinitionException.class); | ||||
| 					context.getBean(CacheManager.class); | ||||
| 		this.context | ||||
| 				.withUserConfiguration(CustomCacheResolverFromSupportConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).doesNotHaveBean(CacheManager.class); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void customCacheResolverCanBeDefined() throws Exception { | ||||
| 		this.contextLoader.config(SpecificCacheResolverConfiguration.class) | ||||
| 				.env("spring.cache.type=simple").load(context -> { | ||||
| 					validateCacheManager(context, ConcurrentMapCacheManager.class); | ||||
| 					assertThat(context.getBeansOfType(CacheResolver.class)).hasSize(1); | ||||
| 		this.context.withUserConfiguration(SpecificCacheResolverConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=simple").run((loaded) -> { | ||||
| 					getCacheManager(loaded, ConcurrentMapCacheManager.class); | ||||
| 					assertThat(loaded).getBeans(CacheResolver.class).hasSize(1); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void notSupportedCachingMode() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=foobar").loadAndFail(BeanCreationException.class, | ||||
| 						ex -> assertThat(ex.getMessage()).contains( | ||||
| 								"Failed to bind properties under 'spring.cache.type'")); | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=foobar").run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining( | ||||
| 									"Failed to bind properties under 'spring.cache.type'"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void simpleCacheExplicit() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=simple").load(context -> { | ||||
| 					ConcurrentMapCacheManager cacheManager = validateCacheManager(context, | ||||
| 							ConcurrentMapCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).isEmpty(); | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=simple").run((loaded) -> { | ||||
| 					assertThat(getCacheManager(loaded, ConcurrentMapCacheManager.class) | ||||
| 							.getCacheNames()).isEmpty(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void simpleCacheWithCustomizers() { | ||||
| 		testCustomizers(DefaultCacheAndCustomizersConfiguration.class, "simple", | ||||
| 				"allCacheManagerCustomizer", "simpleCacheManagerCustomizer"); | ||||
| 		this.context.withUserConfiguration(DefaultCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "simple") | ||||
| 				.run(dunno("allCacheManagerCustomizer", "simpleCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void simpleCacheExplicitWithCacheNames() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=simple", "spring.cache.cacheNames[0]=foo", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=simple", | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					ConcurrentMapCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					ConcurrentMapCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							ConcurrentMapCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				}); | ||||
|  | @ -187,50 +191,56 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void genericCacheWithCaches() { | ||||
| 		this.contextLoader.config(GenericCacheConfiguration.class).load(context -> { | ||||
| 			SimpleCacheManager cacheManager = validateCacheManager(context, | ||||
| 					SimpleCacheManager.class); | ||||
| 			assertThat(cacheManager.getCache("first")) | ||||
| 					.isEqualTo(context.getBean("firstCache")); | ||||
| 			assertThat(cacheManager.getCache("second")) | ||||
| 					.isEqualTo(context.getBean("secondCache")); | ||||
| 			assertThat(cacheManager.getCacheNames()).hasSize(2); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(GenericCacheConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					SimpleCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							SimpleCacheManager.class); | ||||
| 					assertThat(cacheManager.getCache("first")) | ||||
| 							.isEqualTo(loaded.getBean("firstCache")); | ||||
| 					assertThat(cacheManager.getCache("second")) | ||||
| 							.isEqualTo(loaded.getBean("secondCache")); | ||||
| 					assertThat(cacheManager.getCacheNames()).hasSize(2); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void genericCacheExplicit() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=generic").loadAndFail(BeanCreationException.class, | ||||
| 						ex -> assertThat(ex.getMessage()).contains( | ||||
| 								"No cache manager could be auto-configured", "GENERIC")); | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=generic").run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining( | ||||
| 									"No cache manager could be auto-configured") | ||||
| 							.hasMessageContaining("GENERIC"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void genericCacheWithCustomizers() { | ||||
| 		testCustomizers(GenericCacheAndCustomizersConfiguration.class, "generic", | ||||
| 				"allCacheManagerCustomizer", "genericCacheManagerCustomizer"); | ||||
| 		this.context.withUserConfiguration(GenericCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "generic") | ||||
| 				.run(dunno("allCacheManagerCustomizer", "genericCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void genericCacheExplicitWithCaches() { | ||||
| 		this.contextLoader.config(GenericCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=generic").load(context -> { | ||||
| 					SimpleCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(GenericCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=generic").run((loaded) -> { | ||||
| 					SimpleCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							SimpleCacheManager.class); | ||||
| 					assertThat(cacheManager.getCache("first")) | ||||
| 							.isEqualTo(context.getBean("firstCache")); | ||||
| 							.isEqualTo(loaded.getBean("firstCache")); | ||||
| 					assertThat(cacheManager.getCache("second")) | ||||
| 							.isEqualTo(context.getBean("secondCache")); | ||||
| 							.isEqualTo(loaded.getBean("secondCache")); | ||||
| 					assertThat(cacheManager.getCacheNames()).hasSize(2); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void couchbaseCacheExplicit() { | ||||
| 		this.contextLoader.config(CouchbaseCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=couchbase").load(context -> { | ||||
| 					CouchbaseCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(CouchbaseCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=couchbase").run((loaded) -> { | ||||
| 					CouchbaseCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							CouchbaseCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).isEmpty(); | ||||
| 				}); | ||||
|  | @ -238,70 +248,77 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void couchbaseCacheWithCustomizers() { | ||||
| 		testCustomizers(CouchbaseCacheAndCustomizersConfiguration.class, "couchbase", | ||||
| 				"allCacheManagerCustomizer", "couchbaseCacheManagerCustomizer"); | ||||
| 		this.context | ||||
| 				.withUserConfiguration(CouchbaseCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "couchbase").run(dunno( | ||||
| 						"allCacheManagerCustomizer", "couchbaseCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void couchbaseCacheExplicitWithCaches() { | ||||
| 		this.contextLoader.config(CouchbaseCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=couchbase", "spring.cache.cacheNames[0]=foo", | ||||
| 		this.context.withUserConfiguration(CouchbaseCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=couchbase", | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					CouchbaseCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					CouchbaseCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							CouchbaseCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 					Cache cache = cacheManager.getCache("foo"); | ||||
| 					assertThat(cache).isInstanceOf(CouchbaseCache.class); | ||||
| 					assertThat(((CouchbaseCache) cache).getTtl()).isEqualTo(0); | ||||
| 					assertThat(((CouchbaseCache) cache).getNativeCache()) | ||||
| 							.isEqualTo(context.getBean("bucket")); | ||||
| 							.isEqualTo(loaded.getBean("bucket")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void couchbaseCacheExplicitWithTtl() { | ||||
| 		this.contextLoader.config(CouchbaseCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=couchbase", "spring.cache.cacheNames=foo,bar", | ||||
| 		this.context.withUserConfiguration(CouchbaseCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=couchbase", | ||||
| 						"spring.cache.cacheNames=foo,bar", | ||||
| 						"spring.cache.couchbase.expiration=2000") | ||||
| 				.load(context -> { | ||||
| 					CouchbaseCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					CouchbaseCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							CouchbaseCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 					Cache cache = cacheManager.getCache("foo"); | ||||
| 					assertThat(cache).isInstanceOf(CouchbaseCache.class); | ||||
| 					assertThat(((CouchbaseCache) cache).getTtl()).isEqualTo(2); | ||||
| 					assertThat(((CouchbaseCache) cache).getNativeCache()) | ||||
| 							.isEqualTo(context.getBean("bucket")); | ||||
| 							.isEqualTo(loaded.getBean("bucket")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void redisCacheExplicit() { | ||||
| 		this.contextLoader.config(RedisCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=redis").load(context -> { | ||||
| 					RedisCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(RedisCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=redis").run((loaded) -> { | ||||
| 					RedisCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							RedisCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).isEmpty(); | ||||
| 					assertThat(((org.springframework.data.redis.cache.RedisCacheConfiguration) | ||||
| 							new DirectFieldAccessor(cacheManager).getPropertyValue( | ||||
| 									"defaultCacheConfig")).usePrefix()).isTrue(); | ||||
| 					assertThat( | ||||
| 							((org.springframework.data.redis.cache.RedisCacheConfiguration) new DirectFieldAccessor( | ||||
| 									cacheManager).getPropertyValue("defaultCacheConfig")) | ||||
| 											.usePrefix()).isTrue(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void redisCacheWithCustomizers() { | ||||
| 		testCustomizers(RedisCacheAndCustomizersConfiguration.class, "redis", | ||||
| 				"allCacheManagerCustomizer", "redisCacheManagerCustomizer"); | ||||
| 		this.context.withUserConfiguration(RedisCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "redis") | ||||
| 				.run(dunno("allCacheManagerCustomizer", "redisCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void redisCacheExplicitWithCaches() { | ||||
| 		this.contextLoader.config(RedisCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=redis", "spring.cache.cacheNames[0]=foo", | ||||
| 		this.context.withUserConfiguration(RedisCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=redis", | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					RedisCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					RedisCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							RedisCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				}); | ||||
|  | @ -309,9 +326,9 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void noOpCacheExplicit() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=none").load(context -> { | ||||
| 					NoOpCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=none").run((loaded) -> { | ||||
| 					NoOpCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							NoOpCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).isEmpty(); | ||||
| 				}); | ||||
|  | @ -319,25 +336,27 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void jCacheCacheNoProviderExplicit() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache").loadAndFail(ex -> { | ||||
| 					assertThat(ex).isInstanceOf(BeanCreationException.class); | ||||
| 					assertThat(ex.getMessage()).contains( | ||||
| 							"No cache manager could be auto-configured", "JCACHE"); | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache").run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining( | ||||
| 									"No cache manager could be auto-configured") | ||||
| 							.hasMessageContaining("JCACHE"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void jCacheCacheWithProvider() { | ||||
| 		String cachingProviderFqn = MockCachingProvider.class.getName(); | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn) | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).isEmpty(); | ||||
| 					assertThat(context.getBean(javax.cache.CacheManager.class)) | ||||
| 					assertThat(loaded.getBean(javax.cache.CacheManager.class)) | ||||
| 							.isEqualTo(cacheManager.getCacheManager()); | ||||
| 				}); | ||||
| 	} | ||||
|  | @ -345,13 +364,13 @@ public class CacheAutoConfigurationTests { | |||
| 	@Test | ||||
| 	public void jCacheCacheWithCaches() { | ||||
| 		String cachingProviderFqn = MockCachingProvider.class.getName(); | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				}); | ||||
|  | @ -360,16 +379,16 @@ public class CacheAutoConfigurationTests { | |||
| 	@Test | ||||
| 	public void jCacheCacheWithCachesAndCustomConfig() { | ||||
| 		String cachingProviderFqn = MockCachingProvider.class.getName(); | ||||
| 		this.contextLoader.config(JCacheCustomConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context.withUserConfiguration(JCacheCustomConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 						"spring.cache.cacheNames[0]=one", | ||||
| 						"spring.cache.cacheNames[1]=two") | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("one", "two"); | ||||
| 					CompleteConfiguration<?, ?> defaultCacheConfiguration = context | ||||
| 					CompleteConfiguration<?, ?> defaultCacheConfiguration = loaded | ||||
| 							.getBean(CompleteConfiguration.class); | ||||
| 					verify(cacheManager.getCacheManager()).createCache("one", | ||||
| 							defaultCacheConfiguration); | ||||
|  | @ -380,35 +399,38 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void jCacheCacheWithExistingJCacheManager() { | ||||
| 		this.contextLoader.config(JCacheCustomCacheManager.class) | ||||
| 				.env("spring.cache.type=jcache").load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(JCacheCustomCacheManager.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache").run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheManager()) | ||||
| 							.isEqualTo(context.getBean("customJCacheCacheManager")); | ||||
| 							.isEqualTo(loaded.getBean("customJCacheCacheManager")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void jCacheCacheWithUnknownProvider() { | ||||
| 		String wrongCachingProviderFqn = "org.acme.FooBar"; | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + wrongCachingProviderFqn) | ||||
| 				.loadAndFail(BeanCreationException.class, ex -> assertThat( | ||||
| 						ex.getMessage().contains(wrongCachingProviderFqn))); | ||||
| 		String wrongCachingProviderClassName = "org.acme.FooBar"; | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + wrongCachingProviderClassName) | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining(wrongCachingProviderClassName); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void jCacheCacheWithConfig() { | ||||
| 		String cachingProviderFqn = MockCachingProvider.class.getName(); | ||||
| 		String configLocation = "org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.xml"; | ||||
| 		this.contextLoader.config(JCacheCustomConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context.withUserConfiguration(JCacheCustomConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 						"spring.cache.jcache.config=" + configLocation) | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 					Resource configResource = new ClassPathResource(configLocation); | ||||
| 					assertThat(cacheManager.getCacheManager().getURI()) | ||||
|  | @ -420,41 +442,45 @@ public class CacheAutoConfigurationTests { | |||
| 	public void jCacheCacheWithWrongConfig() { | ||||
| 		String cachingProviderFqn = MockCachingProvider.class.getName(); | ||||
| 		String configLocation = "org/springframework/boot/autoconfigure/cache/does-not-exist.xml"; | ||||
| 		this.contextLoader.config(JCacheCustomConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context.withUserConfiguration(JCacheCustomConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 						"spring.cache.jcache.config=" + configLocation) | ||||
| 				.loadAndFail(BeanCreationException.class, | ||||
| 						ex -> assertThat(ex.getMessage()).contains("does not exist", | ||||
| 								configLocation)); | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining("does not exist") | ||||
| 							.hasMessageContaining(configLocation); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void ehcacheCacheWithCaches() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=ehcache").load(context -> { | ||||
| 					EhCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=ehcache").run((loaded) -> { | ||||
| 					EhCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							EhCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("cacheTest1", | ||||
| 							"cacheTest2"); | ||||
| 					assertThat(context.getBean(net.sf.ehcache.CacheManager.class)) | ||||
| 					assertThat(loaded.getBean(net.sf.ehcache.CacheManager.class)) | ||||
| 							.isEqualTo(cacheManager.getCacheManager()); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void ehcacheCacheWithCustomizers() { | ||||
| 		testCustomizers(DefaultCacheAndCustomizersConfiguration.class, "ehcache", | ||||
| 				"allCacheManagerCustomizer", "ehcacheCacheManagerCustomizer"); | ||||
| 		this.context.withUserConfiguration(DefaultCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "ehcache") | ||||
| 				.run(dunno("allCacheManagerCustomizer", "ehcacheCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void ehcacheCacheWithConfig() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=ehcache", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=ehcache", | ||||
| 						"spring.cache.ehcache.config=cache/ehcache-override.xml") | ||||
| 				.load(context -> { | ||||
| 					EhCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					EhCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							EhCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()) | ||||
| 							.containsOnly("cacheOverrideTest1", "cacheOverrideTest2"); | ||||
|  | @ -463,25 +489,25 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void ehcacheCacheWithExistingCacheManager() { | ||||
| 		this.contextLoader.config(EhCacheCustomCacheManager.class) | ||||
| 				.env("spring.cache.type=ehcache").load(context -> { | ||||
| 					EhCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(EhCacheCustomCacheManager.class) | ||||
| 				.withPropertyValues("spring.cache.type=ehcache").run((loaded) -> { | ||||
| 					EhCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							EhCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheManager()) | ||||
| 							.isEqualTo(context.getBean("customEhCacheCacheManager")); | ||||
| 							.isEqualTo(loaded.getBean("customEhCacheCacheManager")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void ehcache3AsJCacheWithCaches() { | ||||
| 		String cachingProviderFqn = EhcacheCachingProvider.class.getName(); | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				}); | ||||
|  | @ -491,12 +517,12 @@ public class CacheAutoConfigurationTests { | |||
| 	public void ehcache3AsJCacheWithConfig() throws IOException { | ||||
| 		String cachingProviderFqn = EhcacheCachingProvider.class.getName(); | ||||
| 		String configLocation = "ehcache3.xml"; | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 						"spring.cache.jcache.config=" + configLocation) | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 
 | ||||
| 					Resource configResource = new ClassPathResource(configLocation); | ||||
|  | @ -508,48 +534,54 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void hazelcastCacheExplicit() { | ||||
| 		this.contextLoader.autoConfigFirst(HazelcastAutoConfiguration.class) | ||||
| 				.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=hazelcast").load(context -> { | ||||
| 					HazelcastCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context | ||||
| 				.withConfiguration( | ||||
| 						AutoConfigurations.of(HazelcastAutoConfiguration.class)) | ||||
| 				.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=hazelcast").run((loaded) -> { | ||||
| 					HazelcastCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							HazelcastCacheManager.class); | ||||
| 					// NOTE: the hazelcast implementation knows about a cache in a lazy | ||||
| 					// manner. | ||||
| 					cacheManager.getCache("defaultCache"); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("defaultCache"); | ||||
| 					assertThat(context.getBean(HazelcastInstance.class)) | ||||
| 					assertThat(loaded.getBean(HazelcastInstance.class)) | ||||
| 							.isEqualTo(cacheManager.getHazelcastInstance()); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void hazelcastCacheWithCustomizers() { | ||||
| 		testCustomizers(HazelcastCacheAndCustomizersConfiguration.class, "hazelcast", | ||||
| 				"allCacheManagerCustomizer", "hazelcastCacheManagerCustomizer"); | ||||
| 		this.context | ||||
| 				.withUserConfiguration(HazelcastCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "hazelcast").run(dunno( | ||||
| 						"allCacheManagerCustomizer", "hazelcastCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void hazelcastCacheWithExistingHazelcastInstance() { | ||||
| 		this.contextLoader.config(HazelcastCustomHazelcastInstance.class) | ||||
| 				.env("spring.cache.type=hazelcast").load(context -> { | ||||
| 					HazelcastCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(HazelcastCustomHazelcastInstance.class) | ||||
| 				.withPropertyValues("spring.cache.type=hazelcast").run((loaded) -> { | ||||
| 					HazelcastCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							HazelcastCacheManager.class); | ||||
| 					assertThat(cacheManager.getHazelcastInstance()) | ||||
| 							.isEqualTo(context.getBean("customHazelcastInstance")); | ||||
| 							.isEqualTo(loaded.getBean("customHazelcastInstance")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void hazelcastCacheWithHazelcastAutoConfiguration() throws IOException { | ||||
| 		String hazelcastConfig = "org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.xml"; | ||||
| 		this.contextLoader.autoConfigFirst(HazelcastAutoConfiguration.class) | ||||
| 				.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=hazelcast", | ||||
| 		this.context | ||||
| 				.withConfiguration( | ||||
| 						AutoConfigurations.of(HazelcastAutoConfiguration.class)) | ||||
| 				.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=hazelcast", | ||||
| 						"spring.hazelcast.config=" + hazelcastConfig) | ||||
| 				.load(context -> { | ||||
| 					HazelcastCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					HazelcastCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							HazelcastCacheManager.class); | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 					HazelcastInstance hazelcastInstance = loaded | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(cacheManager.getHazelcastInstance()) | ||||
| 							.isSameAs(hazelcastInstance); | ||||
|  | @ -564,13 +596,13 @@ public class CacheAutoConfigurationTests { | |||
| 	public void hazelcastAsJCacheWithCaches() { | ||||
| 		String cachingProviderFqn = HazelcastCachingProvider.class.getName(); | ||||
| 		try { | ||||
| 			this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 					.env("spring.cache.type=jcache", | ||||
| 			this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 					.withPropertyValues("spring.cache.type=jcache", | ||||
| 							"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 							"spring.cache.cacheNames[0]=foo", | ||||
| 							"spring.cache.cacheNames[1]=bar") | ||||
| 					.load(context -> { | ||||
| 						JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 					.run((loaded) -> { | ||||
| 						JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 								JCacheCacheManager.class); | ||||
| 						assertThat(cacheManager.getCacheNames()).containsOnly("foo", | ||||
| 								"bar"); | ||||
|  | @ -587,14 +619,13 @@ public class CacheAutoConfigurationTests { | |||
| 		String cachingProviderFqn = HazelcastCachingProvider.class.getName(); | ||||
| 		try { | ||||
| 			String configLocation = "org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.xml"; | ||||
| 			this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 					.env("spring.cache.type=jcache", | ||||
| 			this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 					.withPropertyValues("spring.cache.type=jcache", | ||||
| 							"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 							"spring.cache.jcache.config=" + configLocation) | ||||
| 					.load(context -> { | ||||
| 						JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 					.run((loaded) -> { | ||||
| 						JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 								JCacheCacheManager.class); | ||||
| 
 | ||||
| 						Resource configResource = new ClassPathResource(configLocation); | ||||
| 						assertThat(cacheManager.getCacheManager().getURI()) | ||||
| 								.isEqualTo(configResource.getURI()); | ||||
|  | @ -609,20 +640,21 @@ public class CacheAutoConfigurationTests { | |||
| 	@Test | ||||
| 	public void hazelcastAsJCacheWithExistingHazelcastInstance() throws IOException { | ||||
| 		String cachingProviderFqn = HazelcastCachingProvider.class.getName(); | ||||
| 		this.contextLoader.autoConfig(HazelcastAutoConfiguration.class) | ||||
| 				.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 		this.context | ||||
| 				.withConfiguration( | ||||
| 						AutoConfigurations.of(HazelcastAutoConfiguration.class)) | ||||
| 				.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn) | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 				.run((loaded) -> { | ||||
| 					JCacheCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							JCacheCacheManager.class); | ||||
| 					javax.cache.CacheManager jCacheManager = cacheManager | ||||
| 							.getCacheManager(); | ||||
| 					assertThat(jCacheManager).isInstanceOf( | ||||
| 							com.hazelcast.cache.HazelcastCacheManager.class); | ||||
| 					assertThat(context.getBeansOfType(HazelcastInstance.class)) | ||||
| 							.hasSize(1); | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 					assertThat(loaded.getBeansOfType(HazelcastInstance.class)).hasSize(1); | ||||
| 					HazelcastInstance hazelcastInstance = loaded | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(((com.hazelcast.cache.HazelcastCacheManager) jCacheManager) | ||||
| 							.getHazelcastInstance()).isSameAs(hazelcastInstance); | ||||
|  | @ -633,113 +665,108 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void infinispanCacheWithConfig() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=infinispan", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=infinispan", | ||||
| 						"spring.cache.infinispan.config=infinispan.xml") | ||||
| 				.load(context -> { | ||||
| 					SpringEmbeddedCacheManager cacheManager = validateCacheManager( | ||||
| 							context, SpringEmbeddedCacheManager.class); | ||||
| 				.run((loaded) -> { | ||||
| 					SpringEmbeddedCacheManager cacheManager = getCacheManager(loaded, | ||||
| 							SpringEmbeddedCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).contains("foo", "bar"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void infinispanCacheWithCustomizers() { | ||||
| 		testCustomizers(DefaultCacheAndCustomizersConfiguration.class, "infinispan", | ||||
| 				"allCacheManagerCustomizer", "infinispanCacheManagerCustomizer"); | ||||
| 		this.context.withUserConfiguration(DefaultCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "infinispan").run(dunno( | ||||
| 						"allCacheManagerCustomizer", "infinispanCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void infinispanCacheWithCaches() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=infinispan", "spring.cache.cacheNames[0]=foo", | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=infinispan", | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					SpringEmbeddedCacheManager cacheManager = validateCacheManager( | ||||
| 							context, SpringEmbeddedCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(getCacheManager(loaded, SpringEmbeddedCacheManager.class) | ||||
| 							.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void infinispanCacheWithCachesAndCustomConfig() { | ||||
| 		this.contextLoader.config(InfinispanCustomConfiguration.class) | ||||
| 				.env("spring.cache.type=infinispan", "spring.cache.cacheNames[0]=foo", | ||||
| 		this.context.withUserConfiguration(InfinispanCustomConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=infinispan", | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					SpringEmbeddedCacheManager cacheManager = validateCacheManager( | ||||
| 							context, SpringEmbeddedCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 					ConfigurationBuilder defaultConfigurationBuilder = context | ||||
| 							.getBean(ConfigurationBuilder.class); | ||||
| 					verify(defaultConfigurationBuilder, times(2)).build(); | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(getCacheManager(loaded, SpringEmbeddedCacheManager.class) | ||||
| 							.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 					verify(loaded.getBean(ConfigurationBuilder.class), times(2)).build(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void infinispanAsJCacheWithCaches() { | ||||
| 		String cachingProviderFqn = JCachingProvider.class.getName(); | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 		String cachingProviderClassName = JCachingProvider.class.getName(); | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderClassName, | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 							JCacheCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(getCacheManager(loaded, JCacheCacheManager.class) | ||||
| 							.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void infinispanAsJCacheWithConfig() throws IOException { | ||||
| 		String cachingProviderFqn = JCachingProvider.class.getName(); | ||||
| 		String cachingProviderClassName = JCachingProvider.class.getName(); | ||||
| 		String configLocation = "infinispan.xml"; | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=jcache", | ||||
| 						"spring.cache.jcache.provider=" + cachingProviderClassName, | ||||
| 						"spring.cache.jcache.config=" + configLocation) | ||||
| 				.load(context -> { | ||||
| 					JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 							JCacheCacheManager.class); | ||||
| 
 | ||||
| 				.run((loaded) -> { | ||||
| 					Resource configResource = new ClassPathResource(configLocation); | ||||
| 					assertThat(cacheManager.getCacheManager().getURI()) | ||||
| 							.isEqualTo(configResource.getURI()); | ||||
| 					assertThat(getCacheManager(loaded, JCacheCacheManager.class) | ||||
| 							.getCacheManager().getURI()) | ||||
| 									.isEqualTo(configResource.getURI()); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void jCacheCacheWithCachesAndCustomizer() { | ||||
| 		String cachingProviderFqn = HazelcastCachingProvider.class.getName(); | ||||
| 		String cachingProviderClassName = HazelcastCachingProvider.class.getName(); | ||||
| 		try { | ||||
| 			this.contextLoader.config(JCacheWithCustomizerConfiguration.class) | ||||
| 					.env("spring.cache.type=jcache", | ||||
| 							"spring.cache.jcache.provider=" + cachingProviderFqn, | ||||
| 			this.context.withUserConfiguration(JCacheWithCustomizerConfiguration.class) | ||||
| 					.withPropertyValues("spring.cache.type=jcache", | ||||
| 							"spring.cache.jcache.provider=" + cachingProviderClassName, | ||||
| 							"spring.cache.cacheNames[0]=foo", | ||||
| 							"spring.cache.cacheNames[1]=bar") | ||||
| 					.load(context -> { | ||||
| 						JCacheCacheManager cacheManager = validateCacheManager(context, | ||||
| 								JCacheCacheManager.class); | ||||
| 					.run((loaded) -> { | ||||
| 						// see customizer | ||||
| 						assertThat(cacheManager.getCacheNames()).containsOnly("foo", | ||||
| 								"custom1"); | ||||
| 						assertThat(getCacheManager(loaded, JCacheCacheManager.class) | ||||
| 								.getCacheNames()).containsOnly("foo", "custom1"); | ||||
| 					}); | ||||
| 		} | ||||
| 		finally { | ||||
| 			Caching.getCachingProvider(cachingProviderFqn).close(); | ||||
| 			Caching.getCachingProvider(cachingProviderClassName).close(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void caffeineCacheWithExplicitCaches() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class) | ||||
| 				.env("spring.cache.type=caffeine", "spring.cache.cacheNames=foo") | ||||
| 				.load(context -> { | ||||
| 					CaffeineCacheManager cacheManager = validateCacheManager(context, | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=caffeine", | ||||
| 						"spring.cache.cacheNames=foo") | ||||
| 				.run((loaded) -> { | ||||
| 					CaffeineCacheManager manager = getCacheManager(loaded, | ||||
| 							CaffeineCacheManager.class); | ||||
| 					assertThat(cacheManager.getCacheNames()).containsOnly("foo"); | ||||
| 					Cache foo = cacheManager.getCache("foo"); | ||||
| 					assertThat(manager.getCacheNames()).containsOnly("foo"); | ||||
| 					Cache foo = manager.getCache("foo"); | ||||
| 					foo.get("1"); | ||||
| 					// See next tests: no spec given so stats should be disabled | ||||
| 					assertThat(((CaffeineCache) foo).getNativeCache().stats().missCount()) | ||||
|  | @ -749,74 +776,75 @@ public class CacheAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void caffeineCacheWithCustomizers() { | ||||
| 		testCustomizers(DefaultCacheAndCustomizersConfiguration.class, "caffeine", | ||||
| 				"allCacheManagerCustomizer", "caffeineCacheManagerCustomizer"); | ||||
| 		this.context.withUserConfiguration(DefaultCacheAndCustomizersConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=" + "caffeine").run(dunno( | ||||
| 						"allCacheManagerCustomizer", "caffeineCacheManagerCustomizer")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void caffeineCacheWithExplicitCacheBuilder() { | ||||
| 		this.contextLoader.config(CaffeineCacheBuilderConfiguration.class) | ||||
| 				.env("spring.cache.type=caffeine", "spring.cache.cacheNames=foo,bar") | ||||
| 				.load(this::validateCaffeineCacheWithStats); | ||||
| 		this.context.withUserConfiguration(CaffeineCacheBuilderConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=caffeine", | ||||
| 						"spring.cache.cacheNames=foo,bar") | ||||
| 				.run(this::validateCaffeineCacheWithStats); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void caffeineCacheExplicitWithSpec() { | ||||
| 		this.contextLoader.config(CaffeineCacheSpecConfiguration.class) | ||||
| 				.env("spring.cache.type=caffeine", "spring.cache.cacheNames[0]=foo", | ||||
| 		this.context.withUserConfiguration(CaffeineCacheSpecConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=caffeine", | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.load(this::validateCaffeineCacheWithStats); | ||||
| 				.run(this::validateCaffeineCacheWithStats); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void caffeineCacheExplicitWithSpecString() { | ||||
| 		this.contextLoader.config(DefaultCacheConfiguration.class).env( | ||||
| 				"spring.cache.type=caffeine", "spring.cache.caffeine.spec=recordStats", | ||||
| 				"spring.cache.cacheNames[0]=foo", "spring.cache.cacheNames[1]=bar") | ||||
| 				.load(this::validateCaffeineCacheWithStats); | ||||
| 		this.context.withUserConfiguration(DefaultCacheConfiguration.class) | ||||
| 				.withPropertyValues("spring.cache.type=caffeine", | ||||
| 						"spring.cache.caffeine.spec=recordStats", | ||||
| 						"spring.cache.cacheNames[0]=foo", | ||||
| 						"spring.cache.cacheNames[1]=bar") | ||||
| 				.run(this::validateCaffeineCacheWithStats); | ||||
| 	} | ||||
| 
 | ||||
| 	private void validateCaffeineCacheWithStats(ConfigurableApplicationContext context) { | ||||
| 		CaffeineCacheManager cacheManager = validateCacheManager(context, | ||||
| 	private void validateCaffeineCacheWithStats(AssertableApplicationContext context) { | ||||
| 		CaffeineCacheManager manager = getCacheManager(context, | ||||
| 				CaffeineCacheManager.class); | ||||
| 		assertThat(cacheManager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 		Cache foo = cacheManager.getCache("foo"); | ||||
| 		assertThat(manager.getCacheNames()).containsOnly("foo", "bar"); | ||||
| 		Cache foo = manager.getCache("foo"); | ||||
| 		foo.get("1"); | ||||
| 		assertThat(((CaffeineCache) foo).getNativeCache().stats().missCount()) | ||||
| 				.isEqualTo(1L); | ||||
| 	} | ||||
| 
 | ||||
| 	private <T extends CacheManager> T validateCacheManager( | ||||
| 			ConfigurableApplicationContext context, Class<T> type) { | ||||
| 		CacheManager cacheManager = context.getBean(CacheManager.class); | ||||
| 		assertThat(cacheManager).as("Wrong cache manager type").isInstanceOf(type); | ||||
| 		return type.cast(cacheManager); | ||||
| 	@SuppressWarnings("rawtypes") | ||||
| 	private ContextConsumer<AssertableApplicationContext> dunno( | ||||
| 			String... expectedCustomizerNames) { | ||||
| 		return (loaded) -> { | ||||
| 			CacheManager cacheManager = getCacheManager(loaded, CacheManager.class); | ||||
| 			List<String> expected = new ArrayList<>( | ||||
| 					Arrays.asList(expectedCustomizerNames)); | ||||
| 			Map<String, CacheManagerTestCustomizer> customizer = loaded | ||||
| 					.getBeansOfType(CacheManagerTestCustomizer.class); | ||||
| 			customizer.forEach((key, value) -> { | ||||
| 				if (expected.contains(key)) { | ||||
| 					expected.remove(key); | ||||
| 					assertThat(value.cacheManager).isSameAs(cacheManager); | ||||
| 				} | ||||
| 				else { | ||||
| 					assertThat(value.cacheManager).isNull(); | ||||
| 				} | ||||
| 			}); | ||||
| 			assertThat(expected).hasSize(0); | ||||
| 		}; | ||||
| 	} | ||||
| 
 | ||||
| 	@SuppressWarnings("rawtypes") | ||||
| 	private void testCustomizers(Class<?> config, String cacheType, | ||||
| 			String... expectedCustomizerNames) { | ||||
| 		this.contextLoader.config(config).env("spring.cache.type=" + cacheType) | ||||
| 				.load(context -> { | ||||
| 					CacheManager cacheManager = validateCacheManager(context, | ||||
| 							CacheManager.class); | ||||
| 					List<String> expected = new ArrayList<>(); | ||||
| 					expected.addAll(Arrays.asList(expectedCustomizerNames)); | ||||
| 					Map<String, CacheManagerTestCustomizer> map = context | ||||
| 							.getBeansOfType(CacheManagerTestCustomizer.class); | ||||
| 					for (Map.Entry<String, CacheManagerTestCustomizer> entry : map | ||||
| 							.entrySet()) { | ||||
| 						if (expected.contains(entry.getKey())) { | ||||
| 							expected.remove(entry.getKey()); | ||||
| 							assertThat(entry.getValue().cacheManager) | ||||
| 									.isSameAs(cacheManager); | ||||
| 						} | ||||
| 						else { | ||||
| 							assertThat(entry.getValue().cacheManager).isNull(); | ||||
| 						} | ||||
| 					} | ||||
| 					assertThat(expected).hasSize(0); | ||||
| 				}); | ||||
| 	private <T extends CacheManager> T getCacheManager( | ||||
| 			AssertableApplicationContext loaded, Class<T> type) { | ||||
| 		CacheManager cacheManager = loaded.getBean(CacheManager.class); | ||||
| 		assertThat(cacheManager).as("Wrong cache manager type").isInstanceOf(type); | ||||
| 		return type.cast(cacheManager); | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
|  |  | |||
|  | @ -23,12 +23,14 @@ import com.hazelcast.client.impl.HazelcastClientProxy; | |||
| import com.hazelcast.config.Config; | ||||
| import com.hazelcast.core.Hazelcast; | ||||
| import com.hazelcast.core.HazelcastInstance; | ||||
| import org.assertj.core.api.Condition; | ||||
| import org.junit.AfterClass; | ||||
| import org.junit.BeforeClass; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import org.springframework.beans.factory.BeanCreationException; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| 
 | ||||
|  | @ -59,68 +61,72 @@ public class HazelcastAutoConfigurationClientTests { | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(HazelcastAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(HazelcastAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void systemProperty() throws IOException { | ||||
| 		this.contextLoader | ||||
| 				.systemProperty(HazelcastClientConfiguration.CONFIG_SYSTEM_PROPERTY, | ||||
| 						"classpath:org/springframework/boot/autoconfigure/hazelcast/" | ||||
| 								+ "hazelcast-client-specific.xml") | ||||
| 				.load(context -> { | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(hazelcastInstance) | ||||
| 							.isInstanceOf(HazelcastClientProxy.class); | ||||
| 					assertThat(hazelcastInstance.getName()).startsWith("hz.client_"); | ||||
| 		this.context | ||||
| 				.withSystemProperties(HazelcastClientConfiguration.CONFIG_SYSTEM_PROPERTY | ||||
| 						+ "=classpath:org/springframework/boot/autoconfigure/hazelcast/" | ||||
| 						+ "hazelcast-client-specific.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getBean(HazelcastInstance.class) | ||||
| 							.isInstanceOf(HazelcastInstance.class) | ||||
| 							.has(nameStartingWith("hz.client_")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void explicitConfigFile() throws IOException { | ||||
| 		this.contextLoader | ||||
| 				.env("spring.hazelcast.config=org/springframework/boot/autoconfigure/" | ||||
| 						+ "hazelcast/hazelcast-client-specific.xml") | ||||
| 				.load(context -> { | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(hazelcastInstance) | ||||
| 							.isInstanceOf(HazelcastClientProxy.class); | ||||
| 					assertThat(hazelcastInstance.getName()).startsWith("hz.client_"); | ||||
| 		this.context | ||||
| 				.withPropertyValues( | ||||
| 						"spring.hazelcast.config=org/springframework/boot/autoconfigure/" | ||||
| 								+ "hazelcast/hazelcast-client-specific.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getBean(HazelcastInstance.class) | ||||
| 							.isInstanceOf(HazelcastClientProxy.class) | ||||
| 							.has(nameStartingWith("hz.client_")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void explicitConfigUrl() throws IOException { | ||||
| 		this.contextLoader.env("spring.hazelcast.config=hazelcast-client-default.xml") | ||||
| 				.load(context -> { | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(hazelcastInstance) | ||||
| 							.isInstanceOf(HazelcastClientProxy.class); | ||||
| 					assertThat(hazelcastInstance.getName()).startsWith("hz.client_"); | ||||
| 		this.context | ||||
| 				.withPropertyValues( | ||||
| 						"spring.hazelcast.config=hazelcast-client-default.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getBean(HazelcastInstance.class) | ||||
| 							.isInstanceOf(HazelcastClientProxy.class) | ||||
| 							.has(nameStartingWith("hz.client_")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void unknownConfigFile() { | ||||
| 		this.contextLoader.env("spring.hazelcast.config=foo/bar/unknown.xml").loadAndFail( | ||||
| 				BeanCreationException.class, | ||||
| 				ex -> assertThat(ex.getMessage()).contains("foo/bar/unknown.xml")); | ||||
| 		this.context.withPropertyValues("spring.hazelcast.config=foo/bar/unknown.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining("foo/bar/unknown.xml"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void clientConfigTakesPrecedence() { | ||||
| 		this.contextLoader.config(HazelcastServerAndClientConfig.class) | ||||
| 				.env("spring.hazelcast.config=this-is-ignored.xml").load(context -> { | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(hazelcastInstance) | ||||
| 		this.context.withUserConfiguration(HazelcastServerAndClientConfig.class) | ||||
| 				.withPropertyValues("spring.hazelcast.config=this-is-ignored.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getBean(HazelcastInstance.class) | ||||
| 							.isInstanceOf(HazelcastClientProxy.class); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	private Condition<HazelcastInstance> nameStartingWith(String prefix) { | ||||
| 		return new Condition<HazelcastInstance>((o) -> o.getName().startsWith(prefix), | ||||
| 				"Name starts with " + prefix); | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	static class HazelcastServerAndClientConfig { | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,7 +27,8 @@ import org.junit.Test; | |||
| import org.junit.runner.RunWith; | ||||
| 
 | ||||
| import org.springframework.beans.factory.BeanCreationException; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions; | ||||
| import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner; | ||||
| import org.springframework.context.annotation.Bean; | ||||
|  | @ -45,44 +46,38 @@ import static org.assertj.core.api.Assertions.assertThat; | |||
| @ClassPathExclusions("hazelcast-client-*.jar") | ||||
| public class HazelcastAutoConfigurationServerTests { | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(HazelcastAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(HazelcastAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultConfigFile() throws IOException { | ||||
| 		// hazelcast.xml present in root classpath | ||||
| 		this.contextLoader.load(context -> { | ||||
| 			HazelcastInstance hazelcastInstance = context | ||||
| 					.getBean(HazelcastInstance.class); | ||||
| 			assertThat(hazelcastInstance.getConfig().getConfigurationUrl()) | ||||
| 		this.context.run((loaded) -> { | ||||
| 			Config config = loaded.getBean(HazelcastInstance.class).getConfig(); | ||||
| 			assertThat(config.getConfigurationUrl()) | ||||
| 					.isEqualTo(new ClassPathResource("hazelcast.xml").getURL()); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void systemProperty() throws IOException { | ||||
| 		this.contextLoader | ||||
| 				.systemProperty(HazelcastServerConfiguration.CONFIG_SYSTEM_PROPERTY, | ||||
| 						"classpath:org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.xml") | ||||
| 				.load(context -> { | ||||
| 
 | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					Map<String, QueueConfig> queueConfigs = hazelcastInstance.getConfig() | ||||
| 							.getQueueConfigs(); | ||||
| 					assertThat(queueConfigs).hasSize(1).containsKey("foobar"); | ||||
| 		this.context | ||||
| 				.withSystemProperties(HazelcastServerConfiguration.CONFIG_SYSTEM_PROPERTY | ||||
| 						+ "=classpath:org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					Config config = loaded.getBean(HazelcastInstance.class).getConfig(); | ||||
| 					assertThat(config.getQueueConfigs().keySet()).containsOnly("foobar"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void explicitConfigFile() throws IOException { | ||||
| 		this.contextLoader | ||||
| 				.env("spring.hazelcast.config=org/springframework/boot/autoconfigure/hazelcast/" | ||||
| 		this.context.withPropertyValues( | ||||
| 				"spring.hazelcast.config=org/springframework/boot/autoconfigure/hazelcast/" | ||||
| 						+ "hazelcast-specific.xml") | ||||
| 				.load(context -> { | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(hazelcastInstance.getConfig().getConfigurationFile()) | ||||
| 				.run((loaded) -> { | ||||
| 					Config config = loaded.getBean(HazelcastInstance.class).getConfig(); | ||||
| 					assertThat(config.getConfigurationFile()) | ||||
| 							.isEqualTo(new ClassPathResource( | ||||
| 									"org/springframework/boot/autoconfigure/hazelcast" | ||||
| 											+ "/hazelcast-specific.xml").getFile()); | ||||
|  | @ -91,54 +86,53 @@ public class HazelcastAutoConfigurationServerTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void explicitConfigUrl() throws IOException { | ||||
| 		this.contextLoader.env("spring.hazelcast.config=hazelcast-default.xml") | ||||
| 				.load(context -> { | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					assertThat(hazelcastInstance.getConfig().getConfigurationUrl()) | ||||
| 							.isEqualTo(new ClassPathResource("hazelcast-default.xml") | ||||
| 									.getURL()); | ||||
| 		this.context.withPropertyValues("spring.hazelcast.config=hazelcast-default.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					Config config = loaded.getBean(HazelcastInstance.class).getConfig(); | ||||
| 					assertThat(config.getConfigurationUrl()).isEqualTo( | ||||
| 							new ClassPathResource("hazelcast-default.xml").getURL()); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void unknownConfigFile() { | ||||
| 		this.contextLoader.env("spring.hazelcast.config=foo/bar/unknown.xml").loadAndFail( | ||||
| 				BeanCreationException.class, | ||||
| 				ex -> assertThat(ex.getMessage()).contains("foo/bar/unknown.xml")); | ||||
| 		this.context.withPropertyValues("spring.hazelcast.config=foo/bar/unknown.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining("foo/bar/unknown.xml"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void configInstanceWithName() { | ||||
| 		Config config = new Config("my-test-instance"); | ||||
| 		HazelcastInstance existingHazelcastInstance = Hazelcast | ||||
| 				.newHazelcastInstance(config); | ||||
| 		HazelcastInstance existing = Hazelcast.newHazelcastInstance(config); | ||||
| 		try { | ||||
| 			this.contextLoader.config(HazelcastConfigWithName.class) | ||||
| 					.env("spring.hazelcast.config=this-is-ignored.xml").load(context -> { | ||||
| 						HazelcastInstance hazelcastInstance = context | ||||
| 			this.context.withUserConfiguration(HazelcastConfigWithName.class) | ||||
| 					.withPropertyValues("spring.hazelcast.config=this-is-ignored.xml") | ||||
| 					.run(loaded -> { | ||||
| 						HazelcastInstance hazelcast = (loaded) | ||||
| 								.getBean(HazelcastInstance.class); | ||||
| 						assertThat(hazelcastInstance.getConfig().getInstanceName()) | ||||
| 						assertThat(hazelcast.getConfig().getInstanceName()) | ||||
| 								.isEqualTo("my-test-instance"); | ||||
| 						// Should reuse any existing instance by default. | ||||
| 						assertThat(hazelcastInstance) | ||||
| 								.isEqualTo(existingHazelcastInstance); | ||||
| 						assertThat(hazelcast).isEqualTo(existing); | ||||
| 					}); | ||||
| 		} | ||||
| 		finally { | ||||
| 			existingHazelcastInstance.shutdown(); | ||||
| 			existing.shutdown(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void configInstanceWithoutName() { | ||||
| 		this.contextLoader.config(HazelcastConfigNoName.class) | ||||
| 				.env("spring.hazelcast.config=this-is-ignored.xml").load(context -> { | ||||
| 					HazelcastInstance hazelcastInstance = context | ||||
| 							.getBean(HazelcastInstance.class); | ||||
| 					Map<String, QueueConfig> queueConfigs = hazelcastInstance.getConfig() | ||||
| 							.getQueueConfigs(); | ||||
| 					assertThat(queueConfigs).hasSize(1).containsKey("another-queue"); | ||||
| 		this.context.withUserConfiguration(HazelcastConfigNoName.class) | ||||
| 				.withPropertyValues("spring.hazelcast.config=this-is-ignored.xml") | ||||
| 				.run((loaded) -> { | ||||
| 					Config config = loaded.getBean(HazelcastInstance.class).getConfig(); | ||||
| 					Map<String, QueueConfig> queueConfigs = config.getQueueConfigs(); | ||||
| 					assertThat(queueConfigs.keySet()).containsOnly("another-queue"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -18,10 +18,12 @@ package org.springframework.boot.autoconfigure.hazelcast; | |||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import com.hazelcast.config.Config; | ||||
| import com.hazelcast.core.HazelcastInstance; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.core.io.ClassPathResource; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
|  | @ -33,16 +35,15 @@ import static org.assertj.core.api.Assertions.assertThat; | |||
|  */ | ||||
| public class HazelcastAutoConfigurationTests { | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(HazelcastAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(HazelcastAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultConfigFile() throws IOException { | ||||
| 		// no hazelcast-client.xml and hazelcast.xml is present in root classpath | ||||
| 		this.contextLoader.load(context -> { | ||||
| 			HazelcastInstance hazelcastInstance = context | ||||
| 					.getBean(HazelcastInstance.class); | ||||
| 			assertThat(hazelcastInstance.getConfig().getConfigurationUrl()) | ||||
| 		this.context.run((loaded) -> { | ||||
| 			Config config = loaded.getBean(HazelcastInstance.class).getConfig(); | ||||
| 			assertThat(config.getConfigurationUrl()) | ||||
| 					.isEqualTo(new ClassPathResource("hazelcast.xml").getURL()); | ||||
| 		}); | ||||
| 	} | ||||
|  |  | |||
|  | @ -37,9 +37,10 @@ import org.junit.Test; | |||
| 
 | ||||
| import org.springframework.beans.factory.BeanCreationException; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.jdbc.DatabaseDriver; | ||||
| import org.springframework.boot.test.context.ContextConsumer; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.boot.test.context.AssertableApplicationContext; | ||||
| import org.springframework.boot.test.context.HidePackagesClassLoader; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
|  | @ -57,22 +58,22 @@ import static org.mockito.Mockito.mock; | |||
|  */ | ||||
| public class DataSourceAutoConfigurationTests { | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(DataSourceAutoConfiguration.class) | ||||
| 			.env("spring.datasource.initialize=false", | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class)) | ||||
| 			.withPropertyValues("spring.datasource.initialize=false", | ||||
| 					"spring.datasource.url:jdbc:hsqldb:mem:testdb-" | ||||
| 							+ new Random().nextInt()); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDefaultDataSourceExists() throws Exception { | ||||
| 		this.contextLoader.load( | ||||
| 				context -> assertThat(context.getBean(DataSource.class)).isNotNull()); | ||||
| 		this.context | ||||
| 				.run((loaded) -> assertThat(loaded).hasSingleBean(DataSource.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDataSourceHasEmbeddedDefault() throws Exception { | ||||
| 		this.contextLoader.load(context -> { | ||||
| 			HikariDataSource dataSource = context.getBean(HikariDataSource.class); | ||||
| 		this.context.run((loaded) -> { | ||||
| 			HikariDataSource dataSource = loaded.getBean(HikariDataSource.class); | ||||
| 			assertThat(dataSource.getJdbcUrl()).isNotNull(); | ||||
| 			assertThat(dataSource.getDriverClassName()).isNotNull(); | ||||
| 		}); | ||||
|  | @ -82,8 +83,11 @@ public class DataSourceAutoConfigurationTests { | |||
| 	public void testBadUrl() throws Exception { | ||||
| 		try { | ||||
| 			EmbeddedDatabaseConnection.override = EmbeddedDatabaseConnection.NONE; | ||||
| 			this.contextLoader.env("spring.datasource.url:jdbc:not-going-to-work") | ||||
| 					.loadAndFail(BeanCreationException.class, ex -> { | ||||
| 			this.context | ||||
| 					.withPropertyValues("spring.datasource.url:jdbc:not-going-to-work") | ||||
| 					.run((loaded) -> { | ||||
| 						assertThat(loaded).getFailure() | ||||
| 								.isInstanceOf(BeanCreationException.class); | ||||
| 					}); | ||||
| 		} | ||||
| 		finally { | ||||
|  | @ -93,10 +97,14 @@ public class DataSourceAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void testBadDriverClass() throws Exception { | ||||
| 		this.contextLoader.env("spring.datasource.driverClassName:org.none.jdbcDriver") | ||||
| 				.loadAndFail(BeanCreationException.class, | ||||
| 						ex -> assertThat(ex.getMessage()) | ||||
| 								.contains("org.none.jdbcDriver")); | ||||
| 		this.context | ||||
| 				.withPropertyValues( | ||||
| 						"spring.datasource.driverClassName:org.none.jdbcDriver") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining("org.none.jdbcDriver"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
|  | @ -111,14 +119,14 @@ public class DataSourceAutoConfigurationTests { | |||
| 	public void tomcatIsFallback() throws Exception { | ||||
| 		assertDataSource(org.apache.tomcat.jdbc.pool.DataSource.class, | ||||
| 				Collections.singletonList("com.zaxxer.hikari"), | ||||
| 				dataSource -> assertThat(dataSource.getUrl()) | ||||
| 				(dataSource) -> assertThat(dataSource.getUrl()) | ||||
| 						.startsWith("jdbc:hsqldb:mem:testdb")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void tomcatValidatesConnectionByDefault() { | ||||
| 		assertDataSource(org.apache.tomcat.jdbc.pool.DataSource.class, | ||||
| 				Collections.singletonList("com.zaxxer.hikari"), dataSource -> { | ||||
| 				Collections.singletonList("com.zaxxer.hikari"), (dataSource) -> { | ||||
| 					assertThat(dataSource.isTestOnBorrow()).isTrue(); | ||||
| 					assertThat(dataSource.getValidationQuery()) | ||||
| 							.isEqualTo(DatabaseDriver.HSQLDB.getValidationQuery()); | ||||
|  | @ -129,14 +137,14 @@ public class DataSourceAutoConfigurationTests { | |||
| 	public void commonsDbcp2IsFallback() throws Exception { | ||||
| 		assertDataSource(BasicDataSource.class, | ||||
| 				Arrays.asList("com.zaxxer.hikari", "org.apache.tomcat"), | ||||
| 				dataSource -> assertThat(dataSource.getUrl()) | ||||
| 				(dataSource) -> assertThat(dataSource.getUrl()) | ||||
| 						.startsWith("jdbc:hsqldb:mem:testdb")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void commonsDbcp2ValidatesConnectionByDefault() throws Exception { | ||||
| 		assertDataSource(org.apache.commons.dbcp2.BasicDataSource.class, | ||||
| 				Arrays.asList("com.zaxxer.hikari", "org.apache.tomcat"), dataSource -> { | ||||
| 				Arrays.asList("com.zaxxer.hikari", "org.apache.tomcat"), (dataSource) -> { | ||||
| 					assertThat(dataSource.getTestOnBorrow()).isEqualTo(true); | ||||
| 					assertThat(dataSource.getValidationQuery()).isNull(); // Use | ||||
| 																			// Connection#isValid() | ||||
|  | @ -144,12 +152,12 @@ public class DataSourceAutoConfigurationTests { | |||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	@SuppressWarnings("resource") | ||||
| 	public void testEmbeddedTypeDefaultsUsername() throws Exception { | ||||
| 		this.contextLoader.env("spring.datasource.driverClassName:org.hsqldb.jdbcDriver", | ||||
| 				"spring.datasource.url:jdbc:hsqldb:mem:testdb").load(context -> { | ||||
| 					DataSource bean = context.getBean(DataSource.class); | ||||
| 					assertThat(bean).isNotNull(); | ||||
| 					@SuppressWarnings("resource") | ||||
| 		this.context.withPropertyValues( | ||||
| 				"spring.datasource.driverClassName:org.hsqldb.jdbcDriver", | ||||
| 				"spring.datasource.url:jdbc:hsqldb:mem:testdb").run((loaded) -> { | ||||
| 					DataSource bean = loaded.getBean(DataSource.class); | ||||
| 					HikariDataSource pool = (HikariDataSource) bean; | ||||
| 					assertThat(pool.getDriverClassName()) | ||||
| 							.isEqualTo("org.hsqldb.jdbcDriver"); | ||||
|  | @ -163,62 +171,62 @@ public class DataSourceAutoConfigurationTests { | |||
| 	 */ | ||||
| 	@Test | ||||
| 	public void explicitTypeNoSupportedDataSource() { | ||||
| 		this.contextLoader | ||||
| 				.classLoader(new HidePackagesClassLoader("org.apache.tomcat", | ||||
| 		this.context | ||||
| 				.withClassLoader(new HidePackagesClassLoader("org.apache.tomcat", | ||||
| 						"com.zaxxer.hikari", "org.apache.commons.dbcp", | ||||
| 						"org.apache.commons.dbcp2")) | ||||
| 				.env("spring.datasource.driverClassName:org.hsqldb.jdbcDriver", | ||||
| 				.withPropertyValues( | ||||
| 						"spring.datasource.driverClassName:org.hsqldb.jdbcDriver", | ||||
| 						"spring.datasource.url:jdbc:hsqldb:mem:testdb", | ||||
| 						"spring.datasource.type:" | ||||
| 								+ SimpleDriverDataSource.class.getName()) | ||||
| 				.load(testExplicitType()); | ||||
| 				.run(this::containsOnlySimpleDriverDataSource); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void explicitTypeSupportedDataSource() { | ||||
| 		this.contextLoader | ||||
| 				.env("spring.datasource.driverClassName:org.hsqldb.jdbcDriver", | ||||
| 		this.context | ||||
| 				.withPropertyValues( | ||||
| 						"spring.datasource.driverClassName:org.hsqldb.jdbcDriver", | ||||
| 						"spring.datasource.url:jdbc:hsqldb:mem:testdb", | ||||
| 						"spring.datasource.type:" | ||||
| 								+ SimpleDriverDataSource.class.getName()) | ||||
| 				.load(testExplicitType()); | ||||
| 				.run(this::containsOnlySimpleDriverDataSource); | ||||
| 	} | ||||
| 
 | ||||
| 	private ContextConsumer testExplicitType() { | ||||
| 		return context -> { | ||||
| 			assertThat(context.getBeansOfType(DataSource.class)).hasSize(1); | ||||
| 			DataSource bean = context.getBean(DataSource.class); | ||||
| 			assertThat(bean).isNotNull(); | ||||
| 			assertThat(bean.getClass()).isEqualTo(SimpleDriverDataSource.class); | ||||
| 		}; | ||||
| 	private void containsOnlySimpleDriverDataSource(AssertableApplicationContext loaded) { | ||||
| 		assertThat(loaded).hasSingleBean(DataSource.class); | ||||
| 		assertThat(loaded).getBean(DataSource.class) | ||||
| 				.isExactlyInstanceOf(SimpleDriverDataSource.class); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testExplicitDriverClassClearsUsername() throws Exception { | ||||
| 		this.contextLoader.env( | ||||
| 		this.context.withPropertyValues( | ||||
| 				"spring.datasource.driverClassName:" + DatabaseTestDriver.class.getName(), | ||||
| 				"spring.datasource.url:jdbc:foo://localhost").load(context -> { | ||||
| 					DataSource dataSource = context.getBean(DataSource.class); | ||||
| 					assertThat(dataSource).isNotNull(); | ||||
| 					assertThat(((HikariDataSource) dataSource).getDriverClassName()) | ||||
| 				"spring.datasource.url:jdbc:foo://localhost").run((loaded) -> { | ||||
| 					assertThat(loaded).hasSingleBean(DataSource.class); | ||||
| 					HikariDataSource dataSource = loaded.getBean(HikariDataSource.class); | ||||
| 					assertThat(dataSource.getDriverClassName()) | ||||
| 							.isEqualTo(DatabaseTestDriver.class.getName()); | ||||
| 					assertThat(((HikariDataSource) dataSource).getUsername()).isNull(); | ||||
| 					assertThat(dataSource.getUsername()).isNull(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDefaultDataSourceCanBeOverridden() throws Exception { | ||||
| 		this.contextLoader.config(TestDataSourceConfiguration.class).load(context -> { | ||||
| 			DataSource dataSource = context.getBean(DataSource.class); | ||||
| 			assertThat(dataSource).isInstanceOf(BasicDataSource.class); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(TestDataSourceConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getBean(DataSource.class) | ||||
| 							.isInstanceOf(BasicDataSource.class); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDataSourceIsInitializedEarly() { | ||||
| 		this.contextLoader.config(TestInitializedDataSourceConfiguration.class) | ||||
| 				.env("spring.datasource.initialize=true") | ||||
| 				.load(context -> assertThat(context | ||||
| 		this.context.withUserConfiguration(TestInitializedDataSourceConfiguration.class) | ||||
| 				.withPropertyValues("spring.datasource.initialize=true") | ||||
| 				.run((loaded) -> assertThat(loaded | ||||
| 						.getBean(TestInitializedDataSourceConfiguration.class).called) | ||||
| 								.isTrue()); | ||||
| 	} | ||||
|  | @ -227,8 +235,8 @@ public class DataSourceAutoConfigurationTests { | |||
| 			List<String> hiddenPackages, Consumer<T> consumer) { | ||||
| 		HidePackagesClassLoader classLoader = new HidePackagesClassLoader( | ||||
| 				hiddenPackages.toArray(new String[hiddenPackages.size()])); | ||||
| 		this.contextLoader.classLoader(classLoader).load(context -> { | ||||
| 			DataSource bean = context.getBean(DataSource.class); | ||||
| 		this.context.withClassLoader(classLoader).run((loaded) -> { | ||||
| 			DataSource bean = loaded.getBean(DataSource.class); | ||||
| 			assertThat(bean).isInstanceOf(expectedType); | ||||
| 			consumer.accept(expectedType.cast(bean)); | ||||
| 		}); | ||||
|  |  | |||
|  | @ -26,8 +26,10 @@ import org.junit.Test; | |||
| import org.springframework.beans.BeansException; | ||||
| import org.springframework.beans.DirectFieldAccessor; | ||||
| import org.springframework.beans.factory.config.BeanPostProcessor; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.boot.test.context.AssertableApplicationContext; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.context.annotation.Primary; | ||||
|  | @ -61,229 +63,213 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	private static final String ACTIVEMQ_NETWORK_URL = "tcp://localhost:61616"; | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(ActiveMQAutoConfiguration.class, JmsAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class, | ||||
| 					JmsAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDefaultJmsConfiguration() { | ||||
| 		this.contextLoader.config(TestConfiguration.class).load(context -> { | ||||
| 			ActiveMQConnectionFactory connectionFactory = context | ||||
| 					.getBean(ActiveMQConnectionFactory.class); | ||||
| 			JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 			JmsMessagingTemplate messagingTemplate = context | ||||
| 					.getBean(JmsMessagingTemplate.class); | ||||
| 			assertThat(connectionFactory).isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 			assertThat(messagingTemplate.getJmsTemplate()).isEqualTo(jmsTemplate); | ||||
| 			assertThat(((ActiveMQConnectionFactory) jmsTemplate.getConnectionFactory()) | ||||
| 					.getBrokerURL()).isEqualTo(ACTIVEMQ_EMBEDDED_URL); | ||||
| 			assertThat(context.containsBean("jmsListenerContainerFactory")).isTrue(); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.run(this::testDefaultJmsConfiguration); | ||||
| 	} | ||||
| 
 | ||||
| 	private void testDefaultJmsConfiguration(AssertableApplicationContext loaded) { | ||||
| 		ActiveMQConnectionFactory factory = loaded | ||||
| 				.getBean(ActiveMQConnectionFactory.class); | ||||
| 		JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 		JmsMessagingTemplate messagingTemplate = loaded | ||||
| 				.getBean(JmsMessagingTemplate.class); | ||||
| 		assertThat(factory).isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 		assertThat(messagingTemplate.getJmsTemplate()).isEqualTo(jmsTemplate); | ||||
| 		assertThat(((ActiveMQConnectionFactory) jmsTemplate.getConnectionFactory()) | ||||
| 				.getBrokerURL()).isEqualTo(ACTIVEMQ_EMBEDDED_URL); | ||||
| 		assertThat(loaded.containsBean("jmsListenerContainerFactory")).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testConnectionFactoryBackOff() { | ||||
| 		this.contextLoader.config(TestConfiguration2.class) | ||||
| 				.load(context -> assertThat( | ||||
| 						context.getBean(ActiveMQConnectionFactory.class).getBrokerURL()) | ||||
| 		this.context.withUserConfiguration(TestConfiguration2.class) | ||||
| 				.run((loaded) -> assertThat( | ||||
| 						loaded.getBean(ActiveMQConnectionFactory.class).getBrokerURL()) | ||||
| 								.isEqualTo("foobar")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsTemplateBackOff() { | ||||
| 		this.contextLoader.config(TestConfiguration3.class).load(context -> { | ||||
| 			JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 			assertThat(jmsTemplate.getPriority()).isEqualTo(999); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(TestConfiguration3.class).run( | ||||
| 				(loaded) -> assertThat(loaded.getBean(JmsTemplate.class).getPriority()) | ||||
| 						.isEqualTo(999)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsMessagingTemplateBackOff() { | ||||
| 		this.contextLoader.config(TestConfiguration5.class).load(context -> { | ||||
| 			JmsMessagingTemplate messagingTemplate = context | ||||
| 					.getBean(JmsMessagingTemplate.class); | ||||
| 			assertThat(messagingTemplate.getDefaultDestinationName()).isEqualTo("fooBar"); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(TestConfiguration5.class) | ||||
| 				.run((loaded) -> assertThat(loaded.getBean(JmsMessagingTemplate.class) | ||||
| 						.getDefaultDestinationName()).isEqualTo("fooBar")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsTemplateBackOffEverything() { | ||||
| 		this.contextLoader.config(TestConfiguration2.class, TestConfiguration3.class, | ||||
| 				TestConfiguration5.class).load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					assertThat(jmsTemplate.getPriority()).isEqualTo(999); | ||||
| 					assertThat(context.getBean(ActiveMQConnectionFactory.class) | ||||
| 							.getBrokerURL()).isEqualTo("foobar"); | ||||
| 					JmsMessagingTemplate messagingTemplate = context | ||||
| 							.getBean(JmsMessagingTemplate.class); | ||||
| 					assertThat(messagingTemplate.getDefaultDestinationName()) | ||||
| 							.isEqualTo("fooBar"); | ||||
| 					assertThat(messagingTemplate.getJmsTemplate()).isEqualTo(jmsTemplate); | ||||
| 				}); | ||||
| 		this.context | ||||
| 				.withUserConfiguration(TestConfiguration2.class, TestConfiguration3.class, | ||||
| 						TestConfiguration5.class) | ||||
| 				.run(this::testJmsTemplateBackOffEverything); | ||||
| 	} | ||||
| 
 | ||||
| 	private void testJmsTemplateBackOffEverything(AssertableApplicationContext loaded) { | ||||
| 		JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 		assertThat(jmsTemplate.getPriority()).isEqualTo(999); | ||||
| 		assertThat(loaded.getBean(ActiveMQConnectionFactory.class).getBrokerURL()) | ||||
| 				.isEqualTo("foobar"); | ||||
| 		JmsMessagingTemplate messagingTemplate = loaded | ||||
| 				.getBean(JmsMessagingTemplate.class); | ||||
| 		assertThat(messagingTemplate.getDefaultDestinationName()).isEqualTo("fooBar"); | ||||
| 		assertThat(messagingTemplate.getJmsTemplate()).isEqualTo(jmsTemplate); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testEnableJmsCreateDefaultContainerFactory() { | ||||
| 		this.contextLoader.config(EnableJmsConfiguration.class).load(context -> { | ||||
| 			JmsListenerContainerFactory<?> jmsListenerContainerFactory = context.getBean( | ||||
| 					"jmsListenerContainerFactory", JmsListenerContainerFactory.class); | ||||
| 			assertThat(jmsListenerContainerFactory.getClass()) | ||||
| 					.isEqualTo(DefaultJmsListenerContainerFactory.class); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(EnableJmsConfiguration.class) | ||||
| 				.run((loaded) -> assertThat(loaded) | ||||
| 						.getBean("jmsListenerContainerFactory", | ||||
| 								JmsListenerContainerFactory.class) | ||||
| 						.isExactlyInstanceOf(DefaultJmsListenerContainerFactory.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsListenerContainerFactoryBackOff() { | ||||
| 		this.contextLoader.config(TestConfiguration6.class, EnableJmsConfiguration.class) | ||||
| 				.load(context -> { | ||||
| 					JmsListenerContainerFactory<?> jmsListenerContainerFactory = context | ||||
| 							.getBean("jmsListenerContainerFactory", | ||||
| 									JmsListenerContainerFactory.class); | ||||
| 					assertThat(jmsListenerContainerFactory.getClass()) | ||||
| 							.isEqualTo(SimpleJmsListenerContainerFactory.class); | ||||
| 				}); | ||||
| 		this.context | ||||
| 				.withUserConfiguration(TestConfiguration6.class, | ||||
| 						EnableJmsConfiguration.class) | ||||
| 				.run((loaded) -> assertThat(loaded) | ||||
| 						.getBean("jmsListenerContainerFactory", | ||||
| 								JmsListenerContainerFactory.class) | ||||
| 						.isExactlyInstanceOf(SimpleJmsListenerContainerFactory.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsListenerContainerFactoryWithCustomSettings() { | ||||
| 		this.contextLoader.config(EnableJmsConfiguration.class) | ||||
| 				.env("spring.jms.listener.autoStartup=false", | ||||
| 		this.context.withUserConfiguration(EnableJmsConfiguration.class) | ||||
| 				.withPropertyValues("spring.jms.listener.autoStartup=false", | ||||
| 						"spring.jms.listener.acknowledgeMode=client", | ||||
| 						"spring.jms.listener.concurrency=2", | ||||
| 						"spring.jms.listener.maxConcurrency=10") | ||||
| 				.load(context -> { | ||||
| 					JmsListenerContainerFactory<?> jmsListenerContainerFactory = context | ||||
| 							.getBean("jmsListenerContainerFactory", | ||||
| 									JmsListenerContainerFactory.class); | ||||
| 					assertThat(jmsListenerContainerFactory.getClass()) | ||||
| 							.isEqualTo(DefaultJmsListenerContainerFactory.class); | ||||
| 					DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) jmsListenerContainerFactory) | ||||
| 							.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 					assertThat(listenerContainer.isAutoStartup()).isFalse(); | ||||
| 					assertThat(listenerContainer.getSessionAcknowledgeMode()) | ||||
| 							.isEqualTo(Session.CLIENT_ACKNOWLEDGE); | ||||
| 					assertThat(listenerContainer.getConcurrentConsumers()).isEqualTo(2); | ||||
| 					assertThat(listenerContainer.getMaxConcurrentConsumers()) | ||||
| 							.isEqualTo(10); | ||||
| 				}); | ||||
| 				.run(this::testJmsListenerContainerFactoryWithCustomSettings); | ||||
| 	} | ||||
| 
 | ||||
| 	private void testJmsListenerContainerFactoryWithCustomSettings( | ||||
| 			AssertableApplicationContext loaded) { | ||||
| 		DefaultMessageListenerContainer container = getContainer(loaded, | ||||
| 				"jmsListenerContainerFactory"); | ||||
| 		assertThat(container.isAutoStartup()).isFalse(); | ||||
| 		assertThat(container.getSessionAcknowledgeMode()) | ||||
| 				.isEqualTo(Session.CLIENT_ACKNOWLEDGE); | ||||
| 		assertThat(container.getConcurrentConsumers()).isEqualTo(2); | ||||
| 		assertThat(container.getMaxConcurrentConsumers()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDefaultContainerFactoryWithJtaTransactionManager() { | ||||
| 		this.contextLoader.config(TestConfiguration7.class, EnableJmsConfiguration.class) | ||||
| 				.load(context -> { | ||||
| 					JmsListenerContainerFactory<?> jmsListenerContainerFactory = context | ||||
| 							.getBean("jmsListenerContainerFactory", | ||||
| 									JmsListenerContainerFactory.class); | ||||
| 					assertThat(jmsListenerContainerFactory.getClass()) | ||||
| 							.isEqualTo(DefaultJmsListenerContainerFactory.class); | ||||
| 					DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) jmsListenerContainerFactory) | ||||
| 							.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 					assertThat(listenerContainer.isSessionTransacted()).isFalse(); | ||||
| 					assertThat(new DirectFieldAccessor(listenerContainer) | ||||
| 		this.context.withUserConfiguration(TestConfiguration7.class, | ||||
| 				EnableJmsConfiguration.class).run((loaded) -> { | ||||
| 					DefaultMessageListenerContainer container = getContainer(loaded, | ||||
| 							"jmsListenerContainerFactory"); | ||||
| 					assertThat(container.isSessionTransacted()).isFalse(); | ||||
| 					assertThat(new DirectFieldAccessor(container) | ||||
| 							.getPropertyValue("transactionManager")).isSameAs( | ||||
| 									context.getBean(JtaTransactionManager.class)); | ||||
| 									loaded.getBean(JtaTransactionManager.class)); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDefaultContainerFactoryNonJtaTransactionManager() { | ||||
| 		this.contextLoader.config(TestConfiguration8.class, EnableJmsConfiguration.class) | ||||
| 				.load(context -> { | ||||
| 					JmsListenerContainerFactory<?> jmsListenerContainerFactory = context | ||||
| 							.getBean("jmsListenerContainerFactory", | ||||
| 									JmsListenerContainerFactory.class); | ||||
| 					assertThat(jmsListenerContainerFactory.getClass()) | ||||
| 							.isEqualTo(DefaultJmsListenerContainerFactory.class); | ||||
| 					DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) jmsListenerContainerFactory) | ||||
| 							.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 					assertThat(listenerContainer.isSessionTransacted()).isTrue(); | ||||
| 					assertThat(new DirectFieldAccessor(listenerContainer) | ||||
| 		this.context.withUserConfiguration(TestConfiguration8.class, | ||||
| 				EnableJmsConfiguration.class).run((loaded) -> { | ||||
| 					DefaultMessageListenerContainer container = getContainer(loaded, | ||||
| 							"jmsListenerContainerFactory"); | ||||
| 					assertThat(container.isSessionTransacted()).isTrue(); | ||||
| 					assertThat(new DirectFieldAccessor(container) | ||||
| 							.getPropertyValue("transactionManager")).isNull(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDefaultContainerFactoryNoTransactionManager() { | ||||
| 		this.contextLoader.config(EnableJmsConfiguration.class).load(context -> { | ||||
| 			JmsListenerContainerFactory<?> jmsListenerContainerFactory = context.getBean( | ||||
| 					"jmsListenerContainerFactory", JmsListenerContainerFactory.class); | ||||
| 			assertThat(jmsListenerContainerFactory.getClass()) | ||||
| 					.isEqualTo(DefaultJmsListenerContainerFactory.class); | ||||
| 			DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) jmsListenerContainerFactory) | ||||
| 					.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 			assertThat(listenerContainer.isSessionTransacted()).isTrue(); | ||||
| 			assertThat(new DirectFieldAccessor(listenerContainer) | ||||
| 		this.context.withUserConfiguration(EnableJmsConfiguration.class).run((loaded) -> { | ||||
| 			DefaultMessageListenerContainer container = getContainer(loaded, | ||||
| 					"jmsListenerContainerFactory"); | ||||
| 			assertThat(container.isSessionTransacted()).isTrue(); | ||||
| 			assertThat(new DirectFieldAccessor(container) | ||||
| 					.getPropertyValue("transactionManager")).isNull(); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testDefaultContainerFactoryWithMessageConverters() { | ||||
| 		this.contextLoader.config(MessageConvertersConfiguration.class, | ||||
| 				EnableJmsConfiguration.class).load(context -> { | ||||
| 					JmsListenerContainerFactory<?> jmsListenerContainerFactory = context | ||||
| 							.getBean("jmsListenerContainerFactory", | ||||
| 									JmsListenerContainerFactory.class); | ||||
| 					assertThat(jmsListenerContainerFactory.getClass()) | ||||
| 							.isEqualTo(DefaultJmsListenerContainerFactory.class); | ||||
| 					DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) jmsListenerContainerFactory) | ||||
| 							.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 					assertThat(listenerContainer.getMessageConverter()) | ||||
| 							.isSameAs(context.getBean("myMessageConverter")); | ||||
| 		this.context.withUserConfiguration(MessageConvertersConfiguration.class, | ||||
| 				EnableJmsConfiguration.class).run((loaded) -> { | ||||
| 					DefaultMessageListenerContainer container = getContainer(loaded, | ||||
| 							"jmsListenerContainerFactory"); | ||||
| 					assertThat(container.getMessageConverter()) | ||||
| 							.isSameAs(loaded.getBean("myMessageConverter")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testCustomContainerFactoryWithConfigurer() { | ||||
| 		this.contextLoader.config(TestConfiguration9.class, EnableJmsConfiguration.class) | ||||
| 				.env("spring.jms.listener.autoStartup=false").load(context -> { | ||||
| 					assertThat(context.containsBean("jmsListenerContainerFactory")) | ||||
| 							.isTrue(); | ||||
| 					JmsListenerContainerFactory<?> jmsListenerContainerFactory = context | ||||
| 							.getBean("customListenerContainerFactory", | ||||
| 									JmsListenerContainerFactory.class); | ||||
| 					assertThat(jmsListenerContainerFactory) | ||||
| 							.isInstanceOf(DefaultJmsListenerContainerFactory.class); | ||||
| 					DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory) jmsListenerContainerFactory) | ||||
| 							.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 					assertThat(listenerContainer.getCacheLevel()) | ||||
| 		this.context | ||||
| 				.withUserConfiguration(TestConfiguration9.class, | ||||
| 						EnableJmsConfiguration.class) | ||||
| 				.withPropertyValues("spring.jms.listener.autoStartup=false") | ||||
| 				.run((loaded) -> { | ||||
| 					DefaultMessageListenerContainer container = getContainer(loaded, | ||||
| 							"customListenerContainerFactory"); | ||||
| 					assertThat(container.getCacheLevel()) | ||||
| 							.isEqualTo(DefaultMessageListenerContainer.CACHE_CONSUMER); | ||||
| 					assertThat(listenerContainer.isAutoStartup()).isFalse(); | ||||
| 					assertThat(container.isAutoStartup()).isFalse(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	private DefaultMessageListenerContainer getContainer( | ||||
| 			AssertableApplicationContext loaded, String name) { | ||||
| 		JmsListenerContainerFactory<?> factory = loaded.getBean(name, | ||||
| 				JmsListenerContainerFactory.class); | ||||
| 		assertThat(factory).isInstanceOf(DefaultJmsListenerContainerFactory.class); | ||||
| 		return ((DefaultJmsListenerContainerFactory) factory) | ||||
| 				.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsTemplateWithMessageConverter() { | ||||
| 		this.contextLoader.config(MessageConvertersConfiguration.class).load(context -> { | ||||
| 			JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 			assertThat(jmsTemplate.getMessageConverter()) | ||||
| 					.isSameAs(context.getBean("myMessageConverter")); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsTemplateWithDestinationResolver() { | ||||
| 		this.contextLoader.config(DestinationResolversConfiguration.class) | ||||
| 				.load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					assertThat(jmsTemplate.getDestinationResolver()) | ||||
| 							.isSameAs(context.getBean("myDestinationResolver")); | ||||
| 		this.context.withUserConfiguration(MessageConvertersConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					assertThat(jmsTemplate.getMessageConverter()) | ||||
| 							.isSameAs(loaded.getBean("myMessageConverter")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsTemplateWithDestinationResolver() { | ||||
| 		this.context.withUserConfiguration(DestinationResolversConfiguration.class) | ||||
| 				.run((loaded) -> assertThat( | ||||
| 						loaded.getBean(JmsTemplate.class).getDestinationResolver()) | ||||
| 								.isSameAs(loaded.getBean("myDestinationResolver"))); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsTemplateFullCustomization() { | ||||
| 		this.contextLoader.config(MessageConvertersConfiguration.class) | ||||
| 				.env("spring.jms.template.default-destination=testQueue", | ||||
| 		this.context.withUserConfiguration(MessageConvertersConfiguration.class) | ||||
| 				.withPropertyValues("spring.jms.template.default-destination=testQueue", | ||||
| 						"spring.jms.template.delivery-delay=500", | ||||
| 						"spring.jms.template.delivery-mode=non-persistent", | ||||
| 						"spring.jms.template.priority=6", | ||||
| 						"spring.jms.template.time-to-live=6000", | ||||
| 						"spring.jms.template.receive-timeout=2000") | ||||
| 				.load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 				.run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					assertThat(jmsTemplate.getMessageConverter()) | ||||
| 							.isSameAs(context.getBean("myMessageConverter")); | ||||
| 							.isSameAs(loaded.getBean("myMessageConverter")); | ||||
| 					assertThat(jmsTemplate.isPubSubDomain()).isFalse(); | ||||
| 					assertThat(jmsTemplate.getDefaultDestinationName()) | ||||
| 							.isEqualTo("testQueue"); | ||||
|  | @ -298,26 +284,24 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void testPubSubDisabledByDefault() { | ||||
| 		this.contextLoader.config(TestConfiguration.class).load(context -> { | ||||
| 			JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 			assertThat(jmsTemplate.isPubSubDomain()).isFalse(); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class).run( | ||||
| 				(loaded) -> assertThat(loaded.getBean(JmsTemplate.class).isPubSubDomain()) | ||||
| 						.isFalse()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testJmsTemplatePostProcessedSoThatPubSubIsTrue() { | ||||
| 		this.contextLoader.config(TestConfiguration4.class).load(context -> { | ||||
| 			JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 			assertThat(jmsTemplate.isPubSubDomain()).isTrue(); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(TestConfiguration4.class).run( | ||||
| 				(loaded) -> assertThat(loaded.getBean(JmsTemplate.class).isPubSubDomain()) | ||||
| 						.isTrue()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testPubSubDomainActive() { | ||||
| 		this.contextLoader.config(TestConfiguration.class) | ||||
| 				.env("spring.jms.pubSubDomain:true").load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					DefaultMessageListenerContainer defaultMessageListenerContainer = context | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.withPropertyValues("spring.jms.pubSubDomain:true").run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					DefaultMessageListenerContainer defaultMessageListenerContainer = loaded | ||||
| 							.getBean(DefaultJmsListenerContainerFactory.class) | ||||
| 							.createListenerContainer(mock(JmsListenerEndpoint.class)); | ||||
| 					assertThat(jmsTemplate.isPubSubDomain()).isTrue(); | ||||
|  | @ -327,29 +311,27 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void testPubSubDomainOverride() { | ||||
| 		this.contextLoader.config(TestConfiguration.class) | ||||
| 				.env("spring.jms.pubSubDomain:false").load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.withPropertyValues("spring.jms.pubSubDomain:false").run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertThat(jmsTemplate).isNotNull(); | ||||
| 					assertThat(jmsTemplate.isPubSubDomain()).isFalse(); | ||||
| 					assertThat(connectionFactory).isNotNull(); | ||||
| 					assertThat(connectionFactory) | ||||
| 					assertThat(factory).isNotNull() | ||||
| 							.isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void testActiveMQOverriddenStandalone() { | ||||
| 		this.contextLoader.config(TestConfiguration.class) | ||||
| 				.env("spring.activemq.inMemory:false").load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.withPropertyValues("spring.activemq.inMemory:false").run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertThat(jmsTemplate).isNotNull(); | ||||
| 					assertThat(connectionFactory).isNotNull(); | ||||
| 					assertThat(connectionFactory) | ||||
| 					assertThat(factory).isNotNull() | ||||
| 							.isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 					assertThat(((ActiveMQConnectionFactory) jmsTemplate | ||||
| 							.getConnectionFactory()).getBrokerURL()) | ||||
|  | @ -359,16 +341,15 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void testActiveMQOverriddenRemoteHost() { | ||||
| 		this.contextLoader.config(TestConfiguration.class) | ||||
| 				.env("spring.activemq.brokerUrl:tcp://remote-host:10000") | ||||
| 				.load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.withPropertyValues("spring.activemq.brokerUrl:tcp://remote-host:10000") | ||||
| 				.run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertThat(jmsTemplate).isNotNull(); | ||||
| 					assertThat(connectionFactory).isNotNull(); | ||||
| 					assertThat(connectionFactory) | ||||
| 							.isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 					assertThat(factory).isNotNull(); | ||||
| 					assertThat(factory).isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 					assertThat(((ActiveMQConnectionFactory) jmsTemplate | ||||
| 							.getConnectionFactory()).getBrokerURL()) | ||||
| 									.isEqualTo("tcp://remote-host:10000"); | ||||
|  | @ -377,10 +358,10 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void testActiveMQOverriddenPool() { | ||||
| 		this.contextLoader.config(TestConfiguration.class) | ||||
| 				.env("spring.activemq.pool.enabled:true").load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					PooledConnectionFactory pool = context | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.withPropertyValues("spring.activemq.pool.enabled:true").run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					PooledConnectionFactory pool = loaded | ||||
| 							.getBean(PooledConnectionFactory.class); | ||||
| 					assertThat(jmsTemplate).isNotNull(); | ||||
| 					assertThat(pool).isNotNull(); | ||||
|  | @ -393,12 +374,12 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void testActiveMQOverriddenPoolAndStandalone() { | ||||
| 		this.contextLoader.config(TestConfiguration.class) | ||||
| 				.env("spring.activemq.pool.enabled:true", | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.withPropertyValues("spring.activemq.pool.enabled:true", | ||||
| 						"spring.activemq.inMemory:false") | ||||
| 				.load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					PooledConnectionFactory pool = context | ||||
| 				.run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					PooledConnectionFactory pool = loaded | ||||
| 							.getBean(PooledConnectionFactory.class); | ||||
| 					assertThat(jmsTemplate).isNotNull(); | ||||
| 					assertThat(pool).isNotNull(); | ||||
|  | @ -411,12 +392,12 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void testActiveMQOverriddenPoolAndRemoteServer() { | ||||
| 		this.contextLoader.config(TestConfiguration.class) | ||||
| 				.env("spring.activemq.pool.enabled:true", | ||||
| 		this.context.withUserConfiguration(TestConfiguration.class) | ||||
| 				.withPropertyValues("spring.activemq.pool.enabled:true", | ||||
| 						"spring.activemq.brokerUrl:tcp://remote-host:10000") | ||||
| 				.load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					PooledConnectionFactory pool = context | ||||
| 				.run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					PooledConnectionFactory pool = loaded | ||||
| 							.getBean(PooledConnectionFactory.class); | ||||
| 					assertThat(jmsTemplate).isNotNull(); | ||||
| 					assertThat(pool).isNotNull(); | ||||
|  | @ -430,12 +411,14 @@ public class JmsAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void enableJmsAutomatically() throws Exception { | ||||
| 		this.contextLoader.config(NoEnableJmsConfiguration.class).load(context -> { | ||||
| 			context.getBean( | ||||
| 					JmsListenerConfigUtils.JMS_LISTENER_ANNOTATION_PROCESSOR_BEAN_NAME); | ||||
| 			context.getBean( | ||||
| 					JmsListenerConfigUtils.JMS_LISTENER_ENDPOINT_REGISTRY_BEAN_NAME); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(NoEnableJmsConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded) | ||||
| 							.hasBean( | ||||
| 									JmsListenerConfigUtils.JMS_LISTENER_ANNOTATION_PROCESSOR_BEAN_NAME) | ||||
| 							.hasBean( | ||||
| 									JmsListenerConfigUtils.JMS_LISTENER_ENDPOINT_REGISTRY_BEAN_NAME); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
|  |  | |||
|  | @ -23,8 +23,9 @@ import org.apache.activemq.ActiveMQConnectionFactory; | |||
| import org.apache.activemq.pool.PooledConnectionFactory; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| 
 | ||||
|  | @ -41,67 +42,59 @@ import static org.mockito.Mockito.mockingDetails; | |||
|  */ | ||||
| public class ActiveMQAutoConfigurationTests { | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(ActiveMQAutoConfiguration.class, JmsAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class, | ||||
| 					JmsAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void brokerIsEmbeddedByDefault() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class).load(context -> { | ||||
| 			ConnectionFactory connectionFactory = context | ||||
| 					.getBean(ConnectionFactory.class); | ||||
| 			assertThat(connectionFactory).isInstanceOf(ActiveMQConnectionFactory.class); | ||||
| 			String brokerUrl = ((ActiveMQConnectionFactory) connectionFactory) | ||||
| 					.getBrokerURL(); | ||||
| 			assertThat(brokerUrl).isEqualTo("vm://localhost?broker.persistent=false"); | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class).run((loaded) -> { | ||||
| 			assertThat(loaded).getBean(ConnectionFactory.class) | ||||
| 					.isInstanceOf(ActiveMQConnectionFactory.class); | ||||
| 			assertThat(loaded.getBean(ActiveMQConnectionFactory.class).getBrokerURL()) | ||||
| 					.isEqualTo("vm://localhost?broker.persistent=false"); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void configurationBacksOffWhenCustomConnectionFactoryExists() { | ||||
| 		this.contextLoader.config(CustomConnectionFactoryConfiguration.class) | ||||
| 				.load(context -> assertThat( | ||||
| 						mockingDetails(context.getBean(ConnectionFactory.class)).isMock()) | ||||
| 		this.context.withUserConfiguration(CustomConnectionFactoryConfiguration.class) | ||||
| 				.run((loaded) -> assertThat( | ||||
| 						mockingDetails(loaded.getBean(ConnectionFactory.class)).isMock()) | ||||
| 								.isTrue()); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void customPooledConnectionFactoryConfiguration() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.activemq.pool.enabled:true", | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.activemq.pool.enabled:true", | ||||
| 						"spring.activemq.pool.maxConnections:256", | ||||
| 						"spring.activemq.pool.idleTimeout:512", | ||||
| 						"spring.activemq.pool.expiryTimeout:4096", | ||||
| 						"spring.activemq.pool.configuration.maximumActiveSessionPerConnection:1024", | ||||
| 						"spring.activemq.pool.configuration.timeBetweenExpirationCheckMillis:2048") | ||||
| 				.load(context -> { | ||||
| 					ConnectionFactory connectionFactory = context | ||||
| 							.getBean(ConnectionFactory.class); | ||||
| 					assertThat(connectionFactory) | ||||
| 							.isInstanceOf(PooledConnectionFactory.class); | ||||
| 					PooledConnectionFactory pooledConnectionFactory = (PooledConnectionFactory) connectionFactory; | ||||
| 					assertThat(pooledConnectionFactory.getMaxConnections()) | ||||
| 							.isEqualTo(256); | ||||
| 					assertThat(pooledConnectionFactory.getIdleTimeout()).isEqualTo(512); | ||||
| 					assertThat(pooledConnectionFactory | ||||
| 							.getMaximumActiveSessionPerConnection()).isEqualTo(1024); | ||||
| 					assertThat( | ||||
| 							pooledConnectionFactory.getTimeBetweenExpirationCheckMillis()) | ||||
| 									.isEqualTo(2048); | ||||
| 					assertThat(pooledConnectionFactory.getExpiryTimeout()) | ||||
| 							.isEqualTo(4096); | ||||
| 				.run((loaded) -> { | ||||
| 					ConnectionFactory factory = loaded.getBean(ConnectionFactory.class); | ||||
| 					assertThat(factory).isInstanceOf(PooledConnectionFactory.class); | ||||
| 					PooledConnectionFactory pooledFactory = (PooledConnectionFactory) factory; | ||||
| 					assertThat(pooledFactory.getMaxConnections()).isEqualTo(256); | ||||
| 					assertThat(pooledFactory.getIdleTimeout()).isEqualTo(512); | ||||
| 					assertThat(pooledFactory.getMaximumActiveSessionPerConnection()) | ||||
| 							.isEqualTo(1024); | ||||
| 					assertThat(pooledFactory.getTimeBetweenExpirationCheckMillis()) | ||||
| 							.isEqualTo(2048); | ||||
| 					assertThat(pooledFactory.getExpiryTimeout()).isEqualTo(4096); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void pooledConnectionFactoryConfiguration() throws JMSException { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.activemq.pool.enabled:true").load(context -> { | ||||
| 					ConnectionFactory connectionFactory = context | ||||
| 							.getBean(ConnectionFactory.class); | ||||
| 					assertThat(connectionFactory) | ||||
| 							.isInstanceOf(PooledConnectionFactory.class); | ||||
| 					context.close(); | ||||
| 					assertThat(connectionFactory.createConnection()).isNull(); | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.activemq.pool.enabled:true").run((loaded) -> { | ||||
| 					ConnectionFactory factory = loaded.getBean(ConnectionFactory.class); | ||||
| 					assertThat(factory).isInstanceOf(PooledConnectionFactory.class); | ||||
| 					loaded.getSourceApplicationContext().close(); | ||||
| 					assertThat(factory.createConnection()).isNull(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,13 +41,13 @@ import org.junit.Rule; | |||
| import org.junit.Test; | ||||
| import org.junit.rules.TemporaryFolder; | ||||
| 
 | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.context.ApplicationContext; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.jms.core.JmsTemplate; | ||||
| import org.springframework.jms.core.MessageCreator; | ||||
| import org.springframework.jms.core.SessionCallback; | ||||
| import org.springframework.jms.support.destination.DestinationResolver; | ||||
| import org.springframework.jms.support.destination.DynamicDestinationResolver; | ||||
|  | @ -65,110 +65,108 @@ public class ArtemisAutoConfigurationTests { | |||
| 	@Rule | ||||
| 	public final TemporaryFolder folder = new TemporaryFolder(); | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(ArtemisAutoConfiguration.class, JmsAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(ArtemisAutoConfiguration.class, | ||||
| 					JmsAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void nativeConnectionFactory() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.artemis.mode:native").load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.mode:native").run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertThat(connectionFactory) | ||||
| 							.isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 					assertNettyConnectionFactory(connectionFactory, "localhost", 61616); | ||||
| 					assertThat(connectionFactory.getUser()).isNull(); | ||||
| 					assertThat(connectionFactory.getPassword()).isNull(); | ||||
| 					assertThat(factory).isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 					assertNettyConnectionFactory(factory, "localhost", 61616); | ||||
| 					assertThat(factory.getUser()).isNull(); | ||||
| 					assertThat(factory.getPassword()).isNull(); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void nativeConnectionFactoryCustomHost() { | ||||
| 		this.contextLoader | ||||
| 				.config(EmptyConfiguration.class).env("spring.artemis.mode:native", | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.mode:native", | ||||
| 						"spring.artemis.host:192.168.1.144", "spring.artemis.port:9876") | ||||
| 				.load(context -> { | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 				.run((loaded) -> { | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertNettyConnectionFactory(connectionFactory, "192.168.1.144", | ||||
| 							9876); | ||||
| 					assertNettyConnectionFactory(factory, "192.168.1.144", 9876); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void nativeConnectionFactoryCredentials() { | ||||
| 		this.contextLoader | ||||
| 				.config(EmptyConfiguration.class).env("spring.artemis.mode:native", | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.mode:native", | ||||
| 						"spring.artemis.user:user", "spring.artemis.password:secret") | ||||
| 				.load(context -> { | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 				.run((loaded) -> { | ||||
| 					JmsTemplate jmsTemplate = loaded.getBean(JmsTemplate.class); | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertThat(connectionFactory) | ||||
| 							.isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 					assertNettyConnectionFactory(connectionFactory, "localhost", 61616); | ||||
| 					assertThat(connectionFactory.getUser()).isEqualTo("user"); | ||||
| 					assertThat(connectionFactory.getPassword()).isEqualTo("secret"); | ||||
| 					assertThat(factory).isEqualTo(jmsTemplate.getConnectionFactory()); | ||||
| 					assertNettyConnectionFactory(factory, "localhost", 61616); | ||||
| 					assertThat(factory.getUser()).isEqualTo("user"); | ||||
| 					assertThat(factory.getPassword()).isEqualTo("secret"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedConnectionFactory() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.artemis.mode:embedded").load(context -> { | ||||
| 					ArtemisProperties properties = context | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.mode:embedded").run((loaded) -> { | ||||
| 					ArtemisProperties properties = loaded | ||||
| 							.getBean(ArtemisProperties.class); | ||||
| 					assertThat(properties.getMode()).isEqualTo(ArtemisMode.EMBEDDED); | ||||
| 					assertThat(context.getBeansOfType(EmbeddedJMS.class)).hasSize(1); | ||||
| 					org.apache.activemq.artemis.core.config.Configuration configuration = context | ||||
| 					assertThat(loaded).hasSingleBean(EmbeddedJMS.class); | ||||
| 					org.apache.activemq.artemis.core.config.Configuration configuration = loaded | ||||
| 							.getBean( | ||||
| 									org.apache.activemq.artemis.core.config.Configuration.class); | ||||
| 					assertThat(configuration.isPersistenceEnabled()).isFalse(); | ||||
| 					assertThat(configuration.isSecurityEnabled()).isFalse(); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertInVmConnectionFactory(connectionFactory); | ||||
| 					assertInVmConnectionFactory(factory); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedConnectionFactoryByDefault() { | ||||
| 		// No mode is specified | ||||
| 		this.contextLoader.config(EmptyConfiguration.class).load(context -> { | ||||
| 			assertThat(context.getBeansOfType(EmbeddedJMS.class)).hasSize(1); | ||||
| 			org.apache.activemq.artemis.core.config.Configuration configuration = context | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class).run((loaded) -> { | ||||
| 			assertThat(loaded).hasSingleBean(EmbeddedJMS.class); | ||||
| 			org.apache.activemq.artemis.core.config.Configuration configuration = loaded | ||||
| 					.getBean(org.apache.activemq.artemis.core.config.Configuration.class); | ||||
| 			assertThat(configuration.isPersistenceEnabled()).isFalse(); | ||||
| 			assertThat(configuration.isSecurityEnabled()).isFalse(); | ||||
| 
 | ||||
| 			ActiveMQConnectionFactory connectionFactory = context | ||||
| 			ActiveMQConnectionFactory factory = loaded | ||||
| 					.getBean(ActiveMQConnectionFactory.class); | ||||
| 			assertInVmConnectionFactory(connectionFactory); | ||||
| 			assertInVmConnectionFactory(factory); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void nativeConnectionFactoryIfEmbeddedServiceDisabledExplicitly() { | ||||
| 		// No mode is specified | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.artemis.embedded.enabled:false").load(context -> { | ||||
| 					assertThat(context.getBeansOfType(EmbeddedJMS.class)).isEmpty(); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.embedded.enabled:false") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).doesNotHaveBean(EmbeddedJMS.class); | ||||
| 					ActiveMQConnectionFactory factory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertNettyConnectionFactory(connectionFactory, "localhost", 61616); | ||||
| 					assertNettyConnectionFactory(factory, "localhost", 61616); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedConnectionFactoryEvenIfEmbeddedServiceDisabled() { | ||||
| 		// No mode is specified | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.artemis.mode:embedded", | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.mode:embedded", | ||||
| 						"spring.artemis.embedded.enabled:false") | ||||
| 				.load(context -> { | ||||
| 					assertThat(context.getBeansOfType(EmbeddedJMS.class)).isEmpty(); | ||||
| 					ActiveMQConnectionFactory connectionFactory = context | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded.getBeansOfType(EmbeddedJMS.class)).isEmpty(); | ||||
| 					ActiveMQConnectionFactory connectionFactory = loaded | ||||
| 							.getBean(ActiveMQConnectionFactory.class); | ||||
| 					assertInVmConnectionFactory(connectionFactory); | ||||
| 				}); | ||||
|  | @ -176,11 +174,11 @@ public class ArtemisAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedServerWithDestinations() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.artemis.embedded.queues=Queue1,Queue2", | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.embedded.queues=Queue1,Queue2", | ||||
| 						"spring.artemis.embedded.topics=Topic1") | ||||
| 				.load(context -> { | ||||
| 					DestinationChecker checker = new DestinationChecker(context); | ||||
| 				.run((loaded) -> { | ||||
| 					DestinationChecker checker = new DestinationChecker(loaded); | ||||
| 					checker.checkQueue("Queue1", true); | ||||
| 					checker.checkQueue("Queue2", true); | ||||
| 					checker.checkQueue("QueueWillNotBeAutoCreated", true); | ||||
|  | @ -191,19 +189,21 @@ public class ArtemisAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedServerWithDestinationConfig() { | ||||
| 		this.contextLoader.config(DestinationConfiguration.class).load(context -> { | ||||
| 			DestinationChecker checker = new DestinationChecker(context); | ||||
| 			checker.checkQueue("sampleQueue", true); | ||||
| 			checker.checkTopic("sampleTopic", true); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(DestinationConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					DestinationChecker checker = new DestinationChecker(loaded); | ||||
| 					checker.checkQueue("sampleQueue", true); | ||||
| 					checker.checkTopic("sampleTopic", true); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedServiceWithCustomJmsConfiguration() { | ||||
| 		// Ignored with custom config | ||||
| 		this.contextLoader.config(CustomJmsConfiguration.class) | ||||
| 				.env("spring.artemis.embedded.queues=Queue1,Queue2").load(context -> { | ||||
| 					DestinationChecker checker = new DestinationChecker(context); | ||||
| 		this.context.withUserConfiguration(CustomJmsConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.embedded.queues=Queue1,Queue2") | ||||
| 				.run((loaded) -> { | ||||
| 					DestinationChecker checker = new DestinationChecker(loaded); | ||||
| 					checker.checkQueue("custom", true); // See CustomJmsConfiguration | ||||
| 					checker.checkQueue("Queue1", true); | ||||
| 					checker.checkQueue("Queue2", true); | ||||
|  | @ -212,94 +212,77 @@ public class ArtemisAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedServiceWithCustomArtemisConfiguration() { | ||||
| 		this.contextLoader.config(CustomArtemisConfiguration.class).load(context -> { | ||||
| 			org.apache.activemq.artemis.core.config.Configuration configuration = context | ||||
| 					.getBean(org.apache.activemq.artemis.core.config.Configuration.class); | ||||
| 			assertThat(configuration.getName()).isEqualTo("customFooBar"); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(CustomArtemisConfiguration.class) | ||||
| 				.run((loaded) -> assertThat(loaded | ||||
| 						.getBean( | ||||
| 								org.apache.activemq.artemis.core.config.Configuration.class) | ||||
| 						.getName()).isEqualTo("customFooBar")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void embeddedWithPersistentMode() throws IOException, JMSException { | ||||
| 		File dataFolder = this.folder.newFolder(); | ||||
| 		final String msgId = UUID.randomUUID().toString(); | ||||
| 
 | ||||
| 		final String messageId = UUID.randomUUID().toString(); | ||||
| 		// Start the server and post a message to some queue | ||||
| 		this.contextLoader.config(EmptyConfiguration.class).env( | ||||
| 				"spring.artemis.embedded.queues=TestQueue", | ||||
| 				"spring.artemis.embedded.persistent:true", | ||||
| 				"spring.artemis.embedded.dataDirectory:" + dataFolder.getAbsolutePath()) | ||||
| 				.load(context -> { | ||||
| 
 | ||||
| 					JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); | ||||
| 					jmsTemplate.send("TestQueue", new MessageCreator() { | ||||
| 						@Override | ||||
| 						public Message createMessage(Session session) | ||||
| 								throws JMSException { | ||||
| 							return session.createTextMessage(msgId); | ||||
| 						} | ||||
| 					}); | ||||
| 				}); | ||||
| 
 | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.embedded.queues=TestQueue", | ||||
| 						"spring.artemis.embedded.persistent:true", | ||||
| 						"spring.artemis.embedded.dataDirectory:" | ||||
| 								+ dataFolder.getAbsolutePath()) | ||||
| 				.run((loaded) -> loaded.getBean(JmsTemplate.class).send("TestQueue", | ||||
| 						(session) -> session.createTextMessage(messageId))); | ||||
| 		// Start the server again and check if our message is still here | ||||
| 		this.contextLoader.load(context -> { | ||||
| 
 | ||||
| 			JmsTemplate jmsTemplate2 = context.getBean(JmsTemplate.class); | ||||
| 		this.context.run((loaded) -> { | ||||
| 			JmsTemplate jmsTemplate2 = loaded.getBean(JmsTemplate.class); | ||||
| 			jmsTemplate2.setReceiveTimeout(1000L); | ||||
| 			Message message = jmsTemplate2.receive("TestQueue"); | ||||
| 			assertThat(message).isNotNull(); | ||||
| 			assertThat(((TextMessage) message).getText()).isEqualTo(msgId); | ||||
| 			assertThat(((TextMessage) message).getText()).isEqualTo(messageId); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void severalEmbeddedBrokers() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.artemis.embedded.queues=Queue1").load(rootContext -> { | ||||
| 					this.contextLoader.env("spring.artemis.embedded.queues=Queue2") | ||||
| 							.load(anotherContext -> { | ||||
| 						ArtemisProperties properties = rootContext | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.embedded.queues=Queue1") | ||||
| 				.run((first) -> { | ||||
| 					this.context | ||||
| 							.withPropertyValues("spring.artemis.embedded.queues=Queue2") | ||||
| 							.run((second) -> { | ||||
| 						ArtemisProperties firstProperties = first | ||||
| 								.getBean(ArtemisProperties.class); | ||||
| 						ArtemisProperties anotherProperties = anotherContext | ||||
| 						ArtemisProperties secondProperties = second | ||||
| 								.getBean(ArtemisProperties.class); | ||||
| 						assertThat( | ||||
| 								properties.getEmbedded().getServerId() < anotherProperties | ||||
| 										.getEmbedded().getServerId()).isTrue(); | ||||
| 						DestinationChecker checker = new DestinationChecker( | ||||
| 								anotherContext); | ||||
| 						checker.checkQueue("Queue1", true); | ||||
| 						checker.checkQueue("Queue2", true); | ||||
| 						DestinationChecker anotherChecker = new DestinationChecker( | ||||
| 								anotherContext); | ||||
| 						anotherChecker.checkQueue("Queue2", true); | ||||
| 						anotherChecker.checkQueue("Queue1", true); | ||||
| 						assertThat(firstProperties.getEmbedded().getServerId()) | ||||
| 								.isLessThan(secondProperties.getEmbedded().getServerId()); | ||||
| 						DestinationChecker firstChecker = new DestinationChecker(first); | ||||
| 						firstChecker.checkQueue("Queue1", true); | ||||
| 						firstChecker.checkQueue("Queue2", true); | ||||
| 						DestinationChecker secondChecker = new DestinationChecker(second); | ||||
| 						secondChecker.checkQueue("Queue2", true); | ||||
| 						secondChecker.checkQueue("Queue1", true); | ||||
| 					}); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void connectToASpecificEmbeddedBroker() { | ||||
| 		this.contextLoader.config(EmptyConfiguration.class) | ||||
| 				.env("spring.artemis.embedded.serverId=93", | ||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 				.withPropertyValues("spring.artemis.embedded.serverId=93", | ||||
| 						"spring.artemis.embedded.queues=Queue1") | ||||
| 				.load(context -> { | ||||
| 					this.contextLoader.config(EmptyConfiguration.class).env( | ||||
| 							"spring.artemis.mode=embedded", | ||||
| 							"spring.artemis.embedded.serverId=93", /* | ||||
| 																	 * Connect to the | ||||
| 																	 * "main" broker | ||||
| 																	 */ | ||||
| 							"spring.artemis.embedded.enabled=false" /* | ||||
| 																	 * do not start a | ||||
| 																	 * specific one | ||||
| 																	 */) | ||||
| 							.load(anotherContext -> { | ||||
| 						DestinationChecker checker = new DestinationChecker(context); | ||||
| 						checker.checkQueue("Queue1", true); | ||||
| 
 | ||||
| 						DestinationChecker anotherChecker = new DestinationChecker( | ||||
| 								anotherContext); | ||||
| 						anotherChecker.checkQueue("Queue1", true); | ||||
| 				.run((first) -> { | ||||
| 					this.context.withUserConfiguration(EmptyConfiguration.class) | ||||
| 							.withPropertyValues("spring.artemis.mode=embedded", | ||||
| 									// Connect to the "main" broker | ||||
| 									"spring.artemis.embedded.serverId=93", | ||||
| 									// Do not start a specific one | ||||
| 									"spring.artemis.embedded.enabled=false") | ||||
| 							.run(secondContext -> { | ||||
| 						DestinationChecker firstChecker = new DestinationChecker(first); | ||||
| 						firstChecker.checkQueue("Queue1", true); | ||||
| 						DestinationChecker secondChecker = new DestinationChecker( | ||||
| 								secondContext); | ||||
| 						secondChecker.checkQueue("Queue1", true); | ||||
| 					}); | ||||
| 				}); | ||||
| 	} | ||||
|  |  | |||
|  | @ -18,8 +18,8 @@ package org.springframework.boot.autoconfigure.web.reactive; | |||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ReactiveWebContextLoader; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.test.context.ReactiveWebApplicationContextTester; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.http.server.reactive.HttpHandler; | ||||
|  | @ -39,23 +39,25 @@ import static org.assertj.core.api.Assertions.assertThat; | |||
|  */ | ||||
| public class HttpHandlerAutoConfigurationTests { | ||||
| 
 | ||||
| 	private final ReactiveWebContextLoader contextLoader = ContextLoader.reactiveWeb() | ||||
| 			.autoConfig(HttpHandlerAutoConfiguration.class); | ||||
| 	private final ReactiveWebApplicationContextTester context = new ReactiveWebApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(HttpHandlerAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void shouldNotProcessIfExistingHttpHandler() { | ||||
| 		this.contextLoader.config(CustomHttpHandler.class).load(context -> { | ||||
| 			assertThat(context.getBeansOfType(HttpHandler.class)).hasSize(1); | ||||
| 			assertThat(context.getBean(HttpHandler.class)) | ||||
| 					.isSameAs(context.getBean("customHttpHandler")); | ||||
| 		this.context.withUserConfiguration(CustomHttpHandler.class).run((loaded) -> { | ||||
| 			assertThat(loaded).hasSingleBean(HttpHandler.class); | ||||
| 			assertThat(loaded).getBean(HttpHandler.class) | ||||
| 					.isSameAs(loaded.getBean("customHttpHandler")); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void shouldConfigureHttpHandlerAnnotation() { | ||||
| 		this.contextLoader.autoConfig(WebFluxAutoConfiguration.class).load(context -> { | ||||
| 			assertThat(context.getBeansOfType(HttpHandler.class).size()).isEqualTo(1); | ||||
| 		}); | ||||
| 		this.context | ||||
| 				.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class)) | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).hasSingleBean(HttpHandler.class); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -16,14 +16,17 @@ | |||
| 
 | ||||
| package org.springframework.boot.autoconfigure.webservices; | ||||
| 
 | ||||
| import java.util.Collection; | ||||
| 
 | ||||
| import org.junit.Rule; | ||||
| import org.junit.Test; | ||||
| import org.junit.rules.ExpectedException; | ||||
| 
 | ||||
| import org.springframework.beans.factory.BeanCreationException; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ServletWebContextLoader; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.test.context.WebApplicationContextTester; | ||||
| import org.springframework.boot.web.servlet.ServletRegistrationBean; | ||||
| import org.springframework.context.ApplicationContext; | ||||
| import org.springframework.test.util.ReflectionTestUtils; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
|  | @ -37,52 +40,46 @@ import static org.assertj.core.api.Assertions.assertThat; | |||
|  */ | ||||
| public class WebServicesAutoConfigurationTests { | ||||
| 
 | ||||
| 	private final ServletWebContextLoader contextLoader = ContextLoader.servletWeb() | ||||
| 			.autoConfig(WebServicesAutoConfiguration.class); | ||||
| 	private final WebApplicationContextTester context = new WebApplicationContextTester() | ||||
| 			.withConfiguration(AutoConfigurations.of(WebServicesAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Rule | ||||
| 	public ExpectedException thrown = ExpectedException.none(); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void defaultConfiguration() { | ||||
| 		this.contextLoader.load(context -> { | ||||
| 			assertThat(context.getBeansOfType(ServletRegistrationBean.class)).hasSize(1); | ||||
| 		}); | ||||
| 		this.context.run((loaded) -> assertThat(loaded) | ||||
| 				.hasSingleBean(ServletRegistrationBean.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void customPathMustBeginWithASlash() { | ||||
| 		this.contextLoader.env("spring.webservices.path=invalid") | ||||
| 				.loadAndFail(BeanCreationException.class, (ex) -> { | ||||
| 					System.out.println(ex.getMessage()); | ||||
| 					assertThat(ex.getMessage()).contains( | ||||
| 							"Failed to bind properties under 'spring.webservices'"); | ||||
| 		this.context.withPropertyValues("spring.webservices.path=invalid") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).getFailure() | ||||
| 							.isInstanceOf(BeanCreationException.class) | ||||
| 							.hasMessageContaining( | ||||
| 									"Failed to bind properties under 'spring.webservices'"); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void customPath() { | ||||
| 		this.contextLoader.env("spring.webservices.path=/valid").load(context -> { | ||||
| 			ServletRegistrationBean<?> servletRegistrationBean = context | ||||
| 					.getBean(ServletRegistrationBean.class); | ||||
| 			assertThat(servletRegistrationBean.getUrlMappings()).contains("/valid/*"); | ||||
| 		}); | ||||
| 		this.context.withPropertyValues("spring.webservices.path=/valid") | ||||
| 				.run((loaded) -> assertThat(getUrlMappings(loaded)).contains("/valid/*")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void customPathWithTrailingSlash() { | ||||
| 		this.contextLoader.env("spring.webservices.path=/valid/").load(context -> { | ||||
| 			ServletRegistrationBean<?> servletRegistrationBean = context | ||||
| 					.getBean(ServletRegistrationBean.class); | ||||
| 			assertThat(servletRegistrationBean.getUrlMappings()).contains("/valid/*"); | ||||
| 		}); | ||||
| 		this.context.withPropertyValues("spring.webservices.path=/valid/") | ||||
| 				.run((loaded) -> assertThat(getUrlMappings(loaded)).contains("/valid/*")); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void customLoadOnStartup() { | ||||
| 		this.contextLoader.env("spring.webservices.servlet.load-on-startup=1") | ||||
| 				.load(context -> { | ||||
| 					ServletRegistrationBean<?> registrationBean = context | ||||
| 		this.context.withPropertyValues("spring.webservices.servlet.load-on-startup=1") | ||||
| 				.run((loaded) -> { | ||||
| 					ServletRegistrationBean<?> registrationBean = loaded | ||||
| 							.getBean(ServletRegistrationBean.class); | ||||
| 					assertThat(ReflectionTestUtils.getField(registrationBean, | ||||
| 							"loadOnStartup")).isEqualTo(1); | ||||
|  | @ -91,15 +88,22 @@ public class WebServicesAutoConfigurationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	public void customInitParameters() { | ||||
| 		this.contextLoader.env("spring.webservices.servlet.init.key1=value1", | ||||
| 				"spring.webservices.servlet.init.key2=value2").load(context -> { | ||||
| 					ServletRegistrationBean<?> registrationBean = context | ||||
| 							.getBean(ServletRegistrationBean.class); | ||||
| 					assertThat(registrationBean.getInitParameters()).containsEntry("key1", | ||||
| 							"value1"); | ||||
| 					assertThat(registrationBean.getInitParameters()).containsEntry("key2", | ||||
| 							"value2"); | ||||
| 				}); | ||||
| 		this.context | ||||
| 				.withPropertyValues("spring.webservices.servlet.init.key1=value1", | ||||
| 						"spring.webservices.servlet.init.key2=value2") | ||||
| 				.run(loaded -> assertThat( | ||||
| 						getServletRegistrationBean(loaded).getInitParameters()) | ||||
| 								.containsEntry("key1", "value1") | ||||
| 								.containsEntry("key2", "value2")); | ||||
| 	} | ||||
| 
 | ||||
| 	private Collection<String> getUrlMappings(ApplicationContext loaded) { | ||||
| 		return getServletRegistrationBean(loaded).getUrlMappings(); | ||||
| 	} | ||||
| 
 | ||||
| 	private ServletRegistrationBean<?> getServletRegistrationBean( | ||||
| 			ApplicationContext loaded) { | ||||
| 		return loaded.getBean(ServletRegistrationBean.class); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -20,7 +20,8 @@ import javax.sql.DataSource; | |||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.jdbc.core.JdbcTemplate; | ||||
|  | @ -37,29 +38,32 @@ import static org.assertj.core.api.Assertions.assertThat; | |||
|  */ | ||||
| public class TestDatabaseAutoConfigurationTests { | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.autoConfig(TestDatabaseAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withConfiguration( | ||||
| 					AutoConfigurations.of(TestDatabaseAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void replaceWithNoDataSourceAvailable() { | ||||
| 		this.contextLoader.load(context -> { | ||||
| 			assertThat(context.getBeansOfType(DataSource.class)).isEmpty(); | ||||
| 		}); | ||||
| 		this.context | ||||
| 				.run((loaded) -> assertThat(loaded).doesNotHaveBean(DataSource.class)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void replaceWithUniqueDatabase() { | ||||
| 		this.contextLoader.config(ExistingDataSourceConfiguration.class).load(context -> { | ||||
| 			DataSource datasource = context.getBean(DataSource.class); | ||||
| 			JdbcTemplate jdbcTemplate = new JdbcTemplate(datasource); | ||||
| 			jdbcTemplate.execute("create table example (id int, name varchar);"); | ||||
| 			this.contextLoader.load(anotherContext -> { | ||||
| 				DataSource anotherDatasource = anotherContext.getBean(DataSource.class); | ||||
| 				JdbcTemplate anotherJdbcTemplate = new JdbcTemplate(anotherDatasource); | ||||
| 				anotherJdbcTemplate | ||||
| 						.execute("create table example (id int, name varchar);"); | ||||
| 			}); | ||||
| 		}); | ||||
| 		this.context.withUserConfiguration(ExistingDataSourceConfiguration.class) | ||||
| 				.run((loaded) -> { | ||||
| 					DataSource datasource = loaded.getBean(DataSource.class); | ||||
| 					JdbcTemplate jdbcTemplate = new JdbcTemplate(datasource); | ||||
| 					jdbcTemplate.execute("create table example (id int, name varchar);"); | ||||
| 					this.context.run((secondContext) -> { | ||||
| 						DataSource anotherDatasource = secondContext | ||||
| 								.getBean(DataSource.class); | ||||
| 						JdbcTemplate anotherJdbcTemplate = new JdbcTemplate( | ||||
| 								anotherDatasource); | ||||
| 						anotherJdbcTemplate | ||||
| 								.execute("create table example (id int, name varchar);"); | ||||
| 					}); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
|  |  | |||
|  | @ -22,8 +22,9 @@ import org.junit.Test; | |||
| import org.junit.runner.RunWith; | ||||
| 
 | ||||
| import org.springframework.beans.factory.BeanCreationException; | ||||
| import org.springframework.boot.autoconfigure.AutoConfigurations; | ||||
| import org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration; | ||||
| import org.springframework.boot.test.context.ContextLoader; | ||||
| import org.springframework.boot.test.context.ApplicationContextTester; | ||||
| import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions; | ||||
| import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner; | ||||
| import org.springframework.context.annotation.Bean; | ||||
|  | @ -43,31 +44,32 @@ import static org.mockito.Mockito.mock; | |||
| @ClassPathExclusions({ "h2-*.jar", "hsqldb-*.jar", "derby-*.jar" }) | ||||
| public class TestDatabaseAutoConfigurationNoEmbeddedTests { | ||||
| 
 | ||||
| 	private final ContextLoader contextLoader = ContextLoader.standard() | ||||
| 			.config(ExistingDataSourceConfiguration.class) | ||||
| 			.autoConfig(TestDatabaseAutoConfiguration.class); | ||||
| 	private final ApplicationContextTester context = new ApplicationContextTester() | ||||
| 			.withUserConfiguration(ExistingDataSourceConfiguration.class) | ||||
| 			.withConfiguration( | ||||
| 					AutoConfigurations.of(TestDatabaseAutoConfiguration.class)); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyAnyReplace() { | ||||
| 		this.contextLoader.loadAndFail(BeanCreationException.class, ex -> { | ||||
| 			String message = ex.getMessage(); | ||||
| 			assertThat(message).contains( | ||||
| 					"Failed to replace DataSource with an embedded database for tests."); | ||||
| 			assertThat(message).contains( | ||||
| 					"If you want an embedded database please put a supported one on the " | ||||
| 							+ "classpath"); | ||||
| 			assertThat(message).contains( | ||||
| 					"or tune the replace attribute of @AutoconfigureTestDatabase."); | ||||
| 		this.context.run((loaded) -> { | ||||
| 			assertThat(loaded).getFailure().isInstanceOf(BeanCreationException.class) | ||||
| 					.hasMessageContaining( | ||||
| 							"Failed to replace DataSource with an embedded database for tests.") | ||||
| 					.hasMessageContaining( | ||||
| 							"If you want an embedded database please put a supported one on the classpath") | ||||
| 					.hasMessageContaining( | ||||
| 							"or tune the replace attribute of @AutoconfigureTestDatabase."); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyNoReplace() { | ||||
| 		this.contextLoader.env("spring.test.database.replace=NONE").load(context -> { | ||||
| 			assertThat(context.getBeansOfType(DataSource.class)).hasSize(1); | ||||
| 			assertThat(context.getBean(DataSource.class)) | ||||
| 					.isSameAs(context.getBean("myCustomDataSource")); | ||||
| 		}); | ||||
| 		this.context.withPropertyValues("spring.test.database.replace=NONE") | ||||
| 				.run((loaded) -> { | ||||
| 					assertThat(loaded).hasSingleBean(DataSource.class); | ||||
| 					assertThat(loaded).getBean(DataSource.class) | ||||
| 							.isSameAs(loaded.getBean("myCustomDataSource")); | ||||
| 				}); | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue