/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, 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.jmx.compliance.server;
import javax.management.MBeanServer;
import javax.management.MBeanServerBuilder;
import javax.management.MBeanServerDelegate;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import junit.framework.TestCase;
import org.jboss.test.jmx.compliance.server.support.BuilderTest;
import org.jboss.test.jmx.compliance.server.support.DelegateListener;
import org.jboss.test.jmx.compliance.server.support.MBeanServerReplaced;
import org.jboss.test.jmx.compliance.server.support.MBeanServerWrapper;
import org.jboss.test.jmx.compliance.server.support.TestMBeanServerBuilder;
import org.jboss.test.jmx.compliance.server.support.TestMBeanServerDelegate;
/**
* Tests the MBeanServerBuilder
*
* @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>.
*/
public class MBeanServerBuilderTestCase
extends TestCase
{
// Attributes ----------------------------------------------------------------
private ObjectName name;
private ObjectName delegateName;
private String defaultBuilder;
private static final String DEFAULT_DOMAIN = "default";
private static final String BUILDER_PROPERTY = "javax.management.builder.initial";
// Constructor ---------------------------------------------------------------
/**
* Construct the test
*/
public MBeanServerBuilderTestCase(String s)
{
super(s);
try
{
name = new ObjectName("server:test=MBeanServerBuilder");
delegateName = new ObjectName("JMImplementation:type=MBeanServerDelegate");
}
catch (Exception e)
{
e.printStackTrace();
throw new RuntimeException(e.toString());
}
defaultBuilder = System.getProperty(BUILDER_PROPERTY, "javax.management.MBeanServerBuilder");
}
// Tests ---------------------------------------------------------------------
public void testNewMBeanServerDelegate()
throws Exception
{
MBeanServerBuilder builder = new MBeanServerBuilder();
MBeanServerDelegate delegate = builder.newMBeanServerDelegate();
assertNotNull(delegate);
}
public void testNewMBeanServer()
throws Exception
{
MBeanServerBuilder builder = new MBeanServerBuilder();
MBeanServerDelegate delegate = builder.newMBeanServerDelegate();
MBeanServer server = builder.newMBeanServer(DEFAULT_DOMAIN, null, delegate);
assertTrue(server.getDefaultDomain().equals(DEFAULT_DOMAIN));
}
public void testNewMBeanServerViaMBeanServerFactory()
throws Exception
{
MBeanServer server = MBeanServerFactory.newMBeanServer(DEFAULT_DOMAIN);
assertTrue(server.getDefaultDomain().equals(DEFAULT_DOMAIN));
}
public void testPreRegisterGetsTheOriginalMBeanServer()
throws Exception
{
MBeanServer server = MBeanServerFactory.newMBeanServer(DEFAULT_DOMAIN);
BuilderTest test = new BuilderTest();
server.registerMBean(test, name);
assertTrue("Registered", server.isRegistered(name));
assertTrue("Got the correct MBeanServer", test.server.equals(server));
}
public void testPreRegisterGetsTheOuterMBeanServer()
throws Exception
{
MBeanServerBuilder builder = new MBeanServerBuilder();
MBeanServerDelegate delegate = builder.newMBeanServerDelegate();
MBeanServer wrapper = MBeanServerWrapper.getWrapper();
MBeanServer server = builder.newMBeanServer(DEFAULT_DOMAIN, wrapper, delegate);
MBeanServerWrapper.getHandler(wrapper).server = server;
BuilderTest test = new BuilderTest();
wrapper.registerMBean(test, name);
assertTrue("Registered", server.isRegistered(name));
assertTrue("Got the correct MBeanServer", test.server.equals(wrapper));
assertTrue("Wrapper invoked", MBeanServerWrapper.getHandler(wrapper).invoked);
}
public void testMBeanServerDelegateReplaced()
throws Exception
{
MBeanServerBuilder builder = new MBeanServerBuilder();
TestMBeanServerDelegate delegate = new TestMBeanServerDelegate();
MBeanServer server = builder.newMBeanServer(DEFAULT_DOMAIN, null, delegate);
server.getAttribute(delegateName, "MBeanServerId");
assertTrue("Delegate replaced", delegate.invoked);
}
public void testReplaceMBeanServerBuilderMBeanServerDelegate()
throws Exception
{
System.setProperty(BUILDER_PROPERTY, TestMBeanServerBuilder.class.getName());
try
{
MBeanServer server = MBeanServerFactory.newMBeanServer();
DelegateListener listener = new DelegateListener();
server.addNotificationListener(delegateName, listener, null, null);
BuilderTest test = new BuilderTest();
server.registerMBean(test, name);
assertTrue("Delegate replaced", listener.userData.equals("replaced"));
}
finally
{
System.setProperty(BUILDER_PROPERTY, defaultBuilder);
}
}
public void testReplaceMBeanServerBuilderMBeanServer()
throws Exception
{
System.setProperty(BUILDER_PROPERTY, TestMBeanServerBuilder.class.getName());
try
{
MBeanServer server = MBeanServerFactory.newMBeanServer();
boolean caught = false;
try
{
server.queryMBeans(null, null);
}
catch (MBeanServerReplaced e)
{
caught = true;
}
assertTrue("MBeanServer replaced", caught);
}
finally
{
System.setProperty(BUILDER_PROPERTY, defaultBuilder);
}
}
}