[hibernate-commits] Hibernate SVN: r16772 - core/branches/INFINISPAN/testing/src/main/java/org/hibernate/test/cache.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Jun 12 10:34:14 EDT 2009


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




More information about the hibernate-commits mailing list