Add testrunner for JMS testsuite

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@950041 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
antelder 2010-06-01 12:41:18 +00:00
parent 2361f447c4
commit 93136717b0
5 changed files with 609 additions and 0 deletions

View file

@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* 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.
-->
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-sca</artifactId>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>tuscany-otests-sca-jms-tests</artifactId>
<name>Apache Tuscany SCA Specification Tests for JMS Binding</name>
<dependencies>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-node-impl</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-node-launcher-equinox</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-deployment</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-java-runtime</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-ws-runtime-axis2</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-jms-runtime</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-jetty</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<dependencies>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-trax</artifactId>
<version>1.6.5</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>copy-files-from-svn</id>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<ant antfile="../build.xml">
<property name="from.dir" value="../sca-jms/Test_Client_BJM/src/main/resources"/>
<property name="to.dir" value="src/main/resources"/>
<target name="copyResourceDir"/>
</ant>
<ant antfile="../build.xml">
<property name="from.dir" value="../sca-jms/Test_Client_BJM/src/main/java"/>
<property name="to.dir" value="src/test/java"/>
<target name="copySourceDir"/>
</ant>
<ant antfile="../build.xml">
<property name="from.dir" value="../sca-assembly/Test_Client/src/main/java/testClient"/>
<property name="to.dir" value="src/test/java/testClient"/>
<target name="copySourceDir"/>
</ant>
<ant antfile="../build.xml">
<property name="from.file" value="../sca-assembly/Test_Client/src/main/java/client/BaseJAXWSTestRunner.java"/>
<property name="to.file" value="src/test/java/client/BaseJAXWSTestRunner.java"/>
<target name="copyFile"/>
</ant>
<ant antfile="../build.xml">
<property name="from.file" value="../sca-assembly/Test_Client/src/main/java/client/RuntimeBridge.java"/>
<property name="to.file" value="src/test/java/client/RuntimeBridge.java"/>
<target name="copyFile"/>
</ant>
<ant antfile="../build.xml">
<property name="from.file" value="../sca-assembly/Test_Client/src/main/java/client/TestConfiguration.java"/>
<property name="to.file" value="src/test/java/client/TestConfiguration.java"/>
<target name="copyFile"/>
</ant>
<ant antfile="../build.xml">
<property name="from.file" value="../sca-assembly/Test_Client/src/main/java/client/TuscanyRuntimeBridge.java"/>
<property name="to.file" value="src/test/java/client/TuscanyRuntimeBridge.java"/>
<target name="copyFile"/>
</ant>
<ant antfile="../build.xml">
<property name="from.file" value="../sca-assembly/Test_Client/src/main/resources/TestClient.wsdl"/>
<property name="to.file" value="src/main/resources/TestClient.wsdl"/>
<target name="copyFile"/>
</ant>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/test/tjava</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,30 @@
# 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.
# OASIS SCA Assembly test properties
# The implementation type to use for Assembly test suite
# org.oasis.sca.tests.assembly.lang=BPEL
org.oasis.sca.tests.assembly.lang=Java
# The class to use as the Runtime Bridge for the SCA runtime under test
#org.oasis.sca.tests.assembly.runtime_bridge=org.apache.tuscany.sca.otest.TuscanyOSGiRuntimeBridge
org.oasis.sca.tests.assembly.runtime_bridge=org.apache.tuscany.sca.otest.TuscanyRuntimeBridge
# The location of the contributions for the test suite
# %1 represents the placement of the name of each contribution into the location URI
org.oasis.sca.tests.assembly.contribution.location=../sca-jms/%1/target/%1.zip

View file

@ -0,0 +1,17 @@
# 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.

View file

@ -0,0 +1,150 @@
/*
* 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.tuscany.sca.otest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.equinox.launcher.Contribution;
import org.apache.tuscany.sca.node.equinox.launcher.ContributionLocationHelper;
import org.apache.tuscany.sca.node.equinox.launcher.NodeLauncher;
import client.RuntimeBridge;
import client.TestConfiguration;
/**
* An implementation of the Runtime Bridge for the Apache Tuscany SCA runtime (version 2.x)
*
*/
public class TuscanyOSGiRuntimeBridge implements RuntimeBridge {
static final String CONTRIBUTION_LOCATION_PROPKEY = "OASIS_TESTENV_CONTRIBUTION_LOCATION";
protected NodeLauncher launcher;
protected Node node;
protected Properties expectedErrorMessages;
public TuscanyOSGiRuntimeBridge() {
// read test error mapping
expectedErrorMessages = new Properties();
try {
InputStream propertiesStream = this.getClass().getResourceAsStream("/tuscany-oasis-sca-tests-errors.properties");
expectedErrorMessages.load(propertiesStream);
} catch (IOException e) {
System.out.println("Unable to read oasis-sca-tests-errors.properties file");
}
}
public boolean startContribution(String compositeName, String contributionLocation, String[] contributionNames) throws Exception {
try {
// Tuscany specific code which starts the contribution(s) holding the test
launcher = NodeLauncher.newInstance();
Contribution[] contributions = new Contribution[contributionNames.length];
String[] contributionURIs = getContributionURIs(contributionLocation,contributionNames);
for (int i = 0; i < contributions.length; i++) {
contributions[i] = new Contribution(contributionNames[i], contributionURIs[i]);
} // end for
node = launcher.createNode(compositeName, contributions);
System.out.println("SCA Node API ClassLoader: " + node.getClass().getClassLoader());
// Start the node
node.start();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
throw e;
} // end try
return true;
} // end method startContribution
/**
* Gets the location of the Contributions as URIs
* @param contributionLocation - a location pattern URI, which contains one or more "%1"
* substrings, which are substituted with the name of the contribution to get the URI of
* the contribution
* @return the contribution locations as an array of Strings
*/
protected String[] getContributionURIs(String contributionLocation, String[] contributionNames) throws Exception {
String[] locations = new String[contributionNames.length];
if (locations != null && contributionLocation != null) {
for (int i = 0; i < locations.length; i++) {
String aLocation = contributionLocation.replaceAll("%1", contributionNames[i]);
locations[i] = aLocation;
} // end for
} else {
if (locations == null) {
// No contribution specified - throw an Exception
throw new Exception("Unable to start SCA runtime - no contribution supplied - error");
} else {
// No contribution location supplied - throw an Exception
throw new Exception("Unable to start SCA runtime - no contribution location supplied - error");
} // end if
} // end if
return locations;
} // end getContributionURI
public void stopContribution() {
if (node != null) {
node.stop();
} // end if
if (launcher != null) {
launcher.destroy();
} // end if
} // end method stopContribution
public void checkError(String testName, Throwable ex) throws Throwable {
String expectedMessage = expectedErrorMessages.getProperty(testName);
String receivedMessage = ex.getMessage();
if (expectedMessage == null){
fail("Null expected error message for test " + testName +
"Please add message to oasis-sca-tests-errors.properties");
}
if (receivedMessage == null){
fail("Null received error message for test " + testName);
}
int messageStart = receivedMessage.indexOf("] - ");
if (messageStart < 0){
fail("Message separator not found for test " + testName);
}
receivedMessage = receivedMessage.substring(messageStart + 4);
assertEquals( expectedMessage, receivedMessage );
return;
}
} // end class TuscanyRuntimeBridge

View file

@ -0,0 +1,217 @@
/*
* 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.tuscany.sca.otest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
import testClient.TestException_Exception;
import client.RuntimeBridge;
/**
* An implementation of the Runtime Bridge for the Apache Tuscany SCA runtime (version 2.x)
*
*/
public class TuscanyRuntimeBridge implements RuntimeBridge {
static final String CONTRIBUTION_LOCATION_PROPKEY = "OASIS_TESTENV_CONTRIBUTION_LOCATION";
protected NodeFactory launcher;
protected Node node;
protected Properties expectedErrorMessages;
public TuscanyRuntimeBridge() {
// read test error mapping
expectedErrorMessages = new Properties();
try {
InputStream propertiesStream = this.getClass().getResourceAsStream("/tuscany-oasis-sca-tests-errors.properties");
expectedErrorMessages.load(propertiesStream);
} catch (IOException e) {
System.out.println("Unable to read oasis-sca-tests-errors.properties file");
}
}
public boolean startContribution(String compositeName, String contributionLocation, String[] contributionNames) throws Exception {
try {
// Tuscany specific code which starts the contribution(s) holding the test
launcher = NodeFactory.newInstance();
Contribution[] contributions = new Contribution[contributionNames.length];
String[] contributionURIs = getContributionURIs(contributionLocation, contributionNames);
for (int i = 0; i < contributions.length; i++) {
contributions[i] = new Contribution(contributionNames[i], contributionURIs[i]);
} // end for
node = launcher.createNode(compositeName, contributions);
// Start the node
node.start();
// For debugging
// print out the composites that have been read in success cases
// System.out.println(((NodeImpl)node).dumpDomainComposite());
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
throw e;
} // end try
return true;
} // end method startContribution
/**
* Gets the location of the Contributions as URIs
* @param contributionLocation - a location pattern URI, which contains one or more "%1"
* substrings, which are substituted with the name of the contribution to get the URI of
* the contribution
* @return the contribution locations as an array of Strings
*/
protected String[] getContributionURIs(String contributionLocation, String[] contributionNames) throws Exception {
String[] locations = new String[contributionNames.length];
if (locations != null && contributionLocation != null) {
for (int i = 0; i < locations.length; i++) {
String aLocation = contributionLocation.replaceAll("%1", contributionNames[i]);
locations[i] = aLocation;
} // end for
} else {
if (locations == null) {
// No contribution specified - throw an Exception
throw new Exception("Unable to start SCA runtime - no contribution supplied - error");
} else {
// No contribution location supplied - throw an Exception
throw new Exception("Unable to start SCA runtime - no contribution location supplied - error");
} // end if
} // end if
return locations;
} // end getContributionURI
public void stopContribution() {
if (node != null) {
node.stop();
} // end if
if (launcher != null) {
launcher.destroy();
} // end if
} // end method stopContribution
public void checkError(String testName, Throwable ex) throws Throwable {
String expectedMessage = expectedErrorMessages.getProperty(testName);
String receivedMessage = getErrorMessage(ex);//ex.getMessage();
if (expectedMessage == null){
writeMissingMessage(testName, ex);
fail("Null expected error message for test " + testName +
"Please add message to oasis-sca-tests-errors.properties");
} // end if
if (receivedMessage == null){
ex.printStackTrace();
fail("Null received error message for test " + testName);
} // end if
if (expectedMessage.startsWith("*")) {
// allow using * to ignore a message comparison
return;
}
// Deal with the case where the message has variable parts within it
// marked with the characters ***. Here we tokenize the expected string
// and make sure all the individual parts are present in the results string
String expectedMessageParts[] = expectedMessage.split("\\*\\*\\*");
if (expectedMessageParts.length > 1){
int foundParts = 0;
for(int i = 0; i < expectedMessageParts.length; i++){
if (receivedMessage.indexOf(expectedMessageParts[i]) > -1 ){
foundParts++;
}
}
if (foundParts == expectedMessageParts.length){
return;
}
}
// Deal with the case where the end of the message is variable (eg contains absolute filenames)
// and where the only relevant part is the start of the message - in this case the expected
// message only contains the stem section which is unchanging...
if( receivedMessage.length() > expectedMessage.length() ) {
// Truncate the received message to the length of the expected message
receivedMessage = receivedMessage.substring(0, expectedMessage.length() );
} // end if
if (!expectedMessage.equals(receivedMessage)) {
writeIncorrectMessage(testName, expectedMessage, receivedMessage);
}
assertEquals( expectedMessage, receivedMessage );
return;
}
protected void writeMissingMessage(String testName, Throwable ex) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter("target/OTestMissingMsgs.txt", true));
out.write(testName + "=*");
out.newLine();
out.close();
} catch (IOException e) {
}
}
protected void writeIncorrectMessage(String testName, String expected, String received) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter("target/OTestIncorrectMsgs.txt", true));
out.write(testName); out.newLine();
out.write(" " + expected); out.newLine();
out.write(" " + received); out.newLine();
out.close();
} catch (IOException e) {
}
}
protected String getErrorMessage(Throwable ex) {
String errorMessage = null;
if (ex instanceof TestException_Exception) {
TestException_Exception te = (TestException_Exception) ex;
errorMessage = te.getFaultInfo().getMessage();
} else {
errorMessage = ex.getMessage();
}
return errorMessage;
}
} // end class TuscanyRuntimeBridge