blob: ade96178d261170f6f293073ca72b8b21366e63b [file] [log] [blame]
/*
* 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();
}
}