/******************************************************************************* * 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: * 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."); } 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()); } 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)); } } public void reset() { ((DatabaseSession)getSession()).logout(); ((DatabaseSession)getSession()).login(); orderAResults = null; orderBResults = null; orderCResults = null; orderDResults = null; } protected String getErrorMessage(String resultList) { StringBuffer sb = new StringBuffer(); 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) { StringBuffer sb = new StringBuffer(); String cr = Helper.cr(); for (Class clazz : classes) { sb.append(clazz.getName()); sb.append(cr); } return sb.toString(); } protected static String initializeExpectedCommitOrder() { StringBuffer sb = new StringBuffer(); String cr = Helper.cr(); sb.append("org.eclipse.persistence.testing.models.aggregate.Address" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Address1" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.AddressDescription" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Agent" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Cousin" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Aggregate" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Bicycle" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Builder" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Car" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Parent" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Child" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Client" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Company" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Computer" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Customer" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Dependant" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Employee" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Employee1" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.EvaluationClient" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Manufacturer" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.GolfClub" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.GolfClubShaft" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.HomeAddress" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.House" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Job" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Language" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Oid" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Period" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.PeriodDescription" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.ProjectDescription" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Relative" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Responsibility" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.RoomSellingPoint" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.SellingPoint" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.SingleHouse" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.StepChild" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Switch" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchState" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchStateOFF" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchStateON" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.TownHouse" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Transport" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Vehicle" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Version" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.Worker" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.WorkingAddress" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.nested.Guardian" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.nested.MailingAddress" + cr); sb.append("org.eclipse.persistence.testing.models.aggregate.nested.Student" + cr); sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadAggregate" + cr); sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadReferenceData" + cr); sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadObject" + cr); sb.append("org.eclipse.persistence.testing.models.collections.Diner" + cr); sb.append("org.eclipse.persistence.testing.models.collections.Location" + cr); sb.append("org.eclipse.persistence.testing.models.collections.Restaurant" + cr); sb.append("org.eclipse.persistence.testing.models.collections.Menu" + cr); sb.append("org.eclipse.persistence.testing.models.collections.MenuItem" + cr); sb.append("org.eclipse.persistence.testing.models.collections.Person" + cr); sb.append("org.eclipse.persistence.testing.models.collections.Waiter" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.Address" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.Employee" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.Child" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.EmploymentPeriod" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.LargeProject" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.PhoneNumber" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.Project" + cr); sb.append("org.eclipse.persistence.testing.models.employee.domain.SmallProject" + cr); sb.append("org.eclipse.persistence.testing.models.events.AboutToInsertMultiTableObject" + cr); sb.append("org.eclipse.persistence.testing.models.events.AboutToInsertSingleTableObject" + cr); sb.append("org.eclipse.persistence.testing.models.events.Address" + cr); sb.append("org.eclipse.persistence.testing.models.events.CreditCard" + cr); sb.append("org.eclipse.persistence.testing.models.events.EmailAccount" + cr); sb.append("org.eclipse.persistence.testing.models.events.Phone" + cr); sb.append("org.eclipse.persistence.testing.models.events.Customer" + cr); sb.append("org.eclipse.persistence.testing.models.events.Order" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.A_1_King2" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.A_2_1_King2" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.A_2_King2" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.A_King2" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Animal_Matt" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Human" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.JavaProgrammer" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Mammal" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Primate" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Programmer" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Alligator" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Animal" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Teacher" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Apple" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.BudgettedProject" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.ProjectWorker" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.BaseProject" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Company" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Bicycle" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Boat" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Car" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.SportsCar" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.SalesRep" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.SoftwareEngineer" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Engineer" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Person" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Bus" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Cat" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.CompanyWorker" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Computer" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Developer_King" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Dog" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Entomologist" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Fruit" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.FueledVehicle" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.GrassHopper" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.IBMPC" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Insect" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.LabradorRetriever" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.LadyBug" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Mac" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Mainframe" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.NonFueledVehicle" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.PC" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Pear" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Person_King" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.SeniorDeveloper_King" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Vehicle" + cr); sb.append("org.eclipse.persistence.testing.models.inheritance.Worker" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.PolicyHolder" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.Address" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.BicyclePolicy" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.Policy" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.HealthPolicy" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.HousePolicy" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.VehiclePolicy" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.Claim" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.HealthClaim" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.HouseClaim" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.Phone" + cr); sb.append("org.eclipse.persistence.testing.models.insurance.VehicleClaim" + cr); sb.append("org.eclipse.persistence.testing.models.legacy.Employee" + cr); sb.append("org.eclipse.persistence.testing.models.legacy.Computer" + cr); sb.append("org.eclipse.persistence.testing.models.legacy.GaurenteedShipment" + cr); sb.append("org.eclipse.persistence.testing.models.legacy.InsuredShipment" + cr); sb.append("org.eclipse.persistence.testing.models.legacy.Shipment" + cr); sb.append("org.eclipse.persistence.testing.models.legacy.Order" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Address" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.BabyMonitor" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Crib" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Baby" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.CompanyCard" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Cubicle" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Employee" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Monitor" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Computer" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.EmergencyExit" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Employee1" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Employee2" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Hardware" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Identification" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Keyboard" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Joystick" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Key" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Peripheral" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Phone" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.SecureSystem" + cr); sb.append("org.eclipse.persistence.testing.models.mapping.Shipment" + cr); sb.append("org.eclipse.persistence.testing.models.multipletable.Budget" + cr); sb.append("org.eclipse.persistence.testing.models.multipletable.BusinessProject" + cr); sb.append("org.eclipse.persistence.testing.models.multipletable.LargeBusinessProject" + cr); sb.append("org.eclipse.persistence.testing.models.ownership.ObjectB" + cr); sb.append("org.eclipse.persistence.testing.models.ownership.ObjectA" + cr); sb.append("org.eclipse.persistence.testing.models.ownership.ObjectD" + cr); sb.append("org.eclipse.persistence.testing.models.ownership.ObjectC" + cr); sb.append("org.eclipse.persistence.testing.models.ownership.ObjectE" + cr); sb.append("org.eclipse.persistence.testing.models.sequencing.SeqTestClass1" + cr); sb.append("org.eclipse.persistence.testing.models.sequencing.SeqTestClass2" + cr); sb.append("org.eclipse.persistence.testing.models.vehicle.EngineType" + cr); sb.append("org.eclipse.persistence.testing.models.vehicle.FuelType" + cr); sb.append("org.eclipse.persistence.testing.models.vehicle.SportsCar" + cr); sb.append("org.eclipse.persistence.testing.models.vehicle.CarOwner" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.TestClass1" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.options.QueryOptionHistory" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.options.QueryOptionEmployee" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.report.Brewer" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.report.Beer" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.report.Person" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.report.Bar" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.report.History" + cr); sb.append("org.eclipse.persistence.testing.tests.queries.report.ReportEmployee" + cr); return sb.toString(); } }