From bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a Mon Sep 17 00:00:00 2001 From: dims Date: Tue, 17 Jun 2008 00:23:01 +0000 Subject: Move Tuscany from Incubator to top level. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/binding/jms/HelloWorldClientImpl.java | 41 +++ .../tuscany/sca/binding/jms/HelloWorldService.java | 26 ++ .../sca/binding/jms/HelloWorldServiceImpl.java | 27 ++ .../binding/jms/OperationSelectionTestCase.java | 230 +++++++++++++++ .../binding/jms/mock/MockJMSResourceFactory.java | 94 ++++++ .../jms/mock/MockJMSResourceFactoryQueueExist.java | 50 ++++ .../mock/MockJMSResourceFactoryQueueNotExist.java | 47 +++ ...ndingReferenceQueueCreateModeTestCaseFIXME.java | 328 +++++++++++++++++++++ ...BindingServiceQueueCreateModeTestCaseFIXME.java | 179 +++++++++++ 9 files changed, 1022 insertions(+) create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldClientImpl.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldService.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldServiceImpl.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/OperationSelectionTestCase.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactory.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueExist.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueNotExist.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java create mode 100644 branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceQueueCreateModeTestCaseFIXME.java (limited to 'branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany') diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldClientImpl.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldClientImpl.java new file mode 100644 index 0000000000..86d4719646 --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldClientImpl.java @@ -0,0 +1,41 @@ +/* + * 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.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Service; + +/** + * This class implements the HelloWorld service. + */ +@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/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldService.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldService.java new file mode 100644 index 0000000000..abb29aec4c --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldService.java @@ -0,0 +1,26 @@ +/* + * 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.osoa.sca.annotations.Remotable; + +@Remotable +public interface HelloWorldService { + String sayHello(String name); +} diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldServiceImpl.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldServiceImpl.java new file mode 100644 index 0000000000..daa3d551df --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/HelloWorldServiceImpl.java @@ -0,0 +1,27 @@ +/* + * 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; + +public class HelloWorldServiceImpl implements HelloWorldService { + + public String sayHello(String name) { + return "jmsHello " + name; + } + +} diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/OperationSelectionTestCase.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/OperationSelectionTestCase.java new file mode 100644 index 0000000000..85106968f8 --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/OperationSelectionTestCase.java @@ -0,0 +1,230 @@ +/* + * 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 javax.jms.TextMessage; + +import org.apache.tuscany.sca.binding.jms.impl.JMSBinding; +import org.apache.tuscany.sca.binding.jms.provider.JMSBindingListener; +import org.apache.tuscany.sca.host.jms.JMSResourceFactory; +import org.apache.tuscany.sca.interfacedef.Interface; +import org.apache.tuscany.sca.interfacedef.InterfaceContract; +import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.interfacedef.impl.OperationImpl; +import org.apache.tuscany.sca.runtime.RuntimeComponentService; +import org.apache.tuscany.sca.runtime.RuntimeWire; +import org.easymock.EasyMock; +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. + */ +public class OperationSelectionTestCase { + /** + * This test attempts to invoke a Service with a Single method where scaOperationName is not specified in the JMS + * Message + *

+ * 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 = new OperationImpl("myOperation"); + + // Create the list of operations for the Service + final List operations = new ArrayList(); + 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 + *

+ * 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 = new OperationImpl("myOperation"); + + // Create the list of operations for the Service + final List operations = new ArrayList(); + 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 + *

+ * 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 = new OperationImpl("myOperation"); + + // Create the list of operations for the Service + final List operations = new ArrayList(); + 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 + *

+ * 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 operations = new ArrayList(); + for (int i = 0; i < 5; i++) { + operations.add(new OperationImpl("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 + *

+ * 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 operations = new ArrayList(); + for (int i = 0; i < 5; i++) { + operations.add(new OperationImpl("operation" + i)); + } + + // Add the onMessage operation to the Service Contract + final Operation onMessageOperation = new OperationImpl("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 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 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 JMSBindingListener bindingListener = new JMSBindingListener(jmsBinding, jmsResourceFactory, service); + + // 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); + } +} diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactory.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactory.java new file mode 100644 index 0000000000..c58bf72031 --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactory.java @@ -0,0 +1,94 @@ +/* + * 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.mock; + +import javax.jms.Connection; +import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.MessageConsumer; +import javax.jms.MessageListener; +import javax.jms.Session; +import javax.naming.NamingException; + +import org.apache.tuscany.sca.host.jms.JMSResourceFactory; +import org.easymock.EasyMock; + +/** + * Mock JMSResourceFactory base class for testing purposes. + */ +public abstract class MockJMSResourceFactory implements JMSResourceFactory { + + /** + * Throws UnsupportedOperationException + */ + public void closeConnection() throws JMSException, NamingException { + throw new UnsupportedOperationException(); + } + + /** + * Creates a Mock Destination + * + * @param jndiName Ignored + * @return A Mock Destination + */ + public Destination createDestination(String jndiName) throws NamingException { + final Destination d = EasyMock.createMock(Destination.class); + EasyMock.replay(d); + return d; + } + + /** + * Creates a Mock Session. + * + * @return A Mock Session + */ + public Session createSession() throws JMSException, NamingException { + final Session session = EasyMock.createMock(Session.class); + final MessageConsumer consumer = EasyMock.createMock(MessageConsumer.class); + final MessageListener listener = EasyMock.createMock(MessageListener.class); + EasyMock.expect(session.createConsumer((Destination)EasyMock.anyObject())).andReturn(consumer); + consumer.setMessageListener((MessageListener)EasyMock.anyObject()); + EasyMock.replay(session); + EasyMock.replay(consumer); + EasyMock.replay(listener); + return session; + } + + /** + * Throws UnsupportedOperationException + */ + public Connection getConnection() throws NamingException, JMSException { + throw new UnsupportedOperationException(); + } + + /** + * Throws UnsupportedOperationException + * + * @param jndiName Ignored + */ + public Destination lookupDestination(String jndiName) throws NamingException { + throw new UnsupportedOperationException(); + } + + /** + * Does nothing + */ + public void startConnection() throws JMSException, NamingException { + } +} diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueExist.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueExist.java new file mode 100644 index 0000000000..5fa8d39f5d --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueExist.java @@ -0,0 +1,50 @@ +/* + * 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.mock; + +import javax.jms.Destination; +import javax.naming.NamingException; + +import org.apache.tuscany.sca.binding.jms.impl.JMSBinding; +import org.easymock.EasyMock; + +/** + * This mock JMSResourceFactory will create a mock Destination when the lookupDestination() method is called + */ +public class MockJMSResourceFactoryQueueExist extends MockJMSResourceFactory { + /** + * Constructor + * + * @param jmsBinding Ignored + */ + public MockJMSResourceFactoryQueueExist(JMSBinding jmsBinding) { + } + + /** + * Return a mock Destination object + */ + public Destination lookupDestination(String jndiName) throws NamingException { + final Destination d = EasyMock.createMock(Destination.class); + EasyMock.replay(d); + return d; + } + + public void startBroker() { + } +} diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueNotExist.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueNotExist.java new file mode 100644 index 0000000000..a14fd5b5bd --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/mock/MockJMSResourceFactoryQueueNotExist.java @@ -0,0 +1,47 @@ +/* + * 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.mock; + +import javax.jms.Destination; +import javax.naming.NamingException; + +import org.apache.tuscany.sca.binding.jms.impl.JMSBinding; + +/** + * This mock JMSResourceFactory will always return null when the lookupDestination() method is called + */ +public class MockJMSResourceFactoryQueueNotExist extends MockJMSResourceFactory { + /** + * Constructor + * + * @param jmsBinding Ignored + */ + public MockJMSResourceFactoryQueueNotExist(JMSBinding jmsBinding) { + } + + /** + * Always returns null + */ + public Destination lookupDestination(String jndiName) throws NamingException { + return null; + } + + public void startBroker() { + } +} diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java new file mode 100644 index 0000000000..79e762be63 --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingReferenceQueueCreateModeTestCaseFIXME.java @@ -0,0 +1,328 @@ +/* + * 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.provider; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.binding.jms.impl.JMSBinding; +import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException; +import org.apache.tuscany.sca.binding.jms.mock.MockJMSResourceFactoryQueueExist; +import org.apache.tuscany.sca.binding.jms.mock.MockJMSResourceFactoryQueueNotExist; +import org.apache.tuscany.sca.host.jms.JMSHost; +import org.apache.tuscany.sca.host.jms.JMSResourceFactory; +import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.interfacedef.impl.OperationImpl; +import org.junit.Test; + +/** + * This unit test tests various combinations of the JMS Binding create modes for both request and response queues. + *

+ * The SCA JMS Binding specification lists 3 create modes: + *

+ * See the SCA JMS Binding specification for more information. + */ +public class JMSBindingReferenceQueueCreateModeTestCaseFIXME { + + /** + * Test creating a request queue in "never" mode where the queue does not exist. We are expecting an exception + */ + @Test + public void testRequestCreateNeverQueueNotExist() { + String requestCreateMode = "never"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = false; + boolean expectingRequestException = true; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a request queue in "never" mode where the queue exists. We are expecting this to work + */ + @Test + public void testRequestCreateNeverQueueExists() { + String requestCreateMode = "never"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = true; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a request queue in "ifnotexist" mode where the queue does not exist. We are expecting this to work + */ + @Test + public void testRequestCreateIfNotExistQueueNotExist() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = false; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a request queue in "ifnotexist" mode where the queue exists. We are expecting this to work + */ + @Test + public void testRequestCreateIfNotExistQueueExist() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = true; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a request queue in "always" mode where the queue does not exist. We are expecting this to work + */ + @Test + public void testRequestCreateAlwaysQueueNotExist() { + String requestCreateMode = "always"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = false; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a request queue in "always" mode where the queue exists. We are expecting an exception + */ + @Test + public void testRequestCreateAlwaysQueueExists() { + String requestCreateMode = "always"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = true; + boolean expectingRequestException = true; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a response queue in "never" mode where the queue does not exist. We are expecting an exception + */ + @Test + public void testResponseCreateNeverQueueNotExist() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "never"; + boolean preCreateQueue = false; + boolean expectingRequestException = false; + boolean expectingResponseException = true; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a response queue in "never" mode where the queue exists. We are expecting this to work + */ + @Test + public void testResponseCreateNeverQueueExists() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "never"; + boolean preCreateQueue = true; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a response queue in "ifnotexist" mode where the queue does not exist. We are expecting this to work + */ + @Test + public void testResponseCreateIfNotExistQueueNotExist() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = false; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a response queue in "ifnotexist" mode where the queue not exists. We are expecting this to work + */ + @Test + public void testResponseCreateIfNotExistQueueExist() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "ifnotexist"; + boolean preCreateQueue = true; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a response queue in "always" mode where the queue does not exist. We are expecting this to work + */ + @Test + public void testResponseCreateAlwaysQueueNotExist() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "always"; + boolean preCreateQueue = false; + boolean expectingRequestException = false; + boolean expectingResponseException = false; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * Test creating a response queue in "always" mode where the queue exists. We are expecting an exception + */ + @Test + public void testResponseCreateAlwaysQueueExists() { + String requestCreateMode = "ifnotexist"; + String responseCreateMode = "always"; + boolean preCreateQueue = true; + boolean expectingRequestException = false; + boolean expectingResponseException = true; + + doTestCase(requestCreateMode, + responseCreateMode, + preCreateQueue, + expectingRequestException, + expectingResponseException); + } + + /** + * This is the main test method for the various test scenarios for the JMS Binding. + * + * @param requestCreateMode The required create mode for the request destination queue + * @param responseCreateMode The required create mode for the response destination queue + * @param preCreateQueue Whether the queue should be pre-created. + * @param expectingRequestException true if we are expecting an exception because the request queue configuration is + * invalid; false otherwise + * @param expectingResponseException true if we are expecting an exception because the request queue configuration + * is invalid; false otherwise + */ + private void doTestCase(String requestCreateMode, + String responseCreateMode, + boolean preCreateQueue, + boolean expectingRequestException, + boolean expectingResponseException) { + String requestDestinationName = "SomeRequestDestination"; + String responseDestinationName = "SomeResponseDestination"; + String jmsBindingName = "MyJMSBinding"; + + // Create a JMS Binding with the required test parameters + JMSBinding jmsBinding = new JMSBinding(); + jmsBinding.setDestinationCreate(requestCreateMode); + jmsBinding.setResponseDestinationCreate(responseCreateMode); + if (preCreateQueue) { + jmsBinding.setJmsResourceFactoryName(MockJMSResourceFactoryQueueExist.class.getName()); + } else { + jmsBinding.setJmsResourceFactoryName(MockJMSResourceFactoryQueueNotExist.class.getName()); + } + jmsBinding.setDestinationName(requestDestinationName); + jmsBinding.setResponseDestinationName(responseDestinationName); + jmsBinding.setName(jmsBindingName); + + // Create the operation + Operation operation = new OperationImpl(); + operation.setName("OperationName"); + + // Try and create the JMS Binding Invoker for the JMS Binding + try { + new JMSBindingInvoker(jmsBinding, operation, null); + + // Check whether we were expecting an exception + if (expectingRequestException || expectingResponseException) { + // We were expecting an exception + Assert.fail("This binding should have failed as it is invalid"); + } + } catch (JMSBindingException ex) { + // Were we expecting an exception + if (!expectingRequestException && !expectingResponseException) { + // No we were not expecting an exception + Assert.fail("Unexpected exception of " + ex); + } + + // Validate that the expected exception has the text we expect + if (expectingRequestException) { + Assert.assertTrue(ex.getMessage().indexOf("JMS Destination") != -1); + Assert.assertTrue(ex.getMessage().indexOf(requestCreateMode) != -1); + Assert.assertTrue(ex.getMessage().indexOf(requestDestinationName) != -1); + } else if (expectingResponseException) { + Assert.assertTrue(ex.getMessage().indexOf("JMS Response Destination") != -1); + Assert.assertTrue(ex.getMessage().indexOf(responseCreateMode) != -1); + Assert.assertTrue(ex.getMessage().indexOf(responseDestinationName) != -1); + } + Assert.assertTrue(ex.getMessage().indexOf("registering binding " + jmsBindingName + " invoker") != -1); + } + } +} diff --git a/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceQueueCreateModeTestCaseFIXME.java b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceQueueCreateModeTestCaseFIXME.java new file mode 100644 index 0000000000..6e3a70d904 --- /dev/null +++ b/branches/sca-java-1.1/modules/binding-jms/src/test/java/org/apache/tuscany/sca/binding/jms/provider/JMSBindingServiceQueueCreateModeTestCaseFIXME.java @@ -0,0 +1,179 @@ +/* + * 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.provider; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.binding.jms.impl.JMSBinding; +import org.apache.tuscany.sca.binding.jms.impl.JMSBindingException; +import org.apache.tuscany.sca.binding.jms.mock.MockJMSResourceFactoryQueueExist; +import org.apache.tuscany.sca.binding.jms.mock.MockJMSResourceFactoryQueueNotExist; +import org.apache.tuscany.sca.core.assembly.RuntimeComponentServiceImpl; +import org.apache.tuscany.sca.host.jms.JMSHost; +import org.apache.tuscany.sca.host.jms.JMSResourceFactory; +import org.apache.tuscany.sca.runtime.RuntimeComponentService; +import org.junit.Test; + +/** + * This method tests various combinations of the JMS Binding create modes. + *

+ * The SCA JMS Binding specification lists 3 create modes: + *

+ * See the SCA JMS Binding specification for more information. + */ +public class JMSBindingServiceQueueCreateModeTestCaseFIXME { + /** + * Test creating a queue in "never" mode where the queue does not exist. We are expecting an exception + */ + @Test + public void testCreateNeverQueueNotExist() { + String createMode = "never"; + boolean preCreateQueue = false; + boolean expectingException = true; + + doTestCase(createMode, preCreateQueue, expectingException); + } + + /** + * Test creating a queue in "never" mode where the queue exists. We are expecting this to work + */ + @Test + public void testCreateNeverQueueExist() { + String createMode = "never"; + boolean preCreateQueue = true; + boolean expectingException = false; + + doTestCase(createMode, preCreateQueue, expectingException); + } + + /** + * Test creating a queue in "ifnotexist" mode where the queue does not exist. We are expecting this to work + */ + @Test + public void testCreateIfNotExistQueueNotExist() { + String createMode = "ifnotexist"; + boolean preCreateQueue = false; + boolean expectingException = false; + + doTestCase(createMode, preCreateQueue, expectingException); + } + + /** + * Test creating a queue in "ifnotexist" mode where the queue exists. We are expecting this to work + */ + @Test + public void testCreateIfNotExistQueueExist() { + String createMode = "ifnotexist"; + boolean preCreateQueue = true; + boolean expectingException = false; + + doTestCase(createMode, preCreateQueue, expectingException); + } + + /** + * Test creating a queue in "always" mode where the queue does not exist. We are expecting this to work + */ + @Test + public void testCreateAlwaysQueueNotExist() { + String createMode = "always"; + boolean preCreateQueue = false; + boolean expectingException = false; + + doTestCase(createMode, preCreateQueue, expectingException); + } + + /** + * Test creating a queue in "always" mode where the queue exists. We are expecting an exception + */ + @Test + public void testCreateAlwaysQueueExist() { + String createMode = "always"; + boolean preCreateQueue = true; + boolean expectingException = true; + + doTestCase(createMode, preCreateQueue, expectingException); + } + + /** + * This is the main test method for the various test scenarios for the JMS Binding. + * + * @param createMode The required create mode for the destination queue + * @param preCreateQueue Whether the queue should be pre-created. + * @param expectingException true if test should throw an exception + */ + private void doTestCase(String createMode, boolean preCreateQueue, boolean expectingException) { + String destinationName = "SomeDestination"; + String jmsBindingName = "MyJMSBinding"; + String serviceName = "MyServiceName"; + + // Create a JMS Binding with the required test parameters + JMSBinding jmsBinding = new JMSBinding(); + jmsBinding.setDestinationCreate(createMode); + if (preCreateQueue) { + jmsBinding.setJmsResourceFactoryName(MockJMSResourceFactoryQueueExist.class.getName()); + } else { + jmsBinding.setJmsResourceFactoryName(MockJMSResourceFactoryQueueNotExist.class.getName()); + } + jmsBinding.setDestinationName(destinationName); + jmsBinding.setName(jmsBindingName); + + RuntimeComponentService service = new RuntimeComponentServiceImpl(); + service.setName(serviceName); + + JMSHost jmsHost = new JMSHost(){ + public JMSResourceFactory createJMSResourceFactory(String connectionFactoryName, String initialContextFactoryName, String jndiURL) { + return null; + }}; + + // Try and create the JMS Binding Service for the JMS Binding + try { + JMSBindingServiceBindingProvider jmsService = + new JMSBindingServiceBindingProvider(null, service, jmsBinding, jmsHost); + jmsService.start(); + + // Check whether we were expecting an exception + if (expectingException) { + // We were expecting an exception + Assert.fail("This binding should have failed as it is invalid"); + } + } catch (JMSBindingException ex) { + // Were we expecting an exception + if (!expectingException) { + ex.printStackTrace(); + // No we were not expecting an exception + Assert.fail("Unexpected exception of " + ex); + } + + // We should get a JMSBindingException + Assert.assertTrue(ex.getMessage().indexOf("Error starting JMSServiceBinding") != -1); + + // Validate that the expected chained exception exception has the text we expect + Assert.assertNotNull(ex.getCause()); + Assert.assertTrue(ex.getCause().getMessage().indexOf("JMS Destination") != -1); + Assert.assertTrue(ex.getCause().getMessage().indexOf(createMode) != -1); + Assert.assertTrue(ex.getCause().getMessage().indexOf(destinationName) != -1); + Assert + .assertTrue(ex.getCause().getMessage().indexOf("registering service " + serviceName + " listener") != -1); + } + } +} -- cgit v1.2.3