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

Reply via email to