Package org.jboss.test.cluster.mod_cluster

Source Code of org.jboss.test.cluster.mod_cluster.ModClusterServiceTestCase

/*
* JBoss, Home of Professional Open Source.
* Copyright 2009, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.cluster.mod_cluster;

import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;

import junit.framework.Assert;

import org.jboss.test.JBossClusteredTestCase;

/**
* A ModClusterServiceTestCase.
*
* @author Paul Ferraro
*/
public class ModClusterServiceTestCase extends JBossClusteredTestCase
{
   private static final String ENGINE = "jboss.web";
   private static final int PORT = 8009;
  
   private MockProxy proxy = new MockProxy(2);
  
   /**
    * Create a new ModClusterServiceTestCase.
    *
    * @param name
    */
   public ModClusterServiceTestCase(String name)
   {
      super(name);
   }

   @Override
   protected void setUp() throws Exception
   {
      super.setUp();
     
      this.proxy.start();
   }
  
   @Override
   protected void tearDown() throws Exception
   {
      this.proxy.stop();
     
      super.tearDown();
   }
  
   public void testInfo() throws Exception
   {
      MBeanServerConnection[] servers = this.getAdaptors();
     
      ObjectName name = ObjectName.getInstance("jboss.web:service=ModCluster");
     
      String[] hosts = this.getServers();
      ByteBuffer buffer = ByteBuffer.allocate(InetAddress.getLocalHost().getAddress().length + (Integer.SIZE / Byte.SIZE) + ENGINE.getBytes().length);        
     
      for (int i = 0; i < hosts.length; ++i)
      {
         String host = InetAddress.getByName(hosts[i]).toString();
         int index = host.indexOf("/");
         host = (index > 0) ? host.substring(0, index) : host.substring(1);
        
         servers[i].invoke(name, "addProxy", new Object[] { "127.0.0.1", this.proxy.getPort() }, new String[] { String.class.getName(), Integer.TYPE.getName() });
        
         // Wait the duration of at least 1 status interval
         Thread.sleep(20000);
        
         // Proxy should have received:
         // 1. INFO - to establish proxy connectivity
         // 2. CONFIG - to configure proxy
         // 3. STATUS - periodic status
        
         List<Map.Entry<String, Map<String, String>>> requests = new LinkedList<Map.Entry<String, Map<String, String>>>();
        
         int count = this.proxy.getRequests().drainTo(requests);

         Assert.assertEquals(1, count);

         for (Map.Entry<String, Map<String, String>> infoRequest: requests)
         {
            String command = infoRequest.getKey();
            Map<String, String> parameters = infoRequest.getValue();
           
            Assert.assertTrue(command, command.startsWith("INFO"));
            Assert.assertFalse(command.contains("*"));
            Assert.assertTrue(parameters.isEmpty());
         }
        
         requests.clear();
        
         buffer.clear();
         buffer.put(InetAddress.getByName(hosts[i]).getAddress());
         buffer.putInt(PORT);
         buffer.put(ENGINE.getBytes());

         String jvmRoute = UUID.nameUUIDFromBytes(buffer.array()).toString();
        
         count = this.proxy.getRequests(jvmRoute).drainTo(requests);
        
         Assert.assertTrue(Integer.toString(count), count >= 2);
        
         Map.Entry<String, Map<String, String>> configRequest = requests.get(0);
         String command = configRequest.getKey();
         Map<String, String> parameters = configRequest.getValue();

         Assert.assertTrue(command, command.startsWith("CONFIG"));
         Assert.assertFalse(command.contains("*"));
         Assert.assertEquals(parameters.toString(), 6, parameters.size());
         Assert.assertEquals(String.valueOf(PORT), parameters.get("Port"));
         Assert.assertEquals(host, parameters.get("Host"));
         Assert.assertEquals("ajp", parameters.get("Type"));
         Assert.assertEquals(jvmRoute, parameters.get("JVMRoute"));
         Assert.assertEquals("No", parameters.get("StickySessionForce"));
         Assert.assertEquals("1", parameters.get("Maxattempts"));
        
         for (Map.Entry<String, Map<String, String>> statusRequest: requests.subList(1, requests.size()))
         {
            command = statusRequest.getKey();
            parameters = statusRequest.getValue();
           
            Assert.assertTrue(command, command.startsWith("STATUS"));
            Assert.assertFalse(command.contains("*"));
            Assert.assertEquals(2, parameters.size());
            Assert.assertEquals(jvmRoute, parameters.get("JVMRoute"));
            String value = parameters.get("Load");
            Assert.assertNotNull(value);
            int load = Integer.parseInt(value);
            Assert.assertTrue(0 <= load);
            Assert.assertTrue(load <= 100);
         }
      }
   }
}
TOP

Related Classes of org.jboss.test.cluster.mod_cluster.ModClusterServiceTestCase

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.