package org.infinispan.configuration; import static org.infinispan.test.TestingUtil.withCacheManager; import static org.testng.Assert.assertEquals; import org.infinispan.Cache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.test.CacheManagerCallable; import org.infinispan.test.SingleCacheManagerTest; import org.infinispan.test.fwk.TestCacheManagerFactory; import org.infinispan.transaction.TransactionMode; import org.infinispan.transaction.lookup.EmbeddedTransactionManagerLookup; import org.testng.annotations.Test; /** * @author Mircea Markus * @since 5.1 */ @Test (groups = "functional", testName = "config.TransactionalCacheConfigTest") public class TransactionalCacheConfigTest extends SingleCacheManagerTest { @Override protected EmbeddedCacheManager createCacheManager() throws Exception { return TestCacheManagerFactory.createCacheManager(getDefaultStandaloneCacheConfig(true)); } public void test() { final ConfigurationBuilder c = TestCacheManagerFactory.getDefaultCacheConfiguration(false); assert !c.build().transaction().transactionMode().isTransactional(); c.transaction().transactionMode(TransactionMode.TRANSACTIONAL); assert c.build().transaction().transactionMode().isTransactional(); c.transaction().transactionMode(TransactionMode.NON_TRANSACTIONAL); assert !c.build().transaction().transactionMode().isTransactional(); } public void testTransactionModeOverride() { ConfigurationBuilder c = new ConfigurationBuilder(); c.transaction().transactionMode(TransactionMode.NON_TRANSACTIONAL); assertEquals(TransactionMode.TRANSACTIONAL, cacheManager.getCache().getCacheConfiguration().transaction().transactionMode()); cacheManager.defineConfiguration("nonTx", c.build()); assertEquals(TransactionMode.NON_TRANSACTIONAL, cacheManager.getCache("nonTx").getCacheConfiguration().transaction().transactionMode()); } public void testDefaults() { Configuration c = new ConfigurationBuilder().build(); assert !c.transaction().transactionMode().isTransactional(); c = TestCacheManagerFactory.getDefaultCacheConfiguration(false).build(); assert !c.transaction().transactionMode().isTransactional(); c = TestCacheManagerFactory.getDefaultCacheConfiguration(true).build(); assert c.transaction().transactionMode().isTransactional(); c = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, false).build(); assert !c.transaction().transactionMode().isTransactional(); c = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, true).build(); assert c.transaction().transactionMode().isTransactional(); } public void testTransactionalityInduced() { ConfigurationBuilder cb = new ConfigurationBuilder(); Configuration c = cb.build(); assert !c.transaction().transactionMode().isTransactional(); c = cb.transaction().transactionManagerLookup(new EmbeddedTransactionManagerLookup()).build(); assert c.transaction().transactionMode().isTransactional(); cb = new ConfigurationBuilder(); cb.invocationBatching().enable(); assert cb.build().transaction().transactionMode().isTransactional(); } public void testInvocationBatchingAndInducedTm() { final ConfigurationBuilder cb = new ConfigurationBuilder(); cb.invocationBatching().enable(); assert cb.build().transaction().transactionMode().isTransactional(); withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager(cb)){ @Override public void call() { assert cm.getCache().getAdvancedCache().getTransactionManager() != null; } }); } public void testOverride() { final ConfigurationBuilder c = new ConfigurationBuilder(); c.transaction().transactionMode(TransactionMode.TRANSACTIONAL) .transactionManagerLookup(new EmbeddedTransactionManagerLookup()); withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()){ @Override public void call() { cm.defineConfiguration("transactional", c.build()); Cache<?, ?> cache = cm.getCache("transactional"); assert cache.getCacheConfiguration().transaction().transactionMode().isTransactional(); } }); } public void testBatchingAndTransactionalCache() { ConfigurationBuilder cb = new ConfigurationBuilder(); cb.invocationBatching().enable(); final Configuration c = cb.build(); assert c.invocationBatching().enabled(); assert c.transaction().transactionMode().isTransactional(); withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()) { @Override public void call() { assert !cm.getCache().getCacheConfiguration().transaction().transactionMode().isTransactional(); cm.defineConfiguration("a", c); final Cache<Object, Object> a = cm.getCache("a"); assert a.getCacheConfiguration().invocationBatching().enabled(); assert a.getCacheConfiguration().transaction().transactionMode().isTransactional(); } }); } }