mx4j/src/test/test/mx4j/server MX4JMBeanServerTest.java,NONE,1.1 MBeanServerImplTest.java,1.7,NONE

Simone Bordet <[email protected]>
Newsgroups gmane.comp.java.mx4j.cvs
Message-ID <[email protected]>
Update of /cvsroot/mx4j/mx4j/src/test/test/mx4j/server
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27758/src/test/test/mx4j/server

Added Files:
	MX4JMBeanServerTest.java 
Removed Files:
	MBeanServerImplTest.java 
Log Message:
+ Renamed from MBeanServerImplTest to MX4JMBeanServerTest
+ Added a test for bug #919975: MBeanDescription not working

--- NEW FILE: MX4JMBeanServerTest.java ---
/*
 * Copyright (C) MX4J.
 * All rights reserved.
 *
 * This software is distributed under the terms of the MX4J License version 1.0.
 * See the terms of the MX4J License in the documentation provided with this software.
 */

package test.mx4j.server;

import java.lang.reflect.Method;
import java.net.URL;
import java.util.Iterator;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.AttributeNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.loading.MLet;

import mx4j.MBeanDescriptionAdapter;
import mx4j.MX4JSystemKeys;
import mx4j.server.MBeanMetaData;
import mx4j.server.MBeanRepository;
import mx4j.server.interceptor.DefaultMBeanServerInterceptor;
import mx4j.server.interceptor.MBeanServerInterceptor;
import mx4j.server.interceptor.MBeanServerInterceptorConfigurator;
import test.MX4JTestCase;
import test.MutableInteger;

/**
 * @author <a href="mailto:[email protected]">Simone Bordet</a>
 * @version $Revision: 1.1 $
 */
public class MX4JMBeanServerTest extends MX4JTestCase
{
   public MX4JMBeanServerTest(String s)
   {
      super(s);
   }

   public void testCustomMBeanRepository() throws Exception
   {
      String property = MX4JSystemKeys.MX4J_MBEANSERVER_REPOSITORY;
      try
      {
         System.setProperty(property, MX4JMBeanServerTest.TestMBeanRepository.class.getName());
         MBeanServer server = newMBeanServer();
         Method method = server.getClass().getDeclaredMethod("getMBeanRepository", new Class[0]);
         method.setAccessible(true);
         Object repository = method.invoke(server, new Object[0]);
         if (!(repository instanceof TestMBeanRepository)) fail("Custom Repository does not work");
      }
      finally
      {
         System.getProperties().remove(property);
      }
   }

   public void testContextClassLoaderOnMethodCalls() throws Exception
   {
      // Create the appropriate class loader hierarchy
      URL testCodebase = getClass().getProtectionDomain().getCodeSource().getLocation();
      URL implCodebase = MBeanServer.class.getProtectionDomain().getCodeSource().getLocation();
      MLet mlet = new MLet(new URL[]{testCodebase, implCodebase}, getClass().getClassLoader().getParent());
      MBeanServer server = newMBeanServer();

      // Register the MLet loader
      ObjectName loader = new ObjectName(":mbean=loader");
      server.registerMBean(mlet, loader);

      // Be sure the context classloader interceptor is enabled
      server.setAttribute(ObjectName.getInstance("JMImplementation", "interceptor", "contextclassloader"), new Attribute("Enabled", Boolean.TRUE));

      // Register the MBean
      ObjectName name = new ObjectName("Test:mbean=ccl");
      server.createMBean("test.mx4j.server.MX4JMBeanServerTest$CCL", name, loader, null, null);

      server.invoke(name, "method", null, null);
   }

   public void testAddRemoveMBeanServerInterceptor() throws Exception
   {
      MBeanServer server = newMBeanServer();
      ObjectName configurator = new ObjectName(MBeanServerInterceptorConfigurator.OBJECT_NAME);

      MutableInteger integer = new MutableInteger(0);
      TestMBeanServerInterceptor tester = new TestMBeanServerInterceptor(integer);
      server.invoke(configurator, "addInterceptor", new Object[]{tester}, new String[]{MBeanServerInterceptor.class.getName()});

      server.getAttribute(configurator, "Running");
      if (integer.get() != 1) fail("Interceptor not installed");

      server.invoke(configurator, "clearInterceptors", null, null);
      server.getAttribute(configurator, "Running");

      // Be sure the interceptor is not anymore in the chain
      if (integer.get() != 1) fail("Interceptor not removed");
   }

   public void testRegisterRemoveMBeanServerInterceptor() throws Exception
   {
      MBeanServer server = newMBeanServer();
      ObjectName configurator = new ObjectName(MBeanServerInterceptorConfigurator.OBJECT_NAME);

      MutableInteger integer = new MutableInteger(0);
      TestMBeanServerInterceptor tester = new TestMBeanServerInterceptor(integer);
      ObjectName name = new ObjectName("Interceptor:category=MBeanServer,type=Test");
      server.invoke(configurator, "registerInterceptor", new Object[]{tester, name}, new String[]{MBeanServerInterceptor.class.getName(), ObjectName.class.getName()});

      server.getMBeanInfo(configurator);
      if (integer.get() != 1) fail("Interceptor not installed");

      // Let's check if the interceptor is registered, let's change something in it
      server.setAttribute(name, new Attribute("Enabled", Boolean.FALSE));

      // Call again
      server.getMBeanInfo(configurator);
      if (integer.get() != 1) fail("Interceptor not registered");

      AttributeList list = new AttributeList();
      list.add(new Attribute("Enabled", Boolean.TRUE));
      server.setAttributes(name, list);

      server.getMBeanInfo(configurator);
      if (integer.get() != 2) fail("Interceptor not enabled");

      server.invoke(configurator, "clearInterceptors", null, null);
      server.getAttribute(configurator, "Running");

      // Be sure the interceptor is not anymore in the chain
      if (integer.get() != 2) fail("Interceptor not removed");
   }

   public void testMBeanDescription() throws Exception
   {
      MBeanServer server = newMBeanServer();
      ObjectName name = ObjectName.getInstance(":mbean=description");
      server.registerMBean(new Description(), name);
      MBeanInfo info = server.getMBeanInfo(name);
      assertEquals(info.getDescription(), new DescriptionMBeanDescription().getMBeanDescription());
   }

   public interface DescriptionMBean
   {
   }

   public static class Description implements DescriptionMBean
   {
   }

   public static class DescriptionMBeanDescription extends MBeanDescriptionAdapter
   {
      public String getMBeanDescription()
      {
         return "test";
      }
   }

   public static class TestMBeanServerInterceptor extends DefaultMBeanServerInterceptor
   {
      private MutableInteger m_integer;

      public TestMBeanServerInterceptor(MutableInteger integer)
      {
         m_integer = integer;
      }

      public String getType()
      {
         return "test";
      }

      public Object getAttribute(MBeanMetaData metadata, String attribute) throws MBeanException, AttributeNotFoundException, ReflectionException
      {
         if (isEnabled()) m_integer.set(m_integer.get() + 1);
         return super.getAttribute(metadata, attribute);
      }

      public MBeanInfo getMBeanInfo(MBeanMetaData metadata)
      {
         if (isEnabled()) m_integer.set(m_integer.get() + 1);
         return super.getMBeanInfo(metadata);
      }
   }

   public static class TestMBeanRepository implements MBeanRepository
   {
      public MBeanMetaData get(ObjectName name)
      {
         return null;
      }

      public void put(ObjectName name, MBeanMetaData metadata)
      {
      }

      public void remove(ObjectName name)
      {
      }

      public int size()
      {
         return 0;
      }

      public Iterator iterator()
      {
         return null;
      }

      public Object clone()
      {
         return null;
      }
   }

   public interface CCLMBean
   {
      public void method();
   }

   public static class CCL implements CCLMBean
   {
      public CCL()
      {
         ClassLoader cl = Thread.currentThread().getContextClassLoader();
         String loaderClass = cl.getClass().getName();
         if (!loaderClass.endsWith("MLet"))
         {
            throw new RuntimeException();
         }
      }

      public void method()
      {
         ClassLoader cl = Thread.currentThread().getContextClassLoader();
         String loaderClass = cl.getClass().getName();
         if (!loaderClass.endsWith("MLet"))
         {
            throw new RuntimeException();
         }
      }
   }
}

--- MBeanServerImplTest.java DELETED ---



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.