blob: 3e0afc8529ec8cc7de7179fe275a064c81568eb6 [file] [log] [blame]
/*
* Copyright (c) 2013, 2015 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.tests.db;
import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation;
import org.eclipse.emf.cdo.server.db.IDBStore;
import org.eclipse.emf.cdo.tests.db.bundle.OM;
import org.eclipse.net4j.db.DBUtil;
import org.eclipse.net4j.db.IDBAdapter;
import org.eclipse.net4j.db.oracle.OracleAdapter;
import org.eclipse.net4j.util.tests.AbstractOMTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
import oracle.jdbc.pool.OracleDataSource;
/**
* @author Simon McDuff
*/
public abstract class OracleConfig extends AbstractSetupDBConfig
{
public static final String DB_ADAPTER_NAME = OracleAdapter.NAME;
private static final String DRIVER_TYPE = System.getProperty("test.oracle.drivertype", "thin");
private static final String SERVER_NAME = System.getProperty("test.oracle.servername", "localhost");
private static final int PORT_NUMBER = Integer.getInteger("test.oracle.portnumber", 1521);
private static final String DATABASE_NAME = System.getProperty("test.oracle.databasename", "TEST");
private static final String USER = System.getProperty("test.oracle.user", "cdotest");
private static final String PASSWORD = System.getProperty("test.oracle.password", "oracle");
private static final long serialVersionUID = 1L;
public OracleConfig(boolean supportingAudits, boolean supportingBranches, IDGenerationLocation idGenerationLocation)
{
super(DB_ADAPTER_NAME, supportingAudits, supportingBranches, false, false, idGenerationLocation);
}
@Override
protected String getDBAdapterName()
{
return DB_ADAPTER_NAME;
}
@Override
protected IDBAdapter createDBAdapter()
{
return new OracleAdapter();
}
@Override
protected void initRepositoryProperties(Map<String, String> props)
{
super.initRepositoryProperties(props);
props.put(IDBStore.Props.CONNECTION_KEEPALIVE_PERIOD, "5");
props.put(IDBStore.Props.READER_POOL_CAPACITY, "5");
props.put(IDBStore.Props.WRITER_POOL_CAPACITY, "5");
}
protected String getUserName(String dbName)
{
return USER;
}
@Override
protected DataSource createDataSourceForDB(String dbName) throws SQLException
{
String userName = getUserName(dbName);
return createDataSourceForUser(userName);
}
public static OracleDataSource createDataSourceForUser(String userName) throws SQLException
{
OracleDataSource dataSource = new OracleDataSource();
dataSource.setDriverType(DRIVER_TYPE);
dataSource.setServerName(SERVER_NAME);
dataSource.setPortNumber(PORT_NUMBER);
dataSource.setDatabaseName(DATABASE_NAME);
dataSource.setUser(userName);
dataSource.setPassword(PASSWORD);
return dataSource;
}
/**
* @author Eike Stepper
*/
public static class SingleUser extends OracleConfig
{
private static final long serialVersionUID = 1L;
public SingleUser(boolean supportingAudits, boolean supportingBranches, IDGenerationLocation idGenerationLocation)
{
super(supportingAudits, supportingBranches, idGenerationLocation);
}
@Override
protected void initDatabase(String dbName)
{
if (!getDBName(REPOSITORY_NAME).equals(dbName))
{
OM.LOG.info("Skipping database " + dbName + " in " + getCurrentTest());
AbstractOMTest.skipTest();
}
super.initDatabase(dbName);
}
@Override
protected void dropDatabase(Connection connection, Statement stmt, String dbName) throws SQLException
{
OM.LOG.info("Dropping all tables...");
DBUtil.dropAllTables(connection, null);
}
}
/**
* @author Eike Stepper
*/
public static class MultiUser extends OracleConfig
{
private static final long serialVersionUID = 1L;
public MultiUser(boolean supportingAudits, boolean supportingBranches, IDGenerationLocation idGenerationLocation)
{
super(supportingAudits, supportingBranches, idGenerationLocation);
}
@Override
protected void initDatabase(Connection connection, Statement stmt, String dbName) throws SQLException
{
String userName = getUserName(dbName);
stmt.execute("CREATE USER " + userName + " IDENTIFIED BY oracle");
stmt.execute("GRANT DBA TO " + userName);
}
@Override
protected void dropDatabase(Connection connection, Statement stmt, String dbName) throws SQLException
{
String userName = getUserName(dbName);
stmt.execute("DROP USER " + userName + " CASCADE");
}
@Override
protected String getUserName(String dbName)
{
if (dbName == null)
{
return USER;
}
return dbName;
}
}
}