Package org.jacorb.test.bugs.bugjac662

Source Code of org.jacorb.test.bugs.bugjac662.BugJac662Test

package org.jacorb.test.bugs.bugjac662;

/*
* 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.assertTrue;
import static org.junit.Assert.fail;
import java.lang.reflect.Field;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.jacorb.orb.Delegate;
import org.jacorb.orb.ReplyGroup;
import org.jacorb.orb.giop.ReplyPlaceholder;
import org.jacorb.test.harness.ClientServerSetup;
import org.jacorb.test.harness.ClientServerTestCase;
import org.jacorb.test.harness.IMRExcludedClientServerCategory;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.omg.CORBA.COMM_FAILURE;


/**
* <code>BugJac662Test</code> verifies that if an exception occurs while
* waiting for a reply, the Delegate pending_replies map is correctly cleared.
*
* @author <a href="mailto:Nick.Cross@prismtech.com">Nick Cross</a>
* @version 1.0
*/
@Category(IMRExcludedClientServerCategory.class)
public class BugJac662Test extends ClientServerTestCase
{
    private PingReceiver server;


    @BeforeClass
    public static void beforeClassSetUp() throws Exception
    {

        Properties props = new Properties();
        props.put("jacorb.use_imr", "off");

        setup = new ClientServerSetup("org.jacorb.test.bugs.bugjac662.PingReceiverImpl", props, props);
    }


    @Before
    public void setUp() throws Exception
    {
        server = PingReceiverHelper.narrow(setup.getServerObject());
    }

    @After
    public void tearDown() throws Exception
    {
        server._release();
        server = null;
    }

    /**
     * <code>testReplyReceiverCount</code> uses reflection to test the
     * value of the private groups field to ensure that it is
     * always cleared after an exception happens.
     *
     * @exception Exception if an error occurs
     */
    @SuppressWarnings("unchecked")
    @Test
    public void testReplyReceiverCount () throws Exception
    {
        PingReceiver pr = PingReceiverHelper.narrow(server);
        pr.ping ();

        // Now the test...
        Delegate d = (Delegate)((org.omg.CORBA.portable.ObjectImpl)pr)._get_delegate();
        Field fields[] = Delegate.class.getDeclaredFields();
        Set<ReplyPlaceholder> pendingReplies = null;
        ConcurrentHashMap<org.omg.ETF.Profile, ReplyGroup> groups = null;

        for (int i = 0; i < fields.length; ++i)
        {
            if ("groups".equals(fields[i].getName()))
            {
                Field f = fields[i];
                f.setAccessible(true);
                groups = (ConcurrentHashMap<org.omg.ETF.Profile, ReplyGroup>)f.get (d);
                break;
            }
        }
        if (groups == null)
        {
            fail ("Unable to find pending_replies in Delegate");
        }

        assertTrue ("Groups does not have only one entry", groups.size() == 1);

        Enumeration<ReplyGroup> elements = groups.elements();
        if (elements.hasMoreElements())
        {
            pendingReplies = elements.nextElement().getReplies();
        }
        if (pendingReplies == null)
        {
            fail ("Unable to get replies from ReplyGroup");
        }

        assertTrue ("Should be no replies pending: " + pendingReplies.toString(), pendingReplies.size() == 0);

        try
        {
            pr.shutdown ();
        }
        catch (COMM_FAILURE e)
        {
        }
        pr._release();
        assertTrue ("Should be no replies pending: " + pendingReplies.toString(), pendingReplies.size() == 0);
    }
}
TOP

Related Classes of org.jacorb.test.bugs.bugjac662.BugJac662Test

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.