blob: 5867b1aa3716916f7667785e1282ea5130719195 [file] [log] [blame]
/*
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test DynamicWrapperMBeanTest
* @bug 6624232
* @summary Test the DynamicWrapperMBean interface
* @author Eamonn McManus
*/
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.StandardMBean;
import javax.management.modelmbean.ModelMBeanInfo;
import javax.management.modelmbean.ModelMBeanInfoSupport;
import javax.management.modelmbean.ModelMBeanOperationInfo;
import javax.management.modelmbean.RequiredModelMBean;
import static javax.management.StandardMBean.Options;
public class DynamicWrapperMBeanTest {
public static interface WrappedMBean {
public void sayHello();
}
public static class Wrapped implements WrappedMBean {
public void sayHello() {
System.out.println("Hello");
}
}
private static String failure;
public static void main(String[] args) throws Exception {
if (Wrapped.class.getClassLoader() ==
StandardMBean.class.getClassLoader()) {
throw new Exception(
"TEST ERROR: Resource and StandardMBean have same ClassLoader");
}
Options wrappedVisOpts = new Options();
wrappedVisOpts.setWrappedObjectVisible(true);
Options wrappedInvisOpts = new Options();
wrappedInvisOpts.setWrappedObjectVisible(false);
assertEquals("Options withWrappedObjectVisible(false)",
new Options(), wrappedInvisOpts);
Wrapped resource = new Wrapped();
StandardMBean visible =
new StandardMBean(resource, WrappedMBean.class, wrappedVisOpts);
StandardMBean invisible =
new StandardMBean(resource, WrappedMBean.class, wrappedInvisOpts);
assertEquals("getResource withWrappedObjectVisible(true)",
resource, visible.getWrappedObject());
assertEquals("getResource withWrappedObjectVisible(false)",
invisible, invisible.getWrappedObject());
System.out.println("===Testing StandardMBean===");
ObjectName visibleName = new ObjectName("a:type=visible");
ObjectName invisibleName = new ObjectName("a:type=invisible");
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
mbs.registerMBean(visible, visibleName);
mbs.registerMBean(invisible, invisibleName);
assertEquals("ClassLoader for visible resource",
Wrapped.class.getClassLoader(),
mbs.getClassLoaderFor(visibleName));
assertEquals("ClassLoader for invisible resource",
StandardMBean.class.getClassLoader(),
mbs.getClassLoaderFor(invisibleName));
assertEquals("isInstanceOf(WrappedMBean) for visible wrapped",
true, mbs.isInstanceOf(visibleName, WrappedMBean.class.getName()));
assertEquals("isInstanceOf(WrappedMBean) for invisible wrapped",
false, mbs.isInstanceOf(invisibleName, WrappedMBean.class.getName()));
assertEquals("isInstanceOf(StandardMBean) for visible wrapped",
false, mbs.isInstanceOf(visibleName, StandardMBean.class.getName()));
assertEquals("isInstanceOf(StandardMBean) for invisible wrapped",
true, mbs.isInstanceOf(invisibleName, StandardMBean.class.getName()));
mbs.unregisterMBean(visibleName);
mbs.unregisterMBean(invisibleName);
System.out.println("===Testing RequiredModelMBean===");
// Godawful Model MBeans...
ModelMBeanOperationInfo mmboi = new ModelMBeanOperationInfo(
"say hello to the nice man", Wrapped.class.getMethod("sayHello"));
ModelMBeanInfo visibleMmbi = new ModelMBeanInfoSupport(
Wrapped.class.getName(), "Visible wrapped", null, null,
new ModelMBeanOperationInfo[] {mmboi}, null);
ModelMBeanInfo invisibleMmbi = new ModelMBeanInfoSupport(
Wrapped.class.getName(), "Invisible wrapped", null, null,
new ModelMBeanOperationInfo[] {mmboi}, null);
RequiredModelMBean visibleRmmb = new RequiredModelMBean(visibleMmbi);
RequiredModelMBean invisibleRmmb = new RequiredModelMBean(invisibleMmbi);
visibleRmmb.setManagedResource(resource, "VisibleObjectReference");
invisibleRmmb.setManagedResource(resource, "ObjectReference");
mbs.registerMBean(visibleRmmb, visibleName);
mbs.registerMBean(invisibleRmmb, invisibleName);
assertEquals("ClassLoader for visible wrapped",
Wrapped.class.getClassLoader(),
mbs.getClassLoaderFor(visibleName));
assertEquals("ClassLoader for invisible wrapped",
StandardMBean.class.getClassLoader(),
mbs.getClassLoaderFor(invisibleName));
assertEquals("isInstanceOf(WrappedMBean) for visible resource",
true, mbs.isInstanceOf(visibleName, WrappedMBean.class.getName()));
assertEquals("isInstanceOf(WrappedMBean) for invisible resource",
false, mbs.isInstanceOf(invisibleName, WrappedMBean.class.getName()));
assertEquals("isInstanceOf(RequiredModelMBean) for visible resource",
false, mbs.isInstanceOf(visibleName, RequiredModelMBean.class.getName()));
assertEquals("isInstanceOf(RequiredModelMBean) for invisible resource",
true, mbs.isInstanceOf(invisibleName, RequiredModelMBean.class.getName()));
if (failure != null)
throw new Exception("TEST FAILED: " + failure);
}
private static void assertEquals(String what, Object expect, Object actual) {
if (equal(expect, actual))
System.out.println("OK: " + what + " = " + expect);
else
fail(what + " should be " + expect + ", is " + actual);
}
private static boolean equal(Object x, Object y) {
if (x == y)
return true;
if (x == null || y == null)
return false;
return x.equals(y);
}
private static void fail(String why) {
failure = why;
System.out.println("FAIL: " + why);
}
}