/** * */ package com.github.seanlinwang.fkv.test; import java.io.File; import java.io.IOException; import junit.framework.Assert; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import com.github.seanlinwang.fkv.FkvImpl; /** * @author sean.wang * @since Nov 17, 2011 */ public class FkvImplTest { private static final int valueLength = 10; private static final int keyLength = 8; private static final int size = 100000; FkvImpl fkv; File dbFile; @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { dbFile = new File("/tmp/fkvtest.db"); dbFile.delete(); fkv = new FkvImpl(dbFile, size, keyLength, valueLength); } @After public void tearDown() throws Exception { fkv.close(); dbFile.delete(); } @Test public void testPut() { String key = "01234567"; String value = "0123456789"; fkv.put(key, value); Assert.assertEquals(fkv.getRecordLength() * 1, fkv.getEndIndex()); Assert.assertEquals(value, fkv.get(key)); } @Test public void testUpdate() { String key = "01234567"; String value = "0123456789"; String value2 = "9876543210"; fkv.put(key, value); Assert.assertEquals(fkv.getRecordLength() * 1, fkv.getEndIndex()); Assert.assertEquals(value, fkv.get(key)); fkv.put(key, value2); Assert.assertEquals(fkv.getRecordLength() * 1, fkv.getEndIndex()); Assert.assertEquals(value2, fkv.get(key)); } @Test public void testDelete() { String key = "01234567"; String value = "0123456789"; fkv.put(key, value); Assert.assertEquals(fkv.getRecordLength() * 1, fkv.getEndIndex()); fkv.delete(key); Assert.assertEquals(fkv.getRecordLength() * 1, fkv.getEndIndex()); Assert.assertEquals(1, fkv.getDeletedSize()); Assert.assertEquals(0, fkv.size()); Assert.assertNull(fkv.get(key)); } @Test public void testClear() { String key = "01234567"; String value = "0123456789"; fkv.put(key, value); fkv.clear(); Assert.assertNull(fkv.get(key)); } @Test public void testDeserial() throws IOException { String key = "01234567"; String value = "0123456789"; String key2 = "01234568"; String value2 = "0123456780"; fkv.put(key, value); fkv.put(key2, value2); fkv.delete(key2); fkv.close(); Assert.assertEquals(size * (keyLength + valueLength + 2), dbFile.length()); // deserial fkv = new FkvImpl(dbFile, 10000, 8, 10); Assert.assertEquals(1, fkv.size()); Assert.assertEquals(1, fkv.getDeletedSize()); Assert.assertEquals(fkv.getRecordLength() * 2, fkv.getEndIndex()); Assert.assertEquals(null, fkv.get(key2)); // key2 is deleted Assert.assertEquals(value, fkv.get(key)); Assert.assertEquals(0, fkv.getRecord(key).getIndex()); Assert.assertEquals(value, fkv.getRecord(key).getValue()); fkv.put(key, value2); Assert.assertEquals(value2, fkv.get(key)); fkv.put(key2, value2); Assert.assertEquals(value2, fkv.get(key2)); Assert.assertEquals(2, fkv.size()); Assert.assertEquals(0, fkv.getDeletedSize()); } @Test public void testPutDeleteInOneRecordSize() throws IOException { String key = "01234567"; String value = "0123456789"; fkv = new FkvImpl(dbFile, 1, 8, 10); for (int i = 0; i < 1000; i++) { fkv.put(key, value); fkv.delete(key); } } }