You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Simon Laws <si...@googlemail.com> on 2010/06/01 16:57:55 UTC
Re: svn commit: r950041 - in /tuscany/otest/newlayout/tuscany-jms-test-runner:
./ src/ src/main/ src/main/resources/ src/test/ src/test/java/
src/test/resources/ src/test/tjava/ src/test/tjava/org/ src/test/tjava/org/apache/
src/test/tjava/org/apache
On Tue, Jun 1, 2010 at 1:41 PM, <an...@apache.org> wrote:
> Author: antelder
> Date: Tue Jun 1 12:41:18 2010
> New Revision: 950041
>
> URL: http://svn.apache.org/viewvc?rev=950041&view=rev
> Log:
> Add testrunner for JMS testsuite
>
> Added:
> tuscany/otest/newlayout/tuscany-jms-test-runner/
> tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/main/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/main/resources/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/java/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java
> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java
>
> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml
> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml?rev=950041&view=auto
> ==============================================================================
> --- tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml (added)
> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml Tue Jun 1 12:41:18 2010
> @@ -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>
>
> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties
> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties?rev=950041&view=auto
> ==============================================================================
> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties (added)
> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties Tue Jun 1 12:41:18 2010
> @@ -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
> +
>
> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties
> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties?rev=950041&view=auto
> ==============================================================================
> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties (added)
> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties Tue Jun 1 12:41:18 2010
> @@ -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.
> +
>
> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java
> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java?rev=950041&view=auto
> ==============================================================================
> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java (added)
> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java Tue Jun 1 12:41:18 2010
> @@ -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
>
> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java
> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java?rev=950041&view=auto
> ==============================================================================
> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java (added)
> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java Tue Jun 1 12:41:18 2010
> @@ -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
>
>
>
Hi Ant
I want the WS version of this. Are you about to commit it or can I get
on with it? Don't want to repeat stuff you've already done.
Simon
--
Apache Tuscany committer: tuscany.apache.org
Co-author of a book about Tuscany and SCA: tuscanyinaction.com
Re: svn commit: r950041 - in /tuscany/otest/newlayout/tuscany-jms-test-runner:
./ src/ src/main/ src/main/resources/ src/test/ src/test/java/
src/test/resources/ src/test/tjava/ src/test/tjava/org/ src/test/tjava/org/apache/
src/test/tjava/org/apache
Posted by Simon Laws <si...@googlemail.com>.
On Wed, Jun 2, 2010 at 9:39 AM, ant elder <an...@gmail.com> wrote:
> On Tue, Jun 1, 2010 at 3:57 PM, Simon Laws <si...@googlemail.com> wrote:
>> On Tue, Jun 1, 2010 at 1:41 PM, <an...@apache.org> wrote:
>>> Author: antelder
>>> Date: Tue Jun 1 12:41:18 2010
>>> New Revision: 950041
>>>
>>> URL: http://svn.apache.org/viewvc?rev=950041&view=rev
>>> Log:
>>> Add testrunner for JMS testsuite
>>>
>>> Added:
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/main/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/main/resources/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/java/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java
>>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java
>>>
>>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml
>>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml?rev=950041&view=auto
>>> ==============================================================================
>>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml (added)
>>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml Tue Jun 1 12:41:18 2010
>>> @@ -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>
>>>
>>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties
>>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties?rev=950041&view=auto
>>> ==============================================================================
>>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties (added)
>>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties Tue Jun 1 12:41:18 2010
>>> @@ -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
>>> +
>>>
>>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties
>>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties?rev=950041&view=auto
>>> ==============================================================================
>>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties (added)
>>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties Tue Jun 1 12:41:18 2010
>>> @@ -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.
>>> +
>>>
>>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java
>>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java?rev=950041&view=auto
>>> ==============================================================================
>>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java (added)
>>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java Tue Jun 1 12:41:18 2010
>>> @@ -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
>>>
>>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java
>>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java?rev=950041&view=auto
>>> ==============================================================================
>>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java (added)
>>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java Tue Jun 1 12:41:18 2010
>>> @@ -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
>>>
>>>
>>>
>>
>> Hi Ant
>>
>> I want the WS version of this. Are you about to commit it or can I get
>> on with it? Don't want to repeat stuff you've already done.
>>
>
> I've not done the WS one yet, i can do if you can wait a little
> otherwise np if you want to start on it yourself.
>
> ...ant
>
No particular rush. Just didn't want to overlap. If I get to the stage
of doing it I'll ping first and check you've not started.
Simon
--
Apache Tuscany committer: tuscany.apache.org
Co-author of a book about Tuscany and SCA: tuscanyinaction.com
Re: svn commit: r950041 - in /tuscany/otest/newlayout/tuscany-jms-test-runner:
./ src/ src/main/ src/main/resources/ src/test/ src/test/java/
src/test/resources/ src/test/tjava/ src/test/tjava/org/ src/test/tjava/org/apache/
src/test/tjava/org/apache
Posted by ant elder <an...@gmail.com>.
On Tue, Jun 1, 2010 at 3:57 PM, Simon Laws <si...@googlemail.com> wrote:
> On Tue, Jun 1, 2010 at 1:41 PM, <an...@apache.org> wrote:
>> Author: antelder
>> Date: Tue Jun 1 12:41:18 2010
>> New Revision: 950041
>>
>> URL: http://svn.apache.org/viewvc?rev=950041&view=rev
>> Log:
>> Add testrunner for JMS testsuite
>>
>> Added:
>> tuscany/otest/newlayout/tuscany-jms-test-runner/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/main/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/main/resources/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/java/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java
>> tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java
>>
>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml
>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml?rev=950041&view=auto
>> ==============================================================================
>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml (added)
>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/pom.xml Tue Jun 1 12:41:18 2010
>> @@ -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>
>>
>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties
>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties?rev=950041&view=auto
>> ==============================================================================
>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties (added)
>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/oasis-sca-tests.properties Tue Jun 1 12:41:18 2010
>> @@ -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
>> +
>>
>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties
>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties?rev=950041&view=auto
>> ==============================================================================
>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties (added)
>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/resources/tuscany-oasis-sca-tests-errors.properties Tue Jun 1 12:41:18 2010
>> @@ -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.
>> +
>>
>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java
>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java?rev=950041&view=auto
>> ==============================================================================
>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java (added)
>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyOSGiRuntimeBridge.java Tue Jun 1 12:41:18 2010
>> @@ -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
>>
>> Added: tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java
>> URL: http://svn.apache.org/viewvc/tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java?rev=950041&view=auto
>> ==============================================================================
>> --- tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java (added)
>> +++ tuscany/otest/newlayout/tuscany-jms-test-runner/src/test/tjava/org/apache/tuscany/sca/otest/TuscanyRuntimeBridge.java Tue Jun 1 12:41:18 2010
>> @@ -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
>>
>>
>>
>
> Hi Ant
>
> I want the WS version of this. Are you about to commit it or can I get
> on with it? Don't want to repeat stuff you've already done.
>
I've not done the WS one yet, i can do if you can wait a little
otherwise np if you want to start on it yourself.
...ant