See More

package org.mapdb; import org.junit.Before; import org.junit.Test; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Random; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.mapdb.Serializer.BYTE_ARRAY_NOSIZE; /** * Tests contract of various implementations of Engine interface */ public abstract class EngineTest{ protected abstract ENGINE openEngine(); void reopen(){ if(!canReopen()) return; e.close(); e=openEngine(); } boolean canReopen(){return true;} boolean canRollback(){return true;} ENGINE e; @Before public void init(){ e = openEngine(); } @Test public void put_get(){ Long l = 11231203099090L; long recid = e.put(l, Serializer.LONG); assertEquals(l, e.get(recid, Serializer.LONG)); } @Test public void put_reopen_get(){ if(!canReopen()) return; Long l = 11231203099090L; long recid = e.put(l, Serializer.LONG); e.commit(); reopen(); assertEquals(l, e.get(recid, Serializer.LONG)); } @Test public void put_get_large(){ byte[] b = new byte[(int) 1e6]; new Random().nextBytes(b); long recid = e.put(b, Serializer.BYTE_ARRAY_NOSIZE); assertArrayEquals(b, e.get(recid, Serializer.BYTE_ARRAY_NOSIZE)); } @Test public void put_reopen_get_large(){ if(!canReopen()) return; byte[] b = new byte[(int) 1e6]; new Random().nextBytes(b); long recid = e.put(b, Serializer.BYTE_ARRAY_NOSIZE); e.commit(); reopen(); assertArrayEquals(b, e.get(recid, Serializer.BYTE_ARRAY_NOSIZE)); } @Test public void first_recid(){ assertEquals(Store.LAST_RESERVED_RECID+1, e.put(1,Serializer.INTEGER)); } @Test public void compact0(){ Long v1 = 129031920390121423L; Long v2 = 909090901290129990L; Long v3 = 998898989L; long recid1 = e.put(v1, Serializer.LONG); long recid2 = e.put(v2, Serializer.LONG); e.commit(); e.compact(); assertEquals(v1, e.get(recid1,Serializer.LONG)); assertEquals(v2, e.get(recid2,Serializer.LONG)); long recid3 = e.put(v3, Serializer.LONG); assertEquals(v1, e.get(recid1,Serializer.LONG)); assertEquals(v2, e.get(recid2,Serializer.LONG)); assertEquals(v3, e.get(recid3,Serializer.LONG)); e.commit(); assertEquals(v1, e.get(recid1,Serializer.LONG)); assertEquals(v2, e.get(recid2,Serializer.LONG)); assertEquals(v3, e.get(recid3,Serializer.LONG)); } @Test public void compact(){ Map recids = new HashMap(); for(Long l=0L;l<1000;l++){ recids.put(l, e.put(l, Serializer.LONG)); } e.commit(); e.compact(); for(Map.Entry m:recids.entrySet()){ Long recid= m.getValue(); Long value = m.getKey(); assertEquals(value, e.get(recid, Serializer.LONG)); } } @Test public void compact2(){ Map recids = new HashMap(); for(Long l=0L;l<1000;l++){ recids.put(l, e.put(l, Serializer.LONG)); } e.commit(); e.compact(); for(Long l=1000L;l<2000;l++){ recids.put(l, e.put(l, Serializer.LONG)); } for(Map.Entry m:recids.entrySet()){ Long recid= m.getValue(); Long value = m.getKey(); assertEquals(value, e.get(recid, Serializer.LONG)); } } @Test public void compact_large_record(){ byte[] b = new byte[100000]; long recid = e.put(b, Serializer.BYTE_ARRAY_NOSIZE); e.commit(); e.compact(); assertArrayEquals(b, e.get(recid, Serializer.BYTE_ARRAY_NOSIZE)); } @Test public void testSetGet(){ long recid = e.put((long) 10000, Serializer.LONG); Long s2 = e.get(recid, Serializer.LONG); assertEquals(s2, Long.valueOf(10000)); } @Test public void large_record(){ byte[] b = new byte[100000]; Arrays.fill(b, (byte) 111); long recid = e.put(b, BYTE_ARRAY_NOSIZE); byte[] b2 = e.get(recid, BYTE_ARRAY_NOSIZE); assertArrayEquals(b,b2); } @Test public void large_record_update(){ byte[] b = new byte[100000]; Arrays.fill(b, (byte) 111); long recid = e.put(b, BYTE_ARRAY_NOSIZE); Arrays.fill(b, (byte)222); e.update(recid, b, BYTE_ARRAY_NOSIZE); byte[] b2 = e.get(recid, BYTE_ARRAY_NOSIZE); assertArrayEquals(b,b2); e.commit(); reopen(); b2 = e.get(recid, BYTE_ARRAY_NOSIZE); assertArrayEquals(b,b2); } @Test public void large_record_delete(){ byte[] b = new byte[100000]; Arrays.fill(b, (byte) 111); long recid = e.put(b, BYTE_ARRAY_NOSIZE); e.delete(recid, BYTE_ARRAY_NOSIZE); } @Test public void large_record_larger(){ byte[] b = new byte[10000000]; Arrays.fill(b, (byte) 111); long recid = e.put(b, BYTE_ARRAY_NOSIZE); byte[] b2 = e.get(recid, BYTE_ARRAY_NOSIZE); assertArrayEquals(b,b2); e.commit(); reopen(); b2 = e.get(recid, BYTE_ARRAY_NOSIZE); assertArrayEquals(b,b2); } @Test public void test_store_reopen(){ long recid = e.put("aaa", Serializer.STRING_NOSIZE); e.commit(); reopen(); String aaa = e.get(recid, Serializer.STRING_NOSIZE); assertEquals("aaa",aaa); } @Test public void test_store_reopen_nocommit(){ long recid = e.put("aaa", Serializer.STRING_NOSIZE); e.commit(); e.update(recid,"bbb",Serializer.STRING_NOSIZE); reopen(); String expected = canRollback()&&canReopen()?"aaa":"bbb"; assertEquals(expected, e.get(recid, Serializer.STRING_NOSIZE)); } @Test public void rollback(){ long recid = e.put("aaa", Serializer.STRING_NOSIZE); e.commit(); e.update(recid, "bbb", Serializer.STRING_NOSIZE); if(!canRollback())return; e.rollback(); assertEquals("aaa",e.get(recid, Serializer.STRING_NOSIZE)); } @Test public void rollback_reopen(){ long recid = e.put("aaa", Serializer.STRING_NOSIZE); e.commit(); e.update(recid, "bbb", Serializer.STRING_NOSIZE); if(!canRollback())return; e.rollback(); assertEquals("aaa",e.get(recid, Serializer.STRING_NOSIZE)); reopen(); assertEquals("aaa",e.get(recid, Serializer.STRING_NOSIZE)); } }