Author: cbredesen
Date: 2009-06-12 10:34:14 -0400 (Fri, 12 Jun 2009)
New Revision: 16772
Added:
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/AbstractCacheTestCase.java
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseRegionFactoryTestCase.java
Modified:
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseCacheProviderTestCase.java
Log:
Refactored to allow for RegionFactory configuration
Added:
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/AbstractCacheTestCase.java
===================================================================
---
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/AbstractCacheTestCase.java
(rev 0)
+++
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/AbstractCacheTestCase.java 2009-06-12
14:34:14 UTC (rev 16772)
@@ -0,0 +1,198 @@
+package org.hibernate.test.cache;
+
+import java.util.Map;
+
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.cache.ReadWriteCache;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.stat.SecondLevelCacheStatistics;
+import org.hibernate.stat.Statistics;
+import org.hibernate.test.tm.ConnectionProviderImpl;
+import org.hibernate.test.tm.TransactionManagerLookupImpl;
+import org.hibernate.transaction.JDBCTransactionFactory;
+
+public abstract class AbstractCacheTestCase extends FunctionalTestCase {
+
+ public AbstractCacheTestCase( String string ) {
+ super( string );
+ }
+
+ public String[] getMappings() {
+ return new String[] { "cache/Item.hbm.xml" };
+ }
+
+ public void configure( Configuration cfg ) {
+ super.configure( cfg );
+ cfg.setProperty( Environment.CACHE_REGION_PREFIX, "" );
+ cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "true" );
+ cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
+ cfg.setProperty( Environment.USE_STRUCTURED_CACHE, "true" );
+
+ if ( getConfigResourceKey() != null ) {
+ cfg.setProperty( getConfigResourceKey(), getConfigResourceLocation() );
+ }
+
+ if ( useTransactionManager() ) {
+ cfg.setProperty( Environment.CONNECTION_PROVIDER,
ConnectionProviderImpl.class.getName() );
+ cfg.setProperty( Environment.TRANSACTION_MANAGER_STRATEGY,
TransactionManagerLookupImpl.class.getName() );
+ }
+ else {
+ cfg.setProperty( Environment.TRANSACTION_STRATEGY,
JDBCTransactionFactory.class.getName() );
+ }
+ }
+
+ /**
+ * For provider-specific configuration, the name of the property key the
+ * provider expects.
+ *
+ * @return The provider-specific config key.
+ */
+ protected abstract String getConfigResourceKey();
+
+ /**
+ * For provider-specific configuration, the resource location of that
+ * config resource.
+ *
+ * @return The config resource location.
+ */
+ protected abstract String getConfigResourceLocation();
+
+ /**
+ * Should we use a transaction manager for transaction management.
+ *
+ * @return True if we should use a RM; false otherwise.
+ */
+ protected abstract boolean useTransactionManager();
+
+ public void testQueryCacheInvalidation() {
+ Session s = openSession();
+ Transaction t = s.beginTransaction();
+ Item i = new Item();
+ i.setName("widget");
+ i.setDescription("A really top-quality, full-featured widget.");
+ s.persist(i);
+ t.commit();
+ s.close();
+
+ SecondLevelCacheStatistics slcs = s.getSessionFactory().getStatistics()
+ .getSecondLevelCacheStatistics( Item.class.getName() );
+
+ assertEquals( slcs.getPutCount(), 1 );
+ assertEquals( slcs.getElementCountInMemory(), 1 );
+ assertEquals( slcs.getEntries().size(), 1 );
+
+ s = openSession();
+ t = s.beginTransaction();
+ i = (Item) s.get( Item.class, i.getId() );
+
+ assertEquals( slcs.getHitCount(), 1 );
+ assertEquals( slcs.getMissCount(), 0 );
+
+ i.setDescription("A bog standard item");
+
+ t.commit();
+ s.close();
+
+ assertEquals( slcs.getPutCount(), 2 );
+
+ Object entry = slcs.getEntries().get( i.getId() );
+ Map map;
+ if ( entry instanceof ReadWriteCache.Item ) {
+ map = (Map) ( (ReadWriteCache.Item) entry ).getValue();
+ }
+ else {
+ map = (Map) entry;
+ }
+ assertTrue( map.get("description").equals("A bog standard item")
);
+ assertTrue( map.get("name").equals("widget") );
+
+ // cleanup
+ s = openSession();
+ t = s.beginTransaction();
+ s.delete( i );
+ t.commit();
+ s.close();
+ }
+
+ public void testEmptySecondLevelCacheEntry() throws Exception {
+ getSessions().evictEntity( Item.class.getName() );
+ Statistics stats = getSessions().getStatistics();
+ stats.clear();
+ SecondLevelCacheStatistics statistics = stats.getSecondLevelCacheStatistics(
Item.class.getName() );
+ Map cacheEntries = statistics.getEntries();
+ assertEquals( 0, cacheEntries.size() );
+ }
+
+ public void testStaleWritesLeaveCacheConsistent() {
+ Session s = openSession();
+ Transaction txn = s.beginTransaction();
+ VersionedItem item = new VersionedItem();
+ item.setName( "steve" );
+ item.setDescription( "steve's item" );
+ s.save( item );
+ txn.commit();
+ s.close();
+
+ Long initialVersion = item.getVersion();
+
+ // manually revert the version property
+ item.setVersion( new Long( item.getVersion().longValue() - 1 ) );
+
+ try {
+ s = openSession();
+ txn = s.beginTransaction();
+ s.update( item );
+ txn.commit();
+ s.close();
+ fail( "expected stale write to fail" );
+ }
+ catch( Throwable expected ) {
+ // expected behavior here
+ if ( txn != null ) {
+ try {
+ txn.rollback();
+ }
+ catch( Throwable ignore ) {
+ }
+ }
+ }
+ finally {
+ if ( s != null && s.isOpen() ) {
+ try {
+ s.close();
+ }
+ catch( Throwable ignore ) {
+ }
+ }
+ }
+
+ // check the version value in the cache...
+ SecondLevelCacheStatistics slcs = sfi().getStatistics()
+ .getSecondLevelCacheStatistics( VersionedItem.class.getName() );
+
+ Object entry = slcs.getEntries().get( item.getId() );
+ Long cachedVersionValue;
+ if ( entry instanceof ReadWriteCache.Lock ) {
+ //FIXME don't know what to test here
+ cachedVersionValue = new Long( ( (ReadWriteCache.Lock) entry).getUnlockTimestamp() );
+ }
+ else {
+ cachedVersionValue = ( Long ) ( (Map) entry ).get( "_version" );
+ assertEquals( initialVersion.longValue(), cachedVersionValue.longValue() );
+ }
+
+
+ // cleanup
+ s = openSession();
+ txn = s.beginTransaction();
+ item = ( VersionedItem ) s.load( VersionedItem.class, item.getId() );
+ s.delete( item );
+ txn.commit();
+ s.close();
+
+ }
+
+}
\ No newline at end of file
Modified:
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseCacheProviderTestCase.java
===================================================================
---
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseCacheProviderTestCase.java 2009-06-12
14:33:00 UTC (rev 16771)
+++
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseCacheProviderTestCase.java 2009-06-12
14:34:14 UTC (rev 16772)
@@ -23,26 +23,15 @@
*/
package org.hibernate.test.cache;
-import java.util.Map;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cache.ReadWriteCache;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
-import org.hibernate.junit.functional.FunctionalTestCase;
-import org.hibernate.stat.SecondLevelCacheStatistics;
-import org.hibernate.stat.Statistics;
-import org.hibernate.test.tm.ConnectionProviderImpl;
-import org.hibernate.test.tm.TransactionManagerLookupImpl;
-import org.hibernate.transaction.JDBCTransactionFactory;
/**
* Common requirement testing for each {@link org.hibernate.cache.CacheProvider} impl.
*
* @author Steve Ebersole
*/
-public abstract class BaseCacheProviderTestCase extends FunctionalTestCase {
+public abstract class BaseCacheProviderTestCase extends AbstractCacheTestCase {
// note that a lot of the fucntionality here is intended to be used
// in creating specific tests for each CacheProvider that would extend
@@ -52,29 +41,9 @@
super( x );
}
- public String[] getMappings() {
- return new String[] { "cache/Item.hbm.xml" };
- }
-
- public void configure(Configuration cfg) {
+ public void configure( Configuration cfg ) {
super.configure( cfg );
- cfg.setProperty( Environment.CACHE_REGION_PREFIX, "" );
- cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "true" );
- cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
- cfg.setProperty( Environment.USE_STRUCTURED_CACHE, "true" );
cfg.setProperty( Environment.CACHE_PROVIDER, getCacheProvider().getName() );
-
- if ( getConfigResourceKey() != null ) {
- cfg.setProperty( getConfigResourceKey(), getConfigResourceLocation() );
- }
-
- if ( useTransactionManager() ) {
- cfg.setProperty( Environment.CONNECTION_PROVIDER,
ConnectionProviderImpl.class.getName() );
- cfg.setProperty( Environment.TRANSACTION_MANAGER_STRATEGY,
TransactionManagerLookupImpl.class.getName() );
- }
- else {
- cfg.setProperty( Environment.TRANSACTION_STRATEGY,
JDBCTransactionFactory.class.getName() );
- }
}
/**
@@ -83,156 +52,4 @@
* @return The cache provider.
*/
protected abstract Class getCacheProvider();
-
- /**
- * For provider-specific configuration, the name of the property key the
- * provider expects.
- *
- * @return The provider-specific config key.
- */
- protected abstract String getConfigResourceKey();
-
- /**
- * For provider-specific configuration, the resource location of that
- * config resource.
- *
- * @return The config resource location.
- */
- protected abstract String getConfigResourceLocation();
-
- /**
- * Should we use a transaction manager for transaction management.
- *
- * @return True if we should use a RM; false otherwise.
- */
- protected abstract boolean useTransactionManager();
-
-
- public void testQueryCacheInvalidation() {
- Session s = openSession();
- Transaction t = s.beginTransaction();
- Item i = new Item();
- i.setName("widget");
- i.setDescription("A really top-quality, full-featured widget.");
- s.persist(i);
- t.commit();
- s.close();
-
- SecondLevelCacheStatistics slcs = s.getSessionFactory().getStatistics()
- .getSecondLevelCacheStatistics( Item.class.getName() );
-
- assertEquals( slcs.getPutCount(), 1 );
- assertEquals( slcs.getElementCountInMemory(), 1 );
- assertEquals( slcs.getEntries().size(), 1 );
-
- s = openSession();
- t = s.beginTransaction();
- i = (Item) s.get( Item.class, i.getId() );
-
- assertEquals( slcs.getHitCount(), 1 );
- assertEquals( slcs.getMissCount(), 0 );
-
- i.setDescription("A bog standard item");
-
- t.commit();
- s.close();
-
- assertEquals( slcs.getPutCount(), 2 );
-
- Object entry = slcs.getEntries().get( i.getId() );
- Map map;
- if ( entry instanceof ReadWriteCache.Item ) {
- map = (Map) ( (ReadWriteCache.Item) entry ).getValue();
- }
- else {
- map = (Map) entry;
- }
- assertTrue( map.get("description").equals("A bog standard item")
);
- assertTrue( map.get("name").equals("widget") );
-
- // cleanup
- s = openSession();
- t = s.beginTransaction();
- s.delete( i );
- t.commit();
- s.close();
- }
-
- public void testEmptySecondLevelCacheEntry() throws Exception {
- getSessions().evictEntity( Item.class.getName() );
- Statistics stats = getSessions().getStatistics();
- stats.clear();
- SecondLevelCacheStatistics statistics = stats.getSecondLevelCacheStatistics(
Item.class.getName() );
- Map cacheEntries = statistics.getEntries();
- assertEquals( 0, cacheEntries.size() );
- }
-
- public void testStaleWritesLeaveCacheConsistent() {
- Session s = openSession();
- Transaction txn = s.beginTransaction();
- VersionedItem item = new VersionedItem();
- item.setName( "steve" );
- item.setDescription( "steve's item" );
- s.save( item );
- txn.commit();
- s.close();
-
- Long initialVersion = item.getVersion();
-
- // manually revert the version property
- item.setVersion( new Long( item.getVersion().longValue() - 1 ) );
-
- try {
- s = openSession();
- txn = s.beginTransaction();
- s.update( item );
- txn.commit();
- s.close();
- fail( "expected stale write to fail" );
- }
- catch( Throwable expected ) {
- // expected behavior here
- if ( txn != null ) {
- try {
- txn.rollback();
- }
- catch( Throwable ignore ) {
- }
- }
- }
- finally {
- if ( s != null && s.isOpen() ) {
- try {
- s.close();
- }
- catch( Throwable ignore ) {
- }
- }
- }
-
- // check the version value in the cache...
- SecondLevelCacheStatistics slcs = sfi().getStatistics()
- .getSecondLevelCacheStatistics( VersionedItem.class.getName() );
-
- Object entry = slcs.getEntries().get( item.getId() );
- Long cachedVersionValue;
- if ( entry instanceof ReadWriteCache.Lock ) {
- //FIXME don't know what to test here
- cachedVersionValue = new Long( ( (ReadWriteCache.Lock) entry).getUnlockTimestamp() );
- }
- else {
- cachedVersionValue = ( Long ) ( (Map) entry ).get( "_version" );
- assertEquals( initialVersion.longValue(), cachedVersionValue.longValue() );
- }
-
-
- // cleanup
- s = openSession();
- txn = s.beginTransaction();
- item = ( VersionedItem ) s.load( VersionedItem.class, item.getId() );
- s.delete( item );
- txn.commit();
- s.close();
-
- }
-}
+}
\ No newline at end of file
Added:
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseRegionFactoryTestCase.java
===================================================================
---
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseRegionFactoryTestCase.java
(rev 0)
+++
core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache/BaseRegionFactoryTestCase.java 2009-06-12
14:34:14 UTC (rev 16772)
@@ -0,0 +1,57 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2007, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+package org.hibernate.test.cache;
+
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+
+/**
+ * Common requirement testing for each {@link org.hibernate.cache.RegionFactory} impl.
+ *
+ * @author Chris Bredesen
+ */
+public abstract class BaseRegionFactoryTestCase extends AbstractCacheTestCase {
+
+ // note that a lot of the fucntionality here is intended to be used
+ // in creating specific tests for each CacheProvider that would extend
+ // from a base test case (this) for common requirement testing...
+
+ public BaseRegionFactoryTestCase(String x) {
+ super( x );
+ }
+
+
+ public void configure( Configuration cfg ) {
+ super.configure( cfg );
+ String s = getRegionFactory().getClass().getName();
+ cfg.setProperty( Environment.CACHE_REGION_FACTORY, getRegionFactory().getName() );
+ }
+
+ /**
+ * The region factory to be tested.
+ *
+ * @return The region factory class..
+ */
+ protected abstract Class getRegionFactory();
+}
\ No newline at end of file