1 /* 2 * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 5024531 27 * @summary Basic Test for ManagementFactory.newPlatformMXBean(). 28 * @modules jdk.management 29 * @run main/othervm MXBeanProxyTest 30 * @author Mandy Chung 31 */ 32 import javax.management.*; 33 import java.lang.management.ClassLoadingMXBean; 34 import java.lang.management.RuntimeMXBean; 35 import static java.lang.management.ManagementFactory.*; 36 public class MXBeanProxyTest { 37 private static MBeanServer server = getPlatformMBeanServer(); 38 public static void main(String[] argv) throws Exception { 39 boolean iae = false; 40 try { 41 // Get a MXBean proxy with invalid name 42 newPlatformMXBeanProxy(server, 43 "Invalid ObjectName", 44 RuntimeMXBean.class); 45 } catch (IllegalArgumentException e) { 46 // Expected exception 47 System.out.println("EXPECTED: " + e); 48 iae = true; 49 } 50 if (!iae) { 51 throw new RuntimeException("Invalid ObjectName " + 52 " was not detected"); 53 } 54 55 try { 56 // Get a MXBean proxy with non existent MXBean 57 newPlatformMXBeanProxy(server, 58 "java.lang:type=Foo", 59 RuntimeMXBean.class); 60 iae = false; 61 } catch (IllegalArgumentException e) { 62 // Expected exception 63 System.out.println("EXPECTED: " + e); 64 iae = true; 65 } 66 if (!iae) { 67 throw new RuntimeException("Non existent MXBean " + 68 " was not detected"); 69 } 70 71 try { 72 // Mismatch MXBean interface 73 newPlatformMXBeanProxy(server, 74 RUNTIME_MXBEAN_NAME, 75 ClassLoadingMXBean.class); 76 iae = false; 77 } catch (IllegalArgumentException e) { 78 // Expected exception 79 System.out.println("EXPECTED: " + e); 80 iae = true; 81 } 82 if (!iae) { 83 throw new RuntimeException("Mismatched MXBean interface " + 84 " was not detected"); 85 } 86 87 final FooMBean foo = new Foo(); 88 final ObjectName objName = new ObjectName("java.lang:type=Foo"); 89 server.registerMBean(foo, objName); 90 try { 91 // non-platform MXBean 92 newPlatformMXBeanProxy(server, 93 "java.lang:type=Foo", 94 FooMBean.class); 95 iae = false; 96 } catch (IllegalArgumentException e) { 97 // Expected exception 98 System.out.println("EXPECTED: " + e); 99 iae = true; 100 } 101 if (!iae) { 102 throw new RuntimeException("Non-platform MXBean " + 103 " was not detected"); 104 } 105 106 107 // Successfully get MXBean 108 RuntimeMXBean rm = newPlatformMXBeanProxy(server, 109 RUNTIME_MXBEAN_NAME, 110 RuntimeMXBean.class); 111 System.out.println("VM uptime = " + rm.getUptime()); 112 System.out.println("Test passed."); 113 } 114 115 public interface FooMBean { 116 public boolean isFoo(); 117 } 118 static class Foo implements FooMBean { 119 public boolean isFoo() { 120 return true; 121 } 122 } 123 }