diff options
Diffstat (limited to 'sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test')
6 files changed, 408 insertions, 0 deletions
diff --git a/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldClientImpl.java b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldClientImpl.java new file mode 100644 index 0000000000..a3a2f0bf1e --- /dev/null +++ b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldClientImpl.java @@ -0,0 +1,43 @@ +/* + * 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.binding.jms; + +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Service; + +/** + * This class implements the HelloWorld service. + * + * @version $Rev$ $Date$ + */ +@Service(HelloWorldService.class) +public class HelloWorldClientImpl implements HelloWorldService { + + private HelloWorldService serviceA; + + @Reference + public void setServiceA(HelloWorldService service) { + this.serviceA = service; + } + + public String sayHello(String name) { + return serviceA.sayHello(name); + } + +} diff --git a/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldService.java b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldService.java new file mode 100644 index 0000000000..d68270f7df --- /dev/null +++ b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldService.java @@ -0,0 +1,31 @@ +/* + * 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.binding.jms; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * Interface for the HelloWorld Service. + * + * @version $Rev$ $Date$ + */ +@Remotable +public interface HelloWorldService { + String sayHello(String name); +} diff --git a/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldServiceImpl.java b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldServiceImpl.java new file mode 100644 index 0000000000..a8808c1bd1 --- /dev/null +++ b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldServiceImpl.java @@ -0,0 +1,32 @@ +/* + * 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.binding.jms; + +/** + * Implementation of the HelloWorldService. + * + * @version $Rev$ $Date$ + */ +public class HelloWorldServiceImpl implements HelloWorldService { + + public String sayHello(String name) { + return "jmsHello " + name; + } + +} diff --git a/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/OperationSelectionTestCaseFIXME.java b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/OperationSelectionTestCaseFIXME.java new file mode 100644 index 0000000000..5b59389a18 --- /dev/null +++ b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/java/org/apache/tuscany/sca/binding/jms/OperationSelectionTestCaseFIXME.java @@ -0,0 +1,229 @@ +/* + * 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.binding.jms; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.tuscany.sca.binding.jms.provider.JMSResourceFactory; +import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.interfacedef.impl.OperationImpl; +import org.junit.Test; + +/** + * This unit test is used to ensure that a JMS Message delivered to a Component will select the correct operation based + * on the details in section 1.5 of the JMS Binding specification. + * + * @version $Rev$ $Date$ + */ +public class OperationSelectionTestCaseFIXME { + /** + * This test attempts to invoke a Service with a Single method where scaOperationName is not specified in the JMS + * Message + * <p> + * Expected behaviour is that the single method will be invoked as scaOperationName is ignored + * + * @throws Exception Failed + */ + @Test + public void testServiceWithOnlyOneOperationScaOperationNameNotSpecified() throws Exception { + // Create the operation we should match + final Operation expectedOperation = newOperation("myOperation"); + + // Create the list of operations for the Service + final List<Operation> operations = new ArrayList<Operation>(); + operations.add(expectedOperation); + + // The name of the Operation in the JMS Message - not specified + final String scaOperationName = null; + + // Do the test + doTestJMSBinding(expectedOperation, operations, scaOperationName); + } + + /** + * This test attempts to invoke a Service with a Single method where scaOperationName in the JMS Message matches the + * method name on the Service + * <p> + * Expected behaviour is that the single method will be invoked as scaOperationName is ignored + * + * @throws Exception Failed + */ + @Test + public void testServiceWithOnlyOneOperationScaOperationNameMatches() throws Exception { + // Create the operation we should match + final Operation expectedOperation = newOperation("myOperation"); + + // Create the list of operations for the Service + final List<Operation> operations = new ArrayList<Operation>(); + operations.add(expectedOperation); + + // The name of the Operation in the JMS Message - matches operation name + final String scaOperationName = expectedOperation.getName(); + + // Do the test + doTestJMSBinding(expectedOperation, operations, scaOperationName); + } + + /** + * This test attempts to invoke a Service with a Single method where scaOperationName in the JMS Message is + * different the method name on the Service + * <p> + * Expected behaviour is that the single method will be invoked as scaOperationName is ignored + * + * @throws Exception Failed + */ + @Test + public void testServiceWithOnlyOneOperationScaOperationNameDifferent() throws Exception { + // Create the operation we should match + final Operation expectedOperation = newOperation("myOperation"); + + // Create the list of operations for the Service + final List<Operation> operations = new ArrayList<Operation>(); + operations.add(expectedOperation); + + // The name of the Operation in the JMS Message - different to operation name + final String scaOperationName = "Does Not Match Opeation Name"; + + // Do the test + doTestJMSBinding(expectedOperation, operations, scaOperationName); + } + + /** + * This test attempts to invoke a Service with a multiple operations where scaOperationName specified in the JMS + * Message matches an operation name + * <p> + * Expected behaviour is that the named method will be invoked. + * + * @throws Exception Failed + */ + @Test + public void testServiceWithMultipleOperationsScaOperationNameSpecified() throws Exception { + // Create the list of operations for the Service + final List<Operation> operations = new ArrayList<Operation>(); + for (int i = 0; i < 5; i++) { + operations.add(newOperation("operation" + i)); + } + + // Now try and invoke each operation + for (Operation expectedOperation : operations) { + // The name of the Operation in the JMS Message + final String scaOperationName = expectedOperation.getName(); + + // Do the test + doTestJMSBinding(expectedOperation, operations, scaOperationName); + } + } + + /** + * This test attempts to invoke a Service with a multiple operations where scaOperationName specified in the JMS + * Message is not set so we invoke the onMessage() method + * <p> + * Expected behaviour is that the onMessage() method should be used instead + * + * @throws Exception Failed + */ + @Test + public void testServiceWithMultipleOperationsScaOperationNotSpecified() throws Exception { + // Create the list of operations for the Service + final List<Operation> operations = new ArrayList<Operation>(); + for (int i = 0; i < 5; i++) { + operations.add(newOperation("operation" + i)); + } + + // Add the onMessage operation to the Service Contract + final Operation onMessageOperation = newOperation("onMessage"); + operations.add(onMessageOperation); + + // The name of the Operation in the JMS Message is not set so it will attempt + // to invoke the onMessage() method + final String scaOperationName = null; + + // Do the test + doTestJMSBinding(onMessageOperation, operations, scaOperationName); + } + + /** + * This is the test method that will attempt to unit test invoking a Service with the specified operations using a + * JMS Message with the specified scaOperationName to ensure that it invokes the expectedOperation + * + * @param expectedOperation The Operation we are expecting to be invoked over JMS + * @param operations The list of Operations supported by the Service + * @param scaOperationName The value to set scaOperationName in the JMS Message + * @throws Exception Failed + */ + private void doTestJMSBinding(Operation expectedOperation, List<Operation> operations, String scaOperationName) + throws Exception { + // Create the test JMS Binding + final JMSBinding jmsBinding = new JMSBinding(); + JMSResourceFactory jmsResourceFactory = null; + + // Extra information for the method we are invoking + final String operationParams = "Hello"; + final Object operationReturnValue = "Operation Success"; + + // Mock up the Service. Basically, it is going to call: + // List<Operation> opList = service.getInterfaceContract().getInterface().getOperations(); +// final InterfaceContract ifaceContract = EasyMock.createStrictMock(InterfaceContract.class); +// final RuntimeComponentService service = EasyMock.createStrictMock(RuntimeComponentService.class); +// final Interface iface = EasyMock.createStrictMock(Interface.class); +// EasyMock.expect(iface.getOperations()).andReturn(operations); +// EasyMock.expect(ifaceContract.getInterface()).andReturn(iface); +// EasyMock.expect(service.getInterfaceContract()).andReturn(ifaceContract); +// +// // Mock up getting and invoking the RuntimeWire. It is going to call: +// // service.getRuntimeWire(jmsBinding).invoke(operation, (Object[])requestPayload); +// final RuntimeWire runtimeWire = EasyMock.createStrictMock(RuntimeWire.class); +// EasyMock.expect(service.getRuntimeWire(jmsBinding)).andReturn(runtimeWire); +// EasyMock.expect(runtimeWire.invoke(expectedOperation, new Object[] {operationParams})) +// .andReturn(operationReturnValue); +// +// // Create the JMS Binding Listener +// // final DefaultJMSBindingListener bindingListener = new DefaultJMSBindingListener(jmsBinding, jmsResourceFactory, service, null); +// +// // Simulate a message +// final TextMessage requestJMSMsg = EasyMock.createStrictMock(TextMessage.class); +// EasyMock.expect(requestJMSMsg.getStringProperty("scaOperationName")).andReturn(scaOperationName); +// EasyMock.expect(requestJMSMsg.getText()).andReturn(operationParams); +// EasyMock.expect(requestJMSMsg.getJMSReplyTo()).andReturn(null); +// +// // Lets put all the mocks into replay mode +// // EasyMock.replay(iface); +// EasyMock.replay(ifaceContract); +// EasyMock.replay(service); +// EasyMock.replay(requestJMSMsg); +// EasyMock.replay(runtimeWire); + + // Do the test + // bindingListener.onMessage(requestJMSMsg); + + // Verify our Mock objects + // EasyMock.verify(iface); + // EasyMock.verify(ifaceContract); + // EasyMock.verify(service); + // EasyMock.verify(requestJMSMsg); + // EasyMock.verify(runtimeWire); + } + + private static Operation newOperation(String name) { + Operation operation = new OperationImpl(); + operation.setName(name); + return operation; + } +} diff --git a/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/resources/simple/client.composite b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/resources/simple/client.composite new file mode 100644 index 0000000000..dcea428493 --- /dev/null +++ b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/resources/simple/client.composite @@ -0,0 +1,38 @@ +<?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.
+ -->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ name="RPCComposite">
+
+ <component name="HelloWorldClient">
+ <implementation.java class="org.apache.tuscany.sca.binding.jms.HelloWorldClientImpl"/>
+ <reference name="serviceA" />
+ </component>
+
+ <reference name="serviceA" promote="HelloWorldClient/serviceA">
+ <interface.java interface="org.apache.tuscany.sca.binding.jms.HelloWorldService" />
+ <binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory" jndiURL="tcp://localhost:61616">
+ <destination name="DestQueueA"/>
+ <response>
+ <destination name="RespQueueA"/>
+ </response>
+ </binding.jms>
+ </reference>
+
+</composite>
diff --git a/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/resources/simple/service.composite b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/resources/simple/service.composite new file mode 100644 index 0000000000..44b7b29610 --- /dev/null +++ b/sandbox/sebastien/java/shell/modules/binding-jms-runtime/src/test/resources/simple/service.composite @@ -0,0 +1,35 @@ +<?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.
+ -->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ name="RPCComposite">
+
+ <component name="HelloWorldService">
+ <implementation.java class="org.apache.tuscany.sca.binding.jms.HelloWorldServiceImpl"/>
+ <service name="HelloWorldService">
+ <binding.jms initialContextFactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory" jndiURL="tcp://localhost:61616">
+ <destination name="DestQueueA" create="always"/>
+ <response>
+ <destination name="RespQueueA" create="always"/>
+ </response>
+ </binding.jms>
+ </service>
+ </component>
+
+</composite>
|