package org.infinispan.api.mvcc.read_committed;
import static org.testng.AssertJUnit.assertEquals;
import javax.transaction.Transaction;
import org.infinispan.Cache;
import org.infinispan.api.mvcc.LockTestBase;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "api.mvcc.read_committed.ReadCommittedLockTest")
public class ReadCommittedLockTest extends LockTestBase {
public ReadCommittedLockTest() {
repeatableRead = false;
}
public void testVisibilityOfCommittedDataPut() throws Exception {
Cache<String, String> c = lockTestData.cache;
c.put("k", "v");
assertEquals("v", c.get("k"));
// start a tx and read K
lockTestData.tm.begin();
assertEquals("v", c.get("k"));
assertEquals("v", c.get("k"));
Transaction reader = lockTestData.tm.suspend();
lockTestData.tm.begin();
c.put("k", "v2");
Transaction writer = lockTestData.tm.suspend();
lockTestData.tm.resume(reader);
assertEquals("Should not read uncommitted data", "v", c.get("k"));
reader = lockTestData.tm.suspend();
lockTestData.tm.resume(writer);
lockTestData.tm.commit();
lockTestData.tm.resume(reader);
assertEquals("Should read committed data", "v2", c.get("k"));
lockTestData.tm.commit();
}
public void testVisibilityOfCommittedDataReplace() throws Exception {
Cache<String, String> c = lockTestData.cache;
c.put("k", "v");
assertEquals("v", c.get("k"));
// start a tx and read K
lockTestData.tm.begin();
assertEquals("v", c.get("k"));
assertEquals("v", c.get("k"));
Transaction reader = lockTestData.tm.suspend();
lockTestData.tm.begin();
c.replace("k", "v2");
Transaction writer = lockTestData.tm.suspend();
lockTestData.tm.resume(reader);
assertEquals("Should not read uncommitted data", "v", c.get("k"));
reader = lockTestData.tm.suspend();
lockTestData.tm.resume(writer);
lockTestData.tm.commit();
lockTestData.tm.resume(reader);
assertEquals("Should read committed data", "v2", c.get("k"));
lockTestData.tm.commit();
}
@Override
public void testConcurrentWriters() throws Exception {
super.testConcurrentWriters();
}
}