| /* |
| * 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(); |
| } |
| } |