/** * Copyright (c) 2004 - 2011 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.server.IRepository; import org.eclipse.emf.cdo.server.db.CDODBUtil; import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy; import org.eclipse.emf.cdo.tests.AuditTest; import org.eclipse.emf.cdo.tests.AuditSameSessionTest; import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_252214_Test; import org.eclipse.emf.cdo.tests.config.impl.ConfigTest; import org.eclipse.net4j.db.DBException; import org.eclipse.net4j.db.DBUtil; import org.eclipse.net4j.db.IDBAdapter; import org.eclipse.net4j.db.db2.DB2Adapter; import org.eclipse.net4j.db.db2.DB2SchemaDatasource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.Test; import junit.framework.TestSuite; /** * @author Eike Stepper */ public class AllTestsDBDB2NonAudit extends DBConfigs { public static Test suite() { return new AllTestsDBDB2NonAudit().getTestSuite("CDO Tests (DBStore H2 Horizontal - non-audit mode)"); //$NON-NLS-1$ } @Override protected void initConfigSuites(TestSuite parent) { addScenario(parent, COMBINED, AllTestsDBDB2NonAudit.DB2NonAudit.INSTANCE, JVM, NATIVE); } @Override protected boolean hasAuditSupport() { return false; } @Override protected boolean hasBranchingSupport() { return false; } @Override protected void initTestClasses(List> testClasses) { super.initTestClasses(testClasses); // non-audit mode - remove audit tests testClasses.remove(AuditTest.class); testClasses.remove(AuditTestSameSession.class); testClasses.remove(Bugzilla_252214_Test.class); } /** * @author Eike Stepper */ public static class DB2NonAudit extends DBStoreRepositoryConfig { private static final String DB_NAME = "SAMPLE"; //$NON-NLS-1$ private static final String DB_USER = "DB2ADMIN"; //$NON-NLS-1$ private static final String DB_PASSWORD = "12345"; //$NON-NLS-1$ static final String DB_SCHEMA = "CDOTEST"; //$NON-NLS-1$ private static final long serialVersionUID = 1L; public static final AllTestsDBDB2NonAudit.DB2NonAudit INSTANCE = new DB2NonAudit("DBStore: DB2 (non-audit)"); //$NON-NLS-1$ private transient String currentRepoName; private static int tableCounter; private static int dropCounter; public DB2NonAudit(String name) { super(name); } @Override protected void initRepositoryProperties(Map props) { super.initRepositoryProperties(props); props.put(IRepository.Props.SUPPORTING_AUDITS, "false"); //$NON-NLS-1$ } @Override protected IMappingStrategy createMappingStrategy() { Map properties = new HashMap(); properties.put("qualifiedNames", "false"); properties.put("forceNamesWithID", "false"); IMappingStrategy mappingStrategy = CDODBUtil.createHorizontalMappingStrategy(false); mappingStrategy.setProperties(properties); return mappingStrategy; } @Override protected IDBAdapter createDBAdapter() { return new DB2Adapter(); } @Override protected DataSource createDataSource(final String repoName) { if (currentRepoName != null && !repoName.equals(currentRepoName)) { throw new IllegalStateException("This test config only supports a single repository"); //$NON-NLS-1$ } currentRepoName = repoName; DB2SchemaDatasource dataSource = new DB2SchemaDatasource(DB_SCHEMA); dataSource.setDatabaseName(DB_NAME); dataSource.setUser(DB_USER); dataSource.setPassword(DB_PASSWORD); if (!isRestarting()) { initAllTables(dataSource); } return dataSource; } @Override public void tearDown() throws Exception { currentRepoName = null; super.tearDown(); } private static void initAllTables(DataSource dataSource) { Connection conn = null; Statement statement = null; String sql = null; try { conn = dataSource.getConnection(); List tableNames = DBUtil.getAllTableNames(conn, DB_SCHEMA); if (tableCounter != 0) { if (tableCounter < tableNames.size()) { dropCounter = 20; } } tableCounter = tableNames.size(); boolean drop = false; if (dropCounter > 0) { --dropCounter; } else if (dropCounter == 0) { tableCounter = 0; dropCounter = -1; drop = true; } statement = conn.createStatement(); for (String tableName : tableNames) { sql = (drop ? "DROP TABLE " : "DELETE FROM ") + tableName; //$NON-NLS-1$ //$NON-NLS-2$ DBUtil.trace(sql); statement.execute(sql); } } catch (SQLException ex) { throw new DBException(ex, sql); } finally { DBUtil.close(statement); DBUtil.close(conn); } } } }