package edu.brown.catalog.conflicts; import java.util.Collection; import org.voltdb.benchmark.tpcc.procedures.neworder; import org.voltdb.benchmark.tpcc.procedures.slev; import org.voltdb.catalog.Procedure; import edu.brown.BaseTestCase; import edu.brown.utils.ProjectType; public class TestConflictSetUtil extends BaseTestCase { private static final int NUM_PARTITIONS = 6; @Override protected void setUp() throws Exception { super.setUp(ProjectType.TPCC); this.addPartitions(NUM_PARTITIONS); } /** * testGetReadWriteConflicts */ public void testGetConflictProcedures() throws Exception { // We expect there to be a conflict between slev and neworder Procedure proc0 = this.getProcedure(neworder.class); Procedure proc1 = this.getProcedure(slev.class); // slev doesn't write anything, so there should be no READ-WRITE conflict Collection<Procedure> conflicts = ConflictSetUtil.getReadWriteConflicts(proc0); assertNotNull(conflicts); assertFalse(proc0+": "+conflicts.toString(), conflicts.contains(proc1)); // But it's not symmetrical, because neworder writes some stuff out conflicts = ConflictSetUtil.getReadWriteConflicts(proc1); assertNotNull(conflicts); assertFalse(conflicts.contains(proc1)); assertTrue(conflicts.contains(proc0)); } /** * testGetWriteWriteConflicts */ public void testGetWriteWriteConflicts() throws Exception { // For each Procedure that is marked as conflicting with another, // make sure that they each know about each other for (Procedure proc0 : catalog_db.getProcedures()) { Collection<Procedure> conflicts0 = ConflictSetUtil.getWriteWriteConflicts(proc0); // If the proc is read-only, then it should never have a write-write conflict if (proc0.getReadonly()) { assertEquals(proc0.getName(), 0, conflicts0.size()); } for (Procedure proc1 : conflicts0) { Collection<Procedure> conflicts1 = ConflictSetUtil.getWriteWriteConflicts(proc1); assertTrue(proc0 + "<->" + proc1, conflicts1.contains(proc0)); } // FOR } // FOR } }