/* * 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.implementation.notification; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.tuscany.sca.assembly.ComponentReference; import org.apache.tuscany.sca.assembly.SCABinding; import org.apache.tuscany.sca.binding.sca.impl.SCABindingFactoryImpl; import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.invocation.Interceptor; import org.apache.tuscany.sca.invocation.InvocationChain; import org.apache.tuscany.sca.invocation.Invoker; import org.apache.tuscany.sca.invocation.Message; import org.apache.tuscany.sca.runtime.EndpointReference; import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentReference; import org.apache.tuscany.sca.runtime.RuntimeWire; import org.easymock.EasyMock; /** * * @version $Rev$ $Date$ * */ public class NotificationComponentTestCase extends TestCase { public void testLocalNotificationComponent() throws Exception { try { Operation operation = EasyMock.createNiceMock(Operation.class); EasyMock.replay(operation); InvocationChain sub1Chain = EasyMock.createNiceMock(InvocationChain.class); EasyMock.expect(sub1Chain.getTargetOperation()).andReturn(operation); EasyMock.expect(sub1Chain.getHeadInvoker()).andReturn(new MockInterceptor()); EasyMock.replay(sub1Chain); List sub1Chains = new ArrayList(); sub1Chains.add(sub1Chain); SCABinding b1 = new SCABindingFactoryImpl().createSCABinding(); EndpointReference epr1 = EasyMock.createNiceMock(EndpointReference.class); EasyMock.expect(epr1.getURI()).andReturn("wire1Target"); EasyMock.expect(epr1.getBinding()).andReturn(b1); EasyMock.replay(epr1); RuntimeWire sub1Wire = EasyMock.createNiceMock(RuntimeWire.class); EasyMock.expect(sub1Wire.getInvocationChains()).andReturn(sub1Chains); EasyMock.expect(sub1Wire.getTarget()).andReturn(epr1).anyTimes(); EasyMock.replay(sub1Wire); ArrayList rtWires1 = new ArrayList(); rtWires1.add(sub1Wire); RuntimeComponentReference rtCompRef1 = EasyMock.createNiceMock(RuntimeComponentReference.class); EasyMock.expect(rtCompRef1.getName()).andReturn("sub1Reference"); EasyMock.expect(rtCompRef1.getRuntimeWires()).andReturn(rtWires1); EasyMock.replay(rtCompRef1); InvocationChain sub2Chain = EasyMock.createNiceMock(InvocationChain.class); EasyMock.expect(sub2Chain.getTargetOperation()).andReturn(operation); EasyMock.expect(sub2Chain.getHeadInvoker()).andReturn(new MockInterceptor()); EasyMock.replay(sub2Chain); List sub2Chains = new ArrayList(); sub2Chains.add(sub2Chain); SCABinding b2 = new SCABindingFactoryImpl().createSCABinding(); EndpointReference epr2 = EasyMock.createNiceMock(EndpointReference.class); EasyMock.expect(epr2.getURI()).andReturn("wire2Target"); EasyMock.expect(epr2.getBinding()).andReturn(b2); EasyMock.replay(epr2); RuntimeWire sub2Wire = EasyMock.createNiceMock(RuntimeWire.class); EasyMock.expect(sub2Wire.getInvocationChains()).andReturn(sub2Chains); EasyMock.expect(sub2Wire.getTarget()).andReturn(epr2).anyTimes(); EasyMock.replay(sub2Wire); ArrayList rtWires2 = new ArrayList(); rtWires2.add(sub2Wire); RuntimeComponentReference rtCompRef2 = EasyMock.createNiceMock(RuntimeComponentReference.class); EasyMock.expect(rtCompRef2.getName()).andReturn("sub2Reference"); EasyMock.expect(rtCompRef2.getRuntimeWires()).andReturn(rtWires2); EasyMock.replay(rtCompRef2); ArrayList references = new ArrayList(); references.add(rtCompRef1); references.add(rtCompRef2); RuntimeComponent component = EasyMock.createNiceMock(RuntimeComponent.class); EasyMock.expect(component.getName()).andReturn("LocalNotificationComponentTest"); EasyMock.expect(component.getReferences()).andReturn(references); EasyMock.replay(component); Invoker localNotificationInvoker = new NotificationComponentInvoker(operation, component); Message msg = EasyMock.createNiceMock(Message.class); EasyMock.expect(msg.getBody()).andReturn("msg").times(3); // once per sub int + once in notif target invoker EasyMock.replay(msg); localNotificationInvoker.invoke(msg); EasyMock.verify(msg); } catch(Throwable e) { e.printStackTrace(); } } class MockInterceptor implements Interceptor { public Message invoke(Message msg) { Assert.assertEquals("msg", msg.getBody()); return msg; } public void setNext(Invoker next) { throw new AssertionError(); } public Interceptor getNext() { throw new AssertionError(); } public boolean isOptimizable() { throw new AssertionError(); } } }