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.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.easymock.MockControl;
import org.jacorb.notification.OfferManager;
import org.jacorb.notification.SubscriptionManager;
import org.jacorb.notification.TypedEventMessage;
import org.jacorb.notification.servant.ITypedAdmin;
import org.jacorb.notification.servant.TypedProxyPullSupplierImpl;
import org.jacorb.test.notification.common.NotificationTestCase;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.StringHolder;
import org.omg.CosNotification.EventType;
import org.omg.CosNotification.Property;
import org.omg.CosNotifyChannelAdmin.ConsumerAdmin;
import org.omg.CosNotifyChannelAdmin.ConsumerAdminPOATie;
import org.omg.CosNotifyComm.InvalidEventType;
import org.omg.CosNotifyComm.PullConsumerPOA;
import org.omg.CosTypedNotifyChannelAdmin.TypedProxyPullSupplier;
import org.omg.CosTypedNotifyChannelAdmin.TypedProxyPullSupplierHelper;
/**
* @author Alphonse Bendt
*/
public class TypedProxyPullSupplierImplTest extends NotificationTestCase
{
private TypedProxyPullSupplierImpl objectUnderTest_;
private TypedProxyPullSupplier proxyPullSupplier_;
private static String DRINKING_COFFEE_ID = "::org::jacorb::test::notification::typed::Coffee::drinking_coffee";
private MockControl controlAdmin_;
private ITypedAdmin mockAdmin_;
private ConsumerAdmin mockConsumerAdmin_;
private MockControl controlConsumerAdmin_;
@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_.setReturnValue(PullCoffeeHelper.id());
controlAdmin_.replay();
controlConsumerAdmin_ = MockControl.createControl(ConsumerAdmin.class);
mockConsumerAdmin_ = (ConsumerAdmin) controlConsumerAdmin_.getMock();
objectUnderTest_ = new TypedProxyPullSupplierImpl(mockAdmin_, new ConsumerAdminPOATie(
mockConsumerAdmin_)._this(getORB()), getORB(), getPOA(), getConfiguration(),
getTaskProcessor(), new OfferManager(), new SubscriptionManager(),
getDynAnyFactory(), getRepository());
proxyPullSupplier_ = TypedProxyPullSupplierHelper.narrow(objectUnderTest_.activate());
}
@Test
public void testID()
{
assertEquals(new Integer(10), objectUnderTest_.getID());
assertTrue(objectUnderTest_.isIDPublic());
}
@Test
public void testMyAdmin()
{
mockConsumerAdmin_.remove_all_filters();
controlConsumerAdmin_.replay();
proxyPullSupplier_.MyAdmin().remove_all_filters();
controlConsumerAdmin_.verify();
}
@Test
public void testConnect() throws Exception
{
NullPullConsumer _pullConsumer = new NullPullConsumer();
proxyPullSupplier_.connect_typed_pull_consumer(_pullConsumer._this(getClientORB()));
}
@Test
public void testEmptyPull() throws Exception
{
NullPullConsumer _pullConsumer = new NullPullConsumer();
proxyPullSupplier_.connect_typed_pull_consumer(_pullConsumer._this(getClientORB()));
org.omg.CORBA.Object _object = proxyPullSupplier_.get_typed_supplier();
String _objectAsString = _object.toString();
PullCoffee _pullCoffee = PullCoffeeHelper.narrow(getClientORB().string_to_object(
_objectAsString));
StringHolder _name = new StringHolder();
IntHolder _minutes = new IntHolder();
assertFalse(_pullCoffee.try_drinking_coffee(_name, _minutes));
}
@Test
public void testTryPullDrinkingCoffee() throws Exception
{
TypedEventMessage _mesg = new TypedEventMessage();
_mesg.setTypedEvent(PullCoffeeHelper.id(), DRINKING_COFFEE_ID, new Property[] {
new Property("name", toAny("jacorb")), new Property("minutes", toAny(10)) });
NullPullConsumer _pullConsumer = new NullPullConsumer();
proxyPullSupplier_.connect_typed_pull_consumer(_pullConsumer._this(getClientORB()));
org.omg.CORBA.Object _object = proxyPullSupplier_.get_typed_supplier();
String _objectAsString = _object.toString();
PullCoffee _pullCoffee = PullCoffeeHelper.narrow(getClientORB().string_to_object(
_objectAsString));
StringHolder _name = new StringHolder();
IntHolder _minutes = new IntHolder();
objectUnderTest_.getMessageConsumer().queueMessage(_mesg.getHandle());
assertTrue(_pullCoffee.try_drinking_coffee(_name, _minutes));
assertEquals("jacorb", _name.value);
assertEquals(10, _minutes.value);
}
@Test
public void testPullDrinkingCoffee() throws Exception
{
TypedEventMessage _mesg = new TypedEventMessage();
_mesg.setTypedEvent(PullCoffeeHelper.id(), DRINKING_COFFEE_ID, new Property[] {
new Property("name", toAny("jacorb")), new Property("minutes", toAny(10)) });
NullPullConsumer _pullConsumer = new NullPullConsumer();
proxyPullSupplier_.connect_typed_pull_consumer(_pullConsumer._this(getClientORB()));
org.omg.CORBA.Object _object = proxyPullSupplier_.get_typed_supplier();
String _objectAsString = _object.toString();
final PullCoffee _pullCoffee = PullCoffeeHelper.narrow(getClientORB().string_to_object(
_objectAsString));
final StringHolder _name = new StringHolder();
final IntHolder _minutes = new IntHolder();
final CountDownLatch _latch = new CountDownLatch(1);
new Thread()
{
public void run()
{
_pullCoffee.drinking_coffee(_name, _minutes);
_latch.countDown();
}
}.start();
objectUnderTest_.getMessageConsumer().queueMessage(_mesg.getHandle());
assertTrue("Countdown (" + _latch.getCount () + " countdown expired",
_latch.await(3000, TimeUnit.SECONDS));
assertEquals("jacorb", _name.value);
assertEquals(10, _minutes.value);
}
}
class NullPullConsumer extends PullConsumerPOA
{
public void offer_change(EventType[] eventTypeArray, EventType[] eventTypeArray1)
throws InvalidEventType
{
// no op
}
public void disconnect_pull_consumer()
{
// no op
}
}