/******************************************************************************* * Copyright (c) 1998, 2015 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.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."); } 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()); } 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. */ public void reset() { //getExecutor().removeConfigureSystem(new EmployeeSystem()); getExecutor().removeConfigureSystem(new ClientEmployeeSystem()); getExecutor().getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); } }