1 /*
   2  * Copyright (c) 2006, 2015, 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  *
  31  * @run clean NotCompliantCauseTest
  32  * @run build NotCompliantCauseTest
  33  * @run main NotCompliantCauseTest
  34  */
  35 /*
  36  * NotCompliantCauseTest.java
  37  *
  38  * Created on January 20, 2006, 2:56 PM / dfuchs
  39  *
  40  */
  41 
  42 import java.util.Random;
  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      * Creates a new instance of NotCompliantCauseTest
  58      */
  59     public NotCompliantCauseTest() {
  60     }
  61 
  62     /**
  63      * Test that NotCompliantMBeanException has a cause in case of
  64      * type mapping problems.
  65      **/
  66     public static void main(String[] args) {
  67         NotCompliantCauseTest instance = new NotCompliantCauseTest();
  68 
  69         instance.test1();
  70     }
  71 
  72     public static class RuntimeTestException extends RuntimeException {
  73         public RuntimeTestException(String msg) {
  74             super(msg);
  75         }
  76         public RuntimeTestException(String msg, Throwable cause) {
  77             super(msg,cause);
  78         }
  79         public RuntimeTestException(Throwable cause) {
  80             super(cause);
  81         }
  82     }
  83 
  84     /**
  85      * Test that NotCompliantMBeanException has a cause in case of
  86      * type mapping problems.
  87      **/
  88     void test1() {
  89         try {
  90             MBeanServer mbs = MBeanServerFactory.createMBeanServer();
  91             ObjectName oname = new ObjectName("domain:type=test");
  92 
  93             mbs.createMBean(NotCompliant.class.getName(), oname);
  94             System.err.println("ERROR: expected " +
  95                     "NotCompliantMBeanException not thrown");
  96             throw new RuntimeTestException("NotCompliantMBeanException not thrown");
  97         } catch (RuntimeTestException e) {
  98             throw e;
  99         } catch (NotCompliantMBeanException e) {
 100             Throwable cause = e.getCause();
 101             if (cause == null)
 102                 throw new RuntimeTestException("NotCompliantMBeanException " +
 103                         "doesn't have any cause.", e);
 104             while (cause.getCause() != null) {
 105                 if (cause instanceof OpenDataException) break;
 106                 cause = cause.getCause();
 107             }
 108             if (! (cause instanceof OpenDataException))
 109                 throw new RuntimeTestException("NotCompliantMBeanException " +
 110                         "doesn't have expected cause ("+
 111                         OpenDataException.class.getName()+"): "+cause, e);
 112             System.err.println("SUCCESS: Found expected cause: " + cause);
 113         } catch (Exception e) {
 114             System.err.println("Unexpected exception: " + e);
 115             throw new RuntimeException("Unexpected exception: " + e,e);
 116         }
 117     }
 118 
 119     public interface NotCompliantMXBean {
 120         Random returnRandom();
 121     }
 122 
 123     public static class NotCompliant implements NotCompliantMXBean {
 124         public Random returnRandom() {
 125             return new Random();
 126         }
 127     }
 128 
 129 }