/******************************************************************************* * 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.remote; import org.eclipse.persistence.sessions.*; import org.eclipse.persistence.testing.tests.employee.EmployeeBasicTestModel; import org.eclipse.persistence.testing.tests.insurance.InsuranceBasicTestModel; import org.eclipse.persistence.testing.tests.writing.*; import org.eclipse.persistence.testing.tests.queries.*; import org.eclipse.persistence.testing.models.readonly.*; import org.eclipse.persistence.testing.framework.*; import org.eclipse.persistence.testing.models.transparentindirection.*; import org.eclipse.persistence.testing.tests.transparentindirection.*; import org.eclipse.persistence.testing.models.inheritance.InheritanceSystem; public abstract class RemoteModel extends TestModel { public static Session originalSession; protected static Session serverSession; public RemoteModel() { setDescription("It tests TopLink three tier model."); } public void addRequiredSystems() { addRequiredSystem(new org.eclipse.persistence.testing.models.employee.relational.EmployeeSystem()); addRequiredSystem(new org.eclipse.persistence.testing.models.insurance.InsuranceSystem()); addRequiredSystem(new org.eclipse.persistence.testing.tests.unitofwork.UOWSystem()); addRequiredSystem(new org.eclipse.persistence.testing.models.mapping.MappingSystem()); addRequiredSystem(new org.eclipse.persistence.testing.models.ownership.OwnershipSystem()); addRequiredSystem(new InheritanceSystem()); addRequiredSystem(new IndirectListSystem()); addRequiredSystem(new IndirectMapSystem()); addRequiredSystem(new MasterSlaveSystem()); addRequiredSystem(new ReadOnlySystem()); addRequiredSystem(new org.eclipse.persistence.testing.tests.queries.options.QueryOptionSystem()); addRequiredSystem(new org.eclipse.persistence.testing.tests.queries.report.ReportQuerySystem()); } public void addTests() { addTest(getBasicReadTestSuite()); addTest(getBasicUnitOfWorkTestSuite()); addTest(getUnitOfWorkEventTestSuite()); addTest(getFeatureTestSuite()); addTest(getQueryTestSuite()); addTest(getRefreshObjectTestSuite()); addTest(new org.eclipse.persistence.testing.tests.queries.report.ReportQueryTestSuite()); addTest(getTransparentIndirectionTestSuite()); addTest(new RemoteValueHolderGarbageCollectedOriginalTest(getSession())); } public Session buildServerSession() { org.eclipse.persistence.sessions.server.ServerSession server = (org.eclipse.persistence.sessions.server.ServerSession)((org.eclipse.persistence.sessions.Project)getSession().getProject().clone()).createServerSession(); server.setSessionLog(getSession().getSessionLog()); server.login(); // Explicitly add a default read-only class to the server session since the default read-only // classes are not transferred at set up time in the test framework. getSession().getProject().addDefaultReadOnlyClass(DefaultReadOnlyTestClass.class); serverSession = server.acquireClientSession(); return serverSession; } public static TestSuite getBasicReadTestSuite() { TestSuite suite = new TestSuite(); suite.setName("BasicReadTestSuite"); suite.setDescription("This suite tests the reading of objects remotely."); suite.addTest(EmployeeBasicTestModel.getReadObjectTestSuite()); suite.addTest(EmployeeBasicTestModel.getReadAllTestSuite()); suite.addTest(InsuranceBasicTestModel.getReadObjectTestSuite()); suite.addTest(InsuranceBasicTestModel.getReadAllTestSuite()); return suite; } public static TestSuite getBasicUnitOfWorkTestSuite() { return ComplexUpdateAndUnitOfWorkTestModel.getUnitOfWorkTestSuite(); } public static TestSuite getFeatureTestSuite() { TestSuite suite = new TestSuite(); suite.setName("FeatureTestSuite"); suite.setDescription("This suite tests the features on the remote model."); suite.addTest(new CursoredStreamTest(org.eclipse.persistence.testing.models.employee.domain.Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("address").get("city").notEqual("Tuck chu"))); suite.addTest(new ScrollableCursorTest(org.eclipse.persistence.testing.models.employee.domain.Employee.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("firstName").like("B%"))); suite.addTest(new ScrollableCursorTest(org.eclipse.persistence.testing.models.employee.domain.LargeProject.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("teamLeader").get("firstName").like("Sarah%"))); suite.addTest(new ScrollableCursorAPITest()); suite.addTest(new ScrollableCursorBackwardReadingTest()); suite.addTest(new ScrollableCursorNavigationAPITest()); suite.addTest(new PredefinedQueryReadObjectTest(org.eclipse.persistence.tools.schemaframework.PopulationManager.getDefaultManager().getObject(org.eclipse.persistence.testing.models.employee.domain.Employee.class, "0001"))); suite.addTest(new PredefinedInQueryReadAllTest(org.eclipse.persistence.testing.models.employee.domain.Employee.class, 1)); suite.addTest(new PessimisticLockTest(org.eclipse.persistence.queries.ObjectLevelReadQuery.LOCK)); suite.addTest(new PessimisticLockTest(org.eclipse.persistence.queries.ObjectLevelReadQuery.LOCK_NOWAIT)); suite.addTest(new org.eclipse.persistence.testing.tests.feature.PrintIdentityMapTest(org.eclipse.persistence.testing.models.employee.domain.Employee.class)); suite.addTest(new org.eclipse.persistence.testing.tests.feature.PrintIdentityMapTest()); suite.addTest(new DefaultReadOnlyClassTest()); suite.addTest(new RemoteSessionReadTimeTransferTest()); suite.addTest(new CacheExpiryRemoteTest()); return suite; } public static TestSuite getQueryTestSuite() { TestSuite suite = new TestSuite(); suite.setName("QueryTestSuite"); suite.setDescription("This suite tests features of queries (cascading, cache updating)."); suite.addTest(new RefreshTest()); suite.addTest(new RefreshCascadeNonPrivateTest()); suite.addTest(new CascadeWithoutIMOnRemote()); /** Test cascaded read queries */ suite.addTest(new CascadingAllCacheTest()); suite.addTest(new CascadingAllNoCacheTest()); suite.addTest(new CascadingNoneCacheTest()); suite.addTest(new CascadingNoneNoCacheTest()); suite.addTest(new CascadingPrivateCacheTest()); suite.addTest(new CascadingPrivateNoCacheTest()); suite.addTest(new ReadingThroughRemoteScrollableCursor()); suite.addTest(new BatchReadingForDirectCollectionMapping()); suite.addTest(new PredefinedQueryFromRemoteSessionTest()); suite.addTest(new QueryCacheHitEnabledAndDescriptorDisabledOnRemoteTest()); suite.addTest(new QueryCacheHitUndefinedAndDescriptorEnabledOnRemoteTest()); suite.addTest(new QueryCacheHitUndefinedAndDescriptorDisabledOnRemoteTest()); suite.addTest(new QueryCacheTest()); return suite; } public static TestSuite getRefreshObjectTestSuite() { TestSuite suite = new TestSuite(); suite.setName("RefreshObjectTestSuite"); suite.setDescription("This suite tests remote refreshing: Checks if null pointer exception is thrown."); suite.addTest(new RefreshObjectTest()); suite.addTest(new DescriptorRefreshCacheOnRemoteTest()); suite.addTest(new RefreshMaintainIdentityTest()); suite.addTest(new RefreshRemoteIdentityMapResultsTest()); return suite; } public static Session getServerSession() { return serverSession; } public static TestSuite getTransparentIndirectionTestSuite() { TestSuite suite = new TestSuite(); suite.setName("TransparentIndirectionTestSuite"); suite.setDescription("Test remote Transparent Indirection"); suite.addTest(new ZTestSuite(IndirectListTestDatabaseRemote.class)); suite.addTest(new ZTestSuite(IndirectMapTestDatabaseRemote.class)); suite.addTest(new RemoteDataReadQueryTest()); return suite; } public TestSuite getUnitOfWorkEventTestSuite() { TestSuite suite = new org.eclipse.persistence.testing.tests.unitofwork.UnitOfWorkEventTestSuite(); return suite; } public void reset() { // Setup might not be run yet. if (originalSession != null) { getExecutor().getSession().release(); getExecutor().setSession(originalSession); } getServerSession().release(); ((org.eclipse.persistence.sessions.server.ClientSession)getServerSession()).getParent().logout(); } public static void setServerSession(Session session) { serverSession = session; } public abstract void setup(); }