diff options
author | Eike Stepper | 2013-09-26 09:58:45 +0000 |
---|---|---|
committer | Eike Stepper | 2013-09-26 09:58:45 +0000 |
commit | 4bc6f5ff208881583a71a84b4d42ee3a5583a1fc (patch) | |
tree | 7c4292bacebd071de891a7c68820ad3db26146da /plugins/org.eclipse.emf.cdo.tests.db | |
parent | 8c0eef51dcd32ed54494d20eb57d3037c4126ba7 (diff) | |
download | cdo-4bc6f5ff208881583a71a84b4d42ee3a5583a1fc.tar.gz cdo-4bc6f5ff208881583a71a84b4d42ee3a5583a1fc.tar.xz cdo-4bc6f5ff208881583a71a84b4d42ee3a5583a1fc.zip |
[418076] [DB] Add OracleConfig for execution of DBStore tests
https://bugs.eclipse.org/bugs/show_bug.cgi?id=418076
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests.db')
12 files changed, 421 insertions, 53 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests.db/CDO AllTests (Oracle).launch b/plugins/org.eclipse.emf.cdo.tests.db/CDO AllTests (Oracle).launch new file mode 100644 index 0000000000..61b7fb8250 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.db/CDO AllTests (Oracle).launch @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<launchConfiguration type="org.eclipse.jdt.junit.launchconfig"> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AllTestsDBOracle.java"/> +</listAttribute> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> +<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> +<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> +<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> +<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.cdo.tests.db.AllTestsDBOracle"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.emf.cdo.tests.db"/> +<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx2G -Dorg.eclipse.net4j.util.om.trace.disable=true -XX:+HeapDumpOnOutOfMemoryError"/> +</launchConfiguration> diff --git a/plugins/org.eclipse.emf.cdo.tests.db/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.tests.db/META-INF/MANIFEST.MF index d6da4d3d22..0ef4124802 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.tests.db/META-INF/MANIFEST.MF @@ -16,6 +16,9 @@ Require-Bundle: org.eclipse.emf.cdo.tests;bundle-version="[4.0.0,5.0.0)";visibil org.eclipse.net4j.db.mysql;bundle-version="[4.0.0,5.0.0)";visibility:=reexport, org.eclipse.net4j.db.h2;bundle-version="[4.0.0,5.0.0)";visibility:=reexport, org.eclipse.net4j.db.postgresql;bundle-version="[4.0.0,5.0.0)", + org.eclipse.net4j.db.jdbc;bundle-version="[4.0.0,5.0.0)", + org.eclipse.net4j.db.oracle;bundle-version="[1.0.0,2.0.0)", + oracle.database.driver;bundle-version="[6.0.0,7.0.0)", org.eclipse.emf.cdo.common.db;bundle-version="[3.0.0,4.0.0)" Eclipse-BuddyPolicy: dependent Import-Package: com.mysql.jdbc.jdbc2.optional;version="[5.0.0,6.0.0)", diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AbstractSetupDBConfig.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AbstractSetupDBConfig.java index 6140764cc2..2bb0951d49 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AbstractSetupDBConfig.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AbstractSetupDBConfig.java @@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.tests.db; import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation; +import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBUtil; import javax.sql.DataSource; @@ -19,8 +20,6 @@ import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; /** * @author Victor Roldan Betancort @@ -31,44 +30,45 @@ public abstract class AbstractSetupDBConfig extends DBConfig private transient DataSource setupDataSource; - private transient List<String> databases = new ArrayList<String>(); - public AbstractSetupDBConfig(String name, boolean supportingAudits, boolean supportingBranches, boolean withRanges, boolean copyOnBranch, IDGenerationLocation idGenerationLocation) { super(name, supportingAudits, supportingBranches, withRanges, copyOnBranch, idGenerationLocation); } - @Override - protected DataSource createDataSource(String repoName) + protected String getDBName(String repoName) { - String dbName = "test_" + repoName; - initDatabase(dbName); - - return createDataSourceForDB(dbName); + return "test_" + repoName; } @Override - protected void deactivateRepositories() + protected DataSource createDataSource(String repoName) { - super.deactivateRepositories(); - for (String dbName : databases) + String dbName = getDBName(repoName); + initDatabase(dbName); + + try + { + return createDataSourceForDB(dbName); + } + catch (SQLException ex) { - dropDatabase(dbName); + throw new DBException(ex); } } - private void initDatabase(String dbName) + protected void initDatabase(String dbName) { dropDatabase(dbName); + Connection connection = null; Statement stmt = null; try { - connection = getSetupDataSource().getConnection(); + connection = getSetupConnection(); stmt = connection.createStatement(); - stmt.execute("CREATE DATABASE " + dbName); + initDatabase(connection, stmt, dbName); } catch (SQLException ignore) { @@ -80,16 +80,21 @@ public abstract class AbstractSetupDBConfig extends DBConfig } } - private void dropDatabase(String dbName) + protected void initDatabase(Connection connection, Statement stmt, String dbName) throws SQLException + { + stmt.execute("CREATE DATABASE " + dbName); + } + + protected void dropDatabase(String dbName) { Connection connection = null; Statement stmt = null; try { - connection = getSetupDataSource().getConnection(); + connection = getSetupConnection(); stmt = connection.createStatement(); - stmt.execute("DROP DATABASE " + dbName); + dropDatabase(connection, stmt, dbName); } catch (SQLException ignore) { @@ -101,7 +106,24 @@ public abstract class AbstractSetupDBConfig extends DBConfig } } - private DataSource getSetupDataSource() + protected void dropDatabase(Connection connection, Statement stmt, String dbName) throws SQLException + { + stmt.execute("DROP DATABASE " + dbName); + } + + protected final Connection getSetupConnection() + { + try + { + return getSetupDataSource().getConnection(); + } + catch (SQLException ex) + { + throw new DBException(ex); + } + } + + protected final DataSource getSetupDataSource() throws SQLException { if (setupDataSource == null) { @@ -113,7 +135,7 @@ public abstract class AbstractSetupDBConfig extends DBConfig /** * Note that <code>dbName</code> can be <code>null</code>, in which case a <i>setup</i> datasource must be returned. - * A connection form a setup< datasource can be used to create or drop other databases. + * A connection from a setup datasource can be used to create or drop other databases. */ - protected abstract DataSource createDataSourceForDB(String dbName); + protected abstract DataSource createDataSourceForDB(String dbName) throws SQLException; } diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AllTestsDBOracle.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AllTestsDBOracle.java new file mode 100644 index 0000000000..6ece6ee4a7 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/AllTestsDBOracle.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2010-2013 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 + * Stefan Winkler - introduced variable mapping strategies + */ +package org.eclipse.emf.cdo.tests.db; + +import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation; + +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * @author Eike Stepper + */ +public class AllTestsDBOracle extends DBConfigs +{ + public static Test suite() + { + return new AllTestsDBOracle().getTestSuite(); + } + + @Override + protected void initConfigSuites(TestSuite parent) + { + addScenarios(parent, IDGenerationLocation.STORE); + // addScenarios(parent, IDGenerationLocation.CLIENT); + } + + private void addScenarios(TestSuite parent, IDGenerationLocation idGenerationLocation) + { + addScenario(parent, new OracleConfig.SingleUser(false, false, idGenerationLocation), JVM, NATIVE); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBConfig.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBConfig.java index d12df32e2c..7bce439fdd 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBConfig.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBConfig.java @@ -18,7 +18,6 @@ import org.eclipse.emf.cdo.server.db.mapping.ITypeMapping; import org.eclipse.emf.cdo.server.internal.db.mapping.TypeMappingRegistry; import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig; -import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBAdapter; import org.eclipse.net4j.db.IDBConnectionProvider; import org.eclipse.net4j.util.container.IPluginContainer; @@ -34,6 +33,8 @@ import java.util.Set; */ public abstract class DBConfig extends RepositoryConfig { + public static final String CAPABILITY = "DB"; + public static final String CAPABILITY_RANGES = "DB.ranges"; public static final String CAPABILITY_COPY_ON_BRANCH = "DB.copy.on.branch"; @@ -46,6 +47,8 @@ public abstract class DBConfig extends RepositoryConfig private boolean copyOnBranch; + private transient IDBAdapter dbAdapter; + public DBConfig(String name, boolean supportingAudits, boolean supportingBranches, boolean withRanges, boolean copyOnBranch, IDGenerationLocation idGenerationLocation) { @@ -58,6 +61,7 @@ public abstract class DBConfig extends RepositoryConfig public void initCapabilities(Set<String> capabilities) { super.initCapabilities(capabilities); + capabilities.add(CAPABILITY); capabilities.add(getDBAdapterName()); if (isWithRanges()) @@ -71,6 +75,16 @@ public abstract class DBConfig extends RepositoryConfig } } + protected IDBAdapter getDBAdapter() + { + if (dbAdapter == null) + { + dbAdapter = createDBAdapter(); + } + + return dbAdapter; + } + protected abstract String getDBAdapterName(); @Override @@ -108,10 +122,10 @@ public abstract class DBConfig extends RepositoryConfig IMappingStrategy mappingStrategy = createMappingStrategy(); mappingStrategy.setProperties(createMappingStrategyProperties()); - IDBAdapter dbAdapter = createDBAdapter(); + IDBAdapter dbAdapter = getDBAdapter(); DataSource dataSource = createDataSource(repoName); - IDBConnectionProvider connectionProvider = DBUtil.createConnectionProvider(dataSource); + IDBConnectionProvider connectionProvider = dbAdapter.createConnectionProvider(dataSource); Map<String, String> props = new HashMap<String, String>(); // props.put(IDBStore.Props.ID_COLUMN_LENGTH, "66"); diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreTest.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreTest.java index 0818db19c3..bf9cdda15b 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreTest.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/DBStoreTest.java @@ -11,6 +11,8 @@ */ package org.eclipse.emf.cdo.tests.db; +import oracle.jdbc.pool.OracleDataSource; + import org.eclipse.emf.cdo.common.model.EMFUtil; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; @@ -23,7 +25,10 @@ import org.eclipse.emf.cdo.util.CDOUtil; import org.eclipse.emf.cdo.util.CommitException; import org.eclipse.emf.cdo.view.CDOView; +import org.eclipse.net4j.db.DBUtil; +import org.eclipse.net4j.db.jdbc.DelegatingConnection; import org.eclipse.net4j.util.WrappedException; +import org.eclipse.net4j.util.security.IUserAware; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; @@ -34,13 +39,48 @@ import org.eclipse.emf.ecore.EcoreFactory; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.util.EcoreUtil; +import java.sql.Connection; import java.util.GregorianCalendar; +import java.util.List; /** * @author Stefan Winkler */ public class DBStoreTest extends AbstractCDOTest { + public static void main(String[] args) throws Exception + { + Connection connection = null; + + try + { + final String userName = "test_repo1"; + OracleDataSource dataSource = OracleConfig.createDataSourceForUser(userName); + + class UserConnection extends DelegatingConnection.Default implements IUserAware + { + public UserConnection(Connection delegate) + { + super(delegate); + } + + public String getUserID() + { + return userName; + } + } + + connection = new UserConnection(dataSource.getConnection()); + + List<String> names = DBUtil.getAllTableNames(connection, null); + System.out.println(names); + } + finally + { + DBUtil.close(connection); + } + } + // Bug 256462 public void testInsertNull() throws Exception { diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/MysqlConfig.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/MysqlConfig.java index 309b87065d..82f69fb120 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/MysqlConfig.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/MysqlConfig.java @@ -19,6 +19,8 @@ import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import javax.sql.DataSource; +import java.sql.SQLException; + /** * @author Simon McDuff */ @@ -57,7 +59,7 @@ public class MysqlConfig extends AbstractSetupDBConfig } @Override - protected DataSource createDataSourceForDB(String dbName) + protected DataSource createDataSourceForDB(String dbName) throws SQLException { MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUrl("jdbc:mysql://" + HOST); diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/Net4jDBTest.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/Net4jDBTest.java index cdc06bbc14..e96b5caf9b 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/Net4jDBTest.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/Net4jDBTest.java @@ -18,6 +18,8 @@ import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBDatabase; import org.eclipse.net4j.db.ddl.IDBSchema; import org.eclipse.net4j.db.ddl.IDBTable; +import org.eclipse.net4j.db.oracle.OracleAdapter; +import org.eclipse.net4j.spi.db.DBAdapter; import org.eclipse.net4j.util.collection.Pair; import org.eclipse.net4j.util.io.ExtendedDataInputStream; import org.eclipse.net4j.util.io.ExtendedDataOutputStream; @@ -67,7 +69,10 @@ public class Net4jDBTest extends AbstractCDOTest public void testBinary() throws Exception { - registerColumn(DBType.BINARY, new byte[0]); + if (!isOracle()) + { + registerColumn(DBType.BINARY, new byte[0]); + } byte[] data = new byte[100]; for (int i = 0; i < data.length; i++) @@ -81,7 +86,10 @@ public class Net4jDBTest extends AbstractCDOTest public void testVarBinary() throws Exception { - registerColumn(DBType.VARBINARY, new byte[0]); + if (!isOracle()) + { + registerColumn(DBType.VARBINARY, new byte[0]); + } byte[] data = new byte[100]; for (int i = 0; i < data.length; i++) @@ -95,7 +103,10 @@ public class Net4jDBTest extends AbstractCDOTest public void testLongVarBinary() throws Exception { - registerColumn(DBType.LONGVARBINARY, new byte[0]); + if (!isOracle()) + { + registerColumn(DBType.LONGVARBINARY, new byte[0]); + } byte[] data = new byte[100]; for (int i = 0; i < data.length; i++) @@ -126,6 +137,7 @@ public class Net4jDBTest extends AbstractCDOTest doTest(getName()); } + @Skips("oracle") public void testBlobLength0() throws Exception { registerColumn(DBType.BLOB, new byte[0]); @@ -143,11 +155,16 @@ public class Net4jDBTest extends AbstractCDOTest { registerColumn(DBType.CHAR, "0"); registerColumn(DBType.CHAR, "a"); - registerColumn(DBType.CHAR, "\255"); // Fails for DB2 + registerColumn(DBType.CHAR, "\377"); // Fails for DB2 registerColumn(DBType.CHAR, "\u1234"); // Fails for DB2 doTest(getName()); } + public static void main(String[] args) + { + System.out.println((int)'\377'); + } + public void testClob() throws Exception { registerColumn(DBType.CLOB, "Test"); @@ -215,7 +232,11 @@ public class Net4jDBTest extends AbstractCDOTest public void testDouble() throws Exception { - registerColumn(DBType.DOUBLE, new Double(Double.MAX_VALUE)); + if (!isOracle()) + { + registerColumn(DBType.DOUBLE, new Double(Double.MAX_VALUE)); + } + // registerColumn(DBType.DOUBLE, new Double(Double.MIN_VALUE)); registerColumn(DBType.DOUBLE, -.1d); registerColumn(DBType.DOUBLE, 3.33333d); @@ -273,12 +294,14 @@ public class Net4jDBTest extends AbstractCDOTest public void testVarChar() throws Exception { registerColumn(DBType.VARCHAR, ""); - registerColumn(DBType.VARCHAR, "\n"); - registerColumn(DBType.VARCHAR, "\t"); - registerColumn(DBType.VARCHAR, "\r"); - registerColumn(DBType.VARCHAR, "\u1234"); - registerColumn(DBType.VARCHAR, "The quick brown fox jumps over the lazy dog."); - registerColumn(DBType.VARCHAR, "\\,:\",\'"); + // registerColumn(DBType.VARCHAR, null); + // registerColumn(DBType.VARCHAR, " "); + // registerColumn(DBType.VARCHAR, "\n"); + // registerColumn(DBType.VARCHAR, "\t"); + // registerColumn(DBType.VARCHAR, "\r"); + // registerColumn(DBType.VARCHAR, "\u1234"); + // registerColumn(DBType.VARCHAR, "The quick brown fox jumps over the lazy dog."); + // registerColumn(DBType.VARCHAR, "\\,:\",\'"); doTest(getName()); } @@ -286,12 +309,16 @@ public class Net4jDBTest extends AbstractCDOTest public void testLongVarChar() throws Exception { registerColumn(DBType.LONGVARCHAR, ""); - registerColumn(DBType.LONGVARCHAR, "\n"); - registerColumn(DBType.LONGVARCHAR, "\t"); - registerColumn(DBType.LONGVARCHAR, "\r"); - registerColumn(DBType.LONGVARCHAR, "\u1234"); - registerColumn(DBType.LONGVARCHAR, "The quick brown fox jumps over the lazy dog."); - registerColumn(DBType.LONGVARCHAR, "\\,:\",\'"); + + if (!isOracle()) // Only 1 LONGVARCHAR allowed per table + { + registerColumn(DBType.LONGVARCHAR, "\n"); + registerColumn(DBType.LONGVARCHAR, "\t"); + registerColumn(DBType.LONGVARCHAR, "\r"); + registerColumn(DBType.LONGVARCHAR, "\u1234"); + registerColumn(DBType.LONGVARCHAR, "The quick brown fox jumps over the lazy dog."); + registerColumn(DBType.LONGVARCHAR, "\\,:\",\'"); + } doTest(getName()); } @@ -301,7 +328,11 @@ public class Net4jDBTest extends AbstractCDOTest registerColumn(DBType.DATE, new GregorianCalendar(2010, 04, 21).getTimeInMillis()); registerColumn(DBType.DATE, new GregorianCalendar(1950, 04, 21).getTimeInMillis()); registerColumn(DBType.DATE, new GregorianCalendar(2030, 12, 31).getTimeInMillis()); - registerColumn(DBType.DATE, new GregorianCalendar(0, 0, 0).getTimeInMillis()); // Fails for DB2 + + if (!isOracle()) + { + registerColumn(DBType.DATE, new GregorianCalendar(0, 0, 0).getTimeInMillis()); // Fails for DB2 and Oracle + } doTest(getName()); } @@ -359,7 +390,6 @@ public class Net4jDBTest extends AbstractCDOTest IDBDatabase database = store.getDatabase(); database.updateSchema(new IDBDatabase.RunnableWithSchema() { - public void run(IDBSchema schema) { IDBTable table = schema.addTable(tableName); @@ -392,7 +422,18 @@ public class Net4jDBTest extends AbstractCDOTest StringBuilder builder = new StringBuilder("INSERT INTO " + tableName + " VALUES ("); for (Pair<DBType, Object> column : columns) { - writeTypeValue(outs, column.getElement1(), column.getElement2()); + Object value = column.getElement2(); + if (value instanceof String) + { + String str = (String)value; + + DBStore store = (DBStore)getRepository().getStore(); + IDBDatabase database = store.getDatabase(); + DBAdapter adapter = (DBAdapter)database.getAdapter(); + value = adapter.convertString((PreparedStatement)null, 0, str); + } + + writeTypeValue(outs, column.getElement1(), value); if (first) { builder.append("?"); @@ -470,6 +511,12 @@ public class Net4jDBTest extends AbstractCDOTest private void assertEquals(Object expected, Object actual, DBType dbType, int c) { + if (expected == null || actual == null) + { + assertEquals("Error in column " + c + " with type " + dbType, expected, actual); + return; + } + Class<? extends Object> type = expected.getClass(); if (type.isArray()) { @@ -647,7 +694,10 @@ public class Net4jDBTest extends AbstractCDOTest case VARCHAR: case LONGVARCHAR: - return ins.readString(); + DBStore store = (DBStore)getRepository().getStore(); + IDBDatabase database = store.getDatabase(); + DBAdapter adapter = (DBAdapter)database.getAdapter(); + return adapter.convertString((ResultSet)null, 0, ins.readString()); case CLOB: { @@ -706,4 +756,10 @@ public class Net4jDBTest extends AbstractCDOTest { return 1000L * 60L * minutes; } + + private boolean isOracle() + { + DBStore store = (DBStore)getRepository().getStore(); + return OracleAdapter.NAME.equals(store.getDBAdapter().getName()); + } } diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/OracleConfig.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/OracleConfig.java new file mode 100644 index 0000000000..42a70de207 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/OracleConfig.java @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2011-2013 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 oracle.jdbc.pool.OracleDataSource; + +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; + +/** + * @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; + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/PostgresqlConfig.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/PostgresqlConfig.java index d5d34f4a14..32a13f1bfe 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/PostgresqlConfig.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/PostgresqlConfig.java @@ -19,6 +19,8 @@ import org.postgresql.ds.PGSimpleDataSource; import javax.sql.DataSource; +import java.sql.SQLException; + /** * @author Victor Roldan Betancort */ @@ -55,7 +57,7 @@ public class PostgresqlConfig extends AbstractSetupDBConfig } @Override - protected DataSource createDataSourceForDB(String dbName) + protected DataSource createDataSourceForDB(String dbName) throws SQLException { PGSimpleDataSource dataSource = new PGSimpleDataSource(); dataSource.setServerName(HOST); diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/offline/DBOfflineConfig.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/offline/DBOfflineConfig.java index 602c0d38b5..6d0b193b4b 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/offline/DBOfflineConfig.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/offline/DBOfflineConfig.java @@ -17,7 +17,6 @@ import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy; import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig.OfflineConfig; import org.eclipse.emf.cdo.tests.db.DBConfig; -import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBAdapter; import org.eclipse.net4j.db.IDBConnectionProvider; import org.eclipse.net4j.util.container.IPluginContainer; @@ -88,7 +87,7 @@ public abstract class DBOfflineConfig extends OfflineConfig IDBAdapter dbAdapter = createDBAdapter(); DataSource dataSource = createDataSource(repoName); - IDBConnectionProvider connectionProvider = DBUtil.createConnectionProvider(dataSource); + IDBConnectionProvider connectionProvider = dbAdapter.createConnectionProvider(dataSource); return CDODBUtil.createStore(mappingStrategy, dbAdapter, connectionProvider); } diff --git a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/revisioncache/AbstractDBRevisionCacheTest.java b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/revisioncache/AbstractDBRevisionCacheTest.java index 4b0882a2e9..458260a627 100644 --- a/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/revisioncache/AbstractDBRevisionCacheTest.java +++ b/plugins/org.eclipse.emf.cdo.tests.db/src/org/eclipse/emf/cdo/tests/db/revisioncache/AbstractDBRevisionCacheTest.java @@ -43,9 +43,11 @@ public abstract class AbstractDBRevisionCacheTest extends AbstractRevisionCacheT clearDb(dataSource); + IDBAdapter dbAdapter = getAdapter(); + CDORevisionCache revisionCache = CDOCommonDBUtil.createDBCache(// - getAdapter() // - , DBUtil.createConnectionProvider(dataSource)// + dbAdapter // + , dbAdapter.createConnectionProvider(dataSource)// , CDOListFactory.DEFAULT// , session.getPackageRegistry() // , ((InternalCDOSession)session).getRevisionManager().getFactory()); |