blob: 886b1d0aa1ee02645ff493eb661fce95b49499aa [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:
// Vikram Bhatia - initial API and implementation.
// David Minsky - tweaks and comments
package org.eclipse.persistence.testing.tests.writing;
import java.util.HashMap;
import java.util.List;
import org.eclipse.persistence.internal.helper.Helper;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.testing.framework.TestCase;
import org.eclipse.persistence.testing.framework.TestErrorException;
// MODEL SYSTEMS USED IN THIS TESTCASE FOR COMMIT ORDER TESTING
import org.eclipse.persistence.testing.models.employee.relational.EmployeeSystem;
import org.eclipse.persistence.testing.models.inheritance.InheritanceSystem;
import org.eclipse.persistence.testing.models.insurance.InsuranceSystem;
import org.eclipse.persistence.testing.models.ownership.OwnershipSystem;
/**
* This test compares a hard-coded commit order to a generated commit order from CommitManager.
* If mapped classes are added into the models above, the hard-coded commit order is no longer
* valid, and they need to be added into the expected commit order.
*/
public class CommitOrderTest extends TestCase {
private static final String expectedCommitOrder = initializeExpectedCommitOrder();
private String orderAResults = null;
private String orderBResults = null;
private String orderCResults = null;
private String orderDResults = null;
public CommitOrderTest() {
super();
setDescription("Test to verify that the generated commit order is consistent with an expected commit order.");
}
@Override
public void test() {
getSession().getProject().setDescriptors(new HashMap<>());
((DatabaseSession)getSession()).logout();
((DatabaseSession)getSession()).login();
new EmployeeSystem().addDescriptors(getDatabaseSession());
orderAResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());
getSession().getProject().setDescriptors(new HashMap<>());
((DatabaseSession)getSession()).logout();
((DatabaseSession)getSession()).login();
new InsuranceSystem().addDescriptors(getDatabaseSession());
orderBResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());
getSession().getProject().setDescriptors(new HashMap<>());
((DatabaseSession)getSession()).logout();
((DatabaseSession)getSession()).login();
new OwnershipSystem().addDescriptors(getDatabaseSession());
orderCResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());
getSession().getProject().setDescriptors(new HashMap<>());
((DatabaseSession)getSession()).logout();
((DatabaseSession)getSession()).login();
new InheritanceSystem().addDescriptors(getDatabaseSession());
orderDResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());
}
@Override
public void verify() {
if (!expectedCommitOrder.equals(orderAResults)) {
throw new TestErrorException(getErrorMessage(orderAResults));
}
if (!expectedCommitOrder.equals(orderBResults)) {
throw new TestErrorException(getErrorMessage(orderBResults));
}
if (!expectedCommitOrder.equals(orderCResults)) {
throw new TestErrorException(getErrorMessage(orderCResults));
}
if (!expectedCommitOrder.equals(orderDResults)) {
throw new TestErrorException(getErrorMessage(orderDResults));
}
}
@Override
public void reset() {
((DatabaseSession)getSession()).logout();
((DatabaseSession)getSession()).login();
orderAResults = null;
orderBResults = null;
orderCResults = null;
orderDResults = null;
}
protected String getErrorMessage(String resultList) {
StringBuilder sb = new StringBuilder();
String cr = Helper.cr();
sb.append("Error: An unexpected commit order was found.");
sb.append(cr);
sb.append("A possible cause of this problem may be additional mapped classes were added to test models used by the testcase ");
sb.append(getClass().getName());
sb.append(cr);
sb.append("Mapped classes added to these model(s) should be added into the expected commit order within this testcase.");
sb.append(cr);
sb.append("[Found commit order] : ");
sb.append(cr);
sb.append(cr);
sb.append(resultList);
sb.append(cr);
sb.append("[Expected commit order] : ");
sb.append(cr);
sb.append(cr);
sb.append(expectedCommitOrder);
return sb.toString();
}
protected String getCommitOrderListAsString(List<Class<?>> classes) {
StringBuilder sb = new StringBuilder();
String cr = Helper.cr();
for (Class<?> clazz : classes) {
sb.append(clazz.getName());
sb.append(cr);
}
return sb.toString();
}
protected static String initializeExpectedCommitOrder() {
StringBuilder sb = new StringBuilder();
String cr = Helper.cr();
sb.append("org.eclipse.persistence.testing.models.aggregate.Address").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Address1").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.AddressDescription").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Agent").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Cousin").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Aggregate").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Bicycle").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Builder").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Car").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Parent").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Child").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Client").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Company").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Computer").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Customer").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Dependant").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Employee").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Employee1").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.EvaluationClient").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Manufacturer").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.GolfClub").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.GolfClubShaft").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.HomeAddress").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.House").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Job").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Language").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Oid").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Period").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.PeriodDescription").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.ProjectDescription").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Relative").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Responsibility").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.RoomSellingPoint").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.SellingPoint").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.SingleHouse").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.StepChild").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Switch").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchState").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchStateOFF").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchStateON").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.TownHouse").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Transport").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Vehicle").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Version").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.Worker").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.WorkingAddress").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.nested.Guardian").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.nested.MailingAddress").append(cr);
sb.append("org.eclipse.persistence.testing.models.aggregate.nested.Student").append(cr);
sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadAggregate").append(cr);
sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadReferenceData").append(cr);
sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadObject").append(cr);
sb.append("org.eclipse.persistence.testing.models.collections.Diner").append(cr);
sb.append("org.eclipse.persistence.testing.models.collections.Location").append(cr);
sb.append("org.eclipse.persistence.testing.models.collections.Restaurant").append(cr);
sb.append("org.eclipse.persistence.testing.models.collections.Menu").append(cr);
sb.append("org.eclipse.persistence.testing.models.collections.MenuItem").append(cr);
sb.append("org.eclipse.persistence.testing.models.collections.Person").append(cr);
sb.append("org.eclipse.persistence.testing.models.collections.Waiter").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.Address").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.Employee").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.Child").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.EmploymentPeriod").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.LargeProject").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.PhoneNumber").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.Project").append(cr);
sb.append("org.eclipse.persistence.testing.models.employee.domain.SmallProject").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.AboutToInsertMultiTableObject").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.AboutToInsertSingleTableObject").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.Address").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.CreditCard").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.EmailAccount").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.Phone").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.Customer").append(cr);
sb.append("org.eclipse.persistence.testing.models.events.Order").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.A_1_King2").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.A_2_1_King2").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.A_2_King2").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.A_King2").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Animal_Matt").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Human").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.JavaProgrammer").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Mammal").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Primate").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Programmer").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Alligator").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Animal").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Teacher").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Apple").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.BudgettedProject").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.ProjectWorker").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.BaseProject").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Company").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Bicycle").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Boat").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Car").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.SportsCar").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.SalesRep").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.SoftwareEngineer").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Engineer").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Person").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Bus").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Cat").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.CompanyWorker").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Computer").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Developer_King").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Dog").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Entomologist").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Fruit").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.FueledVehicle").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.GrassHopper").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.IBMPC").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Insect").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.LabradorRetriever").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.LadyBug").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Mac").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Mainframe").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.NonFueledVehicle").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.PC").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Pear").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Person_King").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.SeniorDeveloper_King").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Vehicle").append(cr);
sb.append("org.eclipse.persistence.testing.models.inheritance.Worker").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.PolicyHolder").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.Address").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.BicyclePolicy").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.Policy").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.HealthPolicy").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.HousePolicy").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.VehiclePolicy").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.Claim").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.HealthClaim").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.HouseClaim").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.Phone").append(cr);
sb.append("org.eclipse.persistence.testing.models.insurance.VehicleClaim").append(cr);
sb.append("org.eclipse.persistence.testing.models.legacy.Employee").append(cr);
sb.append("org.eclipse.persistence.testing.models.legacy.Computer").append(cr);
sb.append("org.eclipse.persistence.testing.models.legacy.GaurenteedShipment").append(cr);
sb.append("org.eclipse.persistence.testing.models.legacy.InsuredShipment").append(cr);
sb.append("org.eclipse.persistence.testing.models.legacy.Shipment").append(cr);
sb.append("org.eclipse.persistence.testing.models.legacy.Order").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Address").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.BabyMonitor").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Crib").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Baby").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.CompanyCard").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Cubicle").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Employee").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Monitor").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Computer").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.EmergencyExit").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Employee1").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Employee2").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Hardware").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Identification").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Keyboard").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Joystick").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Key").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Peripheral").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Phone").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.SecureSystem").append(cr);
sb.append("org.eclipse.persistence.testing.models.mapping.Shipment").append(cr);
sb.append("org.eclipse.persistence.testing.models.multipletable.Budget").append(cr);
sb.append("org.eclipse.persistence.testing.models.multipletable.BusinessProject").append(cr);
sb.append("org.eclipse.persistence.testing.models.multipletable.LargeBusinessProject").append(cr);
sb.append("org.eclipse.persistence.testing.models.ownership.ObjectB").append(cr);
sb.append("org.eclipse.persistence.testing.models.ownership.ObjectA").append(cr);
sb.append("org.eclipse.persistence.testing.models.ownership.ObjectD").append(cr);
sb.append("org.eclipse.persistence.testing.models.ownership.ObjectC").append(cr);
sb.append("org.eclipse.persistence.testing.models.ownership.ObjectE").append(cr);
sb.append("org.eclipse.persistence.testing.models.sequencing.SeqTestClass1").append(cr);
sb.append("org.eclipse.persistence.testing.models.sequencing.SeqTestClass2").append(cr);
sb.append("org.eclipse.persistence.testing.models.vehicle.EngineType").append(cr);
sb.append("org.eclipse.persistence.testing.models.vehicle.FuelType").append(cr);
sb.append("org.eclipse.persistence.testing.models.vehicle.SportsCar").append(cr);
sb.append("org.eclipse.persistence.testing.models.vehicle.CarOwner").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.TestClass1").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.options.QueryOptionHistory").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.options.QueryOptionEmployee").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.report.Brewer").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.report.Beer").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.report.Person").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.report.Bar").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.report.History").append(cr);
sb.append("org.eclipse.persistence.testing.tests.queries.report.ReportEmployee").append(cr);
return sb.toString();
}
}