package org.infinispan.api;
import static org.testng.AssertJUnit.assertEquals;
import java.util.Map;
import javax.transaction.NotSupportedException;
import javax.transaction.SystemException;
import javax.transaction.TransactionManager;
import org.infinispan.commons.util.CloseableIterator;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.infinispan.util.concurrent.IsolationLevel;
import org.testng.annotations.Test;
/**
* @author William Burns
* @since 7.2
*/
@Test (groups = "functional", testName = "api.APITxTest")
public class APITxTest extends APINonTxTest {
@Override
protected EmbeddedCacheManager createCacheManager() throws Exception {
// start a single cache instance
ConfigurationBuilder c = getDefaultStandaloneCacheConfig(true);
c.locking().isolationLevel(IsolationLevel.READ_COMMITTED);
EmbeddedCacheManager cm = TestCacheManagerFactory.createCacheManager(false);
cm.defineConfiguration("test", c.build());
cache = cm.getCache("test");
return cm;
}
public void testSizeInExplicitTxWithNonExistent() throws SystemException, NotSupportedException {
assertEquals(0, cache.size());
cache.put("k", "v");
TransactionManager tm1 = TestingUtil.getTransactionManager(cache);
tm1.begin();
try {
cache.get("no-exist");
assertEquals(1, cache.size());
cache.put("no-exist", "value");
assertEquals(2, cache.size());
} finally {
tm1.rollback();
}
}
public void testSizeInExplicitTxWithRemoveNonExistent() throws SystemException, NotSupportedException {
assertEquals(0, cache.size());
cache.put("k", "v");
TransactionManager tm1 = TestingUtil.getTransactionManager(cache);
tm1.begin();
try {
cache.remove("no-exist");
assertEquals(1, cache.size());
cache.put("no-exist", "value");
assertEquals(2, cache.size());
} finally {
tm1.rollback();
}
}
public void testSizeInExplicitTxWithRemoveExistent() throws SystemException, NotSupportedException {
assertEquals(0, cache.size());
cache.put("k", "v");
TransactionManager tm1 = TestingUtil.getTransactionManager(cache);
tm1.begin();
try {
cache.put("exist", "value");
assertEquals(2, cache.size());
cache.remove("exist");
assertEquals(1, cache.size());
} finally {
tm1.rollback();
}
}
public void testSizeInExplicitTx() throws SystemException, NotSupportedException {
assertEquals(0, cache.size());
cache.put("k", "v");
TransactionManager tm1 = TestingUtil.getTransactionManager(cache);
tm1.begin();
try {
assertEquals(1, cache.size());
} finally {
tm1.rollback();
}
}
public void testSizeInExplicitTxWithModification() throws SystemException, NotSupportedException {
assertEquals(0, cache.size());
cache.put("k1", "v1");
TransactionManager tm1 = TestingUtil.getTransactionManager(cache);
tm1.begin();
try {
cache.put("k2", "v2");
assertEquals(2, cache.size());
} finally {
tm1.rollback();
}
}
public void testEntrySetIteratorRemoveInExplicitTx() throws SystemException, NotSupportedException {
assertEquals(0, cache.size());
cache.put("k1", "v1");
TransactionManager tm1 = TestingUtil.getTransactionManager(cache);
tm1.begin();
try {
try (CloseableIterator<Map.Entry<Object, Object>> entryIterator = cache.entrySet().iterator()) {
entryIterator.next();
entryIterator.remove();
assertEquals(0, cache.size());
}
} finally {
tm1.rollback();
}
}
public void testKeySetIteratorRemoveInExplicitTx() throws SystemException, NotSupportedException {
assertEquals(0, cache.size());
cache.put("k1", "v1");
TransactionManager tm1 = TestingUtil.getTransactionManager(cache);
tm1.begin();
try {
try (CloseableIterator<Object> entryIterator = cache.keySet().iterator()) {
entryIterator.next();
entryIterator.remove();
assertEquals(0, cache.size());
}
} finally {
tm1.rollback();
}
}
}