blob: 9c1bc2e87dd962016d6e5a2634a4defb941e9994 [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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.sessionsxml;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Vector;
import org.eclipse.persistence.oxm.XMLContext;
import org.eclipse.persistence.oxm.XMLUnmarshaller;
import org.eclipse.persistence.testing.framework.AutoVerifyTestCase;
import org.eclipse.persistence.testing.framework.TestErrorException;
import org.eclipse.persistence.internal.sessions.factories.*;
import org.eclipse.persistence.internal.sessions.factories.model.SessionConfigs;
import org.eclipse.persistence.internal.sessions.factories.model.log.DefaultSessionLogConfig;
import org.eclipse.persistence.internal.sessions.factories.model.login.DatabaseLoginConfig;
import org.eclipse.persistence.internal.sessions.factories.model.platform.CustomServerPlatformConfig;
import org.eclipse.persistence.internal.sessions.factories.model.platform.ServerPlatformConfig;
import org.eclipse.persistence.internal.sessions.factories.model.pool.PoolsConfig;
import org.eclipse.persistence.internal.sessions.factories.model.pool.ReadConnectionPoolConfig;
import org.eclipse.persistence.internal.sessions.factories.model.pool.WriteConnectionPoolConfig;
import org.eclipse.persistence.internal.sessions.factories.model.project.ProjectClassConfig;
import org.eclipse.persistence.internal.sessions.factories.model.property.PropertyConfig;
import org.eclipse.persistence.internal.sessions.factories.model.rcm.RemoteCommandManagerConfig;
import org.eclipse.persistence.internal.sessions.factories.model.session.DatabaseSessionConfig;
import org.eclipse.persistence.internal.sessions.factories.model.session.ServerSessionConfig;
import org.eclipse.persistence.internal.sessions.factories.model.transport.JMSTopicTransportManagerConfig;
import org.eclipse.persistence.internal.sessions.factories.model.transport.naming.JNDINamingServiceConfig;
/**
* Tests the OX writing portion of the XMLSessionConfig model.
*
* @author Guy Pelletier
* @version 1.0
*/
public class SessionsXMLSchemaWriteTest extends AutoVerifyTestCase {
private File m_resource;
private DatabaseSessionConfig m_session;
public SessionsXMLSchemaWriteTest() {
setDescription("Test the writing portion of the session xml against the XML Schema");
}
@Override
public void reset() {
}
@Override
protected void setup() throws Exception {
m_resource = new File("XMLSchemaWriteTest.xml");
SessionConfigs sessions = new SessionConfigs();
DatabaseSessionConfig dbSessionConfig = new DatabaseSessionConfig();
// Exception handler class
dbSessionConfig.setExceptionHandlerClass("handlerClass");
// CustomServerPlatformConfid & External transaction controller
CustomServerPlatformConfig platformConfig = new CustomServerPlatformConfig();
platformConfig.setExternalTransactionControllerClass("externalTransactionController");
dbSessionConfig.setServerPlatformConfig(platformConfig);
// Log config
DefaultSessionLogConfig logConfig = new DefaultSessionLogConfig();
logConfig.setLogLevel("severe");
logConfig.setFilename("logfile");
dbSessionConfig.setLogConfig(logConfig);
// Login
DatabaseLoginConfig loginConfig = new DatabaseLoginConfig();
loginConfig.setBatchWriting(true);
loginConfig.setBindAllParameters(true);
loginConfig.setByteArrayBinding(false);
loginConfig.setCacheAllStatements(false);
loginConfig.setConnectionURL("jdbc:oracle:thin:@otl-ora8infmx73:1521:toplinkj");
loginConfig.setDriverClass("oracle.jdbc.OracleDriver");
loginConfig.setExternalConnectionPooling(false);
loginConfig.setExternalTransactionController(false);
loginConfig.setForceFieldNamesToUppercase(false);
loginConfig.setJdbcBatchWriting(false);
loginConfig.setMaxBatchWritingSize(5);
loginConfig.setNativeSequencing(false);
loginConfig.setNativeSQL(false);
loginConfig.setOptimizeDataConversion(true);
loginConfig.setPassword("password");
loginConfig.setPlatformClass("platform");
loginConfig.setSequenceCounterField("SEQ_COUNT");
loginConfig.setSequenceNameField("SEQ_NAME");
loginConfig.setSequencePreallocationSize(99);
loginConfig.setSequenceTable("\"SEQUENCE\"");
loginConfig.setStreamsForBinding(false);
loginConfig.setStringBinding(false);
loginConfig.setTableQualifier("table:");
loginConfig.setTrimStrings(true);
loginConfig.setUsername("tljtest1");
dbSessionConfig.setLoginConfig(loginConfig);
// Name
dbSessionConfig.setName("EmployeeSession");
// Profiler
dbSessionConfig.setProfiler("toplink");
// Primary project
ProjectClassConfig projectConfig = new ProjectClassConfig();
projectConfig.setProjectString("org.eclipse.persistence.demos.employee.relational.EmployeeProject");
dbSessionConfig.setPrimaryProject(projectConfig);
// Remote command manager
RemoteCommandManagerConfig rcmConfig = new RemoteCommandManagerConfig();
rcmConfig.setChannel("new_channel");
// Transport Manager
JMSTopicTransportManagerConfig transportConfig = new JMSTopicTransportManagerConfig();
transportConfig.setOnConnectionError("KeepConnection");
transportConfig.setTopicHostURL("ormi://jms_topic_host");
transportConfig.setTopicConnectionFactoryName("test-topic-connection-factory-name");
transportConfig.setTopicName("test-topic-name");
// Naming
JNDINamingServiceConfig namingConfig = new JNDINamingServiceConfig();
namingConfig.setURL("new_jndi_url");
namingConfig.setUsername("guy");
namingConfig.setPassword("password");
namingConfig.setInitialContextFactoryName("new_initial_context_factory_name");
Vector props = new Vector();
PropertyConfig one = new PropertyConfig();
one.setName("name1");
one.setValue("value1");
props.add(one);
PropertyConfig two = new PropertyConfig();
two.setName("name2");
two.setValue("value2");
props.add(two);
namingConfig.setPropertyConfigs(props);
transportConfig.setJNDINamingServiceConfig(namingConfig);
rcmConfig.setTransportManagerConfig(transportConfig);
dbSessionConfig.setRemoteCommandManagerConfig(rcmConfig);
// Session customizer
dbSessionConfig.setSessionCustomizerClass("sessionCustomizer");
sessions.addSessionConfig(dbSessionConfig);
ServerSessionConfig serverSessionConfig = new ServerSessionConfig();
serverSessionConfig.setPoolsConfig(new PoolsConfig());
ReadConnectionPoolConfig readPool = new ReadConnectionPoolConfig();
readPool.setMaxConnections(2);
readPool.setMinConnections(2);
serverSessionConfig.getPoolsConfig().setReadConnectionPoolConfig(readPool);
WriteConnectionPoolConfig writePool = new WriteConnectionPoolConfig();
writePool.setMaxConnections(10);
writePool.setMinConnections(5);
serverSessionConfig.getPoolsConfig().setWriteConnectionPoolConfig(writePool);
WriteConnectionPoolConfig userPool = new WriteConnectionPoolConfig();
userPool.setMaxConnections(5);
userPool.setMinConnections(0);
serverSessionConfig.getPoolsConfig().addConnectionPoolConfig(userPool);
sessions.addSessionConfig(serverSessionConfig);
FileWriter writer = new FileWriter(m_resource);
XMLSessionConfigWriter.write(sessions, writer);
writer.close();
}
@Override
public void test() {
try {
FileReader reader = new FileReader(m_resource);
// XMLSessionConfigWriter uses the latest version of XMLSessionConfigProject to write;
// therefore the latest version of XMLSessionConfigWriter should be used for reading, too.
XMLContext context = new XMLContext(new XMLSessionConfigProject_11_1_1());
XMLUnmarshaller unmarshaller = context.createUnmarshaller();
SessionConfigs eclipseLinkSessions = (SessionConfigs)unmarshaller.unmarshal(reader);
m_session = (DatabaseSessionConfig)eclipseLinkSessions.getSessionConfigs().firstElement();
} catch (Exception exception) {
m_session = null;
}
}
@Override
protected void verify() {
if (m_session == null) {
throw new TestErrorException("The session on read back was null");
}
// Name
check("Name", m_session.getName(), "EmployeeSession");
// Profiler
check("Profiler", m_session.getProfiler(), "toplink");
// Primary project
if (m_session.getPrimaryProject() != null) {
check("ProjectClass", m_session.getPrimaryProject().getProjectString(), "org.eclipse.persistence.demos.employee.relational.EmployeeProject");
} else {
throw new TestErrorException("ProjectClass was null");
}
// Exception handler class
check("ExceptionHandlerClass", m_session.getExceptionHandlerClass(), "handlerClass");
// guy
// Custom server platform config
if (m_session.getServerPlatformConfig() != null) {
ServerPlatformConfig platformConfig = m_session.getServerPlatformConfig();
if (platformConfig instanceof CustomServerPlatformConfig) {
check("ExternalTransactionControllerClass", ((CustomServerPlatformConfig)platformConfig).getExternalTransactionControllerClass(), "externalTransactionController");
} else {
throw new TestErrorException("ServerPlatformConfig not correct type");
}
} else {
throw new TestErrorException("ServerPlatformConfig was null");
}
// Session customizer
check("SessionCustomizer", m_session.getSessionCustomizerClass(), "sessionCustomizer");
// Log config
if (m_session.getLogConfig() instanceof DefaultSessionLogConfig) {
DefaultSessionLogConfig logConfig = (DefaultSessionLogConfig)m_session.getLogConfig();
check("LogLevel", logConfig.getLogLevel(), "severe");
check("Filename", logConfig.getFilename(), "logfile");
} else {
throw new TestErrorException("LogConfig not correct type");
}
// Login
if (m_session.getLoginConfig() instanceof DatabaseLoginConfig) {
DatabaseLoginConfig loginConfig = (DatabaseLoginConfig)m_session.getLoginConfig();
checkBoolean("BatchWriting", loginConfig.getBatchWriting(), true);
checkBoolean("BindAllParameters", loginConfig.getBindAllParameters(), true);
checkBoolean("ByteArrayBinding", loginConfig.getByteArrayBinding(), false);
checkBoolean("CacheAllStatements", loginConfig.getCacheAllStatements(), false);
check("ConnectionURL", loginConfig.getConnectionURL(), "jdbc:oracle:thin:@otl-ora8infmx73:1521:toplinkj");
check("DriverClass", loginConfig.getDriverClass(), "oracle.jdbc.OracleDriver");
checkBoolean("ExternalConnectionPooling", loginConfig.getExternalConnectionPooling(), false);
checkBoolean("ExternalTransactionController", loginConfig.getExternalTransactionController(), false);
checkBoolean("ForceFieldNamesToUppercase", loginConfig.getForceFieldNamesToUppercase(), false);
checkBoolean("JdbcBatchWriting", loginConfig.getJdbcBatchWriting(), false);
check("MaxBatchWritingSize", loginConfig.getMaxBatchWritingSize(), 5);
checkBoolean("NativeSequencing", loginConfig.getNativeSequencing(), false);
checkBoolean("NativeSQL", loginConfig.getNativeSQL(), false);
checkBoolean("OptimizeDataConversion", loginConfig.getOptimizeDataConversion(), true);
check("Password", loginConfig.getPassword(), "password");
check("PlatformClass", loginConfig.getPlatformClass(), "platform");
check("SequenceCounterField", loginConfig.getSequenceCounterField(), "SEQ_COUNT");
check("SequenceNameField", loginConfig.getSequenceNameField(), "SEQ_NAME");
check("SequencePreallocationSize", loginConfig.getSequencePreallocationSize(), 99);
check("SequenceTable", loginConfig.getSequenceTable(), "\"SEQUENCE\"");
checkBoolean("StreamsForBinding", loginConfig.getStreamsForBinding(), false);
checkBoolean("StringBinding", loginConfig.getStringBinding(), false);
check("TableQualifier", loginConfig.getTableQualifier(), "table:");
checkBoolean("TrimStrings", loginConfig.getTrimStrings(), true);
check("Username", loginConfig.getUsername(), "tljtest1");
} else {
throw new TestErrorException("LogConfig not correct type");
}
// Remote command manager
RemoteCommandManagerConfig rcmConfig = m_session.getRemoteCommandManagerConfig();
if (rcmConfig == null) {
throw new TestErrorException("RemoteCommandManagerConfig was null");
} else {
// Channel
check("Channel", rcmConfig.getChannel(), "new_channel");
if (rcmConfig.getTransportManagerConfig() instanceof JMSTopicTransportManagerConfig) {
// Transport manager
JMSTopicTransportManagerConfig transportConfig = (JMSTopicTransportManagerConfig)rcmConfig.getTransportManagerConfig();
check("OnConnectionError", transportConfig.getOnConnectionError(), "KeepConnection");
check("TopicHostURL", transportConfig.getTopicHostURL(), "ormi://jms_topic_host");
check("TopicConnectionFactoryName", transportConfig.getTopicConnectionFactoryName(), "test-topic-connection-factory-name");
check("TopicName", transportConfig.getTopicName(), "test-topic-name");
// Naming
JNDINamingServiceConfig namingConfig = transportConfig.getJNDINamingServiceConfig();
if (namingConfig == null) {
throw new TestErrorException("JNDINamingServiceConfig was null");
} else {
check("Naming URL", namingConfig.getURL(), "new_jndi_url");
check("Naming Username", namingConfig.getUsername(), "guy");
check("Naming Password", namingConfig.getPassword(), "password");
check("InitialContextFactoryName", namingConfig.getInitialContextFactoryName(), "new_initial_context_factory_name");
// Properties
Vector propertyConfigs = namingConfig.getPropertyConfigs();
if (propertyConfigs == null) {
throw new TestErrorException("PropertyConfigs were null");
} else if (propertyConfigs.size() != 2) {
throw new TestErrorException("PropertyConfigs were not the correct size");
} else {
PropertyConfig one = (PropertyConfig)propertyConfigs.firstElement();
check("Property name", one.getName(), "name1");
check("Property value", one.getValue(), "value1");
PropertyConfig two = (PropertyConfig)propertyConfigs.lastElement();
check("Property name", two.getName(), "name2");
check("Property value", two.getValue(), "value2");
}
}
} else {
throw new TestErrorException("TransportManagerConfig not correct type");
}
}
}
private void checkBoolean(String name, boolean one, boolean two) {
if (one != two) {
throw new TestErrorException("For: " + name + ", expecting: " + one + ", found: " + two);
}
}
private void check(String name, Object one, Object two) {
if (!one.equals(two)) {
throw new TestErrorException("For: " + name + ", expecting: " + one + ", found: " + two);
}
}
}