Skip to main content
summaryrefslogblamecommitdiffstats
blob: 8b726c4e7af85704fa4b181623ca8286a3788199 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
                                                                       













                                                                        
                                                      



































































































































































































                                                                                                                               
/*
 * 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<Class<? extends ConfigTest>> 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<String, String> props)
    {
      super.initRepositoryProperties(props);
      props.put(IRepository.Props.SUPPORTING_AUDITS, "false"); //$NON-NLS-1$
    }

    @Override
    protected IMappingStrategy createMappingStrategy()
    {
      Map<String, String> properties = new HashMap<String, String>();
      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<String> 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);
      }
    }
  }
}

Back to the top