blob: e696dcfe4ee852bcd4f372c1042f216f175674d8 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.clientserver;
import org.eclipse.persistence.internal.helper.Helper;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.models.employee.relational.EmployeeSystem;
import org.eclipse.persistence.testing.models.insurance.InsuranceSystem;
import org.eclipse.persistence.testing.tests.identitymaps.ConcurrentIdentityMapKeyEnumerationTest;
import org.eclipse.persistence.testing.tests.unitofwork.*;
/**
* Test the TopLink ClientSession and ServerSession under concurrent,
* multi-thread use cases.
* Any concurrent tests should be put here.
*/
public class ClientServerTestModel extends TestModel {
public ClientServerTestModel() {
setDescription("This suite tests updating objects through various clients session.");
}
@Override
public void addRequiredSystems() {
try {
getSession().getLog().write("WARNING, some JDBC drivers may fail if they are not thread safe." +
Helper.cr() + "JDBC-ODBC will not be run for this test." + Helper.cr() +
"Oracle OCI may fail." + Helper.cr() + "DB2 IBM JDBC may fail." + Helper.cr());
getSession().getLog().flush();
} catch (java.io.IOException e) {
}
if (getSession().getLogin().isJDBCODBCBridge()) {
throw new TestWarningException("JDBC-ODBC cannot support concurrent connections.");
}
addRequiredSystem(new EmployeeSystem());
addRequiredSystem(new InsuranceSystem());
addRequiredSystem(new ClientServerEmployeeSystem());
addRequiredSystem(new org.eclipse.persistence.testing.tests.unitofwork.UOWSystem());
}
@Override
public void addTests() {
addTest(getClientServerTestSuite());
addTest(getClientServerReadingTestSuite());
}
public TestSuite getClientServerReadingTestSuite() {
TestSuite suite = new TestSuite();
suite.setName("Reading Tests");
suite.addTest(new ClientServerExclusiveReadingTest());
suite.addTest(new ClientServerConcurrentReadingTest_Case1());
suite.addTest(new ClientServerConcurrentReadingTest_Case2());
//useStreams
suite.addTest(new ClientServerConcurrentReadingTest_Case2(true));
suite.addTest(new ClientServerOptimisticLockingTest());
//test deadlock in the cache key level locking
suite.addTest(new ClientServerReadingDeadlockTest());
suite.addTest(new ClientServerReadingNonDeadlockTest());
//Run deadlock on readlock test for approx. 3 minutes
suite.addTest(new ConcurrentTestWithReadLocks(180000));
suite.addTest(new ConcurrentBatchReadingTest(70000));
//bug 3388383
suite.addTest(new ConcurrentTestRefreshWithOptimisticLocking(100000));
return suite;
}
public static TestSuite getClientServerTestSuite() {
TestSuite suite = new TestSuite();
suite.setName("ClientServerTestSuite");
suite.addTest(new ClientServerTest());
suite.addTest(new ConcurrencyManagerTest());
suite.addTest(new ClientServerConcurrentWriteTest());
suite.addTest(new ClientServerSequenceDeadlockTest());
suite.addTest(new ClientServerSequenceDeadlockTest2());
suite.addTest(new ClientLoginTest());
suite.addTest(new PreBeginTransactionFailureTest());
suite.addTest(new NPEIsThrownWhenWeTryToWriteNullToANullableField());
suite.addTest(new DonotAliaseTheTableWhenWeHaveSubSelectExpression());
//bug 3590333
suite.addTest(new ConcurrentIdentityMapKeyEnumerationTest());
// Moved concurrent client/server tests from UnitOfWork test suite here,
// as all concurrent tests should be here, and they can take a really long time to run.
//bug 3656068
suite.addTest(new ConcurrentReadOnUpdateWithEarlyTransTest());
//bug 4071929
suite.addTest(new UnitOfWorkConcurrentRevertTest());
//bug 3582102
suite.addTest(new LockOnCloneTest());
suite.addTest(new LockOnCloneDeadlockAvoidanceTest());
suite.addTest(new ConcurrentNewObjectTest());
suite.addTest(new ConcurrentReadOnInsertTest());
suite.addTest(new ConcurrentRefreshOnUpdateTest());
suite.addTest(new ConcurrentRefreshOnCloneTest());
//bug 4438127
suite.addTest(new NewObjectIdentityTest());
// Failover connection management EclipseLink bug 211100
suite.addTest(new CommunicationFailureTest());
suite.addTest(new ClientServerUpdateDeadlockTest());
suite.addTest(new UnitOfWorkDeleteOrderTest()); // bug 331064
suite.addTest(new ConnectionPoolSizingTest()); // bug 388129
return suite;
}
/**
* Because this changes the database it must put it back to a valid state.
*/
@Override
public void reset() {
//getExecutor().removeConfigureSystem(new EmployeeSystem());
getExecutor().removeConfigureSystem(new ClientEmployeeSystem());
getExecutor().getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
}
}