package org.castor.cpa.test.test881;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.castor.cpa.test.framework.CPATestCase;
import org.castor.cpa.test.framework.xml.types.DatabaseEngineType;
import org.castor.jdo.conf.JdoConf;
import org.castor.jdo.util.JDOConfFactory;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.JDOManager;
import org.exolab.castor.jdo.OQLQuery;
import org.exolab.castor.jdo.PersistenceException;
import org.exolab.castor.jdo.QueryResults;
public final class Test881 extends CPATestCase {
private static final String DBNAME = "test881";
private static final String MAPPING = "/org/castor/cpa/test/test881/mapping.xml";
public static Test suite() {
TestSuite suite = new TestSuite(Test881.class.getName());
suite.addTest(new Test881("testLoadConfA"));
suite.addTest(new Test881("testLoadConfB"));
suite.addTest(new Test881("testLoadConfAB"));
suite.addTest(new Test881("testLoadConfAandB"));
suite.addTest(new Test881("testLoadConfBandAB"));
suite.addTest(new Test881("testLoadConfABandA"));
return suite;
}
public Test881(final String name) {
super(name);
}
// Test are only included/excluded for engines that have been tested with this test suite.
public boolean include(final DatabaseEngineType engine) {
return (engine == DatabaseEngineType.DERBY)
|| (engine == DatabaseEngineType.HSQL)
|| (engine == DatabaseEngineType.MYSQL)
|| (engine == DatabaseEngineType.ORACLE)
|| (engine == DatabaseEngineType.POSTGRESQL)
|| (engine == DatabaseEngineType.SAPDB)
|| (engine == DatabaseEngineType.SQL_SERVER);
}
public void testLoadConfA() throws Exception {
JDOManager.loadConfiguration(createJdoConfA(), getJdoConfBaseURL());
executeQuery(JDOManager.createInstance(DBNAME + "-a").getDatabase());
JDOManager.disposeInstance(DBNAME + "-a");
}
public void testLoadConfB() throws Exception {
JDOManager.loadConfiguration(createJdoConfB(), getJdoConfBaseURL());
executeQuery(JDOManager.createInstance(DBNAME + "-b").getDatabase());
JDOManager.disposeInstance(DBNAME + "-b");
}
public void testLoadConfAB() throws Exception {
JDOManager.loadConfiguration(createJdoConfAB(), getJdoConfBaseURL());
executeQuery(JDOManager.createInstance(DBNAME + "-a").getDatabase());
executeQuery(JDOManager.createInstance(DBNAME + "-b").getDatabase());
JDOManager.disposeInstance(DBNAME + "-a");
JDOManager.disposeInstance(DBNAME + "-b");
}
public void testLoadConfAandB() throws Exception {
// Load configuration for A first followed by B.
// Why should this behave different as loading A and B
// from one configuration containing both?
JDOManager.loadConfiguration(createJdoConfA(), getJdoConfBaseURL());
JDOManager.loadConfiguration(createJdoConfB(), getJdoConfBaseURL());
executeQuery(JDOManager.createInstance(DBNAME + "-a").getDatabase());
executeQuery(JDOManager.createInstance(DBNAME + "-b").getDatabase());
JDOManager.disposeInstance(DBNAME + "-a");
JDOManager.disposeInstance(DBNAME + "-b");
}
public void testLoadConfBandAB() throws Exception {
// Load configuration for B first followed by a configuration
// containing A and B. This means B is loaded twice.
// What shell we do with the second configuration containg A and B?
// Ignore it completely, only ignore second configuration of B or
// or replace the first configuration of B with the second one.
JDOManager.loadConfiguration(createJdoConfB(), getJdoConfBaseURL());
JDOManager.loadConfiguration(createJdoConfAB(), getJdoConfBaseURL());
executeQuery(JDOManager.createInstance(DBNAME + "-a").getDatabase());
executeQuery(JDOManager.createInstance(DBNAME + "-b").getDatabase());
JDOManager.disposeInstance(DBNAME + "-a");
JDOManager.disposeInstance(DBNAME + "-b");
}
public void testLoadConfABandA() throws Exception {
// Load configuration for A and B first followed by a configuration
// containing only A. This means A is loaded twice.
// What shell we do with the second configuration containg A?
// Ignore it completely, only ignore second configuration of A or
// or replace the first configuration of A with the second one.
JDOManager.loadConfiguration(createJdoConfAB(), getJdoConfBaseURL());
JDOManager.loadConfiguration(createJdoConfA(), getJdoConfBaseURL());
executeQuery(JDOManager.createInstance(DBNAME + "-a").getDatabase());
executeQuery(JDOManager.createInstance(DBNAME + "-b").getDatabase());
JDOManager.disposeInstance(DBNAME + "-a");
JDOManager.disposeInstance(DBNAME + "-b");
}
private JdoConf createJdoConfA() {
org.castor.jdo.conf.Database orgDB = getDbConfig(DBNAME);
orgDB.addMapping(JDOConfFactory.createXmlMapping(MAPPING));
org.castor.jdo.conf.Database aDB = new org.castor.jdo.conf.Database();
aDB.setName(orgDB.getName() + "-a");
aDB.setEngine(orgDB.getEngine());
aDB.setDatabaseChoice(orgDB.getDatabaseChoice());
aDB.setMapping(orgDB.getMapping());
return JDOConfFactory.createJdoConf(aDB, getTxConfig());
}
private JdoConf createJdoConfB() {
org.castor.jdo.conf.Database orgDB = getDbConfig(DBNAME);
orgDB.addMapping(JDOConfFactory.createXmlMapping(MAPPING));
org.castor.jdo.conf.Database bDB = new org.castor.jdo.conf.Database();
bDB.setName(orgDB.getName() + "-b");
bDB.setEngine(orgDB.getEngine());
bDB.setDatabaseChoice(orgDB.getDatabaseChoice());
bDB.setMapping(orgDB.getMapping());
return JDOConfFactory.createJdoConf(bDB, getTxConfig());
}
private JdoConf createJdoConfAB() {
org.castor.jdo.conf.Database orgDB = getDbConfig(DBNAME);
orgDB.addMapping(JDOConfFactory.createXmlMapping(MAPPING));
org.castor.jdo.conf.Database aDB = new org.castor.jdo.conf.Database();
aDB.setName(orgDB.getName() + "-a");
aDB.setEngine(orgDB.getEngine());
aDB.setDatabaseChoice(orgDB.getDatabaseChoice());
aDB.setMapping(orgDB.getMapping());
org.castor.jdo.conf.Database bDB = new org.castor.jdo.conf.Database();
bDB.setName(orgDB.getName() + "-b");
bDB.setEngine(orgDB.getEngine());
bDB.setDatabaseChoice(orgDB.getDatabaseChoice());
bDB.setMapping(orgDB.getMapping());
org.castor.jdo.conf.Database[] dbs = new org.castor.jdo.conf.Database[] {aDB, bDB};
return JDOConfFactory.createJdoConf(dbs, getTxConfig());
}
private void executeQuery(final Database db) throws PersistenceException {
db.begin();
OQLQuery oql = db.getOQLQuery(
"select p from " + Product.class.getName() + " p");
QueryResults results = oql.execute();
results.close();
db.commit();
db.close();
}
}