Package org.jboss.test.messaging.jms.clustering

Source Code of org.jboss.test.messaging.jms.clustering.LoadBalancingTest

/**
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.test.messaging.jms.clustering;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.naming.InitialContext;

import org.jboss.jms.client.JBossConnection;
import org.jboss.jms.client.JBossConnectionFactory;
import org.jboss.jms.client.delegate.ClientClusteredConnectionFactoryDelegate;
import org.jboss.jms.client.delegate.DelegateSupport;
import org.jboss.jms.client.plugin.RoundRobinLoadBalancingPolicy;
import org.jboss.jms.client.state.ConnectionState;
import org.jboss.jms.tx.ResourceManagerFactory;
import org.jboss.test.messaging.tools.ServerManagement;

/**
* This test DOESN'T extend ClusteringTestBase because I want to have control over first invocations
* to the server (which are outside of of my control if I use ClusteringTestBase).
*
* @author <a href="mailto:ovidiu@feodorov.com">Ovidiu Feodorov</a>
* @version <tt>$Revision: 2988 $</tt>
*
* $Id: LoadBalancingTest.java 2988 2007-08-08 22:56:33Z timfox $
*/
public class LoadBalancingTest extends ClusteringTestBase
{

   // Constants ------------------------------------------------------------------------------------

   // Static ---------------------------------------------------------------------------------------

   // Attributes -----------------------------------------------------------------------------------

   // Constructors ---------------------------------------------------------------------------------

   public LoadBalancingTest(String name)
   {
      super(name);
   }

   // Public ---------------------------------------------------------------------------------------

   public void testRoundRobinLoadBalancingOneNode() throws Exception
   {
      // the round robin policy is default

      JBossConnectionFactory jbcf = (JBossConnectionFactory)cf;
      ClientClusteredConnectionFactoryDelegate clusteredDelegate =
         (ClientClusteredConnectionFactoryDelegate )jbcf.getDelegate();

      assertSame(RoundRobinLoadBalancingPolicy.class,
         clusteredDelegate.getLoadBalancingPolicy().getClass());

      Connection conn0 = cf.createConnection();
     
      final int oneId = getServerId(conn0);
      final int otherId = 1 - oneId;

      Connection conn1 = cf.createConnection();
     
      assertEquals(otherId, getServerId(conn1));

      Connection conn2 = cf.createConnection();
     
      assertEquals(oneId, getServerId(conn2));

      conn0.close();
      conn1.close();
      conn2.close();
   }
  

   public void testRoundRobinLoadBalancingTwoNodes() throws Exception
   {
      JBossConnectionFactory jbcf = (JBossConnectionFactory)cf;
      ClientClusteredConnectionFactoryDelegate clusteredDelegate =
         (ClientClusteredConnectionFactoryDelegate )jbcf.getDelegate();

      assertSame(RoundRobinLoadBalancingPolicy.class,
         clusteredDelegate.getLoadBalancingPolicy().getClass());

      Connection conn0 = cf.createConnection();
     
      final int oneId = getServerId(conn0);
      final int otherId = 1 - oneId;

      assertEquals(oneId, getServerId(conn0));

      Connection conn1 = cf.createConnection();

      assertEquals(otherId, getServerId(conn1));

      Connection conn2 = cf.createConnection();

      assertEquals(oneId, getServerId(conn2));

      Connection conn3 = cf.createConnection();

      assertEquals(otherId, getServerId(conn3));

      Connection conn4 = cf.createConnection();

      assertEquals(oneId, getServerId(conn4));

      conn0.close();
      conn1.close();
      conn2.close();
      conn3.close();
      conn4.close();
   }
  
   public void testRoundRobinLoadBalancingStartsWithRandomNode() throws Exception
   {
      // Make sure all servers are created and started; make sure that database is zapped ONLY for
      // the first server, the others rely on values they expect to find in shared tables; don't
      // clear the database for those.

      int[] counts = new int[2];
     
      for (int i = 0; i < 10; i++)
      {
         InitialContext ic = new InitialContext(ServerManagement.getJNDIEnvironment(0));
         ConnectionFactory cf = (ConnectionFactory)ic.lookup("/ClusteredConnectionFactory");
         Connection firstConnection = cf.createConnection();
         int serverPeerID = getServerId(firstConnection);
         firstConnection.close();
         ic.close();

         counts[serverPeerID]++;
      }
     
      assertTrue("Should have connected to ServerPeer 0 at least once", counts[0] > 0);
      assertTrue("Should have connected to ServerPeer 1 at least once", counts[1] > 0);
   }

   // Package protected ----------------------------------------------------------------------------

   // Protected ------------------------------------------------------------------------------------

   protected ConnectionState getConnectionState(Connection conn)
   {
      return (ConnectionState) (((DelegateSupport) ((JBossConnection) conn).
         getDelegate()).getState());
   }

   protected void setUp() throws Exception
   {
     nodeCount = 2;
    
      super.setUp();
     
      assertEquals(0, ResourceManagerFactory.instance.size())
   }
  
   protected void tearDown() throws Exception
   {
     super.tearDown();
    
     assertEquals(0, ResourceManagerFactory.instance.size())
   }

   // Private --------------------------------------------------------------------------------------

   // Inner classes --------------------------------------------------------------------------------

}
TOP

Related Classes of org.jboss.test.messaging.jms.clustering.LoadBalancingTest

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.