package org.hivedb.util.database.test;
import org.hivedb.Schema;
import org.hivedb.meta.Node;
import org.hivedb.meta.persistence.CachingDataSourceProvider;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Map;
/**
* This class adds and overrides behaviour of DatabaseTestCase
* specific to the needs of H2
* @author andylikuski
*
*/
public class H2TestCase extends DatabaseTestCase {
public static final String TEST_DB = "testDb";
private static Map<String, Boolean> databaseCreated = new Hashtable<String, Boolean>();
static {
try {
Class.forName("org.h2.Driver").newInstance();
} catch (Exception e) {
throw new RuntimeException("Error initalizing the h2 server.", e);
}
}
protected Collection<Schema> getSchemas() {
return Collections.emptyList();
}
@Override
protected void createDatabase(String name) {
try {
databaseCreated.put(name, true);
getConnection(name).close();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
protected boolean databaseExists(String name) {
return databaseCreated.containsKey(name);
}
@Override
protected void deleteDatabase(final String name) {
try {
getConnection(name).createStatement().execute("SHUTDOWN");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
protected String getConnectString(String name) {
return String.format("jdbc:h2:mem:%s;LOCK_MODE=3", name);
}
@Override
protected Connection getConnection(String name) {
try {
return DriverManager.getConnection(getConnectString(name));
} catch (Exception e) {
throw new RuntimeException("Error connecting to " + name,e);
}
}
@Override
protected DataSource getDataSource(String name) {
return CachingDataSourceProvider.getInstance().getDataSource(getConnectString(name));
}
@Override
protected Collection<Node> getDataNodes() {
return Collections.emptyList();
}
}