blob: 8e66bcce812fa3b139aec802261ae4390d94f611 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.testing.tests.history;
import java.util.Vector;
import org.eclipse.persistence.testing.models.employee.domain.*;
import org.eclipse.persistence.testing.tests.flashback.*;
import org.eclipse.persistence.exceptions.*;
import org.eclipse.persistence.history.*;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.tests.employee.EmployeeBasicTestModel;
public class HistoryTestModel extends FlashbackTestModel {
int mode;
public static int BASIC = 0;
public static int PROJECT_XML = 1;
public static int PROJECT_CLASS_GENERATED = 2;
public HistoryTestModel(int mode) {
setDescription("Tests the new flashback query tests, but using a Historical Schema.");
this.mode = mode;
if (mode == BASIC) {
setName("HistoryTestModel");
} else if (mode == PROJECT_XML) {
setName("ProjectXMLHistoryTestModel");
} else if (mode == PROJECT_CLASS_GENERATED) {
setName("ProjectClassGeneratedHistoryTestModel.");
}
}
public void addTests() {
super.addTests();
addTest(new RollbackObjectsTest(Employee.class, getAsOfClause()));
addTest(EmployeeBasicTestModel.getReadObjectTestSuite());
addTest(EmployeeBasicTestModel.getReadAllTestSuite());
addTest(EmployeeBasicTestModel.getInsertObjectTestSuite());
buildUpdateObjectTestSuite();
addTest(EmployeeBasicTestModel.getDeleteObjectTestSuite());
addTest(new IsolatedSessionHistoricalTest(getAsOfClause()));
addTest(new InsertWithHistoryPolicyTest()); // Bug 319276
}
private void configure() throws Exception {
TestSystem system = new HistoricalEmployeeSystem(mode);
system.run(getSession());
buildAsOfClause();
Thread.sleep(1000);
depopulate();
return;
}
public void buildAsOfClause() {
//DatabasePlatform platform = (DatabasePlatform)getSession().getPlatform();
//ValueReadQuery timestampQuery = platform.getTimestampQuery();
//asOfClause = new AsOfClause(getSession().executeQuery(timestampQuery));
asOfClause = new AsOfClause(new java.sql.Timestamp(System.currentTimeMillis()));
}
/**
* Assume setup() is called prior to addTests. This seems bizarre
* but is the way it works.
*/
public void setup() {
// Must do configuration here...
if (getTimestamp() != null) {
return;
}
try {
configure();
} catch (EclipseLinkException te) {
throw te;
} catch (Exception ignore) {
ignore.printStackTrace();
}
}
protected void buildUpdateObjectTestSuite() {
// Wrapper test throws a warning
// in case the wrapped test throws a certain exception.
class WrappedWriteObjectTest extends TestWrapper {
public WrappedWriteObjectTest(TestCase test) {
super(test);
}
protected void test() throws Throwable {
try {
super.test();
} catch (DatabaseException databaseException) {
Throwable internalException = databaseException.getInternalException();
if(getSession().getPlatform().isMySQL()) {
if(internalException.getClass().getName().contains("MySQLIntegrityConstraintViolationException")) {
// two objects created / updated during the same second will have the same date/time representation
// in MySQL database column because on MySQL microseconds cannot be stored into a column of any temporal data type.
throw new TestWarningException("on MySQL microseconds cannot be stored into a column of any temporal data type, therefore the following exception occurred: ", internalException);
}
}
throw databaseException;
}
}
}
TestSuite testSuite = EmployeeBasicTestModel.getUpdateObjectTestSuite();
if(getSession().getPlatform().isMySQL()) {
TestSuite newTestSuite = new TestSuite();
Vector tests = testSuite.getTests();
for(int i=0; i<tests.size(); i++) {
TestCase test = (TestCase)tests.elementAt(i);
// Bug 210270: HistorySession causing unique constraint violation on MySQL.
// To avoid test failure due to this bug,
// wrap a test prone to MySQLIntegrityConstraintViolationException
// in a wrapper that throws a warning in case this exception occur.
test = new WrappedWriteObjectTest(test);
newTestSuite.addTest(test);
}
testSuite = newTestSuite;
}
addTest(testSuite);
}
}