/* * 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.itest.interfaces; import java.net.URI; import junit.framework.Assert; import org.apache.tuscany.sca.TuscanyRuntime; import org.apache.tuscany.sca.assembly.SCABinding; import org.apache.tuscany.sca.binding.ws.WebServiceBinding; import org.apache.tuscany.sca.node.Node; import org.apache.tuscany.sca.node.NodeFactory; import org.apache.tuscany.sca.node.impl.NodeImpl; import org.junit.Ignore; import org.junit.Test; import org.oasisopen.sca.ServiceRuntimeException; import org.oasisopen.sca.client.SCAClientFactory; public class InerfaceMatchTestCase { /** * Non-remotable client and service interfaces where the interfaces match. * Components running in the same composite/JVM, i.e. no remote registry * * @throws Exception */ @Test public void testLocal() throws Exception { String [] contributions = {"./target/classes"}; Node node1 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/local/MatchLocal.composite", contributions); node1.start(); ClientComponent local = node1.getService(ClientComponent.class, "LocalClientComponent"); ParameterObject po = new ParameterObject(); try { String response = local.foo1(po); Assert.assertEquals("AComponent", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception " + ex.toString()); } node1.stop(); } /** * Remotable client and service interfaces where the interfaces match. * Components running in the separate composite/JVM, i.e. there is a remote registry * * @throws Exception */ @Test public void testDistributedRemotable() throws Exception { // Force the remote default binding to be web services System.setProperty("org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding", "{http://docs.oasis-open.org/ns/opencsa/sca/200912}binding.ws"); String [] contributions = {"./target/classes"}; Node node1 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite", contributions); node1.start(); Node node2 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedService.composite", contributions); // force default binding on node2 to use a different port from node 1(which will default to 8080 ((NodeImpl)node2).getConfiguration().addBinding(WebServiceBinding.TYPE, "http://localhost:8081/"); ((NodeImpl)node2).getConfiguration().addBinding(SCABinding.TYPE, "http://localhost:8081/"); node2.start(); ClientComponent local = node1.getService(ClientComponent.class, "DistributedClientComponent"); ParameterObject po = new ParameterObject(); try { String response = local.foo1(po); Assert.assertEquals("AComponent", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with foo " + ex.toString()); } try { local.callback("Callback"); String response = local.getCallbackValue(); Assert.assertEquals("Callback", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with callback" + ex.toString()); } node1.stop(); node2.stop(); } /** * Remotable client and service interfaces where the interfaces match but * where there is a parameter that can't be converted to/from XML using JAXB * Components running in the separate composite/JVM, i.e. there is a remote registry * * @throws Exception */ @Test public void testDistributedRemotableNonJAXB() throws Exception { // Force the remote default binding to be rmi as I want something that doesn't depend on // WSDL so that I can test what happens when the registry tries to generate WSDL System.setProperty("org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding", "{http://tuscany.apache.org/xmlns/sca/1.1}binding.rmi"); String [] contributions = {"./target/classes"}; Node node1 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchNonJAXBDistributedClient.composite", contributions); node1.start(); Node node2 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchNonJAXBDistributedService.composite", contributions); // force default binding on node2 to use a different port from node 1(which will default to 8080 // Don't need to do this as not testing callbacks here //((NodeImpl)node2).getConfiguration().addBinding(WebServiceBinding.TYPE, "http://localhost:8081/"); //((NodeImpl)node2).getConfiguration().addBinding(SCABinding.TYPE, "http://localhost:8081/"); node2.start(); ClientComponent local = node1.getService(ClientComponent.class, "DistributedClientComponent"); ParameterObject po = new ParameterObject(); po.field1 = "Test String"; try { String response = local.foo1(po); Assert.assertEquals("Test String", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with foo " + ex.toString()); } node1.stop(); node2.stop(); } /** * Remotable client and service interfaces where the interfaces match and the service has policy. * Components running in the separate composite/JVM, i.e. there is a remote registry * * @throws Exception */ @Test public void testPolicyDistributedRemotable() throws Exception { String [] contributions = {"./target/classes"}; Node node1 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchPolicyDistributedClient.composite", contributions); node1.start(); Node node2 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchPolicyDistributedService.composite", contributions); // force binding.ws on node2 to use a different port from node 1(which will default to 8080 ((NodeImpl)node2).getConfiguration().addBinding(WebServiceBinding.TYPE, "http://localhost:8081/"); node2.start(); ClientComponent local = node1.getService(ClientComponent.class, "DistributedClientComponent"); ParameterObject po = new ParameterObject(); try { String response = local.foo1(po); Assert.assertEquals("AComponent", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with foo " + ex.toString()); } try { local.callback("Callback"); String response = local.getCallbackValue(); Assert.assertEquals("Callback", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with callback" + ex.toString()); } node1.stop(); node2.stop(); } /** * Remotable client and service interfaces where the interfaces match. * Components running in the separate composite/JVM, i.e. there is a remote registry * and with binding.ws explicitly configured at the service * * @throws Exception */ @Test public void testWSDistributedRemotable() throws Exception { String [] contributions = {"./target/classes"}; Node node1 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchWSDistributedClient.composite", contributions); node1.start(); Node node2 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchWSDistributedService.composite", contributions); // force default binding on node2 to use a different port from node 1(which will default to 8080) ((NodeImpl)node2).getConfiguration().addBinding(WebServiceBinding.TYPE, "http://localhost:8081/"); ((NodeImpl)node2).getConfiguration().addBinding(SCABinding.TYPE, "http://localhost:8081/"); node2.start(); ClientComponent local = node1.getService(ClientComponent.class, "DistributedClientComponent"); ParameterObject po = new ParameterObject(); try { String response = local.foo1(po); Assert.assertEquals("AComponent", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with foo " + ex.toString()); } try { local.callback("Callback"); String response = local.getCallbackValue(); Assert.assertEquals("Callback", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with callback" + ex.toString()); } node1.stop(); node2.stop(); } /** * Remotable client and service interfaces where the interfaces match. * Components running in the separate composite/JVM, i.e. there is a remote registry * Access from an SCALient call to make sure that it is able to connect to the remote * registry. * * * @throws Exception */ @Test public void testDistributedRemotableSCAClient() throws Exception { // Force the remote default binding to be web services System.setProperty("org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding", "{http://docs.oasis-open.org/ns/opencsa/sca/200912}binding.ws"); TuscanyRuntime runtime = TuscanyRuntime.newInstance(); /* org.apache.tuscany.sca.Node nodeA = runtime.createNode("default"); nodeA.installContribution("nodeAContrib", "./target/classes", null, null); nodeA.startComposite("node1Contrib", "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite"); org.apache.tuscany.sca.Node nodeB = runtime.createNode("default"); nodeB.installContribution("nodeAContrib", "./target/classes", null, null); nodeB.startComposite("node1Contrib", "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedService.composite"); */ String [] contributions = {"./target/classes"}; Node node1 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClient.composite", contributions); node1.start(); Node node2 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedService.composite", contributions); // force default binding on node2 to use a different port from node 1(which will default to 8080 ((NodeImpl)node2).getConfiguration().addBinding(WebServiceBinding.TYPE, "http://localhost:8081/"); ((NodeImpl)node2).getConfiguration().addBinding(SCABinding.TYPE, "http://localhost:8081/"); node2.start(); SCAClientFactory clientFactory = SCAClientFactory.newInstance(URI.create("default")); ClientComponent local = clientFactory.getService(ClientComponent.class, "LocalClientClientComponent"); ParameterObject po = new ParameterObject(); try { String response = local.foo1(po); Assert.assertEquals("AComponent", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with foo " + ex.toString()); } /* Used to keep the composites alive when running the next (ignored) test manually System.out.println("Press a key to end"); try { System.in.read(); } catch (Exception ex) { } System.out.println("Continuing"); */ node1.stop(); node2.stop(); } /** * Allows you to manually call the previous test from a separate VM to * ensure that endpoint serialization to the client work OK. It's not * intended to run as part of the test suite. * * * @throws Exception */ @Test @Ignore public void testDistributedRemotableSCAClientSeparateVM() throws Exception { // Force the remote default binding to be web services System.setProperty("org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding", "{http://docs.oasis-open.org/ns/opencsa/sca/200912}binding.ws"); // Make a reference target point across VMs to a component that has callback services String [] contributions = {"./target/classes"}; Node node3 = NodeFactory.newInstance().createNode(URI.create("uri:default"), "org/apache/tuscany/sca/itest/interfaces/match/distributed/MatchDistributedClientClient.composite", contributions); node3.start(); SCAClientFactory clientFactory = SCAClientFactory.newInstance(URI.create("default")); ClientComponent clientClient = clientFactory.getService(ClientComponent.class, "DistributedClientClientComponent"); ParameterObject po = new ParameterObject(); try { String response = clientClient.foo1(po); Assert.assertEquals("AComponent", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with foo " + ex.toString()); } // Make an SCAClient point across VMs to a component that has callback services ClientComponent client = clientFactory.getService(ClientComponent.class, "DistributedClientComponent"); try { String response = client.foo1(po); Assert.assertEquals("AComponent", response); } catch (ServiceRuntimeException ex){ Assert.fail("Unexpected exception with foo " + ex.toString()); } node3.stop(); } }