blob: da364c5e2a514a22d53aa5b20207f030f6320fcf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ode.bpel.extvar.jdbc;
import java.sql.Connection;
import java.sql.Statement;
import java.util.ArrayList;
import javax.xml.namespace.QName;
import junit.framework.TestCase;
import org.apache.ode.bpel.engine.extvar.ExternalVariableConf;
import org.apache.ode.bpel.engine.extvar.ExternalVariableConf.Variable;
import org.apache.ode.utils.DOMUtils;
import org.apache.ode.utils.GUID;
import org.apache.ode.bpel.evar.ExternalVariableModule.Locator;
import org.apache.ode.bpel.evar.ExternalVariableModule.Value;
import org.hsqldb.jdbc.jdbcDataSource;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Test for the JDBC external variable engine.
*
* @author Maciej Szefler <mszefler at gmail dot com>
*
*/
public class JdbcExternalVariableEngineTest extends TestCase {
final Long _iid = 123L;
final QName _pid = new QName("foo", "pid");
final QName _varType = new QName("foo", "foobar");
ExternalVariableConf _econf;
jdbcDataSource _ds;
JdbcExternalVariableModule _engine;
Element _el1;
public void setUp() throws Exception {
_ds = new org.hsqldb.jdbc.jdbcDataSource();
_ds.setDatabase("jdbc:hsqldb:mem:" + new GUID().toString());
_ds.setUser("sa");
Connection conn = _ds.getConnection();
Statement s = conn.createStatement();
s.execute("create table extvartable1 (" +
"id1 VARCHAR PRIMARY KEY," +
"_id2_ VARCHAR," +
"pid VARCHAR, " +
"iid INT," +
"cts DATETIME," +
"uts DATETIME," +
"foo VARCHAR," +
"bar VARCHAR );");
_engine = new JdbcExternalVariableModule();
_engine.registerDataSource("testds",_ds);
_el1=DOMUtils.stringToDOM("<foobar><id2>ignored</id2><foo>foo</foo><bar>bar</bar></foobar>");
}
@Test
public void testConfigurationParsing() throws Exception {
Document deploydoc = DOMUtils.parse(getClass().getResourceAsStream("evardeploy.xml"));
NodeList nl = deploydoc.getElementsByTagNameNS(ExternalVariableConf.EXTVARCONF_ELEMENT.getNamespaceURI(),
ExternalVariableConf.EXTVARCONF_ELEMENT.getLocalPart());
ArrayList<Element> al = new ArrayList<Element>();
for (int i = 0; i < nl.getLength(); ++i) {
al.add((Element)nl.item(i));
}
assertTrue(al.size() >= 1);
_econf = new ExternalVariableConf(al);
assertEquals(al.size(), _econf.getVariables().size());
}
@Test
public void testConfigure() throws Exception {
testConfigurationParsing();
for (Variable v :_econf.getVariables())
_engine.configure(_pid, v.extVariableId, v.configuration);
}
@Test
public void testInitWriteValue() throws Exception {
testConfigure();
Locator locator = new Locator("evar1",_pid,_iid);
Value value = new Value(locator, _el1, null);
value = _engine.writeValue(_varType, value);
assertNotNull(value);
assertNotNull(value.locator);
System.out.println(DOMUtils.domToString(value.locator.reference));
assertTrue(DOMUtils.domToString((Element)value.locator.reference).indexOf("id1")!=-1);
assertTrue(DOMUtils.domToString((Element)value.locator.reference).indexOf("id2")!=-1);
}
@Test
public void testWriteUpdate() throws Exception {
testConfigure();
Locator locator = new Locator("evar1",_pid,_iid);
Value value = new Value(locator, _el1, null);
value = _engine.writeValue(_varType, value);
String domstr = DOMUtils.domToStringLevel2(value.value);
Value newvalue = new Value(value.locator,DOMUtils.stringToDOM(domstr.replaceAll("<bar>bar</bar>", "<bar>boohoo</bar>")),null);
_engine.writeValue(_varType, newvalue);
QName qname = new QName("http://example.com", "bar");
Value reread = _engine.readValue(qname, newvalue.locator);
domstr = DOMUtils.domToString(reread.value);
assertTrue(domstr.contains("boohoo"));
assertFalse(domstr.contains(">bar<"));
}
@Test
public void testRead() throws Exception {
testConfigure();
Locator locator = new Locator("evar1",_pid,_iid);
Value value = new Value(locator, _el1, null);
value = _engine.writeValue(_varType, value);
Value readVal = _engine.readValue(_varType, value.locator);
assertEquals(_iid,readVal.locator.iid);
assertEquals(_pid,readVal.locator.pid);
assertEquals(2, DOMUtils.countKids((Element)readVal.locator.reference, Node.ELEMENT_NODE));
assertEquals(DOMUtils.domToString(value.locator.reference), DOMUtils.domToString(readVal.locator.reference));
}
}