jdk/test/javax/management/MBeanServer/MBeanTest.java
changeset 18805 b359f8adc8ad
child 30376 2ccf2cf7ea48
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/management/MBeanServer/MBeanTest.java	Thu Jul 11 21:11:03 2013 +0200
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+
+/*
+ * @test
+ * @bug 8010285
+ * @summary General MBean test.
+ * @author Jaroslav Bachorik
+ * @run clean MBeanTest
+ * @run build MBeanTest
+ * @run main MBeanTest
+ */
+public class MBeanTest {
+    private static interface PrivateMBean {
+        public int[] getInts();
+    }
+
+    public static class Private implements PrivateMBean {
+        public int[] getInts() {
+            return new int[]{1,2,3};
+        }
+    }
+
+    public static interface NonCompliantMBean {
+        public boolean getInt();
+        public boolean isInt();
+        public void setInt(int a);
+        public void setInt(long b);
+    }
+
+    public static class NonCompliant implements NonCompliantMBean {
+        public boolean getInt() {
+            return false;
+        }
+
+        public boolean isInt() {
+            return true;
+        }
+
+        public void setInt(int a) {
+        }
+
+        public void setInt(long b) {
+        }
+    }
+
+    public static interface CompliantMBean {
+        public boolean isFlag();
+        public int getInt();
+        public void setInt(int value);
+    }
+
+    public static class Compliant implements CompliantMBean {
+        public boolean isFlag() {
+            return false;
+        }
+
+        public int getInt() {
+            return 1;
+        }
+
+        public void setInt(int value) {
+        }
+    }
+
+    private static int failures = 0;
+
+    public static void main(String[] args) throws Exception {
+        testCompliant(CompliantMBean.class, new Compliant());
+        testNonCompliant(PrivateMBean.class, new Private());
+        testNonCompliant(NonCompliantMBean.class, new NonCompliant());
+
+        if (failures == 0)
+            System.out.println("Test passed");
+        else
+            throw new Exception("TEST FAILURES: " + failures);
+    }
+
+    private static void fail(String msg) {
+        failures++;
+        System.out.println("FAIL: " + msg);
+    }
+
+    private static void success(String msg) {
+        System.out.println("OK: " + msg);
+    }
+
+    private static void testNonCompliant(Class<?> iface, Object bean) throws Exception {
+        try {
+            System.out.println("Registering a non-compliant MBean " +
+                                iface.getName() + " ...");
+
+            MBeanServer mbs = MBeanServerFactory.newMBeanServer();
+            ObjectName on = new ObjectName("test:type=NonCompliant");
+
+            mbs.registerMBean(bean, on);
+
+            fail("Registered a non-compliant MBean - " + iface.getName());
+        } catch (Exception e) {
+            Throwable t = e;
+            while (t != null && !(t instanceof NotCompliantMBeanException)) {
+                t = t.getCause();
+            }
+            if (t != null) {
+                success("MBean not registered");
+            } else {
+                throw e;
+            }
+        }
+    }
+    private static void testCompliant(Class<?> iface, Object bean) throws Exception {
+        try {
+            System.out.println("Registering a compliant MBean " +
+                                iface.getName() + " ...");
+
+            MBeanServer mbs = MBeanServerFactory.newMBeanServer();
+            ObjectName on = new ObjectName("test:type=Compliant");
+
+            mbs.registerMBean(bean, on);
+            success("Registered a compliant MBean - " + iface.getName());
+        } catch (Exception e) {
+            Throwable t = e;
+            while (t != null && !(t instanceof NotCompliantMBeanException)) {
+                t = t.getCause();
+            }
+            if (t != null) {
+                fail("MBean not registered");
+            } else {
+                throw e;
+            }
+        }
+    }
+}