package org.dcache.chimera;
import com.google.common.io.Resources;
import com.zaxxer.hikari.HikariDataSource;
import liquibase.Liquibase;
import liquibase.database.Database;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;
import org.junit.After;
import org.junit.Before;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;
import java.util.Properties;
public abstract class ChimeraTestCaseHelper {
private final static URL DB_TEST_PROPERTIES =
Resources.getResource("org/dcache/chimera/chimera-test.properties");
protected FileSystemProvider _fs;
protected FsInode _rootInode;
private HikariDataSource _dataSource;
@Before
public void setUp() throws Exception {
Properties dbProperties = new Properties();
try (InputStream input = Resources.asByteSource(DB_TEST_PROPERTIES).openStream()) {
dbProperties.load(input);
}
_dataSource = FsFactory.getDataSource(
dbProperties.getProperty("chimera.db.url"),
dbProperties.getProperty("chimera.db.user"),
dbProperties.getProperty("chimera.db.password"));
try (Connection conn = _dataSource.getConnection()) {
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn));
Liquibase liquibase = new Liquibase("org/dcache/chimera/changelog/changelog-master.xml",
new ClassLoaderResourceAccessor(), database);
liquibase.update("");
}
PlatformTransactionManager txManager = new DataSourceTransactionManager(_dataSource);
_fs = new JdbcFs(_dataSource, txManager);
_rootInode = _fs.path2inode("/");
}
@After
public void tearDown() throws Exception {
Connection conn = _dataSource.getConnection();
conn.createStatement().execute("SHUTDOWN;");
_dataSource.close();
}
}