package org.mapdb; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.Map; import static org.junit.Assert.assertEquals; /* * check that `IllegalAccessError` is thrown after DB was closed */ public abstract class ClosedThrowsExceptionTest { abstract DB db(); DB db; @Before public void init(){ db = db(); } @After public void close(){ db = null; } static public class Def extends ClosedThrowsExceptionTest{ @Override DB db() { return DBMaker.memoryDB().transactionEnable().make(); } } static public class NoCache extends ClosedThrowsExceptionTest{ @Override DB db() { return DBMaker.memoryDB().transactionEnable().make(); } } //TODO enable once Async Write is enabled // static public class Async extends ClosedThrowsExceptionTest{ // @Override DB db() { // return DBMaker.memoryDB().asyncWriteEnable().make(); // } // } // // // static public class HardRefCache extends ClosedThrowsExceptionTest{ // @Override DB db() { // return DBMaker.memoryDB().cacheHardRefEnable().make(); // } // } // // static public class TX extends ClosedThrowsExceptionTest{ // @Override DB db() { // return DBMaker.memoryDB().makeTxMaker().makeTx(); // } // } // // static public class storeHeap extends ClosedThrowsExceptionTest{ // @Override DB db() { // return new DB(new StoreHeap(true,CC.DEFAULT_LOCK_SCALE,0,false)); // } // } @Test(expected = IllegalAccessError.class) public void closed_getHashMap(){ db.hashMap("test").createOrOpen(); db.close(); db.hashMap("test").createOrOpen(); } @Test() public void closed_getNamed(){ db.hashMap("test").createOrOpen(); db.close(); assertEquals(null, db.getNameForObject("test")); } @Test(expected = IllegalAccessError.class) public void closed_put(){ Map m = db.hashMap("test").create(); db.close(); m.put("aa","bb"); } @Test(expected = IllegalAccessError.class) public void closed_remove(){ Map m = db.hashMap("test").create(); m.put("aa","bb"); db.close(); m.remove("aa"); } @Test public void closed_close(){ Map m = db.hashMap("test").create(); m.put("aa","bb"); db.close(); db.close(); } @Test(expected = IllegalAccessError.class) public void closed_rollback(){ Map m = db.hashMap("test").create(); m.put("aa","bb"); db.close(); db.rollback(); } @Test(expected = IllegalAccessError.class) public void closed_commit(){ Map m = db.hashMap("test").create(); m.put("aa","bb"); db.close(); db.commit(); } @Test public void closed_is_closed(){ Map m = db.hashMap("test").create(); m.put("aa","bb"); db.close(); assertEquals(true,db.isClosed()); } @Test(expected = IllegalAccessError.class) public void closed_engine_get(){ long recid = db.getStore().put("aa",Serializer.STRING); db.close(); db.getStore().get(recid,Serializer.STRING); } @Test(expected = IllegalAccessError.class) public void closed_engine_put(){ db.close(); long recid = db.getStore().put("aa",Serializer.STRING); } @Test(expected = IllegalAccessError.class) public void closed_engine_update(){ long recid = db.getStore().put("aa",Serializer.STRING); db.close(); db.getStore().update(recid, "aax", Serializer.STRING); } @Test(expected = IllegalAccessError.class) public void closed_engine_delete(){ long recid = db.getStore().put("aa",Serializer.STRING); db.close(); db.getStore().delete(recid, Serializer.STRING); } }