@ -19,16 +19,22 @@ package org.springframework.boot.autoconfigure.cache;
@@ -19,16 +19,22 @@ package org.springframework.boot.autoconfigure.cache;
import java.io.IOException ;
import java.util.Collection ;
import java.util.Collections ;
import javax.cache.configuration.CompleteConfiguration ;
import javax.cache.configuration.MutableConfiguration ;
import javax.cache.expiry.CreatedExpiryPolicy ;
import javax.cache.expiry.Duration ;
import com.google.common.cache.CacheBuilder ;
import com.hazelcast.cache.HazelcastCachingProvider ;
import com.hazelcast.core.HazelcastInstance ;
import com.hazelcast.spring.cache.HazelcastCacheManager ;
import net.sf.ehcache.Status ;
import org.junit.After ;
import org.junit.Rule ;
import org.junit.Test ;
import org.junit.rules.ExpectedException ;
import org.springframework.beans.DirectFieldAccessor ;
import org.springframework.beans.factory.BeanCreationException ;
import org.springframework.beans.factory.NoSuchBeanDefinitionException ;
import org.springframework.boot.autoconfigure.cache.support.MockCachingProvider ;
@ -56,10 +62,6 @@ import org.springframework.core.io.Resource;
@@ -56,10 +62,6 @@ import org.springframework.core.io.Resource;
import org.springframework.data.redis.cache.RedisCacheManager ;
import org.springframework.data.redis.core.RedisTemplate ;
import com.google.common.cache.CacheBuilder ;
import com.hazelcast.cache.HazelcastCachingProvider ;
import com.hazelcast.spring.cache.HazelcastCacheManager ;
import static org.hamcrest.CoreMatchers.equalTo ;
import static org.hamcrest.CoreMatchers.instanceOf ;
import static org.hamcrest.Matchers.contains ;
@ -70,6 +72,7 @@ import static org.hamcrest.core.Is.is;
@@ -70,6 +72,7 @@ import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat ;
import static org.mockito.Mockito.mock ;
import static org.mockito.Mockito.verify ;
import static org.mockito.Mockito.when ;
/ * *
* Tests for { @link CacheAutoConfiguration } .
@ -213,6 +216,8 @@ public class CacheAutoConfigurationTests {
@@ -213,6 +216,8 @@ public class CacheAutoConfigurationTests {
"spring.cache.jcache.provider=" + cachingProviderFqn ) ;
JCacheCacheManager cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) , is ( empty ( ) ) ) ;
assertThat ( this . context . getBean ( javax . cache . CacheManager . class ) ,
is ( cacheManager . getCacheManager ( ) ) ) ;
}
@Test
@ -244,6 +249,13 @@ public class CacheAutoConfigurationTests {
@@ -244,6 +249,13 @@ public class CacheAutoConfigurationTests {
defaultCacheConfiguration ) ;
}
@Test
public void jCacheCacheWithExistingJCacheManager ( ) {
load ( JCacheCustomCacheManager . class , "spring.cache.type=jcache" ) ;
JCacheCacheManager cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheManager ( ) , is ( this . context . getBean ( "customJCacheCacheManager" ) ) ) ;
}
@Test
public void jCacheCacheWithUnknownProvider ( ) {
String wrongCachingProviderFqn = "org.acme.FooBar" ;
@ -280,36 +292,29 @@ public class CacheAutoConfigurationTests {
@@ -280,36 +292,29 @@ public class CacheAutoConfigurationTests {
@Test
public void ehCacheCacheWithCaches ( ) {
load ( DefaultCacheConfiguration . class , "spring.cache.type=ehcache" ) ;
EhCacheCacheManager cacheManager = null ;
try {
cacheManager = validateCacheManager ( EhCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) ,
containsInAnyOrder ( "cacheTest1" , "cacheTest2" ) ) ;
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
}
finally {
if ( cacheManager ! = null ) {
cacheManager . getCacheManager ( ) . shutdown ( ) ;
}
}
EhCacheCacheManager cacheManager = validateCacheManager ( EhCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) ,
containsInAnyOrder ( "cacheTest1" , "cacheTest2" ) ) ;
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
assertThat ( this . context . getBean ( net . sf . ehcache . CacheManager . class ) ,
is ( cacheManager . getCacheManager ( ) ) ) ;
}
@Test
public void ehCacheCacheWithConfig ( ) {
load ( DefaultCacheConfiguration . class , "spring.cache.type=ehcache" ,
"spring.cache.config=cache/ehcache-override.xml" ) ;
EhCacheCacheManager cacheManager = null ;
try {
cacheManager = validateCacheManager ( EhCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) ,
containsInAnyOrder ( "cacheOverrideTest1" , "cacheOverrideTest2" ) ) ;
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
}
finally {
if ( cacheManager ! = null ) {
cacheManager . getCacheManager ( ) . shutdown ( ) ;
}
}
EhCacheCacheManager cacheManager = validateCacheManager ( EhCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) ,
containsInAnyOrder ( "cacheOverrideTest1" , "cacheOverrideTest2" ) ) ;
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
}
@Test
public void ehCacheCacheWithExistingCacheManager ( ) {
load ( EhCacheCustomCacheManager . class , "spring.cache.type=ehcache" ) ;
EhCacheCacheManager cacheManager = validateCacheManager ( EhCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheManager ( ) , is ( this . context . getBean ( "customEhCacheCacheManager" ) ) ) ;
}
@Test
@ -320,6 +325,8 @@ public class CacheAutoConfigurationTests {
@@ -320,6 +325,8 @@ public class CacheAutoConfigurationTests {
cacheManager . getCache ( "defaultCache" ) ;
assertThat ( cacheManager . getCacheNames ( ) , containsInAnyOrder ( "defaultCache" ) ) ;
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 1 ) ) ;
assertThat ( this . context . getBean ( HazelcastInstance . class ) ,
is ( new DirectFieldAccessor ( cacheManager ) . getPropertyValue ( "hazelcastInstance" ) ) ) ;
}
@Test
@ -340,65 +347,49 @@ public class CacheAutoConfigurationTests {
@@ -340,65 +347,49 @@ public class CacheAutoConfigurationTests {
"spring.cache.config=foo/bar/unknown.xml" ) ;
}
@Test
public void hazelcastCacheWithExistingHazelcastInstance ( ) {
load ( HazelcastCustomHazelcastInstance . class , "spring.cache.type=hazelcast" ) ;
HazelcastCacheManager cacheManager = validateCacheManager ( HazelcastCacheManager . class ) ;
assertThat ( new DirectFieldAccessor ( cacheManager ) . getPropertyValue ( "hazelcastInstance" ) ,
is ( this . context . getBean ( "customHazelcastInstance" ) ) ) ;
}
@Test
public void hazelcastAsJCacheWithCaches ( ) {
String cachingProviderFqn = HazelcastCachingProvider . class . getName ( ) ;
JCacheCacheManager cacheManager = null ;
try {
load ( DefaultCacheConfiguration . class , "spring.cache.type=jcache" ,
"spring.cache.jcache.provider=" + cachingProviderFqn ,
"spring.cache.cacheNames[0]=foo" , "spring.cache.cacheNames[1]=bar" ) ;
cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) , containsInAnyOrder ( "foo" , "bar" ) ) ;
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
}
finally {
if ( cacheManager ! = null ) {
cacheManager . getCacheManager ( ) . close ( ) ;
}
}
load ( DefaultCacheConfiguration . class , "spring.cache.type=jcache" ,
"spring.cache.jcache.provider=" + cachingProviderFqn ,
"spring.cache.cacheNames[0]=foo" , "spring.cache.cacheNames[1]=bar" ) ;
JCacheCacheManager cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) , containsInAnyOrder ( "foo" , "bar" ) ) ;
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
}
@Test
public void hazelcastAsJCacheWithConfig ( ) throws IOException {
String cachingProviderFqn = HazelcastCachingProvider . class . getName ( ) ;
String configLocation = "org/springframework/boot/autoconfigure/cache/hazelcast-specific.xml" ;
JCacheCacheManager cacheManager = null ;
try {
load ( DefaultCacheConfiguration . class , "spring.cache.type=jcache" ,
"spring.cache.jcache.provider=" + cachingProviderFqn ,
"spring.cache.config=" + configLocation ) ;
cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
Resource configResource = new ClassPathResource ( configLocation ) ;
assertThat ( cacheManager . getCacheManager ( ) . getURI ( ) ,
is ( configResource . getURI ( ) ) ) ;
}
finally {
if ( cacheManager ! = null ) {
cacheManager . getCacheManager ( ) . close ( ) ;
}
}
load ( DefaultCacheConfiguration . class , "spring.cache.type=jcache" ,
"spring.cache.jcache.provider=" + cachingProviderFqn ,
"spring.cache.config=" + configLocation ) ;
JCacheCacheManager cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
Resource configResource = new ClassPathResource ( configLocation ) ;
assertThat ( cacheManager . getCacheManager ( ) . getURI ( ) ,
is ( configResource . getURI ( ) ) ) ;
}
@Test
public void jCacheCacheWithCachesAndCustomizer ( ) {
String cachingProviderFqn = HazelcastCachingProvider . class . getName ( ) ;
JCacheCacheManager cacheManager = null ;
try {
load ( JCacheWithCustomizerConfiguration . class , "spring.cache.type=jcache" ,
"spring.cache.jcache.provider=" + cachingProviderFqn ,
"spring.cache.cacheNames[0]=foo" , "spring.cache.cacheNames[1]=bar" ) ;
cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) , containsInAnyOrder ( "foo" , "custom1" ) ) ; // see
// customizer
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
}
finally {
if ( cacheManager ! = null ) {
cacheManager . getCacheManager ( ) . close ( ) ;
}
}
load ( JCacheWithCustomizerConfiguration . class , "spring.cache.type=jcache" ,
"spring.cache.jcache.provider=" + cachingProviderFqn ,
"spring.cache.cacheNames[0]=foo" , "spring.cache.cacheNames[1]=bar" ) ;
JCacheCacheManager cacheManager = validateCacheManager ( JCacheCacheManager . class ) ;
assertThat ( cacheManager . getCacheNames ( ) , containsInAnyOrder ( "foo" , "custom1" ) ) ; // see
// customizer
assertThat ( cacheManager . getCacheNames ( ) , hasSize ( 2 ) ) ;
}
@Test
@ -505,6 +496,19 @@ public class CacheAutoConfigurationTests {
@@ -505,6 +496,19 @@ public class CacheAutoConfigurationTests {
}
@Configuration
@EnableCaching
static class JCacheCustomCacheManager {
@Bean
public javax . cache . CacheManager customJCacheCacheManager ( ) {
javax . cache . CacheManager cacheManager = mock ( javax . cache . CacheManager . class ) ;
when ( cacheManager . getCacheNames ( ) ) . thenReturn ( Collections . < String > emptyList ( ) ) ;
return cacheManager ;
}
}
@Configuration
@EnableCaching
static class JCacheWithCustomizerConfiguration {
@ -526,6 +530,31 @@ public class CacheAutoConfigurationTests {
@@ -526,6 +530,31 @@ public class CacheAutoConfigurationTests {
}
@Configuration
@EnableCaching
static class EhCacheCustomCacheManager {
@Bean
public net . sf . ehcache . CacheManager customEhCacheCacheManager ( ) {
net . sf . ehcache . CacheManager cacheManager = mock ( net . sf . ehcache . CacheManager . class ) ;
when ( cacheManager . getStatus ( ) ) . thenReturn ( Status . STATUS_ALIVE ) ;
when ( cacheManager . getCacheNames ( ) ) . thenReturn ( new String [ 0 ] ) ;
return cacheManager ;
}
}
@Configuration
@EnableCaching
static class HazelcastCustomHazelcastInstance {
@Bean
public HazelcastInstance customHazelcastInstance ( ) {
return mock ( HazelcastInstance . class ) ;
}
}
@Configuration
@Import ( { GenericCacheConfiguration . class , RedisCacheConfiguration . class } )
static class CustomCacheManagerConfiguration {