Package org.jacorb.test.notification.servant

Source Code of org.jacorb.test.notification.servant.SequenceProxyPushSupplierImplTest

/*
*        JacORB - a free Java ORB
*
*   Copyright (C) 1999-2004 Gerald Brose
*
*   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.
*
*/

package org.jacorb.test.notification.servant;

import junit.framework.Test;

import org.easymock.AbstractMatcher;
import org.easymock.MockControl;
import org.jacorb.notification.OfferManager;
import org.jacorb.notification.SubscriptionManager;
import org.jacorb.notification.engine.PushTaskExecutor;
import org.jacorb.notification.engine.PushTaskExecutorFactory;
import org.jacorb.notification.engine.TaskProcessor;
import org.jacorb.notification.interfaces.Message;
import org.jacorb.notification.servant.IAdmin;
import org.jacorb.notification.servant.SequenceProxyPushSupplierImpl;
import org.jacorb.test.notification.common.NotificationTestCase;
import org.jacorb.test.notification.common.NotificationTestCaseSetup;
import org.omg.CORBA.Any;
import org.omg.CosNotification.MaximumBatchSize;
import org.omg.CosNotification.PacingInterval;
import org.omg.CosNotification.Property;
import org.omg.CosNotification.StructuredEvent;
import org.omg.CosNotifyChannelAdmin.ConsumerAdmin;
import org.omg.CosNotifyChannelAdmin.ProxyType;
import org.omg.CosNotifyComm.SequencePushConsumer;
import org.omg.TimeBase.TimeTHelper;

import edu.emory.mathcs.backport.java.util.concurrent.ScheduledFuture;

public class SequenceProxyPushSupplierImplTest extends NotificationTestCase
{
    private SequenceProxyPushSupplierImpl objectUnderTest_;

    private MockControl controlAdmin_;

    private IAdmin mockAdmin_;

    private MockControl controlTaskProcessor_;

    private TaskProcessor mockTaskProcessor_;

    private MockControl controlConsumerAdmin_;

    private ConsumerAdmin mockConsumerAdmin_;

    private MockControl controlPushConsumer_;

    private SequencePushConsumer mockPushConsumer_;

    private AbstractMatcher TASKPROCESSOR_MATCHER = new AbstractMatcher()
    {
        public boolean matches(Object[] expected, Object[] actual)
        {
            return expected[0].equals(actual[0]) && expected[2].equals(actual[2]);
        }
    };

    private MockControl controlPushTaskExecutorFactory_;

    private PushTaskExecutorFactory mockPushTaskExecutorFactory_;

    private ScheduledFuture mockScheduledFuture_;

    private MockControl controlScheduledFuture_;

    public SequenceProxyPushSupplierImplTest(String name, NotificationTestCaseSetup setup)
    {
        super(name, setup);
    }

    protected void setUpTest() throws Exception
    {
        controlScheduledFuture_ = MockControl.createControl(ScheduledFuture.class);
        mockScheduledFuture_ = (ScheduledFuture) controlScheduledFuture_.getMock();
       
        controlAdmin_ = MockControl.createControl(IAdmin.class);
        mockAdmin_ = (IAdmin) controlAdmin_.getMock();

        controlAdmin_.expectAndReturn(mockAdmin_.getContainer(), null);

        controlAdmin_.expectAndReturn(mockAdmin_.isIDPublic(), true);

        controlAdmin_.expectAndReturn(mockAdmin_.getProxyID(), 1);

        controlAdmin_.expectAndReturn(mockAdmin_.getAdminMBean(), "");
        controlAdmin_.replay();

        controlTaskProcessor_ = MockControl.createControl(TaskProcessor.class);
        mockTaskProcessor_ = (TaskProcessor) controlTaskProcessor_.getMock();
        controlConsumerAdmin_ = MockControl.createControl(ConsumerAdmin.class);
        mockConsumerAdmin_ = (ConsumerAdmin) controlConsumerAdmin_.getMock();

        controlPushConsumer_ = MockControl.createControl(SequencePushConsumer.class);
        mockPushConsumer_ = (SequencePushConsumer) controlPushConsumer_.getMock();

        controlPushTaskExecutorFactory_ = MockControl.createControl(PushTaskExecutorFactory.class);
        mockPushTaskExecutorFactory_ = (PushTaskExecutorFactory) controlPushTaskExecutorFactory_
                .getMock();

        mockPushTaskExecutorFactory_.newExecutor(null);
        controlPushTaskExecutorFactory_.setMatcher(MockControl.ALWAYS_MATCHER);
        controlPushTaskExecutorFactory_.setReturnValue(new PushTaskExecutor()
        {
            public void executePush(PushTask task)
            {
                task.doPush();
            }

            public void dispose()
            {
                // ignored
            }
        });

        controlPushTaskExecutorFactory_.replay();

        objectUnderTest_ = new SequenceProxyPushSupplierImpl(mockAdmin_, getORB(), getPOA(),
                getConfiguration(), mockTaskProcessor_, mockPushTaskExecutorFactory_,
                new OfferManager(), new SubscriptionManager(), mockConsumerAdmin_);
    }

    private void verifyAll()
    {
        controlScheduledFuture_.verify();
        controlPushTaskExecutorFactory_.verify();
        controlAdmin_.verify();
        controlTaskProcessor_.verify();
        controlConsumerAdmin_.verify();
        controlPushConsumer_.verify();
    }

    private void replayAll()
    {
        controlScheduledFuture_.replay();
        controlTaskProcessor_.replay();
        controlConsumerAdmin_.replay();
        controlPushConsumer_.replay();
    }

    public void testCreation()
    {
        replayAll();

        assertEquals(1, objectUnderTest_.getID().intValue());
        assertEquals(mockConsumerAdmin_, objectUnderTest_.MyAdmin());
        assertEquals(ProxyType.PUSH_SEQUENCE, objectUnderTest_.MyType());

        verifyAll();
    }

    public void testDefaultConfigurationDoesNotStartFlushThread() throws Exception
    {
        replayAll();

        objectUnderTest_.connect_sequence_push_consumer(mockPushConsumer_);

        verifyAll();
    }

    public void testSetQoSDoesNotStartThread() throws Exception
    {
        replayAll();

        final int interval = 1000;

        Property prop = newPacingInterval(interval);

        objectUnderTest_.set_qos(new Property[] { prop });

        verifyAll();
    }

    public void testSetQoSBeforeConnect() throws Exception
    {
        final int interval = 10000000;

        mockTaskProcessor_.executeTaskPeriodically(1000, null, true);
        controlTaskProcessor_.setMatcher(TASKPROCESSOR_MATCHER);
        controlTaskProcessor_.setReturnValue(null);

        replayAll();

        Property prop = newPacingInterval(interval);

        objectUnderTest_.set_qos(new Property[] { prop });
        objectUnderTest_.connect_sequence_push_consumer(mockPushConsumer_);

        verifyAll();
    }

    public void testSetQoSAfterConnect() throws Exception
    {
        final int interval = 10000000;

        mockTaskProcessor_.executeTaskPeriodically(1000, null, true);
        controlTaskProcessor_.setMatcher(TASKPROCESSOR_MATCHER);
        controlTaskProcessor_.setReturnValue(null);

        replayAll();

        Property prop = newPacingInterval(interval);

        objectUnderTest_.connect_sequence_push_consumer(mockPushConsumer_);
        objectUnderTest_.set_qos(new Property[] { prop });

        verifyAll();
    }

    public void testSetQoSTwoTimes() throws Exception
    {
        final int interval1 = 10000000;
        final int interval2 = 20000000;

        mockTaskProcessor_.executeTaskPeriodically(1000, null, true);
        controlTaskProcessor_.setMatcher(TASKPROCESSOR_MATCHER);
        controlTaskProcessor_.setReturnValue(mockScheduledFuture_);

        mockScheduledFuture_.cancel(true);
        controlScheduledFuture_.setReturnValue(true);
       
        mockTaskProcessor_.executeTaskPeriodically(2000, null, true);
        controlTaskProcessor_.setReturnValue(null);

        replayAll();

        Property prop1 = newPacingInterval(interval1);
        Property prop2 = newPacingInterval(interval2);

        objectUnderTest_.connect_sequence_push_consumer(mockPushConsumer_);
        objectUnderTest_.set_qos(new Property[] { prop1 });
        objectUnderTest_.set_qos(new Property[] { prop2 });

        verifyAll();
    }

    public void testMaximumBatchSize() throws Exception
    {
        StructuredEvent event = new StructuredEvent();

        MockControl controlMessage = MockControl.createNiceControl(Message.class);
        Message mockMessage = (Message) controlMessage.getMock();

        controlMessage.expectAndReturn(mockMessage.clone(), mockMessage, MockControl.ONE_OR_MORE);
       
        mockMessage.toStructuredEvent();
        controlMessage.setReturnValue(event);

        controlMessage.replay();

        replayAll();

        Any any = getORB().create_any();
        any.insert_long(3);
        objectUnderTest_.set_qos(new Property[] { new Property(MaximumBatchSize.value, any) });
        objectUnderTest_.connect_sequence_push_consumer(mockPushConsumer_);

        objectUnderTest_.getMessageConsumer().queueMessage(mockMessage);
        objectUnderTest_.getMessageConsumer().queueMessage(mockMessage);

        controlPushConsumer_.verify();

        controlPushConsumer_.reset();

        mockPushConsumer_.push_structured_events(new StructuredEvent[] { event, event });
        controlPushConsumer_.setMatcher(new AbstractMatcher()
        {
            public boolean matches(Object[] expected, Object[] actual)
            {
                return ((StructuredEvent[]) expected[0]).length == ((StructuredEvent[]) actual[0]).length;
            }
        });

        controlPushConsumer_.replay();
        objectUnderTest_.flushPendingEvents();

        verifyAll();
    }

    private Property newPacingInterval(final int timeT)
    {
        Any any = getORB().create_any();
        TimeTHelper.insert(any, timeT);

        Property prop = new Property(PacingInterval.value, any);
        return prop;
    }

    public static Test suite() throws Exception
    {
        return NotificationTestCase.suite(SequenceProxyPushSupplierImplTest.class);
    }
}
TOP

Related Classes of org.jacorb.test.notification.servant.SequenceProxyPushSupplierImplTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.