package jodd.db.fixtures;
import jodd.db.DbManager;
import jodd.db.DbQuery;
import jodd.db.DbSession;
import jodd.db.DbThreadSession;
import jodd.db.jtx.DbJtxTransactionManager;
import jodd.db.pool.CoreConnectionPool;
import jodd.db.querymap.DbPropsQueryMap;
import jodd.log.LoggerFactory;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
/**
* Abstract base test class for working with databases.
*/
public abstract class DbTestBase {
protected DbJtxTransactionManager dbtxm;
protected static CoreConnectionPool cp;
@Before
public void setUp() throws Exception {
DbManager.getInstance().setQueryMap(new DbPropsQueryMap());
LoggerFactory.setLoggerProvider(new TestLoggerProvider());
if (dbtxm != null) {
return;
}
// create connection pool if not created
if (cp == null) {
cp = new CoreConnectionPool();
setupPool(cp);
cp.init();
}
dbtxm = new DbJtxTransactionManager(cp);
// initial data
DbSession session = new DbSession(cp);
initDb(session);
session.closeSession();
}
@After
public void tearDown() throws Exception {
dbtxm.close();
dbtxm = null;
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
cp.close();
cp = null;
}
/**
* Configures connection pool for connectivity.
*/
protected abstract void setupPool(CoreConnectionPool cp);
/**
* Initializes database before every test.
* It <b>MUST</b> cleanup any existing data or tables first!
*/
protected void initDb(DbSession dbSession) {
}
// ---------------------------------------------------------------- helpers
/**
* Creates DB Session.
*/
protected DbSession createDbSession() {
return new DbThreadSession(cp);
}
protected int executeUpdate(DbSession session, String sql) {
return new DbQuery(session, sql).autoClose().executeUpdate();
}
protected void executeUpdate(String sql) {
new DbQuery(sql).autoClose().executeUpdate();
}
protected long executeCount(DbSession session, String sql) {
return new DbQuery(session, sql).autoClose().executeCount();
}
}