--- a/jdk/test/javax/management/namespace/JMXNamespaceTest.java Wed Oct 21 16:28:57 2009 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,511 +0,0 @@
-/*
- * Copyright 2008 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 JMXNamespaceTest.java
- * @summary General JMXNamespace test.
- * @bug 5072476
- * @author Daniel Fuchs
- * @run clean JMXNamespaceTest
- * Wombat WombatMBean JMXRemoteTargetNamespace
- * NamespaceController NamespaceControllerMBean
- * @compile -XDignore.symbol.file=true JMXNamespaceTest.java
- * Wombat.java WombatMBean.java JMXRemoteTargetNamespace.java
- * NamespaceController.java NamespaceControllerMBean.java
- * @run main/othervm JMXNamespaceTest
- */
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Logger;
-import javax.management.DynamicMBean;
-import javax.management.InstanceNotFoundException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.JMX;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerConnection;
-import javax.management.MBeanServerFactory;
-import javax.management.NotificationEmitter;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.StandardMBean;
-import javax.management.namespace.JMXNamespaces;
-import javax.management.namespace.JMXNamespace;
-import javax.management.namespace.JMXNamespaceMBean;
-import javax.management.namespace.JMXRemoteNamespaceMBean;
-import javax.management.namespace.MBeanServerConnectionWrapper;
-import javax.management.namespace.MBeanServerSupport;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXConnectorServer;
-import javax.management.remote.JMXConnectorServerFactory;
-import javax.management.remote.JMXServiceURL;
-
-/**
- *
- * @author Sun Microsystems, Inc.
- */
-public class JMXNamespaceTest {
-
- /**
- * A logger for this class.
- **/
- private static final Logger LOG =
- Logger.getLogger(JMXNamespaceTest.class.getName());
-
- /** Creates a new instance of JMXNamespaceTest */
- public JMXNamespaceTest() {
- }
-
- public static class WombatRepository extends MBeanServerSupport {
- final Wombat wombat;
- final StandardMBean mbean;
- final ObjectName wombatName;
-
- public WombatRepository(ObjectName wombatName) {
- try {
- wombat = new Wombat();
- mbean = wombat;
- this.wombatName = wombatName;
- wombat.preRegister(null,wombatName);
- } catch (Exception x) {
- throw new IllegalArgumentException(x);
- }
- }
-
- @Override
- public DynamicMBean getDynamicMBeanFor(ObjectName name)
- throws InstanceNotFoundException {
- if (wombatName.equals(name)) return mbean;
- else throw new InstanceNotFoundException(String.valueOf(name));
- }
-
- @Override
- protected Set<ObjectName> getNames() {
- final Set<ObjectName> res = Collections.singleton(wombatName);
- return res;
- }
-
- @Override
- public NotificationEmitter
- getNotificationEmitterFor(ObjectName name)
- throws InstanceNotFoundException {
- final DynamicMBean mb = getDynamicMBeanFor(name);
- if (mb instanceof NotificationEmitter)
- return (NotificationEmitter)mb;
- return null;
- }
- }
-
- public static class SimpleTest {
- public final String descr;
- private final Class<?> testClass;
- private final Method method;
- public SimpleTest(String descr) {
- this.descr = descr;
- this.testClass = JMXNamespaceTest.class;
- try {
- method = testClass.
- getDeclaredMethod(descr,SimpleTestConf.class,
- Object[].class);
- } catch (NoSuchMethodException x) {
- throw new IllegalArgumentException(descr+": test not found",
- x);
- }
- }
-
- public void run(SimpleTestConf conf, Object... args)
- throws Exception {
- try {
- method.invoke(null,conf,args);
- } catch (InvocationTargetException x) {
- final Throwable cause = x.getCause();
- if (cause instanceof Exception) throw (Exception)cause;
- if (cause instanceof Error) throw (Error)cause;
- throw x;
- }
- }
- }
-
- public static class SimpleTestConf {
- public final Wombat wombat;
- public final StandardMBean mbean;
- public final String dirname;
- public final ObjectName handlerName;
- public final ObjectName wombatNickName;
- public final ObjectName wombatName;
- public final JMXNamespace wombatNamespace;
- public final MBeanServer server;
- public final WombatMBean proxy;
- public SimpleTestConf(String[] args) throws Exception {
- wombat = new Wombat();
- mbean = wombat;
- dirname = "wombat";
- handlerName =
- new ObjectName(dirname+"//:type=JMXNamespace");
-
- wombatNickName =
- new ObjectName("burrow:type=Wombat");
-
- wombatName =
- new ObjectName(dirname+"//"+wombatNickName);
-
- wombatNamespace =
- new JMXNamespace(
- new WombatRepository(wombatNickName));
-
- server = ManagementFactory.getPlatformMBeanServer();
- System.out.println(handlerName+" registered="+
- server.isRegistered(handlerName));
- server.registerMBean(wombatNamespace,handlerName);
-
- try {
- proxy = JMX.newMBeanProxy(server,wombatName,
- WombatMBean.class);
- } catch (Exception x) {
- server.unregisterMBean(handlerName);
- throw x;
- }
- }
-
- public void close() {
- try {
- server.unregisterMBean(handlerName);
- } catch (Exception x) {
- System.out.println("Failed to close: " + x);
- x.printStackTrace();
- }
- }
-
- public void test(SimpleTest test,Object... args)
- throws Exception {
- try {
- test.run(this,args);
- passed++;
- } catch (Exception x) {
- failed++;
- System.err.println(test.descr+" failed: " + x);
- x.printStackTrace();
- }
- }
-
- public volatile int failed = 0;
- public volatile int passed = 0;
- }
-
- static void checkValue(String name,Object expected, Object returned)
- throws InvalidAttributeValueException {
- if (Collections.singletonList(expected).
- equals(Collections.singletonList(returned))) return;
-
- throw new InvalidAttributeValueException("Bad value for "+
- name+": ["+returned+"] - was expecting ["+expected+"]");
- }
-
- // ---------------------------------------------------------------
- // SIMPLE TESTS BEGIN HERE
- // ---------------------------------------------------------------
-
- static void getCaptionTest(SimpleTestConf env, Object... args)
- throws Exception {
- System.out.println(env.proxy.getCaption());
- }
-
- static void setCaptionTest(SimpleTestConf env, Object... args)
- throws Exception {
- env.proxy.setCaption((String)args[0]);
- final String result = env.proxy.getCaption();
- System.out.println(result);
- checkValue("Caption",args[0],result);
- }
-
- static void queryNamesTest1(SimpleTestConf env, Object... args)
- throws Exception {
- final ObjectName pat =
- new ObjectName(env.handlerName.getDomain()+"*:*");
- final Set<ObjectName> res =
- env.server.queryNames(pat,null);
- System.out.println("queryNamesTest1: "+res);
- checkValue("names",Collections.singleton(env.wombatName),res);
- }
-
- static void queryNamesTest2(SimpleTestConf env, Object... args)
- throws Exception {
- final ObjectName pat =
- new ObjectName("*:"+
- env.wombatName.getKeyPropertyListString());
- final Set<ObjectName> res =
- env.server.queryNames(pat,null);
- System.out.println("queryNamesTest2: "+res);
- checkValue("names",Collections.emptySet(),res);
- }
-
- static void getDomainsTest(SimpleTestConf env, Object... args)
- throws Exception {
- final List<String> domains =
- Arrays.asList(env.server.getDomains());
- System.out.println("getDomainsTest: "+domains);
- if (domains.contains(env.wombatName.getDomain()))
- throw new InvalidAttributeValueException("domain: "+
- env.wombatName.getDomain());
- if (!domains.contains(env.handlerName.getDomain()))
- throw new InvalidAttributeValueException("domain not found: "+
- env.handlerName.getDomain());
- }
-
- // ---------------------------------------------------------------
- // SIMPLE TESTS END HERE
- // ---------------------------------------------------------------
-
- private static void simpleTest(String[] args) {
- final SimpleTestConf conf;
- try {
- conf = new SimpleTestConf(args);
- try {
- conf.test(new SimpleTest("getCaptionTest"));
- conf.test(new SimpleTest("setCaptionTest"),
- "I am a new Wombat!");
- conf.test(new SimpleTest("queryNamesTest1"));
- conf.test(new SimpleTest("queryNamesTest2"));
- conf.test(new SimpleTest("getDomainsTest"));
- } finally {
- conf.close();
- }
- } catch (Exception x) {
- System.err.println("simpleTest FAILED: " +x);
- x.printStackTrace();
- throw new RuntimeException(x);
- }
- System.out.println("simpleTest: "+conf.passed+
- " PASSED, " + conf.failed + " FAILED.");
- if (conf.failed>0) {
- System.err.println("simpleTest FAILED ["+conf.failed+"]");
- throw new RuntimeException("simpleTest FAILED ["+conf.failed+"]");
- } else {
- System.err.println("simpleTest PASSED ["+conf.passed+"]");
- }
- }
-
- public static void recursiveTest(String[] args) {
- final SimpleTestConf conf;
- try {
- conf = new SimpleTestConf(args);
- try {
- final JMXServiceURL url =
- new JMXServiceURL("rmi","localHost",0);
- final Map<String,Object> empty = Collections.emptyMap();
- final JMXConnectorServer server =
- JMXConnectorServerFactory.newJMXConnectorServer(url,
- empty,conf.server);
- server.start();
- final JMXServiceURL address = server.getAddress();
- final JMXConnector client =
- JMXConnectorFactory.connect(address,
- empty);
- final String[] signature = {
- JMXServiceURL.class.getName(),
- Map.class.getName(),
- };
- final String[] signature2 = {
- JMXServiceURL.class.getName(),
- Map.class.getName(),
- String.class.getName(),
- };
- final Object[] params = {
- address,
- null,
- };
- final MBeanServerConnection c =
- client.getMBeanServerConnection();
- final ObjectName dirName1 =
- new ObjectName("kanga//:type=JMXNamespace");
- c.createMBean(JMXRemoteTargetNamespace.class.getName(),
- dirName1, params,signature);
- c.invoke(dirName1, "connect", null, null);
- try {
- final MemoryMXBean memory =
- JMX.newMXBeanProxy(c,
- new ObjectName("kanga//"+
- ManagementFactory.MEMORY_MXBEAN_NAME),
- MemoryMXBean.class);
- System.out.println("HeapMemory #1: "+
- memory.getHeapMemoryUsage().toString());
- final MemoryMXBean memory2 =
- JMX.newMXBeanProxy(c,
- new ObjectName("kanga//kanga//"+
- ManagementFactory.MEMORY_MXBEAN_NAME),
- MemoryMXBean.class);
- System.out.println("HeapMemory #2: "+
- memory2.getHeapMemoryUsage().toString());
- final Object[] params2 = {
- address,
- null,
- "kanga//kanga"
- // "kanga//kanga//roo//kanga", <= cycle
- };
- final ObjectName dirName2 =
- new ObjectName("kanga//roo//:type=JMXNamespace");
- c.createMBean(JMXRemoteTargetNamespace.class.getName(),
- dirName2, params2, signature2);
- System.out.println(dirName2 + " created!");
- JMX.newMBeanProxy(c,dirName2,
- JMXRemoteNamespaceMBean.class).connect();
- try {
- final ObjectName wombatName1 =
- new ObjectName("kanga//roo//"+conf.wombatName);
- final ObjectName wombatName2 =
- new ObjectName("kanga//roo//"+wombatName1);
- final WombatMBean wombat1 =
- JMX.newMBeanProxy(c,wombatName1,WombatMBean.class);
- final WombatMBean wombat2 =
- JMX.newMBeanProxy(c,wombatName2,WombatMBean.class);
- final String newCaption="I am still the same old wombat";
- wombat1.setCaption(newCaption);
- final String caps = conf.proxy.getCaption();
- System.out.println("Caption: "+caps);
- checkValue("Caption",newCaption,caps);
- final String caps1 = wombat1.getCaption();
- System.out.println("Caption #1: "+caps1);
- checkValue("Caption #1",newCaption,caps1);
- final String caps2 = wombat2.getCaption();
- System.out.println("Caption #2: "+caps2);
- checkValue("Caption #2",newCaption,caps2);
- final ObjectInstance instance =
- NamespaceController.createInstance(conf.server);
- final NamespaceControllerMBean controller =
- JMX.newMBeanProxy(conf.server,instance.getObjectName(),
- NamespaceControllerMBean.class);
- final String[] dirs = controller.findNamespaces();
- System.out.println("directories: " +
- Arrays.asList(dirs));
- final int depth = 4;
- final String[] dirs2 = controller.findNamespaces(null,null,depth);
- System.out.println("directories[depth="+depth+"]: " +
- Arrays.asList(dirs2));
- for (String dir : dirs2) {
- if (dir.endsWith(JMXNamespaces.NAMESPACE_SEPARATOR))
- dir = dir.substring(0,dir.length()-
- JMXNamespaces.NAMESPACE_SEPARATOR.length());
- if (dir.split(JMXNamespaces.NAMESPACE_SEPARATOR).length
- > (depth+1)) {
- throw new RuntimeException(dir+": depth exceeds "+depth);
- }
- final ObjectName handlerName =
- JMXNamespaces.getNamespaceObjectName(dir);
- final JMXNamespaceMBean handler =
- JMX.newMBeanProxy(conf.server,handlerName,
- JMXNamespaceMBean.class);
- try {
- System.err.println("Directory "+dir+" domains: "+
- Arrays.asList(handler.getDomains()));
- System.err.println("Directory "+dir+" default domain: "+
- handler.getDefaultDomain());
- System.err.println("Directory "+dir+" MBean count: "+
- handler.getMBeanCount());
- } catch(Exception x) {
- System.err.println("get info failed for " +
- dir +", "+handlerName+": "+x);
- x.getCause().printStackTrace();
- throw x;
- }
- }
-
- } finally {
- c.unregisterMBean(dirName2);
- }
- } finally {
- c.unregisterMBean(dirName1);
- client.close();
- server.stop();
- }
- } finally {
- conf.close();
- }
- System.err.println("recursiveTest PASSED");
- } catch (Exception x) {
- System.err.println("recursiveTest FAILED: " +x);
- x.printStackTrace();
- throw new RuntimeException(x);
- }
- }
-
- public static void verySimpleTest(String[] args) {
- System.err.println("verySimpleTest: starting");
- try {
- final MBeanServer srv = MBeanServerFactory.createMBeanServer();
- srv.registerMBean(new JMXNamespace(
- JMXNamespaces.narrowToNamespace(srv, "foo")),
- JMXNamespaces.getNamespaceObjectName("foo"));
- throw new Exception("Excpected IllegalArgumentException not raised.");
- } catch (IllegalArgumentException x) {
- System.err.println("verySimpleTest: got expected exception: "+x);
- } catch (Exception x) {
- System.err.println("verySimpleTest FAILED: " +x);
- x.printStackTrace();
- throw new RuntimeException(x);
- }
- System.err.println("verySimpleTest: PASSED");
- }
-
- public static void verySimpleTest2(String[] args) {
- System.err.println("verySimpleTest2: starting");
- try {
- final MBeanServer srv = MBeanServerFactory.createMBeanServer();
- final JMXConnectorServer cs = JMXConnectorServerFactory.
- newJMXConnectorServer(new JMXServiceURL("rmi",null,0),
- null, srv);
- cs.start();
- final JMXConnector cc = JMXConnectorFactory.connect(cs.getAddress());
-
- srv.registerMBean(new JMXNamespace(
- new MBeanServerConnectionWrapper(
- JMXNamespaces.narrowToNamespace(
- cc.getMBeanServerConnection(),
- "foo"))),
- JMXNamespaces.getNamespaceObjectName("foo"));
- throw new Exception("Excpected IllegalArgumentException not raised.");
- } catch (IllegalArgumentException x) {
- System.err.println("verySimpleTest2: got expected exception: "+x);
- } catch (Exception x) {
- System.err.println("verySimpleTest2 FAILED: " +x);
- x.printStackTrace();
- throw new RuntimeException(x);
- }
- System.err.println("verySimpleTest2: PASSED");
- }
-
- public static void main(String[] args) {
- simpleTest(args);
- recursiveTest(args);
- verySimpleTest(args);
- verySimpleTest2(args);
- }
-
-}