3789983e89
Reviewed-by: darcy, ihse
265 lines
10 KiB
Java
265 lines
10 KiB
Java
/*
|
|
* Copyright (c) 2004, 2015, 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 4967769 4980655 4980668 4981214
|
|
* @summary Test that ModelMBeanInfoSupport.setDescriptor rejects
|
|
* null descriptor, that empty arrays are handled correctly,
|
|
* that getDescriptors("mbean") works, and that default values for
|
|
* MBean descriptors are correctly assigned.
|
|
* @author Eamonn McManus
|
|
*
|
|
* @run clean InfoSupportTest
|
|
* @run build InfoSupportTest
|
|
* @run main InfoSupportTest
|
|
*/
|
|
|
|
import java.util.*;
|
|
import javax.management.Descriptor;
|
|
import javax.management.RuntimeOperationsException;
|
|
import javax.management.modelmbean.*;
|
|
|
|
public class InfoSupportTest {
|
|
public static void main(String[] args) throws Exception {
|
|
boolean ok = true;
|
|
|
|
ok &= testSetDescriptorNull();
|
|
ok &= testEmptyArrayParameters();
|
|
ok &= testGetDescriptorsForMBean();
|
|
|
|
if (ok)
|
|
System.out.println("Test passed");
|
|
else {
|
|
System.out.println("TEST FAILED");
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
private static boolean testSetDescriptorNull() {
|
|
System.out.println("Testing that " +
|
|
"ModelMBeanInfoSupport.setDescriptor(null, \"x\")" +
|
|
" throws an exception");
|
|
|
|
ModelMBeanAttributeInfo mmbai =
|
|
new ModelMBeanAttributeInfo("attribute",
|
|
"java.lang.String",
|
|
"an attribute",
|
|
true, true, false);
|
|
ModelMBeanInfo mmbi =
|
|
new ModelMBeanInfoSupport("bogus.class.name",
|
|
"an MBean",
|
|
new ModelMBeanAttributeInfo[] {mmbai},
|
|
null, null, null);
|
|
try {
|
|
mmbi.setDescriptor(null, "attribute");
|
|
} catch (RuntimeOperationsException e) {
|
|
if (e.getTargetException() instanceof IllegalArgumentException) {
|
|
System.out.println("Test passes: got a " +
|
|
"RuntimeOperationsException wrapping an " +
|
|
"IllegalArgumentException");
|
|
return true;
|
|
} else {
|
|
System.out.println("TEST FAILS: wrong exception:");
|
|
e.printStackTrace(System.out);
|
|
return false;
|
|
}
|
|
} catch (Exception e) {
|
|
System.out.println("TEST FAILS: wrong exception:");
|
|
e.printStackTrace(System.out);
|
|
return false;
|
|
}
|
|
|
|
System.out.println("TEST FAILS: exception not thrown");
|
|
return false;
|
|
}
|
|
|
|
private static boolean testEmptyArrayParameters()
|
|
throws Exception {
|
|
|
|
System.out.println("Test that empty and null array parameters " +
|
|
"produce the right type from getters");
|
|
|
|
boolean ok = true;
|
|
|
|
ModelMBeanInfoSupport mmbi;
|
|
|
|
mmbi =
|
|
new ModelMBeanInfoSupport("bogus.class.name", "description",
|
|
null, null, null, null);
|
|
ok &= checkMMBI(mmbi, "null parameters, no descriptor");
|
|
|
|
mmbi =
|
|
new ModelMBeanInfoSupport("bogus.class.name", "description",
|
|
null, null, null, null, null);
|
|
ok &= checkMMBI(mmbi, "null parameters, null descriptor");
|
|
|
|
mmbi =
|
|
new ModelMBeanInfoSupport("bogus.class.name", "description",
|
|
new ModelMBeanAttributeInfo[0],
|
|
new ModelMBeanConstructorInfo[0],
|
|
new ModelMBeanOperationInfo[0],
|
|
new ModelMBeanNotificationInfo[0]);
|
|
ok &= checkMMBI(mmbi, "empty parameters, no descriptor");
|
|
|
|
mmbi =
|
|
new ModelMBeanInfoSupport("bogus.class.name", "description",
|
|
new ModelMBeanAttributeInfo[0],
|
|
new ModelMBeanConstructorInfo[0],
|
|
new ModelMBeanOperationInfo[0],
|
|
new ModelMBeanNotificationInfo[0],
|
|
null);
|
|
ok &= checkMMBI(mmbi, "empty parameters, null descriptor");
|
|
|
|
return ok;
|
|
}
|
|
|
|
private static boolean checkMMBI(ModelMBeanInfoSupport mmbi, String what)
|
|
throws Exception {
|
|
String bad = "";
|
|
|
|
if (!(mmbi.getAttributes() instanceof ModelMBeanAttributeInfo[]))
|
|
bad += " attributes";
|
|
if (!(mmbi.getConstructors() instanceof ModelMBeanConstructorInfo[]))
|
|
bad += " constructors";
|
|
if (!(mmbi.getOperations() instanceof ModelMBeanOperationInfo[]))
|
|
bad += " operations";
|
|
if (!(mmbi.getNotifications() instanceof ModelMBeanNotificationInfo[]))
|
|
bad += " notifications";
|
|
|
|
if (bad.equals("")) {
|
|
System.out.println("..." + what + ": OK");
|
|
return true;
|
|
} else {
|
|
System.out.println("..." + what + ": FAILS for:" + bad);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private static boolean testGetDescriptorsForMBean()
|
|
throws Exception {
|
|
System.out.println("Test getDescriptors(\"mbean\")");
|
|
|
|
boolean ok = true;
|
|
|
|
ModelMBeanInfo mmbi;
|
|
Descriptor[] mbeanDescrs;
|
|
|
|
mmbi = new ModelMBeanInfoSupport("bogus.class.name", "description",
|
|
null, null, null, null);
|
|
try {
|
|
mbeanDescrs = mmbi.getDescriptors("mbean");
|
|
if (mbeanDescrs.length == 1 && mbeanDescrs[0] != null)
|
|
System.out.println("...default MBean descriptor: OK");
|
|
else {
|
|
System.out.println("...default MBean descriptor: bad array: " +
|
|
Arrays.asList(mbeanDescrs));
|
|
ok = false;
|
|
}
|
|
} catch (Exception e) {
|
|
System.out.println("...default MBean descriptor: got exception:");
|
|
e.printStackTrace(System.out);
|
|
ok = false;
|
|
}
|
|
|
|
String[] fields = new String[] {"descriptorType", "name"};
|
|
String[] values = new String[] {"mbean", "whatsit"};
|
|
String[] defaultFields = new String[] {
|
|
"displayName", "persistPolicy", "log", "visibility",
|
|
};
|
|
String[] defaultValues = new String[] {
|
|
"bogus.class.name", "never", "F", "1",
|
|
};
|
|
Descriptor d = new DescriptorSupport(fields, values);
|
|
|
|
mmbi = new ModelMBeanInfoSupport("bogus.class.name", "description",
|
|
null, null, null, null, d);
|
|
try {
|
|
mbeanDescrs = mmbi.getDescriptors("mbean");
|
|
} catch (Exception e) {
|
|
System.out.println("...explicit MBean descriptor: got exception:");
|
|
e.printStackTrace(System.out);
|
|
mbeanDescrs = new Descriptor[] {mmbi.getMBeanDescriptor()};
|
|
}
|
|
|
|
if (mbeanDescrs.length == 1) {
|
|
Descriptor dd = mbeanDescrs[0];
|
|
boolean thisok = true;
|
|
|
|
// Check that the fields we supplied survived in the copy
|
|
// and were not changed in the original
|
|
for (int i = 0; i < fields.length; i++) {
|
|
String field = fields[i];
|
|
String value;
|
|
value = (String) dd.getFieldValue(field);
|
|
if (!values[i].equals(value)) {
|
|
System.out.println("...explicit MBean descriptor: " +
|
|
"value of " + field + " mutated: " +
|
|
value);
|
|
thisok = false;
|
|
}
|
|
value = (String) d.getFieldValue(field);
|
|
if (!values[i].equals(value)) {
|
|
System.out.println("...explicit MBean descriptor: " +
|
|
"value of " + field + " changed in " +
|
|
"original: " + value);
|
|
thisok = false;
|
|
}
|
|
}
|
|
|
|
// Check that the default fields were added
|
|
for (int i = 0; i < defaultFields.length; i++) {
|
|
String field = defaultFields[i];
|
|
String value = (String) dd.getFieldValue(field);
|
|
if (!defaultValues[i].equals(value)) {
|
|
System.out.println("...explicit MBean descriptor: " +
|
|
"default value of " + field +
|
|
" wrong: " + value + " should be " +
|
|
defaultValues[i]);
|
|
thisok = false;
|
|
}
|
|
}
|
|
|
|
// Check that the original did not acquire new fields
|
|
if (d.getFieldNames().length != fields.length) {
|
|
Collection c = new TreeSet(Arrays.asList(d.getFieldNames()));
|
|
c.removeAll(Arrays.asList(fields));
|
|
System.out.println("...explicit MBean descriptor: " +
|
|
"acquired new fields: " + c);
|
|
thisok = false;
|
|
}
|
|
|
|
if (thisok)
|
|
System.out.println("...explicit MBean descriptor: OK");
|
|
else
|
|
ok = false;
|
|
} else {
|
|
System.out.println("...explicit MBean descriptor: bad array: " +
|
|
Arrays.asList(mbeanDescrs));
|
|
ok = false;
|
|
}
|
|
|
|
return ok;
|
|
}
|
|
}
|