package org.jacorb.test.notification; /* * JacORB - a free Java ORB * * Copyright (C) 1999-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.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Iterator; import java.util.List; 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.CosEventComm.Disconnected; import org.omg.CosNotification.AnyOrder; import org.omg.CosNotification.BestEffort; import org.omg.CosNotification.ConnectionReliability; import org.omg.CosNotification.DeadlineOrder; import org.omg.CosNotification.DiscardPolicy; import org.omg.CosNotification.EventReliability; import org.omg.CosNotification.FifoOrder; import org.omg.CosNotification.LifoOrder; import org.omg.CosNotification.OrderPolicy; import org.omg.CosNotification.Persistent; import org.omg.CosNotification.Priority; import org.omg.CosNotification.PriorityOrder; import org.omg.CosNotification.Property; import org.omg.CosNotification.StructuredEvent; import org.omg.CosNotification.UnsupportedQoS; import org.omg.CosNotifyChannelAdmin.EventChannel; /** * @author Alphonse Bendt */ public class QoSTest extends NotifyServerTestCase { Any fifoOrder; Any lifoOrder; Any deadlineOrder; Any priorityOrder; Any anyOrder; Any persistent; Any bestEffort; Any trueAny; Any falseAny; @Before public void setUp() throws Exception { trueAny = setup.getClientOrb().create_any(); trueAny.insert_boolean(true); falseAny = setup.getClientOrb().create_any(); falseAny.insert_boolean(false); fifoOrder = setup.getClientOrb().create_any(); fifoOrder.insert_short(FifoOrder.value); lifoOrder = setup.getClientOrb().create_any(); lifoOrder.insert_short(LifoOrder.value); deadlineOrder = setup.getClientOrb().create_any(); deadlineOrder.insert_short(DeadlineOrder.value); priorityOrder = setup.getClientOrb().create_any(); priorityOrder.insert_short(PriorityOrder.value); anyOrder = setup.getClientOrb().create_any(); anyOrder.insert_short(AnyOrder.value); bestEffort = setup.getClientOrb().create_any(); bestEffort.insert_short(BestEffort.value); persistent = setup.getClientOrb().create_any(); persistent.insert_short(Persistent.value); } @Test public void testCreate_QueueSettings() throws Exception { IntHolder channelId = new IntHolder(); Property[] qosProps; qosProps = new Property[] { new Property(DiscardPolicy.value, priorityOrder), new Property(OrderPolicy.value, priorityOrder) }; getEventChannelFactory().create_channel(qosProps, new Property[0], channelId); } @Test public void testCreate_Reliability() throws Exception { IntHolder channelId = new IntHolder(); Property[] qosProps; qosProps = new Property[] { new Property(ConnectionReliability.value, bestEffort), new Property(EventReliability.value, bestEffort) }; getEventChannelFactory().create_channel(qosProps, new Property[0], channelId); qosProps = new Property[] { new Property(ConnectionReliability.value, persistent), new Property(EventReliability.value, persistent) }; try { getEventChannelFactory().create_channel(qosProps, new Property[0], channelId); fail(); } catch (UnsupportedQoS e) { // expected } } /** * test if events are reorderd respecting their priority. a supplier pushes some events with * ascending priority into a channel that was setup with OrderPolicy=PriorityOrder. A Consumer * receives and checks if the Events are delivered in descending Priority order. */ @Test public void testPriorityOrder() throws Exception { // create and setup channel IntHolder channelId = new IntHolder(); Property[] qosProps; qosProps = new Property[] { new Property(OrderPolicy.value, priorityOrder) }; EventChannel channel = getEventChannelFactory().create_channel(qosProps, new Property[0], channelId); // testdata StructuredEvent[] events = new StructuredEvent[10]; for (int x = 0; x < events.length; ++x) { events[x] = new NotificationTestUtils(setup.getClientOrb()).getStructuredEvent(); Any priority = setup.getClientOrb().create_any(); priority.insert_short((short) x); events[x].header.variable_header = new Property[] { new Property(Priority.value, priority) }; } final List received = new ArrayList(); // setup clients StructuredPushReceiver receiver = new StructuredPushReceiver(NotifyServerTestCase.setup.getClientOrb(), events.length) { public void push_structured_event(StructuredEvent event) throws Disconnected { super.push_structured_event(event); received.add(event); } }; receiver.connect(channel, false); receiver.pushSupplier_.suspend_connection(); StructuredPushSender sender = new StructuredPushSender(NotifyServerTestCase.setup.getClientOrb()); sender.setStructuredEvent(events); sender.setInterval(100); sender.connect(channel, false); // push events sender.run(); assertFalse(receiver.isEventHandled()); Thread.sleep(2000); receiver.pushSupplier_.resume_connection(); receiver.setTimeOut(events.length * 1000); receiver.run(); assertTrue(receiver.isEventHandled()); Thread.sleep(2000); while (!received.isEmpty()) { StructuredEvent event = (StructuredEvent) received.remove(0); Iterator i = received.iterator(); while (i.hasNext()) { short p1 = event.header.variable_header[0].value.extract_short(); short p2 = ((StructuredEvent) i.next()).header.variable_header[0].value .extract_short(); assertTrue(p1 + " > " + p2, p1 > p2); } } } }