package siena.base.test; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import siena.PersistenceManager; import siena.PersistenceManagerFactory; import siena.sdb.SdbPersistenceManager; import siena.core.options.PmOption; import siena.core.options.PmOptionStickiness; import siena.sdb.PmOptionSdbReadConsistency; public abstract class SDBTestOption extends TestCase { protected SdbPersistenceManager sdb; List<Class<?>> classes = new ArrayList<Class<?>>(); public abstract void init(); public abstract void createClasses(List<Class<?>> classes); public abstract PersistenceManager createPersistenceManager(List<Class<?>> classes) throws Exception; public abstract void postInit(); public abstract boolean supportsAutoincrement(); public abstract boolean supportsMultipleKeys(); public abstract boolean supportsDeleteException(); public abstract boolean supportsSearchStart(); public abstract boolean supportsSearchEnd(); public abstract boolean supportsTransaction(); public abstract boolean supportsListStore(); @Override protected void setUp() throws Exception { super.setUp(); sdb = new SdbPersistenceManager(); sdb.init(SimpleDBConfig.getSienaAWSProperties()); } public void testNonSticky() { PmOption opt; opt = sdb.option(PmOptionSdbReadConsistency.ID); assertTrue(opt == null); sdb.option(SdbPersistenceManager.CONSISTENT_READ); opt = sdb.option(PmOptionSdbReadConsistency.ID); assertTrue(opt != null); assertTrue(opt instanceof PmOptionSdbReadConsistency); assertEquals(SdbPersistenceManager.CONSISTENT_READ, opt); } public void testLocalPriority() { PmOption opt; sdb.option(SdbPersistenceManager.NOT_CONSISTENT_READ, PmOptionStickiness.NOT_STICKY); sdb.option(SdbPersistenceManager.CONSISTENT_READ, PmOptionStickiness.STICKY); opt = sdb.option(PmOptionSdbReadConsistency.ID); assertTrue(opt != null); assertTrue(opt instanceof PmOptionSdbReadConsistency); assertEquals(SdbPersistenceManager.NOT_CONSISTENT_READ, opt); } public void testThread() throws java.lang.InterruptedException { sdb.option(SdbPersistenceManager.CONSISTENT_READ, PmOptionStickiness.STICKY); MyOptionRunner r = new MyOptionRunner(sdb, true); Thread t = new Thread(r); t.start(); t.wait(1000); } private class MyOptionRunner implements Runnable { public MyOptionRunner(SdbPersistenceManager sdb, boolean isReadConsistent) { m_sdb = sdb; this.isReadConsistent = isReadConsistent; } public void run() { assertEquals(isReadConsistent, m_sdb.isReadConsistent()); } private SdbPersistenceManager m_sdb; private boolean isReadConsistent; } }