package org.jacorb.test.notification;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.jacorb.test.notification.common.NotificationTestUtils;
import org.jacorb.test.notification.common.NotifyServerTestCase;
import org.junit.Before;
import org.junit.Test;
import org.omg.CORBA.Any;
import org.omg.CORBA.IntHolder;
import org.omg.CosNotification.MaximumBatchSize;
import org.omg.CosNotification.PacingInterval;
import org.omg.CosNotification.Property;
import org.omg.CosNotification.StructuredEvent;
import org.omg.CosNotifyChannelAdmin.EventChannel;
import org.omg.TimeBase.TimeTHelper;
/**
* @author Alphonse Bendt
*/
public class SequenceEventChannelTest extends NotifyServerTestCase
{
private EventChannel channel_;
private StructuredEvent[] testEvent_;
private NotificationTestUtils testUtils_;
@Before
public void setUp() throws Exception
{
channel_ = getDefaultChannel();
testUtils_ = new NotificationTestUtils(setup.getClientOrb());
testEvent_ = new StructuredEvent[] { testUtils_.getStructuredEvent() };
}
@Test
public void testSetMaximumBatchSize() throws Exception
{
StructuredEvent[] _events = new StructuredEvent[] { testUtils_.getStructuredEvent(),
testUtils_.getStructuredEvent() };
Any _value = setup.getClientOrb().create_any();
_value.insert_long(2);
channel_.set_qos(new Property[] { new Property(MaximumBatchSize.value, _value) });
SequencePushSender _pushSender = new SequencePushSender(setup.getClientOrb(), _events);
SequencePushReceiver _pushReceiver = new SequencePushReceiver(setup.getClientOrb());
_pushSender.connect(channel_, false);
_pushReceiver.connect(channel_, false);
_pushReceiver.start();
_pushSender.start();
_pushSender.join();
_pushReceiver.join();
}
@Test
public void testPacingInterval() throws Exception
{
StructuredEvent[] _events = new StructuredEvent[] { testUtils_.getStructuredEvent(),
testUtils_.getStructuredEvent(),
testUtils_.getStructuredEvent() };
Any maxBatchSize = setup.getClientOrb().create_any();
maxBatchSize.insert_long(2);
Any pacingInterval = setup.getClientOrb().create_any();
TimeTHelper.insert(pacingInterval, 200000);
SequencePushSender _pushSender = new SequencePushSender(setup.getClientOrb(), _events);
SequencePushReceiver _pushReceiver = new SequencePushReceiver(setup.getClientOrb());
_pushReceiver.setExpected(4);
_pushSender.connect(channel_, false);
_pushReceiver.connect(channel_, false);
_pushReceiver.getPushSupplier().set_qos(new Property[] { new Property(MaximumBatchSize.value, maxBatchSize), new Property(PacingInterval.value, pacingInterval)});
_pushReceiver.start();
_pushSender.start();
_pushSender.join();
_pushReceiver.join();
assertEquals(3, _pushReceiver.getResult().size());
}
@Test
public void testDestroyChannelDisconnectsClients() throws Exception
{
Property[] _p = new Property[0];
IntHolder _channelId = new IntHolder();
EventChannel _channel = getEventChannelFactory().create_channel(_p, _p, _channelId);
SequencePushSender _pushSender = new SequencePushSender(setup.getClientOrb(), testEvent_);
SequencePullSender _pullSender = new SequencePullSender(setup.getClientOrb(), testEvent_);
SequencePushReceiver _pushReceiver = new SequencePushReceiver(setup.getClientOrb());
SequencePullReceiver _pullReceiver = new SequencePullReceiver(setup.getClientOrb());
_pushSender.connect(_channel, false);
_pullSender.connect(_channel, false);
_pushReceiver.connect(_channel, false);
_pullReceiver.connect(_channel, false);
assertTrue(_pushSender.isConnected());
assertTrue(_pullSender.isConnected());
assertTrue(_pushReceiver.isConnected());
assertTrue(_pullReceiver.isConnected());
_channel.destroy();
try
{
Thread.sleep(1000);
} catch (InterruptedException ie)
{
// ignored
}
assertTrue(!_pushSender.isConnected());
assertTrue(!_pullSender.isConnected());
assertTrue(!_pushReceiver.isConnected());
assertTrue(!_pullReceiver.isConnected());
}
@Test
public void testSendPushPush() throws Exception
{
SequencePushSender _sender = new SequencePushSender(setup.getClientOrb(), testEvent_);
SequencePushReceiver _receiver = new SequencePushReceiver(setup.getClientOrb());
_sender.connect(channel_, false);
_receiver.connect(channel_, false);
_receiver.start();
_sender.start();
_sender.join();
_receiver.join();
assertTrue("Error while sending", !_sender.error_);
assertTrue("Should have received something", _receiver.isEventHandled());
}
@Test
public void testSendPushPull() throws Exception
{
SequencePushSender _sender = new SequencePushSender(setup.getClientOrb(), testEvent_);
SequencePullReceiver _receiver = new SequencePullReceiver(setup.getClientOrb());
_sender.connect(channel_, false);
_receiver.connect(channel_, false);
_receiver.start();
_sender.start();
_sender.join();
_receiver.join();
assertTrue("Error while sending", _sender.isEventHandled());
assertTrue("Should have received something", _receiver.isEventHandled());
}
@Test
public void testSendPullPush() throws Exception
{
SequencePullSender _sender = new SequencePullSender(setup.getClientOrb(), testEvent_);
SequencePushReceiver _receiver = new SequencePushReceiver(setup.getClientOrb());
_receiver.connect(channel_, false);
_sender.connect(channel_, false);
_receiver.start();
_sender.start();
_sender.join();
_receiver.join();
assertTrue("Error while sending", !_sender.isError());
assertTrue("Should have received something", _receiver.isEventHandled());
}
@Test
public void testSendPullPull() throws Exception
{
SequencePullSender _sender = new SequencePullSender(setup.getClientOrb(), testEvent_);
SequencePullReceiver _receiver = new SequencePullReceiver(setup.getClientOrb());
_sender.connect(channel_, false);
_receiver.connect(channel_, false);
_receiver.start();
_sender.start();
_sender.join();
_receiver.join();
boolean _senderError = ((TestClientOperations) _sender).isError();
assertTrue("Error while sending", !_senderError);
assertTrue("Should have received something", _receiver.isEventHandled());
}
}