From dde40660b8b23f4de2b2172a5449282b69f848fc Mon Sep 17 00:00:00 2001 From: Lukasz Antoniak Date: Sat, 28 May 2011 13:44:23 +0200 Subject: [PATCH] HHH-5025 - Test case fix --- .../cache/HibernateSecLvlQueryCache.java | 46 +++++++++---------- .../src/test/resources/ehCache.xml | 7 --- .../src/test/resources/ehcache-test.xml | 14 ++++++ 3 files changed, 36 insertions(+), 31 deletions(-) delete mode 100644 hibernate-envers/src/test/resources/ehCache.xml create mode 100644 hibernate-envers/src/test/resources/ehcache-test.xml diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/cache/HibernateSecLvlQueryCache.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/cache/HibernateSecLvlQueryCache.java index 3bebfaca6c..79677dbdc7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/cache/HibernateSecLvlQueryCache.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/cache/HibernateSecLvlQueryCache.java @@ -3,31 +3,31 @@ import org.hibernate.MappingException; import org.hibernate.cache.internal.EhCacheProvider; import org.hibernate.cfg.Environment; +import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.criteria.RevisionTypeAuditExpression; import org.hibernate.envers.test.AbstractSessionTest; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.entities.StrTestEntity; -import org.hibernate.stat.Statistics; +import org.hibernate.testing.TestForIssue; +import org.junit.Assert; import org.junit.Test; -import java.io.File; import java.net.URISyntaxException; -import java.net.URL; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ public class HibernateSecLvlQueryCache extends AbstractSessionTest { + private static final String QUERY_CACHE_REGION = "queryCacheRegion"; + @Override protected void initMappings() throws MappingException, URISyntaxException { config.addAnnotatedClass(StrTestEntity.class); config.setProperty(Environment.USE_SECOND_LEVEL_CACHE, "true"); config.setProperty(Environment.USE_QUERY_CACHE, "true"); config.setProperty(Environment.CACHE_PROVIDER, EhCacheProvider.class.getName()); - URL cacheURL = Thread.currentThread().getContextClassLoader().getResource("ehCache.xml"); - config.setProperty(Environment.CACHE_PROVIDER_CONFIG, new File(cacheURL.toURI()).getAbsolutePath()); - config.setProperty(Environment.GENERATE_STATISTICS, "true"); + config.setProperty(Environment.CACHE_PROVIDER_CONFIG, "ehcache-test.xml"); } @Test @@ -38,31 +38,29 @@ public void initData() { StrTestEntity ste = new StrTestEntity("data"); getSession().persist(ste); getSession().getTransaction().commit(); + + // Evicting old query cache. + getSession().getSessionFactory().getCache().evictQueryRegion(QUERY_CACHE_REGION); } @Test - public void testSecLvlCacheWithRevisionTypeDiskPersistent() { - // Invoking the same query twice for caching purpose. - invokeSampleCachingRevTypeQuery(); - invokeSampleCachingRevTypeQuery(); - - assert getQueryCacheStatistics() > 0; - } - - private void invokeSampleCachingRevTypeQuery() { + @TestForIssue(jiraKey="HHH-5025") + public void testSecLvlCacheWithRevisionTypeDiskPersistent() throws InterruptedException { // Cached query that requires serializing RevisionType variable when persisting to disk. getAuditReader().createQuery().forEntitiesAtRevision(StrTestEntity.class, 1) .add(new RevisionTypeAuditExpression(RevisionType.ADD, "=")) - .setCacheable(true).getResultList(); + .setCacheable(true).setCacheRegion(QUERY_CACHE_REGION).getResultList(); + + // Waiting for cached data to persist to disk. + Thread.sleep(1000); + + Assert.assertTrue(getQueryCacheSize() > 0); } - private double getQueryCacheStatistics() { - Statistics stats = getSession().getSessionFactory().getStatistics(); - - double queryCacheHitCount = stats.getQueryCacheHitCount(); - double queryCacheMissCount = stats.getQueryCacheMissCount(); - double queryCacheHitRatio = queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount); - - return queryCacheHitRatio; + private int getQueryCacheSize() { + // Statistics are not notified about persisting cached data failure. However, cache entry gets evicted. + // See DiskWriteTask.call() method (net.sf.ehcache.store.compound.factories.DiskStorageFactory). + SessionFactoryImplementor sessionFactoryImplementor = (SessionFactoryImplementor) getSession().getSessionFactory(); + return sessionFactoryImplementor.getQueryCache(QUERY_CACHE_REGION).getRegion().toMap().size(); } } diff --git a/hibernate-envers/src/test/resources/ehCache.xml b/hibernate-envers/src/test/resources/ehCache.xml deleted file mode 100644 index 89a746c7be..0000000000 --- a/hibernate-envers/src/test/resources/ehCache.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/hibernate-envers/src/test/resources/ehcache-test.xml b/hibernate-envers/src/test/resources/ehcache-test.xml new file mode 100644 index 0000000000..d35fb8b048 --- /dev/null +++ b/hibernate-envers/src/test/resources/ehcache-test.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file