/* * 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)); } }