package org.eclipse.persistence.testing.tests.nonJDBC; | |
// javase imports | |
import java.io.FileInputStream; | |
import java.io.StringReader; | |
import java.util.Properties; | |
import java.util.Vector; | |
import org.w3c.dom.Document; | |
// JUnit imports | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
import static org.junit.Assert.assertTrue; | |
import static org.junit.Assert.fail; | |
// EclipseLink imports | |
import org.eclipse.persistence.internal.helper.NonSynchronizedVector; | |
import org.eclipse.persistence.internal.sessions.factories.ObjectPersistenceWorkbenchXMLProject; | |
import org.eclipse.persistence.oxm.XMLContext; | |
import org.eclipse.persistence.oxm.XMLMarshaller; | |
import org.eclipse.persistence.platform.database.oracle.plsql.OraclePLSQLTypes; | |
import org.eclipse.persistence.platform.database.oracle.plsql.PLSQLStoredProcedureCall; | |
import org.eclipse.persistence.queries.DataModifyQuery; | |
import org.eclipse.persistence.sessions.DatabaseSession; | |
import org.eclipse.persistence.sessions.Project; | |
import org.eclipse.persistence.sessions.Session; | |
import org.eclipse.persistence.sessions.factories.XMLProjectReader; | |
// Domain imports | |
import static org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.buildTestProject; | |
import static org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.buildWorkbenchXMLProject; | |
import static org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.CONSTANT_PROJECT_BUILD_VERSION; | |
import static org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.comparer; | |
import static org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.TEST_DOT_PROPERTIES_KEY; | |
import static org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.xmlParser; | |
/* | |
N == Non-JDBC type | |
j == JDBC type | |
i - IN parameter | |
o - OUT parameter | |
io - INOUT parameter | |
*/ | |
public class Ni6TestSet { | |
// testsuite fixture(s) | |
static ObjectPersistenceWorkbenchXMLProject workbenchXMLProject; | |
static Project project = null; | |
@BeforeClass | |
public static void setUpProjects() { | |
try { | |
Properties p = new Properties(); | |
String testPropertiesPath = System.getProperty(TEST_DOT_PROPERTIES_KEY); | |
p.load(new FileInputStream(testPropertiesPath)); | |
project = buildTestProject(p); | |
workbenchXMLProject = buildWorkbenchXMLProject(); | |
} | |
catch (Exception e) { | |
fail("error setting up Project's database properties " + e.getMessage()); | |
} | |
} | |
@Test | |
public void writeToXml() { | |
// (y in natural) | |
PLSQLStoredProcedureCall call = new PLSQLStoredProcedureCall(); | |
call.setProcedureName("natural_in_test"); | |
call.addNamedArgument("Y", OraclePLSQLTypes.Natural); | |
DataModifyQuery query = new DataModifyQuery(); | |
query.addArgument("Y", Integer.class); | |
query.setCall(call); | |
project.getDescriptor(Empty.class).getQueryManager().addQuery("Ni6", query); | |
Project projectToXml = (Project)project.clone(); | |
// trim off login 'cause it changes under test - this way, a comparison | |
// can be done to a control document | |
projectToXml.setDatasourceLogin(null); | |
XMLContext context = new XMLContext(workbenchXMLProject); | |
XMLMarshaller marshaller = context.createMarshaller(); | |
Document doc = marshaller.objectToXML(projectToXml); | |
Document controlDoc = xmlParser.parse(new StringReader(NI6_PROJECT_XML)); | |
assertTrue("control document not same as instance document", | |
comparer.isNodeEqual(controlDoc, doc)); | |
} | |
public static final String NI6_PROJECT_XML = | |
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + | |
"<eclipselink:object-persistence version=\"" + CONSTANT_PROJECT_BUILD_VERSION + "\"" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" + " xmlns:eclipselink=\"http://xmlns.oracle.com/ias/xsds/eclipselink\">" + | |
"<eclipselink:name>nonJDBCTestProject</eclipselink:name>" + | |
"<eclipselink:class-mapping-descriptors>" + | |
"<eclipselink:class-mapping-descriptor xsi:type=\"eclipselink:relational-class-mapping-descriptor\">" + | |
"<eclipselink:class>org.eclipse.persistence.testing.tests.nonJDBC.Empty</eclipselink:class>" + | |
"<eclipselink:alias>Empty</eclipselink:alias>" + | |
"<eclipselink:primary-key>" + | |
"<eclipselink:field table=\"EMPTY\" name=\"ID\" xsi:type=\"eclipselink:column\"/>" + | |
"</eclipselink:primary-key>" + | |
"<eclipselink:events xsi:type=\"eclipselink:event-policy\"/>" + | |
"<eclipselink:querying xsi:type=\"eclipselink:query-policy\">" + | |
"<eclipselink:queries>" + | |
"<eclipselink:query name=\"Ni6\" xsi:type=\"eclipselink:data-modify-query\">" + | |
"<eclipselink:arguments>" + | |
"<eclipselink:argument name=\"Y\">" + | |
"<eclipselink:type>java.lang.Integer</eclipselink:type>" + | |
"</eclipselink:argument>" + | |
"</eclipselink:arguments>" + | |
"<eclipselink:call xsi:type=\"eclipselink:plsql-stored-procedure-call\">" + | |
"<eclipselink:procedure-name>natural_in_test</eclipselink:procedure-name>" + | |
"<eclipselink:arguments>" + | |
"<eclipselink:argument xsi:type=\"eclipselink:plsql-type\" type-name=\"Natural\">" + | |
"<eclipselink:name>Y</eclipselink:name>" + | |
"<eclipselink:index>0</eclipselink:index>" + | |
"</eclipselink:argument>" + | |
"</eclipselink:arguments>" + | |
"</eclipselink:call>" + | |
"</eclipselink:query>" + | |
"</eclipselink:queries>" + | |
"</eclipselink:querying>" + | |
"<eclipselink:attribute-mappings>" + | |
"<eclipselink:attribute-mapping xsi:type=\"eclipselink:direct-mapping\">" + | |
"<eclipselink:attribute-name>id</eclipselink:attribute-name>" + | |
"<eclipselink:field table=\"EMPTY\" name=\"ID\" xsi:type=\"eclipselink:column\"/>" + | |
"</eclipselink:attribute-mapping>" + | |
"</eclipselink:attribute-mappings>" + | |
"<eclipselink:descriptor-type>independent</eclipselink:descriptor-type>" + | |
"<eclipselink:instantiation/>" + | |
"<eclipselink:copying xsi:type=\"eclipselink:instantiation-copy-policy\"/>" + | |
"<eclipselink:tables>" + | |
"<eclipselink:table name=\"EMPTY\"/>" + | |
"</eclipselink:tables>" + | |
"</eclipselink:class-mapping-descriptor>" + | |
"</eclipselink:class-mapping-descriptors>" + | |
"</eclipselink:object-persistence>"; | |
@Test | |
public void readFromXml() { | |
Project projectFromXML = XMLProjectReader.read(new StringReader(NI6_PROJECT_XML), | |
this.getClass().getClassLoader()); | |
projectFromXML.setDatasourceLogin(project.getDatasourceLogin()); | |
project = projectFromXML; | |
} | |
@SuppressWarnings("unchecked") | |
@Test | |
public void runQuery() { | |
Session s = project.createDatabaseSession(); | |
s.dontLogMessages(); | |
((DatabaseSession)s).login(); | |
Vector queryArgs = new NonSynchronizedVector(); | |
queryArgs.add(Integer.valueOf(6)); | |
boolean worked = false; | |
String msg = null; | |
try { | |
s.executeQuery("Ni6", Empty.class, queryArgs); | |
worked = true; | |
} | |
catch (Exception e) { | |
msg = e.getMessage(); | |
} | |
assertTrue("invocation natural_in_test failed: " + msg, worked); | |
((DatabaseSession)s).logout(); | |
} | |
} |