You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2007/01/16 18:40:09 UTC
svn commit: r496794 - in /incubator/tuscany/java/sca/kernel/core/src:
main/java/org/apache/tuscany/core/builder/
test/java/org/apache/tuscany/core/builder/
Author: jmarino
Date: Tue Jan 16 09:40:08 2007
New Revision: 496794
URL: http://svn.apache.org/viewvc?view=rev&rev=496794
Log:
work for supporting synchronous forward invocations and non-blocking callback invocations
Added:
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardNonBlockingCallbackConnectionTestCase.java (with props)
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardSyncCallbackConnectionTestCase.java (with props)
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SynchronousForwardCallbackConnectionTestCase.java (contents, props changed)
- copied, changed from r496499, incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/CallbackConnectionTestCase.java
Removed:
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/CallbackConnectionTestCase.java
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=496794&r1=496793&r2=496794
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Tue Jan 16 09:40:08 2007
@@ -193,7 +193,7 @@
if (source instanceof ServiceBinding) {
// services are a special case: invoker must go on the inbound and outbound chains
- if (target instanceof Component && (isOneWayOperation || operationHasCallback)) {
+ if (target instanceof Component && isOneWayOperation) {// || operationHasCallback)) {
// if the target is a component and the operation is non-blocking
connect(outboundChain, inboundChain, invoker, true);
} else {
@@ -203,7 +203,7 @@
InboundInvocationChain chain = binding.getInboundWire().getInvocationChains().get(operation);
chain.setTargetInvoker(invoker);
} else {
- if (target instanceof Component && (isOneWayOperation || operationHasCallback)) {
+ if (target instanceof Component && isOneWayOperation) {// || operationHasCallback)) {
// if the target is a component and the operation is non-blocking
connect(outboundChain, inboundChain, invoker, true);
} else {
@@ -240,7 +240,13 @@
} catch (TargetInvokerCreationException e) {
throw new WireConnectException("Error connecting source and target", sourceWire, targetWire, e);
}
- connect(outboundChain, inboundChain, invoker, false);
+ boolean isOneWayOperation = targetOp.isNonBlocking();
+ if (target instanceof Component && isOneWayOperation) {// || operationHasCallback)) {
+ // if the target is a component and the operation is non-blocking
+ connect(outboundChain, inboundChain, invoker, true);
+ } else {
+ connect(outboundChain, inboundChain, invoker, false);
+ }
} else if (source instanceof ReferenceBinding) {
ReferenceBinding binding = (ReferenceBinding) source;
ServiceContract sourceContract = sourceWire.getServiceContract();
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardNonBlockingCallbackConnectionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardNonBlockingCallbackConnectionTestCase.java?view=auto&rev=496794
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardNonBlockingCallbackConnectionTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardNonBlockingCallbackConnectionTestCase.java Tue Jan 16 09:40:08 2007
@@ -0,0 +1,172 @@
+/*
+ * 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.core.builder;
+
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.spi.QualifiedName;
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.services.work.NotificationListener;
+import org.apache.tuscany.spi.services.work.WorkScheduler;
+import org.apache.tuscany.spi.wire.InboundInvocationChain;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.OutboundWire;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.wire.WireService;
+
+import junit.framework.TestCase;
+import org.apache.tuscany.core.component.WorkContextImpl;
+import org.apache.tuscany.core.wire.InboundInvocationChainImpl;
+import org.apache.tuscany.core.wire.InboundWireImpl;
+import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
+import org.apache.tuscany.core.wire.OutboundWireImpl;
+import org.apache.tuscany.core.wire.jdk.JDKWireService;
+import org.easymock.EasyMock;
+
+/**
+ * Verifies connections with non-blocking forward and callback invocations
+ *
+ * @version $Rev$ $Date$
+ */
+public class NonBlockingForwardNonBlockingCallbackConnectionTestCase extends TestCase {
+ private Operation<Type> operation;
+ private Operation<Type> callbackOperation;
+ private ServiceContract<Type> contract;
+ private ConnectorImpl connector;
+
+ public void testNonBlockingForwardAndNonBlockingCallbackAtomicToAtomic() throws Exception {
+ AtomicComponent target = EasyMock.createMock(AtomicComponent.class);
+ EasyMock.expect(target.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(target.getName()).andReturn("target").anyTimes();
+ EasyMock.expect(target.createTargetInvoker(EasyMock.eq("service"),
+ EasyMock.isA(Operation.class),
+ EasyMock.isA(InboundWire.class))).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
+ EasyMock.replay(target);
+
+ InboundWire inboundWire = new InboundWireImpl();
+ inboundWire.setContainer(target);
+ inboundWire.setServiceContract(contract);
+ InboundInvocationChain inboundChain = new InboundInvocationChainImpl(operation);
+ inboundChain.addInterceptor(new NonBlockingForwardNonBlockingCallbackConnectionTestCase.MockInterceptor());
+ inboundWire.addInvocationChain(operation, inboundChain);
+
+ AtomicComponent source = createSource();
+ OutboundWire outboundWire = new OutboundWireImpl();
+ outboundWire.setContainer(source);
+ outboundWire.setServiceContract(contract);
+ outboundWire.setTargetName(new QualifiedName("target/service"));
+ OutboundInvocationChain outboundChain = new OutboundInvocationChainImpl(operation);
+ outboundWire.addInvocationChain(operation, outboundChain);
+
+ InboundInvocationChain callbackInboundChain = new InboundInvocationChainImpl(callbackOperation);
+ callbackInboundChain
+ .addInterceptor(new NonBlockingForwardNonBlockingCallbackConnectionTestCase.MockInterceptor());
+ Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
+ chains.put(callbackOperation, callbackInboundChain);
+ outboundWire.addTargetCallbackInvocationChains(chains);
+
+ connector.connect(outboundWire, inboundWire, true);
+
+ // test the forward request
+ Message msg = new MessageImpl();
+ msg.setBody("foo");
+ Message ret = outboundChain.getHeadInterceptor().invoke(msg);
+ assertEquals(null, ret.getBody());
+
+ // test the callback
+ msg = new MessageImpl();
+ msg.setBody("callback");
+ Map<Operation<?>, OutboundInvocationChain> callbackChains =
+ inboundWire.getSourceCallbackInvocationChains("source");
+ OutboundInvocationChain callbackInvocationChain = callbackChains.get(callbackOperation);
+ ret = callbackInvocationChain.getHeadInterceptor().invoke(msg);
+ assertEquals(null, ret.getBody());
+
+ EasyMock.verify(source);
+ EasyMock.verify(target);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ WorkContext context = new WorkContextImpl();
+ WireService wireService = new JDKWireService(null, null);
+ WorkScheduler scheduler = new MockWorkScheduler();
+ connector = new ConnectorImpl(wireService, null, scheduler, context);
+ operation = new Operation<Type>("bar", null, null, null);
+ operation.setNonBlocking(true);
+ callbackOperation = new Operation<Type>("callback", null, null, null);
+ callbackOperation.setNonBlocking(true);
+ contract = new JavaServiceContract();
+ Map<String, Operation<Type>> ops = new HashMap<String, Operation<Type>>();
+ ops.put("callback", callbackOperation);
+ contract.setCallbackOperations(ops);
+ }
+
+ private AtomicComponent createSource() throws Exception {
+ AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
+ EasyMock.expect(component.getName()).andReturn("source").atLeastOnce();
+ EasyMock.expect(component.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(component.createTargetInvoker(EasyMock.eq("callback"),
+ EasyMock.isA(Operation.class),
+ (InboundWire) EasyMock.isNull())).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
+ EasyMock.replay(component);
+ return component;
+ }
+
+ private class MockInterceptor implements Interceptor {
+
+ public Message invoke(Message msg) {
+ return msg;
+ }
+
+ public void setNext(Interceptor next) {
+
+ }
+
+ public Interceptor getNext() {
+ return null;
+ }
+
+ public boolean isOptimizable() {
+ return false;
+ }
+ }
+
+ private class MockWorkScheduler implements WorkScheduler {
+
+ public <T extends Runnable> void scheduleWork(T work, NotificationListener<T> listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public <T extends Runnable> void scheduleWork(T work) {
+ work.run();
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardNonBlockingCallbackConnectionTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardNonBlockingCallbackConnectionTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardSyncCallbackConnectionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardSyncCallbackConnectionTestCase.java?view=auto&rev=496794
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardSyncCallbackConnectionTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardSyncCallbackConnectionTestCase.java Tue Jan 16 09:40:08 2007
@@ -0,0 +1,171 @@
+/*
+ * 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.core.builder;
+
+import java.lang.reflect.Type;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.wire.InboundInvocationChain;
+import org.apache.tuscany.spi.wire.OutboundWire;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.QualifiedName;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.services.work.WorkScheduler;
+import org.apache.tuscany.spi.services.work.NotificationListener;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+import org.apache.tuscany.core.wire.InboundWireImpl;
+import org.apache.tuscany.core.wire.InboundInvocationChainImpl;
+import org.apache.tuscany.core.wire.OutboundWireImpl;
+import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
+import org.apache.tuscany.core.wire.jdk.JDKWireService;
+import org.apache.tuscany.core.component.WorkContextImpl;
+
+/**
+ * Verifies connections with non-blocking forward and synchronous callback invocations
+ *
+ * @version $Rev$ $Date$
+ */
+public class NonBlockingForwardSyncCallbackConnectionTestCase extends TestCase {
+ private Operation<Type> operation;
+ private Operation<Type> callbackOperation;
+ private ServiceContract<Type> contract;
+ private ConnectorImpl connector;
+
+ public void testNonBlockingForwardAndSyncCallbackAtomicToAtomic() throws Exception {
+ AtomicComponent target = EasyMock.createMock(AtomicComponent.class);
+ EasyMock.expect(target.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(target.getName()).andReturn("target").anyTimes();
+ EasyMock.expect(target.createTargetInvoker(EasyMock.eq("service"),
+ EasyMock.isA(Operation.class),
+ EasyMock.isA(InboundWire.class))).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
+ EasyMock.replay(target);
+
+ InboundWire inboundWire = new InboundWireImpl();
+ inboundWire.setContainer(target);
+ inboundWire.setServiceContract(contract);
+ InboundInvocationChain inboundChain = new InboundInvocationChainImpl(operation);
+ inboundChain.addInterceptor(new NonBlockingForwardSyncCallbackConnectionTestCase.MockInterceptor());
+ inboundWire.addInvocationChain(operation, inboundChain);
+
+ AtomicComponent source = createSource();
+ OutboundWire outboundWire = new OutboundWireImpl();
+ outboundWire.setContainer(source);
+ outboundWire.setServiceContract(contract);
+ outboundWire.setTargetName(new QualifiedName("target/service"));
+ OutboundInvocationChain outboundChain = new OutboundInvocationChainImpl(operation);
+ outboundWire.addInvocationChain(operation, outboundChain);
+
+ InboundInvocationChain callbackInboundChain = new InboundInvocationChainImpl(callbackOperation);
+ callbackInboundChain.addInterceptor(new NonBlockingForwardSyncCallbackConnectionTestCase.MockInterceptor());
+ Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
+ chains.put(callbackOperation, callbackInboundChain);
+ outboundWire.addTargetCallbackInvocationChains(chains);
+
+ connector.connect(outboundWire, inboundWire, true);
+
+ // test the forward request
+ Message msg = new MessageImpl();
+ msg.setBody("foo");
+ Message ret = outboundChain.getHeadInterceptor().invoke(msg);
+ assertEquals(null, ret.getBody());
+
+ // test the callback
+ msg = new MessageImpl();
+ msg.setBody("callback");
+ Map<Operation<?>, OutboundInvocationChain> callbackChains =
+ inboundWire.getSourceCallbackInvocationChains("source");
+ OutboundInvocationChain callbackInvocationChain = callbackChains.get(callbackOperation);
+ ret = callbackInvocationChain.getHeadInterceptor().invoke(msg);
+ assertEquals("callback", ret.getBody());
+
+ EasyMock.verify(source);
+ EasyMock.verify(target);
+ }
+
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ WorkContext context = new WorkContextImpl();
+ WireService wireService = new JDKWireService(null, null);
+ WorkScheduler scheduler = new NonBlockingForwardSyncCallbackConnectionTestCase.MockWorkScheduler();
+ connector = new ConnectorImpl(wireService, null, scheduler, context);
+ operation = new Operation<Type>("bar", null, null, null);
+ operation.setNonBlocking(true);
+ callbackOperation = new Operation<Type>("callback", null, null, null);
+ contract = new JavaServiceContract();
+ Map<String, Operation<Type>> ops = new HashMap<String, Operation<Type>>();
+ ops.put("callback", callbackOperation);
+ contract.setCallbackOperations(ops);
+ }
+
+ private AtomicComponent createSource() throws Exception {
+ AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
+ EasyMock.expect(component.getName()).andReturn("source").atLeastOnce();
+ EasyMock.expect(component.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(component.createTargetInvoker(EasyMock.eq("callback"),
+ EasyMock.isA(Operation.class),
+ (InboundWire) EasyMock.isNull())).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
+ EasyMock.replay(component);
+ return component;
+ }
+
+ private class MockInterceptor implements Interceptor {
+
+ public Message invoke(Message msg) {
+ return msg;
+ }
+
+ public void setNext(Interceptor next) {
+
+ }
+
+ public Interceptor getNext() {
+ return null;
+ }
+
+ public boolean isOptimizable() {
+ return false;
+ }
+ }
+
+ private class MockWorkScheduler implements WorkScheduler {
+
+ public <T extends Runnable> void scheduleWork(T work, NotificationListener<T> listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public <T extends Runnable> void scheduleWork(T work) {
+ work.run();
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardSyncCallbackConnectionTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/NonBlockingForwardSyncCallbackConnectionTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SynchronousForwardCallbackConnectionTestCase.java (from r496499, incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/CallbackConnectionTestCase.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SynchronousForwardCallbackConnectionTestCase.java?view=diff&rev=496794&p1=incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/CallbackConnectionTestCase.java&r1=496499&p2=incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SynchronousForwardCallbackConnectionTestCase.java&r2=496794
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/CallbackConnectionTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SynchronousForwardCallbackConnectionTestCase.java Tue Jan 16 09:40:08 2007
@@ -22,6 +22,7 @@
import java.util.HashMap;
import java.util.Map;
+import org.apache.tuscany.spi.QualifiedName;
import org.apache.tuscany.spi.component.AtomicComponent;
import org.apache.tuscany.spi.component.ReferenceBinding;
import org.apache.tuscany.spi.component.ServiceBinding;
@@ -31,110 +32,183 @@
import org.apache.tuscany.spi.wire.InboundInvocationChain;
import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
import org.apache.tuscany.spi.wire.OutboundWire;
import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireService;
import junit.framework.TestCase;
+import org.apache.tuscany.core.wire.InboundInvocationChainImpl;
import org.apache.tuscany.core.wire.InboundWireImpl;
+import org.apache.tuscany.core.wire.OutboundInvocationChainImpl;
import org.apache.tuscany.core.wire.OutboundWireImpl;
import org.apache.tuscany.core.wire.jdk.JDKWireService;
import org.easymock.EasyMock;
/**
+ * Verifies connections with synchronous forward and callback invocations
+ *
* @version $Rev$ $Date$
*/
-public class CallbackConnectionTestCase extends TestCase {
+public class SynchronousForwardCallbackConnectionTestCase extends TestCase {
private Operation<Type> operation;
+ private Operation<Type> callbackOperation;
private ServiceContract<Type> contract;
private ConnectorImpl connector;
- public void testAtomicOutboundInboundCallbackConnect() throws Exception {
- AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
- EasyMock.expect(component.isSystem()).andReturn(false).anyTimes();
- EasyMock.expect(component.getName()).andReturn("source").atLeastOnce();
- EasyMock.expect(component.createTargetInvoker(EasyMock.eq("bar"),
+ public void testSyncForwardAndCallbackAtomicToAtomic() throws Exception {
+ AtomicComponent target = EasyMock.createMock(AtomicComponent.class);
+ EasyMock.expect(target.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(target.getName()).andReturn("target").anyTimes();
+ EasyMock.expect(target.createTargetInvoker(EasyMock.eq("service"),
EasyMock.isA(Operation.class),
- (InboundWire) EasyMock.isNull())).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
- EasyMock.replay(component);
+ EasyMock.isA(InboundWire.class))).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
+ EasyMock.replay(target);
InboundWire inboundWire = new InboundWireImpl();
- inboundWire.setContainer(component);
+ inboundWire.setContainer(target);
inboundWire.setServiceContract(contract);
+ InboundInvocationChain inboundChain = new InboundInvocationChainImpl(operation);
+ inboundChain.addInterceptor(new MockInterceptor());
+ inboundWire.addInvocationChain(operation, inboundChain);
+
+ AtomicComponent source = createSource();
OutboundWire outboundWire = new OutboundWireImpl();
- outboundWire.setContainer(component);
+ outboundWire.setContainer(source);
outboundWire.setServiceContract(contract);
+ outboundWire.setTargetName(new QualifiedName("target/service"));
+ OutboundInvocationChain outboundChain = new OutboundInvocationChainImpl(operation);
+ outboundWire.addInvocationChain(operation, outboundChain);
- InboundInvocationChain inboundChain = EasyMock.createMock(InboundInvocationChain.class);
- EasyMock.expect(inboundChain.getOperation()).andReturn(operation).anyTimes();
- Interceptor interceptor = EasyMock.createNiceMock(Interceptor.class);
- EasyMock.expect(inboundChain.getHeadInterceptor()).andReturn(interceptor);
- EasyMock.replay(inboundChain);
+ InboundInvocationChain callbackInboundChain = new InboundInvocationChainImpl(callbackOperation);
+ callbackInboundChain.addInterceptor(new MockInterceptor());
Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
- chains.put(operation, inboundChain);
+ chains.put(callbackOperation, callbackInboundChain);
outboundWire.addTargetCallbackInvocationChains(chains);
connector.connect(outboundWire, inboundWire, true);
- EasyMock.verify(inboundChain);
- EasyMock.verify(component);
+
+ // test the forward request
+ Message msg = new MessageImpl();
+ msg.setBody("foo");
+ Message ret = outboundChain.getHeadInterceptor().invoke(msg);
+ assertEquals("foo", ret.getBody());
+
+ // test the callback
+ msg = new MessageImpl();
+ msg.setBody("callback");
+ Map<Operation<?>, OutboundInvocationChain> callbackChains =
+ inboundWire.getSourceCallbackInvocationChains("source");
+ OutboundInvocationChain callbackInvocationChain = callbackChains.get(callbackOperation);
+ ret = callbackInvocationChain.getHeadInterceptor().invoke(msg);
+ assertEquals("callback", ret.getBody());
+
+ EasyMock.verify(source);
+ EasyMock.verify(target);
}
- public void testReferenceOutboundInboundCallbackConnect() throws Exception {
- ReferenceBinding binding = EasyMock.createMock(ReferenceBinding.class);
- EasyMock.expect(binding.isSystem()).andReturn(false).anyTimes();
- EasyMock.expect(binding.getName()).andReturn("source").atLeastOnce();
- EasyMock.expect(binding.createTargetInvoker(EasyMock.isA(ServiceContract.class),
+ public void testSyncForwardAndCallbackAtomicToReferenceBinding() throws Exception {
+ ReferenceBinding target = EasyMock.createMock(ReferenceBinding.class);
+ EasyMock.expect(target.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(target.createTargetInvoker(EasyMock.isA(ServiceContract.class),
EasyMock.isA(Operation.class))).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
- EasyMock.replay(binding);
+ EasyMock.replay(target);
InboundWire inboundWire = new InboundWireImpl();
- inboundWire.setContainer(binding);
+ inboundWire.setContainer(target);
inboundWire.setServiceContract(contract);
+ InboundInvocationChain inboundChain = new InboundInvocationChainImpl(operation);
+ inboundChain.addInterceptor(new MockInterceptor());
+ inboundWire.addInvocationChain(operation, inboundChain);
+
+ AtomicComponent source = createSource();
OutboundWire outboundWire = new OutboundWireImpl();
- outboundWire.setContainer(binding);
+ outboundWire.setContainer(source);
outboundWire.setServiceContract(contract);
+ outboundWire.setTargetName(new QualifiedName("target/service"));
+ OutboundInvocationChain outboundChain = new OutboundInvocationChainImpl(operation);
+ outboundWire.addInvocationChain(operation, outboundChain);
- InboundInvocationChain inboundChain = EasyMock.createMock(InboundInvocationChain.class);
- EasyMock.expect(inboundChain.getOperation()).andReturn(operation).anyTimes();
- Interceptor interceptor = EasyMock.createNiceMock(Interceptor.class);
- EasyMock.expect(inboundChain.getHeadInterceptor()).andReturn(interceptor);
- EasyMock.replay(inboundChain);
+ InboundInvocationChain callbackInboundChain = new InboundInvocationChainImpl(callbackOperation);
+ callbackInboundChain.addInterceptor(new MockInterceptor());
Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
- chains.put(operation, inboundChain);
+ chains.put(callbackOperation, callbackInboundChain);
outboundWire.addTargetCallbackInvocationChains(chains);
connector.connect(outboundWire, inboundWire, true);
- EasyMock.verify(inboundChain);
- EasyMock.verify(binding);
+ // test the forward request
+ Message msg = new MessageImpl();
+ msg.setBody("foo");
+ Message ret = outboundChain.getHeadInterceptor().invoke(msg);
+ assertEquals("foo", ret.getBody());
+
+ // test the callback
+ msg = new MessageImpl();
+ msg.setBody("callback");
+ Map<Operation<?>, OutboundInvocationChain> callbackChains =
+ inboundWire.getSourceCallbackInvocationChains("source");
+ OutboundInvocationChain callbackInvocationChain = callbackChains.get(callbackOperation);
+ ret = callbackInvocationChain.getHeadInterceptor().invoke(msg);
+ assertEquals("callback", ret.getBody());
+
+ EasyMock.verify(target);
+ EasyMock.verify(source);
}
- public void testServiceOutboundInboundCallbackConnect() throws Exception {
- ServiceBinding binding = EasyMock.createMock(ServiceBinding.class);
- EasyMock.expect(binding.isSystem()).andReturn(false).anyTimes();
- EasyMock.expect(binding.getName()).andReturn("source").atLeastOnce();
- EasyMock.expect(binding.createTargetInvoker(EasyMock.isA(ServiceContract.class),
+ public void testSyncForwardAndCallbackReferenceBindingToServiceBinding() throws Exception {
+ ReferenceBinding source = EasyMock.createMock(ReferenceBinding.class);
+ EasyMock.expect(source.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(source.getName()).andReturn("source").atLeastOnce();
+ EasyMock.expect(source.createTargetInvoker(EasyMock.isA(ServiceContract.class),
+ EasyMock.isA(Operation.class))).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
+ EasyMock.replay(source);
+
+ ServiceBinding target = EasyMock.createMock(ServiceBinding.class);
+ EasyMock.expect(target.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(target.createTargetInvoker(EasyMock.isA(ServiceContract.class),
EasyMock.isA(Operation.class))).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
- EasyMock.replay(binding);
+ EasyMock.replay(target);
InboundWire inboundWire = new InboundWireImpl();
- inboundWire.setContainer(binding);
+ inboundWire.setContainer(target);
inboundWire.setServiceContract(contract);
+ InboundInvocationChain inboundChain = new InboundInvocationChainImpl(operation);
+ inboundChain.addInterceptor(new MockInterceptor());
+ inboundWire.addInvocationChain(operation, inboundChain);
+
OutboundWire outboundWire = new OutboundWireImpl();
- outboundWire.setContainer(binding);
+ outboundWire.setContainer(source);
outboundWire.setServiceContract(contract);
+ outboundWire.setTargetName(new QualifiedName("target/service"));
+ OutboundInvocationChain outboundChain = new OutboundInvocationChainImpl(operation);
+ outboundWire.addInvocationChain(operation, outboundChain);
- InboundInvocationChain inboundChain = EasyMock.createMock(InboundInvocationChain.class);
- EasyMock.expect(inboundChain.getOperation()).andReturn(operation).anyTimes();
- Interceptor interceptor = EasyMock.createNiceMock(Interceptor.class);
- EasyMock.expect(inboundChain.getHeadInterceptor()).andReturn(interceptor);
- EasyMock.replay(inboundChain);
+ InboundInvocationChain callbackInboundChain = new InboundInvocationChainImpl(callbackOperation);
+ callbackInboundChain.addInterceptor(new MockInterceptor());
Map<Operation<?>, InboundInvocationChain> chains = new HashMap<Operation<?>, InboundInvocationChain>();
- chains.put(operation, inboundChain);
+ chains.put(callbackOperation, callbackInboundChain);
outboundWire.addTargetCallbackInvocationChains(chains);
connector.connect(outboundWire, inboundWire, true);
- EasyMock.verify(inboundChain);
- EasyMock.verify(binding);
+ // test the forward request
+ Message msg = new MessageImpl();
+ msg.setBody("foo");
+ Message ret = outboundChain.getHeadInterceptor().invoke(msg);
+ assertEquals("foo", ret.getBody());
+
+ // test the callback
+ msg = new MessageImpl();
+ msg.setBody("callback");
+ Map<Operation<?>, OutboundInvocationChain> callbackChains =
+ inboundWire.getSourceCallbackInvocationChains("source");
+ OutboundInvocationChain callbackInvocationChain = callbackChains.get(callbackOperation);
+ ret = callbackInvocationChain.getHeadInterceptor().invoke(msg);
+ assertEquals("callback", ret.getBody());
+
+ EasyMock.verify(source);
+ EasyMock.verify(target);
}
protected void setUp() throws Exception {
@@ -142,10 +216,41 @@
WireService wireService = new JDKWireService(null, null);
connector = new ConnectorImpl(wireService, null, null, null);
operation = new Operation<Type>("bar", null, null, null);
+ callbackOperation = new Operation<Type>("callback", null, null, null);
contract = new JavaServiceContract();
Map<String, Operation<Type>> ops = new HashMap<String, Operation<Type>>();
- ops.put("bar", operation);
+ ops.put("callback", callbackOperation);
contract.setCallbackOperations(ops);
+ }
+
+ private AtomicComponent createSource() throws Exception {
+ AtomicComponent component = EasyMock.createMock(AtomicComponent.class);
+ EasyMock.expect(component.getName()).andReturn("source").atLeastOnce();
+ EasyMock.expect(component.isSystem()).andReturn(false).anyTimes();
+ EasyMock.expect(component.createTargetInvoker(EasyMock.eq("callback"),
+ EasyMock.isA(Operation.class),
+ (InboundWire) EasyMock.isNull())).andReturn(EasyMock.createNiceMock(TargetInvoker.class));
+ EasyMock.replay(component);
+ return component;
+ }
+
+ private class MockInterceptor implements Interceptor {
+
+ public Message invoke(Message msg) {
+ return msg;
+ }
+
+ public void setNext(Interceptor next) {
+
+ }
+
+ public Interceptor getNext() {
+ return null;
+ }
+
+ public boolean isOptimizable() {
+ return false;
+ }
}
}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SynchronousForwardCallbackConnectionTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/SynchronousForwardCallbackConnectionTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org