package org.jacorb.test.notification.typed; /* * JacORB - a free Java ORB * * Copyright (C) 1997-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.easymock.AbstractMatcher; import org.easymock.MockControl; import org.jacorb.notification.OfferManager; import org.jacorb.notification.SubscriptionManager; import org.jacorb.notification.TypedEventMessage; import org.jacorb.notification.engine.TaskProcessor; import org.jacorb.notification.interfaces.Message; import org.jacorb.notification.servant.ITypedAdmin; import org.jacorb.notification.servant.TypedProxyPushConsumerImpl; import org.jacorb.test.notification.common.NotificationTestCase; import org.junit.Before; import org.junit.Test; import org.omg.CORBA.Any; import org.omg.CORBA.NO_IMPLEMENT; import org.omg.CosNotification.EventType; import org.omg.CosNotification.EventTypeHelper; import org.omg.CosNotification.Property; import org.omg.CosNotifyChannelAdmin.ProxyType; import org.omg.CosNotifyChannelAdmin.SupplierAdmin; import org.omg.CosNotifyComm.PushSupplierOperations; import org.omg.CosNotifyComm.PushSupplierPOATie; import org.omg.CosTypedNotifyChannelAdmin.TypedProxyPushConsumer; import org.omg.CosTypedNotifyChannelAdmin.TypedProxyPushConsumerHelper; /** * @author Alphonse Bendt */ public class TypedProxyPushConsumerImplTest extends NotificationTestCase { private TypedProxyPushConsumerImpl objectUnderTest_; private TypedProxyPushConsumer proxyPushConsumer_; private final static String DRINKING_COFFEE_ID = "::org::jacorb::test::notification::typed::Coffee::drinking_coffee"; private MockControl controlAdmin_; private ITypedAdmin mockAdmin_; private MockControl controlSupplierAdmin_; private SupplierAdmin mockSupplierAdmin_; @Before public void setUp() throws Exception { controlAdmin_ = MockControl.createNiceControl(ITypedAdmin.class); mockAdmin_ = (ITypedAdmin) controlAdmin_.getMock(); mockAdmin_.getProxyID(); controlAdmin_.setReturnValue(10); mockAdmin_.isIDPublic(); controlAdmin_.setReturnValue(true); mockAdmin_.getContainer(); controlAdmin_.setReturnValue(getPicoContainer()); mockAdmin_.getSupportedInterface(); controlAdmin_.setDefaultReturnValue(CoffeeHelper.id()); controlAdmin_.replay(); controlSupplierAdmin_ = MockControl.createControl(SupplierAdmin.class); mockSupplierAdmin_ = (SupplierAdmin) controlSupplierAdmin_.getMock(); objectUnderTest_ = new TypedProxyPushConsumerImpl(mockAdmin_, mockSupplierAdmin_, getORB(), getPOA(), getConfiguration(), getTaskProcessor(), getMessageFactory(), new OfferManager(), new SubscriptionManager(), getRepository()); proxyPushConsumer_ = TypedProxyPushConsumerHelper.narrow(objectUnderTest_.activate()); } @Test public void testID() { assertEquals(new Integer(10), objectUnderTest_.getID()); assertTrue(objectUnderTest_.isIDPublic()); } @Test public void testGetTypedConsumer() throws Exception { Coffee coffee = CoffeeHelper.narrow(proxyPushConsumer_.get_typed_consumer()); assertNotNull(coffee); assertTrue(coffee._is_a(CoffeeHelper.id())); } @Test public void testInvokeDrinkingCoffee() throws Exception { MockControl controlTaskProcessor = MockControl.createControl(TaskProcessor.class); TaskProcessor mockTaskProcessor = (TaskProcessor) controlTaskProcessor.getMock(); TypedEventMessage message = new TypedEventMessage(); Message handle = message.getHandle(); mockTaskProcessor.processMessage(handle); controlTaskProcessor.setMatcher(new AbstractMatcher() { protected boolean argumentMatches(Object exp, Object act) { Message mesg = (Message) exp; assertEquals(Message.TYPE_TYPED, mesg.getType()); try { Property[] _props = mesg.toTypedEvent(); assertEquals("event_type", _props[0].name); EventType et = EventTypeHelper.extract(_props[0].value); assertEquals(CoffeeHelper.id(), et.domain_name); assertEquals(DRINKING_COFFEE_ID, et.type_name); assertEquals("name", _props[1].name); assertEquals("jacorb", _props[1].value.extract_string()); assertEquals("minutes", _props[2].name); assertEquals(10, _props[2].value.extract_long()); } catch (Exception e) { fail(); } return true; } }); controlTaskProcessor.replay(); objectUnderTest_ = new TypedProxyPushConsumerImpl(mockAdmin_, mockSupplierAdmin_, getORB(), getPOA(), getConfiguration(), mockTaskProcessor, getMessageFactory(), new OfferManager(), new SubscriptionManager(), getRepository()); proxyPushConsumer_ = TypedProxyPushConsumerHelper.narrow(objectUnderTest_.activate()); org.omg.CORBA.Object obj = CoffeeHelper.narrow(proxyPushConsumer_.get_typed_consumer()); // some extra steps involved as local invocations are not // supported on dsi servants. String coffString = obj.toString(); Coffee coffee = CoffeeHelper.narrow(getClientORB().string_to_object(coffString)); coffee.drinking_coffee("jacorb", 10); controlTaskProcessor.verify(); } @Test public void testMyType() throws Exception { assertEquals(ProxyType.PUSH_TYPED, proxyPushConsumer_.MyType()); } @Test public void testPushAny() throws Exception { MockControl controlPushSupplier = MockControl.createControl(PushSupplierOperations.class); PushSupplierOperations mockPushSupplier = (PushSupplierOperations) controlPushSupplier .getMock(); controlPushSupplier.replay(); PushSupplierPOATie tie = new PushSupplierPOATie(mockPushSupplier); proxyPushConsumer_.connect_typed_push_supplier(tie._this(getClientORB())); Any any = getORB().create_any(); any.insert_string("push"); try { proxyPushConsumer_.push(any); fail("TypedProxyPushConsumer shouldn't support untyped push"); } catch (NO_IMPLEMENT e) { // expected } controlPushSupplier.verify(); } }