From e37039cefbae068a21622ca1ff98e590b747fe73 Mon Sep 17 00:00:00 2001 From: Gail Badner Date: Mon, 18 May 2015 15:27:52 -0700 Subject: [PATCH] HHH-9802 : Allow running hibernate-infispan unit tests using Infinispan 7.2.1.Final as a run-time dependency --- .../hibernate-infinispan.gradle | 6 +- .../InfinispanRegionFactoryTestCase.java | 57 +++++++++++++++---- 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/hibernate-infinispan/hibernate-infinispan.gradle b/hibernate-infinispan/hibernate-infinispan.gradle index f7373c69ce..6d9a5cf6a6 100644 --- a/hibernate-infinispan/hibernate-infinispan.gradle +++ b/hibernate-infinispan/hibernate-infinispan.gradle @@ -15,7 +15,7 @@ if ( useInfinispan7ForTesting() ) { private boolean useInfinispan7ForTesting() { if ( project.hasProperty( 'useInfinispan7ForTesting' ) ) { println 'useInfinispan7ForTesting = ' + useInfinispan7ForTesting - return useInfinispan7ForTesting.equals( 'true' ); + return useInfinispan7ForTesting.equals( 'true' ); } else { return false; @@ -57,6 +57,10 @@ test { // Use Infinispan's test JGroups stack that uses TEST_PING systemProperties['hibernate.cache.infinispan.jgroups_cfg'] = '2lc-test-tcp.xml' // systemProperties['log4j.configuration'] = 'file:/log4j/log4j-infinispan.xml' + if ( useInfinispan7ForTesting() ) { + systemProperties['hibernate.cache.infinispan.cfg'] = 'src/test/resources/infinispan-7-configs.xml'; + } + enabled = true } diff --git a/hibernate-infinispan/src/test/java/org/hibernate/test/cache/infinispan/InfinispanRegionFactoryTestCase.java b/hibernate-infinispan/src/test/java/org/hibernate/test/cache/infinispan/InfinispanRegionFactoryTestCase.java index 5022de8dc7..aa6fa2030f 100644 --- a/hibernate-infinispan/src/test/java/org/hibernate/test/cache/infinispan/InfinispanRegionFactoryTestCase.java +++ b/hibernate-infinispan/src/test/java/org/hibernate/test/cache/infinispan/InfinispanRegionFactoryTestCase.java @@ -21,6 +21,8 @@ */ package org.hibernate.test.cache.infinispan; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Properties; import javax.transaction.TransactionManager; @@ -31,10 +33,12 @@ import org.infinispan.AdvancedCache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.configuration.cache.EvictionConfiguration; import org.infinispan.configuration.global.GlobalConfigurationBuilder; import org.infinispan.eviction.EvictionStrategy; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.manager.EmbeddedCacheManager; +import org.jboss.logging.Logger; import org.junit.Test; import org.hibernate.cache.CacheException; @@ -63,6 +67,7 @@ import static org.junit.Assert.fail; * @since 3.5 */ public class InfinispanRegionFactoryTestCase { + private static final Logger log = Logger.getLogger( InfinispanRegionFactoryTestCase.class ); @Test public void testConfigurationProcessing() { @@ -158,7 +163,7 @@ public class InfinispanRegionFactoryTestCase { Configuration cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LRU, cacheCfg.eviction().strategy()); assertEquals(2000, cacheCfg.expiration().wakeUpInterval()); - assertEquals(5000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 5000, cacheCfg.eviction() ); assertEquals(60000, cacheCfg.expiration().lifespan()); assertEquals(30000, cacheCfg.expiration().maxIdle()); assertFalse(cacheCfg.jmxStatistics().enabled()); @@ -171,7 +176,7 @@ public class InfinispanRegionFactoryTestCase { cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LIRS, cacheCfg.eviction().strategy()); assertEquals(3000, cacheCfg.expiration().wakeUpInterval()); - assertEquals(20000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 20000, cacheCfg.eviction() ); assertFalse(cacheCfg.jmxStatistics().enabled()); region = (EntityRegionImpl) factory.buildEntityRegion(car, p, null); @@ -182,7 +187,7 @@ public class InfinispanRegionFactoryTestCase { cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LIRS, cacheCfg.eviction().strategy()); assertEquals(3000, cacheCfg.expiration().wakeUpInterval()); - assertEquals(20000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 20000, cacheCfg.eviction() ); assertFalse(cacheCfg.jmxStatistics().enabled()); CollectionRegionImpl collectionRegion = (CollectionRegionImpl) @@ -194,7 +199,7 @@ public class InfinispanRegionFactoryTestCase { cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LIRS, cacheCfg.eviction().strategy()); assertEquals(2500, cacheCfg.expiration().wakeUpInterval()); - assertEquals(5500, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 5500, cacheCfg.eviction() ); assertEquals(65000, cacheCfg.expiration().lifespan()); assertEquals(35000, cacheCfg.expiration().maxIdle()); assertFalse(cacheCfg.jmxStatistics().enabled()); @@ -207,7 +212,7 @@ public class InfinispanRegionFactoryTestCase { cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LRU, cacheCfg.eviction().strategy()); assertEquals(3500, cacheCfg.expiration().wakeUpInterval()); - assertEquals(25000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 25000, cacheCfg.eviction() ); assertFalse(cacheCfg.jmxStatistics().enabled()); collectionRegion = (CollectionRegionImpl) factory.buildCollectionRegion(parts, p, null); @@ -218,7 +223,7 @@ public class InfinispanRegionFactoryTestCase { cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LRU, cacheCfg.eviction().strategy()); assertEquals(3500, cacheCfg.expiration().wakeUpInterval()); - assertEquals(25000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries(25000, cacheCfg.eviction()); assertFalse(cacheCfg.jmxStatistics().enabled()); } finally { factory.stop(); @@ -244,7 +249,7 @@ public class InfinispanRegionFactoryTestCase { Configuration cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LIRS, cacheCfg.eviction().strategy()); assertEquals(3000, cacheCfg.expiration().wakeUpInterval()); - assertEquals(30000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries(30000, cacheCfg.eviction()); // Max idle value comes from base XML configuration assertEquals(100000, cacheCfg.expiration().maxIdle()); @@ -255,7 +260,7 @@ public class InfinispanRegionFactoryTestCase { cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LRU, cacheCfg.eviction().strategy()); assertEquals(3500, cacheCfg.expiration().wakeUpInterval()); - assertEquals(35000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 35000, cacheCfg.eviction() ); assertEquals(100000, cacheCfg.expiration().maxIdle()); } finally { factory.stop(); @@ -285,7 +290,7 @@ public class InfinispanRegionFactoryTestCase { Configuration cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LRU, cacheCfg.eviction().strategy()); assertEquals(3000, cacheCfg.expiration().wakeUpInterval()); - assertEquals(10000, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 10000, cacheCfg.eviction() ); assertEquals(60000, cacheCfg.expiration().lifespan()); assertEquals(30000, cacheCfg.expiration().maxIdle()); } finally { @@ -442,7 +447,7 @@ public class InfinispanRegionFactoryTestCase { Configuration cacheCfg = cache.getCacheConfiguration(); assertEquals(EvictionStrategy.LIRS, cacheCfg.eviction().strategy()); assertEquals(2222, cacheCfg.expiration().wakeUpInterval()); - assertEquals(11111, cacheCfg.eviction().maxEntries()); + assertEqualsEvictionConfigurationMaxEntries( 11111, cacheCfg.eviction() ); } finally { factory.stop(); } @@ -589,4 +594,36 @@ public class InfinispanRegionFactoryTestCase { } return properties; } + + private static void assertEqualsEvictionConfigurationMaxEntries(int maxEntriesExpected, EvictionConfiguration evictionConfiguration) { + // In Infinispan 6.0.0.Final, EvictionConfiguration.maxEntries() returns int. + // In Infinispan 7.2.1.Final, EvictionConfiguration.maxEntries() returns long. + // This method is intended to deal with this difference in return types to ensure that + // EvictionConfiguration.maxEntries() returns the correct value. + try { + final Method method = EvictionConfiguration.class.getMethod( "maxEntries" ); + log.info( EvictionConfiguration.class.getName() + "." + method.getName() + " returns " + method.getReturnType() ); + if ( int.class.isAssignableFrom( method.getReturnType() ) ) { + assertEquals( maxEntriesExpected, method.invoke( evictionConfiguration ) ); + } + else if ( long.class.isAssignableFrom( method.getReturnType() ) ) { + assertEquals( (long) maxEntriesExpected, method.invoke( evictionConfiguration ) ); + } + else { + fail( + "Unexpected return type from " + + EvictionConfiguration.class.getName() + "." + method.getName() + ": " + + method.getReturnType() ); + } + } + catch (NoSuchMethodException ex) { + fail( ex.getMessage() ); + } + catch (IllegalAccessException ex) { + fail( ex.getMessage() ); + } + catch ( InvocationTargetException ex) { + fail( ex.getMessage() ); + } + } }