8024352: MBeanOperationInfo accepts any int value as "impact"
authoruvangapally
Fri, 17 Nov 2017 11:08:44 +0530
changeset 47909 da4fb7d2f917
parent 47908 d6d00f785f39
child 47910 b4d2929683b6
8024352: MBeanOperationInfo accepts any int value as "impact" Summary: MBeanOperationInfo throw an llegalArgumentException if the impact argument is not among the defined values Reviewed-by: rriggs, dfuchs, mchung Contributed-by: ujwal.vangapally@oracle.com
src/java.management/share/classes/javax/management/MBeanOperationInfo.java
test/jdk/javax/management/MBeanInfo/MBeanInfoHashCodeNPETest.java
test/jdk/javax/management/mxbean/MBeanOperationInfoImpactRangeTest.java
--- a/src/java.management/share/classes/javax/management/MBeanOperationInfo.java	Thu Nov 16 19:01:01 2017 -0800
+++ b/src/java.management/share/classes/javax/management/MBeanOperationInfo.java	Fri Nov 17 11:08:44 2017 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2017, 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
@@ -146,6 +146,9 @@
      * @param descriptor The descriptor for the operation.  This may be null
      * which is equivalent to an empty descriptor.
      *
+     * @throws IllegalArgumentException if {@code impact} is not one of
+     * {@linkplain #ACTION}, {@linkplain #ACTION_INFO}, {@linkplain #INFO} or {@linkplain #UNKNOWN}.
+     *
      * @since 1.6
      */
     public MBeanOperationInfo(String name,
@@ -157,6 +160,12 @@
 
         super(name, description, descriptor);
 
+        if (impact < INFO || impact > UNKNOWN) {
+            throw new IllegalArgumentException("Argument impact can only be "
+                    + "one of ACTION, ACTION_INFO, "
+                    + "INFO, or UNKNOWN" + " given value is :" + impact);
+        }
+
         if (signature == null || signature.length == 0)
             signature = MBeanParameterInfo.NO_PARAMS;
         else
@@ -259,8 +268,7 @@
         case ACTION: impactString = "action"; break;
         case ACTION_INFO: impactString = "action/info"; break;
         case INFO: impactString = "info"; break;
-        case UNKNOWN: impactString = "unknown"; break;
-        default: impactString = "(" + getImpact() + ")";
+        default: impactString = "unknown";
         }
         return getClass().getName() + "[" +
             "description=" + getDescription() + ", " +
--- a/test/jdk/javax/management/MBeanInfo/MBeanInfoHashCodeNPETest.java	Thu Nov 16 19:01:01 2017 -0800
+++ b/test/jdk/javax/management/MBeanInfo/MBeanInfoHashCodeNPETest.java	Fri Nov 17 11:08:44 2017 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, 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
@@ -97,10 +97,6 @@
         test(mbeanOperationInfo, "type");
 
         mbeanOperationInfo = new MBeanOperationInfo(
-                "name", "description", new MBeanParameterInfo[]{}, "type", -1, new DescriptorSupport());
-        test(mbeanOperationInfo, "native impact");
-
-        mbeanOperationInfo = new MBeanOperationInfo(
                 "name", "description", new MBeanParameterInfo[]{}, "type", 1, null);
         test(mbeanOperationInfo, "Descriptor");
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/management/mxbean/MBeanOperationInfoImpactRangeTest.java	Fri Nov 17 11:08:44 2017 +0530
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2017, 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.
+ */
+
+ /*
+ * @test
+ * @bug 8024352
+ * @modules java.management
+ * @run main MBeanOperationInfoImpactRangeTest
+ * @summary Check that MBeanOperationInfo throws an IllegalArgumentException when impact
+ * value is not among INFO,ACTION,ACTION_INFO,UNKNOWN
+ */
+import javax.management.MBeanOperationInfo;
+
+public class MBeanOperationInfoImpactRangeTest {
+
+    private void checkInRange(int impact) {
+        int impactValue;
+
+        System.out.println("checking that no exception is thrown when a "
+                + "value in range is passed, impact value is :" + impact );
+        MBeanOperationInfo mbi = new MBeanOperationInfo("IRC", "impact Range"
+                + " check", null, null, impact);
+        impactValue = mbi.getImpact();
+        if(impactValue != impact)
+            throw new RuntimeException("unexpected impact value :" + impactValue);
+        System.out.println("given value is :" + impactValue);
+        System.out.println("Success no exception thrown");
+        System.out.println(mbi.toString());
+
+    }
+
+    private void checkOutOfRange(int impact) {
+        int impactValue;
+
+        try {
+            System.out.println("checking that exception is thrown when a value"
+                    + " out of range is passed, impact value is :" + impact);
+            MBeanOperationInfo mbi = new MBeanOperationInfo("IRC", "impact Range"
+                    + " check", null, null, impact);
+            impactValue = mbi.getImpact();
+            System.out.println("IllegalArgumentException not thrown"
+                    + " when a value out of range is passed ,"
+                    + " given value is :" + impactValue);
+            throw new RuntimeException("Test failed !!");
+            // throwing RuntimeException for notifying the unusual behaviour
+        } catch (IllegalArgumentException e) {
+            System.out.println("IllegalArgumentException thrown as expected, "
+                    + "illegal value given as impact :" + impact);
+            System.out.println("success");
+        }
+
+    }
+
+    public static void main(String Args[]) {
+
+        // valid range for impact is {INFO=0,ACTION=1,ACTION_INFO=2,UNKNOWN=3}
+        /* MBeanOperationInfo should throw IllegalArgumentException when impact
+        value is given out of range*/
+        MBeanOperationInfoImpactRangeTest impactRangeTest = new MBeanOperationInfoImpactRangeTest();
+
+        impactRangeTest.checkInRange(MBeanOperationInfo.INFO);
+        impactRangeTest.checkInRange(MBeanOperationInfo.ACTION);
+        impactRangeTest.checkInRange(MBeanOperationInfo.ACTION_INFO);
+        impactRangeTest.checkInRange(MBeanOperationInfo.UNKNOWN);
+        impactRangeTest.checkOutOfRange(-1);
+        impactRangeTest.checkOutOfRange(4);
+
+        System.out.println("Test Passed");
+
+
+    }
+}
\ No newline at end of file