/******************************************************************************* * 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: * James - initial impl ******************************************************************************/ package org.eclipse.persistence.testing.tests.plsql; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Vector; import org.eclipse.persistence.exceptions.QueryException; import org.eclipse.persistence.sessions.DatabaseRecord; import org.eclipse.persistence.testing.framework.*; import org.eclipse.persistence.testing.models.plsql.Address; import org.eclipse.persistence.testing.models.plsql.Employee; import org.eclipse.persistence.testing.models.plsql.PLSQLSystem; import org.eclipse.persistence.testing.models.plsql.Phone; /** * This model tests calling PLSQL stored procedures with PLSQL types. */ public class PLSQLTestModel extends TestModel { public PLSQLTestModel() { setDescription("This model tests calling PLSQL stored procedures with PLSQL types."); } public void addRequiredSystems() { if (!getSession().getLogin().getPlatform().isOracle()) { warning("PLSQL is only supported on Oracle."); } addRequiredSystem(new PLSQLSystem()); } public void addTests() { addTest(getSimpleTestSuite()); addTest(getRecordTestSuite()); addTest(getCollectionTestSuite()); addTest(getFunctionTestSuite()); addTest(getErrorTestSuite()); } public static TestSuite getErrorTestSuite() { TestSuite suite = new TestSuite(); suite.setName("PLSQLErrorTestSuite"); suite.setDescription("This suite tests calling PLSQL procedures with invalid arguments."); List args = new ArrayList(); PLSQLTest test = new PLSQLTest("BadAddressOut", Address.class, args, QueryException.typeNameNotSet(null)); test.setName("BadAddressOutTest"); suite.addTest(test); args = new ArrayList(); test = new PLSQLTest("MissingTypeAddressListOut", Address.class, args, QueryException.compatibleTypeNotSet(null)); test.setName("MissingTypeAddressListOutTest"); suite.addTest(test); Employee employee = new Employee(); employee.setId(new BigDecimal(123)); employee.setName("Bad Jones"); args = new ArrayList(); DatabaseRecord result = new DatabaseRecord(); result.put("P_EMP", employee); result.put("P_CITY", "Nepean"); args.add(employee); args.add("Nepean"); test = new PLSQLTest("EmployeeInOutObject", Employee.class, args, result); test.setName("EmptyEmployeeInOutObjectTest"); // PLSQL does not seem to allow empty collections. // suite.addTest(test); return suite; } public static TestSuite getSimpleTestSuite() { TestSuite suite = new TestSuite(); suite.setName("PLSQLSimpleTestSuite"); suite.setDescription("This suite tests calling PLSQL procedures that take simple types."); List args = new ArrayList(); args.add("varchar"); args.add(new Integer(1)); args.add(new Integer(123)); args.add(new BigDecimal("123.6")); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new BigDecimal("123.5")); PLSQLTest test = new PLSQLTest("SimpleIn", Address.class, args); test.setName("SimpleInTest"); suite.addTest(test); args = new ArrayList(); args.add(new Integer(1)); args.add(new Integer(123)); args.add(new BigDecimal("123.6")); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new BigDecimal("123.5")); test = new PLSQLTest("SimpleInDefaults", Address.class, args); test.setName("SimpleInDefaults"); suite.addTest(test); args = new ArrayList(); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); args.add(null); test = new PLSQLTest("SimpleInDefaults2", Address.class, args); test.setName("SimpleInDefaults2"); suite.addTest(test); args = new ArrayList(); test = new PLSQLTest("SimpleOut", Address.class, args); test.setName("SimpleOutTest"); suite.addTest(test); args = new ArrayList(); args.add("varchar"); args.add(new Integer(1)); args.add(new Integer(123)); args.add(new BigDecimal("123.6")); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new BigDecimal("123.5")); test = new PLSQLTest("SimpleInOut", Address.class, args); test.setName("SimpleInOutTest"); suite.addTest(test); return suite; } public static TestSuite getFunctionTestSuite() { TestSuite suite = new TestSuite(); suite.setName("PLSQLFunctionTestSuite"); suite.setDescription("This suite tests calling PLSQL functions."); List args = new ArrayList(); args.add("varchar"); args.add(new Integer(1)); args.add(new Integer(123)); args.add(new BigDecimal("123.6")); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new Integer(1)); args.add(new BigDecimal("123.5")); PLSQLTest test = new PLSQLTest("SimpleInFunc", Address.class, args); test.setName("SimpleInFuncTest"); suite.addTest(test); Address resultAddress = new Address(); resultAddress.setId(new BigDecimal(1234)); resultAddress.setNumber(17); resultAddress.setStreet("Bank"); resultAddress.setCity("Ottawa"); resultAddress.setState("ON"); args = new ArrayList(); DatabaseRecord result = new DatabaseRecord(); result.put("RESULT", resultAddress); test = new PLSQLTest("AddressOutObjectFunc", Address.class, args, result); test.setName("AddressOutFuncTest"); suite.addTest(test); return suite; } public static TestSuite getRecordTestSuite() { TestSuite suite = new TestSuite(); suite.setName("PLSQLRecordTestSuite"); suite.setDescription("This suite tests calling PLSQL procedures that take records."); Address address = new Address(); address.setId(new BigDecimal(123)); address.setNumber(17); address.setStreet("Bank"); address.setCity("Ottawa"); address.setState("ON"); Address resultAddress = new Address(); resultAddress.setId(new BigDecimal(1234)); resultAddress.setNumber(17); resultAddress.setStreet("Bank"); resultAddress.setCity("Ottawa"); resultAddress.setState("ON"); Phone phone = new Phone(); phone.setAreaCode("613"); phone.setNumber("7927711"); Employee employee = new Employee(); employee.setId(new BigDecimal(123)); employee.setName("Bob Jones"); employee.setAddress(address); employee.getPhones().add(phone); List args = new ArrayList(); args.add(address); DatabaseRecord result = new DatabaseRecord(); result.put("P_ADDRESS", resultAddress); PLSQLTest test = new PLSQLTest("AddressInOutObject", Address.class, args, result); test.setName("AddressInOutObjectTest"); suite.addTest(test); args = new ArrayList(); args.add(address.getId()); args.add(address.getNumber()); args.add(address.getStreet()); args.add(address.getCity()); args.add(address.getState()); args.add("Local"); result = new DatabaseRecord(); result.put("ADDRESS_ID", resultAddress.getId()); result.put("ADDRESS_NUM", resultAddress.getNumber()); result.put("STREET", resultAddress.getStreet()); result.put("CITY", resultAddress.getCity()); result.put("STATE", resultAddress.getState()); result.put("P_LOCAL", "Nepean"); test = new PLSQLTest("AddressInOutData", Address.class, args); test.setName("AddressInOutDataTest"); suite.addTest(test); args = new ArrayList(); args.add(address.getId()); args.add(address.getNumber()); args.add(address.getStreet()); args.add(address.getCity()); args.add(address.getState()); args.add("Local"); test = new PLSQLTest("AddressInData", Address.class, args); test.setName("AddressInDataTest"); suite.addTest(test); args = new ArrayList(); args.add(address); test = new PLSQLTest("AddressInObject", Address.class, args); test.setName("AddressInObjectTest"); suite.addTest(test); args = new ArrayList(); result = new DatabaseRecord(); result.put("P_ADDRESS", resultAddress); test = new PLSQLTest("AddressOutObject", Address.class, args, result); test.setName("AddressOutTest"); suite.addTest(test); args = new ArrayList(); result = new DatabaseRecord(); result.put("ADDRESS_ID", resultAddress.getId()); result.put("STREET_NUM", resultAddress.getNumber()); result.put("STREET", resultAddress.getStreet()); result.put("CITY", resultAddress.getCity()); result.put("STATE", resultAddress.getState()); result.put("P_LOCAL", "Local"); test = new PLSQLTest("AddressOutData", Address.class, args, result); test.setName("AddressOutDataTest"); suite.addTest(test); args = new ArrayList(); args.add(employee); args.add("Nepean"); test = new PLSQLTest("EmployeeInObject", Employee.class, args); test.setName("EmployeeInObjectTest"); suite.addTest(test); args = new ArrayList(); result = new DatabaseRecord(); result.put("P_EMP", new Employee()); result.put("P_CITY", "Nepean"); test = new PLSQLTest("EmployeeOutObject", Employee.class, args, result); test.setName("EmployeeOutTest"); suite.addTest(test); args = new ArrayList(); result = new DatabaseRecord(); result.put("P_EMP", employee); result.put("P_CITY", "Nepean"); args.add(employee); args.add("Nepean"); test = new PLSQLTest("EmployeeInOutObject", Employee.class, args, result); test.setName("EmployeeInOutObjectTest"); suite.addTest(test); test = new PLSQLTest("AddressOutCursor", Address.class, new ArrayList(), new Vector()); test.setName("AddressOutCursorTest"); suite.addTest(test); test = new PLSQLTest("AddressRecOutCursor", Address.class, new ArrayList(), new Vector()); test.setName("AddressRecOutCursorTest"); suite.addTest(test); return suite; } public static TestSuite getCollectionTestSuite() { TestSuite suite = new TestSuite(); suite.setName("PLSQLCollectionTestSuite"); suite.setDescription("This suite tests calling PLSQL procedures that take collections."); Address address = new Address(); address.setId(new BigDecimal(123)); address.setNumber(17); address.setStreet("Bank"); address.setCity("Ottawa"); address.setState("ON"); Phone phone = new Phone(); phone.setAreaCode("613"); phone.setNumber("7927711"); Employee employee = new Employee(); employee.setId(new BigDecimal(123)); employee.setName("Bob Jones"); employee.setAddress(address); employee.getPhones().add(phone); List args = new ArrayList(); DatabaseRecord result = new DatabaseRecord(); List collection = new ArrayList(); collection.add("Ottawa"); result.put("P_CITY_LIST", collection); result.put("P_CITY", "Nepean"); PLSQLTest test = new PLSQLTest("CityListOut", Address.class, args, result); test.setName("CityListOutTest"); suite.addTest(test); args = new ArrayList(); collection = new ArrayList(Arrays.asList(new String[] { "Ottawa", "Toronto" })); args.add(collection); args.add("Nepean"); result = new DatabaseRecord(); result.put("P_CITY_LIST", collection); result.put("P_CITY", "Nepean"); test = new PLSQLTest("CityListInOut", Address.class, args, result); test.setName("CityListInOutTest"); suite.addTest(test); args = new ArrayList(); args.add(new Object[] { address, address }); args.add("Nepean"); test = new PLSQLTest("AddressListIn", Address.class, args); test.setName("AddressListInTest"); suite.addTest(test); args = new ArrayList(); result = new DatabaseRecord(); result.put("P_ADDRESS_LIST", new ArrayList()); result.put("P_CITY", "Nepean"); test = new PLSQLTest("AddressListOut", Address.class, args, result); test.setName("AddressListOutTest"); suite.addTest(test); args = new ArrayList(); collection = new ArrayList(Arrays.asList(new Object[] { address, address })); args.add(collection); args.add("Nepean"); result = new DatabaseRecord(); result.put("P_ADDRESS_LIST", collection); result.put("P_CITY", "Nepean"); test = new PLSQLTest("AddressListInOut", Address.class, args, result); test.setName("AddressListInOutTest"); suite.addTest(test); args = new ArrayList(); args.add(new Object[] { employee, employee }); args.add("Nepean"); test = new PLSQLTest("EmployeeListIn", Employee.class, args); test.setName("EmployeeListInTest"); suite.addTest(test); args = new ArrayList(); result = new DatabaseRecord(); result.put("P_EMP_LIST", new ArrayList()); result.put("P_CITY", "Nepean"); test = new PLSQLTest("EmployeeListOut", Employee.class, args, result); test.setName("EmployeeListOutTest"); suite.addTest(test); args = new ArrayList(); collection = new ArrayList(Arrays.asList(new Object[] { employee, employee })); args.add(collection); args.add("Nepean"); result = new DatabaseRecord(); result.put("P_EMP_LIST", collection); result.put("P_CITY", "Nepean"); test = new PLSQLTest("EmployeeListInOut", Employee.class, args, result); test.setName("EmployeeListInOutTest"); suite.addTest(test); return suite; } }