1 /*
   2  * Copyright (c) 2006, 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 NotCompliantCauseTest.java
  26  * @bug 6374290
  27  * @summary Test that NotCompliantMBeanException has a cause in case of
  28  *          type mapping problems.
  29  * @author Daniel Fuchs, Alexander Shusherov
  30  * @run clean NotCompliantCauseTest
  31  * @run build NotCompliantCauseTest
  32  * @run main NotCompliantCauseTest
  33  */
  34 /*
  35  * NotCompliantCauseTest.java
  36  *
  37  * Created on January 20, 2006, 2:56 PM / dfuchs
  38  *
  39  */
  40 
  41 import java.util.Random;
  42 import java.util.logging.Logger;
  43 
  44 import javax.management.MBeanServer;
  45 import javax.management.MBeanServerFactory;
  46 import javax.management.NotCompliantMBeanException;
  47 import javax.management.ObjectName;
  48 import javax.management.openmbean.OpenDataException;
  49 
  50 /**
  51  *
  52  * @author Sun Microsystems, 2005 - All rights reserved.
  53  */
  54 public class NotCompliantCauseTest {
  55 
  56     /**
  57      * A logger for this class.
  58      **/
  59     private static final Logger LOG =
  60             Logger.getLogger(NotCompliantCauseTest.class.getName());
  61 
  62     /**
  63      * Creates a new instance of NotCompliantCauseTest
  64      */
  65     public NotCompliantCauseTest() {
  66     }
  67 
  68     /**
  69      * Test that NotCompliantMBeanException has a cause in case of
  70      * type mapping problems.
  71      **/
  72     public static void main(String[] args) {
  73         NotCompliantCauseTest instance = new NotCompliantCauseTest();
  74 
  75         instance.test1();
  76     }
  77 
  78     public static class RuntimeTestException extends RuntimeException {
  79         public RuntimeTestException(String msg) {
  80             super(msg);
  81         }
  82         public RuntimeTestException(String msg, Throwable cause) {
  83             super(msg,cause);
  84         }
  85         public RuntimeTestException(Throwable cause) {
  86             super(cause);
  87         }
  88     }
  89 
  90     /**
  91      * Test that NotCompliantMBeanException has a cause in case of
  92      * type mapping problems.
  93      **/
  94     void test1() {
  95         try {
  96             MBeanServer mbs = MBeanServerFactory.createMBeanServer();
  97             ObjectName oname = new ObjectName("domain:type=test");
  98 
  99             mbs.createMBean(NotCompliant.class.getName(), oname);
 100             System.err.println("ERROR: expected " +
 101                     "NotCompliantMBeanException not thrown");
 102             throw new RuntimeTestException("NotCompliantMBeanException not thrown");
 103         } catch (RuntimeTestException e) {
 104             throw e;
 105         } catch (NotCompliantMBeanException e) {
 106             Throwable cause = e.getCause();
 107             if (cause == null)
 108                 throw new RuntimeTestException("NotCompliantMBeanException " +
 109                         "doesn't have any cause.", e);
 110             while (cause.getCause() != null) {
 111                 if (cause instanceof OpenDataException) break;
 112                 cause = cause.getCause();
 113             }
 114             if (! (cause instanceof OpenDataException))
 115                 throw new RuntimeTestException("NotCompliantMBeanException " +
 116                         "doesn't have expected cause ("+
 117                         OpenDataException.class.getName()+"): "+cause, e);
 118             System.err.println("SUCCESS: Found expected cause: " + cause);
 119         } catch (Exception e) {
 120             System.err.println("Unexpected exception: " + e);
 121             throw new RuntimeException("Unexpected exception: " + e,e);
 122         }
 123     }
 124 
 125     public interface NotCompliantMXBean {
 126         Random returnRandom();
 127     }
 128 
 129     public static class NotCompliant implements NotCompliantMXBean {
 130         public Random returnRandom() {
 131             return new Random();
 132         }
 133     }
 134 
 135 }