On Wed, Jun 2, 2010 at 9:39 AM, ant elder <ant.el...@gmail.com> wrote: > On Tue, Jun 1, 2010 at 3:57 PM, Simon Laws <simonsl...@googlemail.com> wrote: >> On Tue, Jun 1, 2010 at 1:41 PM, <antel...@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