package com.ikokoon.serenity.persistence;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.ikokoon.serenity.ATest;
import com.ikokoon.serenity.model.Class;
import com.ikokoon.serenity.model.Composite;
import com.ikokoon.serenity.model.Line;
import com.ikokoon.serenity.model.Method;
import com.ikokoon.serenity.model.Package;
import com.ikokoon.toolkit.Toolkit;
public class DataBaseOdbTest extends ATest {
private IDataBase dataBase;
private File dataBaseFile = new File("./src/test/resources/DataBaseOdbTest.odb");
@Before
public void clear() {
dataBase = IDataBase.DataBaseManager.getDataBase(DataBaseOdb.class, dataBaseFile.getAbsolutePath(), mockInternalDataBase);
DataBaseToolkit.clear(dataBase);
}
@After
public void close() {
dataBase.close();
Toolkit.deleteFile(dataBaseFile, 3);
}
@Test
@SuppressWarnings("unchecked")
public void persist() {
Package pakkage = getPackage();
dataBase.persist(pakkage);
pakkage = (Package) dataBase.find(Package.class, pakkage.getId());
assertNotNull(pakkage);
Long classId = ((Class) pakkage.getChildren().get(0)).getId();
Class klass = (Class) dataBase.find(Class.class, classId);
assertNotNull(klass);
}
@Test
@SuppressWarnings("unchecked")
public void findId() {
DataBaseToolkit.dump(dataBase, new DataBaseToolkit.ICriteria() {
public boolean satisfied(Composite<?, ?> composite) {
return true;
}
}, this.getClass().getSimpleName() + " database dump : ");
Package pakkage = getPackage();
dataBase.persist(pakkage);
// 7873017250689681547, 437917821655607927
Line line = (Line) dataBase.find(Line.class, 7873017250689681547l);
assertNotNull(line);
}
@Test
@SuppressWarnings("unchecked")
public void findParameters() {
Package pakkage = getPackage();
dataBase.persist(pakkage);
List<Object> parameters = new ArrayList<Object>();
parameters.add(packageName);
pakkage = (Package) dataBase.find(Package.class, parameters);
assertNotNull(pakkage);
parameters.clear();
parameters.add(className);
Class klass = (Class) dataBase.find(Class.class, parameters);
assertNotNull(klass);
parameters.clear();
parameters.add(klass.getName());
parameters.add(methodName);
parameters.add(methodDescription);
Method method = (Method) dataBase.find(Method.class, parameters);
assertNotNull(method);
parameters.clear();
parameters.add(klass.getName());
parameters.add(method.getName());
parameters.add(lineNumber);
Line line = (Line) dataBase.find(Line.class, parameters);
assertNotNull(line);
}
@Test
@SuppressWarnings("unchecked")
public void removeId() throws Exception {
// java.lang.Class<T> klass, Long id
Package pakkage = getPackage();
dataBase.persist(pakkage);
Class klass = (Class) pakkage.getChildren().iterator().next();
klass = (Class) dataBase.find(Class.class, klass.getId());
assertNotNull(klass);
dataBase.remove(Class.class, klass.getId());
klass = (Class) dataBase.find(Class.class, klass.getId());
assertNull(klass);
}
@Test
@SuppressWarnings("unchecked")
public void find() {
Package pakkage = getPackage();
dataBase.persist(pakkage);
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("name", pakkage.getName());
List<Class> classes = dataBase.find(Class.class, parameters);
assertEquals(1, classes.size());
}
@Test
@SuppressWarnings("unchecked")
public void findStartEnd() {
Package pakkage = getPackage();
dataBase.persist(pakkage);
List<Class> classes = dataBase.find(Class.class, 0, Integer.MAX_VALUE);
assertEquals(1, classes.size());
pakkage = getPackage();
dataBase.persist(pakkage);
classes = dataBase.find(Class.class, 0, 1);
assertEquals(1, classes.size());
}
// @Test
@SuppressWarnings("unchecked")
public void memoryUsage() {
long million = 1000000;
long freeMemoryStart = Runtime.getRuntime().freeMemory() / million;
logger.info("Free memory start : " + freeMemoryStart);
IDataBase dataBase = IDataBase.DataBaseManager.getDataBase(DataBaseOdb.class, "./serenity/findbugs.serenity.odb", null);
long freeMemoryEnd = Runtime.getRuntime().freeMemory() / million;
logger.info("Free memory difference after initialise : " + (freeMemoryEnd - freeMemoryStart));
Package<?, ?> pakkage = dataBase.find(Package.class, Toolkit.hash("edu.umd.cs.findbugs"));
assertNotNull(pakkage);
freeMemoryEnd = Runtime.getRuntime().freeMemory() / million;
logger.info("Free memory difference after select one package : " + (freeMemoryEnd - freeMemoryStart));
pakkage = null;
Runtime.getRuntime().gc();
freeMemoryEnd = Runtime.getRuntime().freeMemory() / million;
logger.info("Free memory difference after null the package : " + (freeMemoryEnd - freeMemoryStart));
List<Package> packages = dataBase.find(Package.class);
assertTrue(packages.size() > 0);
freeMemoryEnd = Runtime.getRuntime().freeMemory() / million;
logger.info("Free memory difference after select all packages : " + (freeMemoryEnd - freeMemoryStart));
packages = null;
Runtime.getRuntime().gc();
freeMemoryEnd = Runtime.getRuntime().freeMemory() / million;
logger.info("Free memory difference after null all the packges : " + (freeMemoryEnd - freeMemoryStart));
logger.info("Free memory end : " + freeMemoryEnd);
}
}