package com.ctriposs.sdb;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.ctriposs.sdb.utils.TestUtil;
public class SDBUnitTest {
private static String testDir = TestUtil.TEST_BASE_DIR + "sdb_unit_test";
private static SDB db;
@Test
public void oneMillionPutGet(){
Put_Get("oneMillionPutGet", 1000000, true, 8, 128);
}
@Test
public void twoMillionPutGet(){
Put_Get("twoMillionPutGet", 2000000, true, 8, 1024);
}
private void Put_Get(String testName,int count, boolean reopen, int keyLen,int valueLen) {
System.out.print(testName + " test on \n");
db = new SDB(testDir);
String key = "";
String value = "";
if(keyLen > 0) {
key = TestUtil.randomString(keyLen);
} else {
key = TestUtil.randomString(8);
}
if(valueLen > 0) {
value = TestUtil.randomString(valueLen);
}else{
value = TestUtil.randomString(32);
}
List<String> keys = new ArrayList<String>();
// put
for(int i = 0; i < count; i++) {
db.put(TestUtil.getBytes(key + i), TestUtil.getBytes(value + i));
keys.add(key + i);
}
// stats
TestUtil.getSDBStats(db.getStats());
// close
try {
db.close();
} catch (IOException e) {
e.printStackTrace();
}
// reopen
db = new SDB(testDir);
// get & assert
for (String k : keys){
byte[] vBytes = db.get(TestUtil.getBytes(k));
String getValue = new String(vBytes);
String index = k.substring(keyLen > 0 ? keyLen : 8);
assertEquals(value+index, getValue);
}
// delete
for(String k : keys){
db.delete(TestUtil.getBytes(k));
}
// get & assert
for (String k : keys){
byte[] vBytes = db.get(TestUtil.getBytes(k));
assertNull(vBytes);
}
// stats
TestUtil.getSDBStats(db.getStats());
// close & destory
try {
db.close();
db.destory();
} catch (IOException e) {
e.printStackTrace();
}
}
}