blob: 898dd19967f64843dd7a5a33f5c0980e5c47f7ac [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.ozone.recon.persistence;
import java.io.File;
import java.io.IOException;
import javax.sql.DataSource;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;
import org.jooq.impl.DefaultConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.rules.TemporaryFolder;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Provider;
/**
* Create an injector for tests that need to access the SQl database.
*/
public abstract class AbstractSqlDatabaseTest {
@ClassRule
public static TemporaryFolder temporaryFolder = new TemporaryFolder();
private static Injector injector;
private static DSLContext dslContext;
@BeforeClass
public static void setup() throws IOException {
File tempDir = temporaryFolder.newFolder();
DataSourceConfigurationProvider configurationProvider =
new DataSourceConfigurationProvider(tempDir);
JooqPersistenceModule persistenceModule =
new JooqPersistenceModule(configurationProvider);
injector = Guice.createInjector(persistenceModule, new AbstractModule() {
@Override
public void configure() {
bind(DataSourceConfiguration.class).toProvider(configurationProvider);
}
});
dslContext = DSL.using(new DefaultConfiguration().set(
injector.getInstance(DataSource.class)));
}
@AfterClass
public static void tearDown() {
temporaryFolder.delete();
}
protected Injector getInjector() {
return injector;
}
protected DSLContext getDslContext() {
return dslContext;
}
/**
* Local Sqlite datasource provider.
*/
public static class DataSourceConfigurationProvider implements
Provider<DataSourceConfiguration> {
private final File tempDir;
public DataSourceConfigurationProvider(File tempDir) {
this.tempDir = tempDir;
}
@Override
public DataSourceConfiguration get() {
return new DataSourceConfiguration() {
@Override
public String getDriverClass() {
return "org.sqlite.JDBC";
}
@Override
public String getJdbcUrl() {
return "jdbc:sqlite:" + tempDir.getAbsolutePath() +
File.separator + "sqlite_recon.db";
}
@Override
public String getUserName() {
return null;
}
@Override
public String getPassword() {
return null;
}
@Override
public boolean setAutoCommit() {
return true;
}
@Override
public long getConnectionTimeout() {
return 10000;
}
@Override
public String getSqlDialect() {
return SQLDialect.SQLITE.toString();
}
@Override
public Integer getMaxActiveConnections() {
return 2;
}
@Override
public Integer getMaxConnectionAge() {
return 120;
}
@Override
public Integer getMaxIdleConnectionAge() {
return 120;
}
@Override
public String getConnectionTestStatement() {
return "SELECT 1";
}
@Override
public Integer getIdleConnectionTestPeriod() {
return 30;
}
};
}
}
}