1 /* 2 * Copyright (c) 2005, 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 26 * @bug 6204469 27 * @summary Test that MBean*Info can be constructed with default descriptor 28 * @author Eamonn McManus 29 * @modules java.management 30 * @run clean DefaultDescriptorTest 31 * @run build DefaultDescriptorTest 32 * @run main DefaultDescriptorTest 33 */ 34 35 import java.lang.reflect.*; 36 import javax.management.*; 37 import javax.management.modelmbean.*; 38 import javax.management.openmbean.*; 39 40 public class DefaultDescriptorTest { 41 public static void main(String[] args) throws Exception { 42 final Descriptor empty = 43 ImmutableDescriptor.EMPTY_DESCRIPTOR; 44 45 final Class thisClass = DefaultDescriptorTest.class; 46 47 final Method getWhatever = thisClass.getMethod("getWhatever"); 48 final Method setWhatever = thisClass.getMethod("setWhatever", 49 int.class); 50 final Method doWhatever = thisClass.getMethod("doWhatever", 51 String.class); 52 53 final Constructor<?> con = thisClass.getConstructor(); 54 55 final OpenMBeanParameterInfoSupport ombpi1 = 56 new OpenMBeanParameterInfoSupport("x", "y", SimpleType.STRING); 57 final OpenMBeanParameterInfoSupport ombpi2 = 58 new OpenMBeanParameterInfoSupport("x", "y", SimpleType.STRING, 59 (Descriptor) null); 60 final OpenMBeanParameterInfoSupport ombpi3 = 61 new OpenMBeanParameterInfoSupport("x", "y", SimpleType.STRING, 62 empty); 63 final OpenMBeanParameterInfoSupport ombpi4 = 64 new OpenMBeanParameterInfoSupport("x", "y", SimpleType.STRING, 65 "defaultString"); 66 final OpenMBeanParameterInfoSupport ombpi5 = 67 new OpenMBeanParameterInfoSupport("x", "y", SimpleType.INTEGER, 68 null, 3, 5); 69 final OpenMBeanParameterInfoSupport ombpi6 = 70 new OpenMBeanParameterInfoSupport("x", "y", SimpleType.LONG, 71 53L, new Long[] {28L, 53L}); 72 73 final ModelMBeanInfoSupport mmbi1 = 74 new ModelMBeanInfoSupport("yo", "yo", null, null, null, null); 75 final ModelMBeanInfoSupport mmbi2 = 76 new ModelMBeanInfoSupport("yo", "yo", null, null, null, null, 77 (Descriptor) null); 78 // final ModelMBeanInfoSupport mmbi3 = 79 // new ModelMBeanInfoSupport("yo", "yo", null, null, null, null, 80 // empty); 81 // an empty descriptor is currently illegal for MMBIS 82 83 final ModelMBeanAttributeInfo mmbai1 = 84 new ModelMBeanAttributeInfo("yo", "yo", getWhatever, setWhatever); 85 final ModelMBeanAttributeInfo mmbai2 = 86 new ModelMBeanAttributeInfo("yo", "yo", getWhatever, setWhatever, 87 (Descriptor) null); 88 final ModelMBeanAttributeInfo mmbai3 = 89 new ModelMBeanAttributeInfo("yo", "yo", "yo", true, true, false); 90 final ModelMBeanAttributeInfo mmbai4 = 91 new ModelMBeanAttributeInfo("yo", "yo", "yo", true, true, false, 92 (Descriptor) null); 93 94 final ModelMBeanConstructorInfo mmbci1 = 95 new ModelMBeanConstructorInfo("yo", con); 96 final ModelMBeanConstructorInfo mmbci2 = 97 new ModelMBeanConstructorInfo("yo", con, (Descriptor) null); 98 final ModelMBeanConstructorInfo mmbci3 = 99 new ModelMBeanConstructorInfo("yo", "yo", null); 100 final ModelMBeanConstructorInfo mmbci4 = 101 new ModelMBeanConstructorInfo("yo", "yo", null, (Descriptor) null); 102 103 final ModelMBeanNotificationInfo mmbni1 = 104 new ModelMBeanNotificationInfo(new String[] {"x.y.z"}, "yo", "yo"); 105 final ModelMBeanNotificationInfo mmbni2 = 106 new ModelMBeanNotificationInfo(new String[] {"x.y.z"}, "yo", "yo", 107 (Descriptor) null); 108 109 final ModelMBeanOperationInfo mmboi1 = 110 new ModelMBeanOperationInfo("yo", doWhatever); 111 final ModelMBeanOperationInfo mmboi2 = 112 new ModelMBeanOperationInfo("yo", doWhatever, (Descriptor) null); 113 final ModelMBeanOperationInfo mmboi3 = 114 new ModelMBeanOperationInfo("yo", "yo", null, "typo", 115 MBeanOperationInfo.ACTION); 116 final ModelMBeanOperationInfo mmboi4 = 117 new ModelMBeanOperationInfo("yo", "yo", null, "typo", 118 MBeanOperationInfo.ACTION, 119 (Descriptor) null); 120 121 final DescriptorRead[] infos = { 122 new MBeanInfo("a.b.c", "blah", null, null, null, null), 123 new MBeanInfo("a.b.c", "blah", null, null, null, null, 124 (Descriptor) null), 125 new MBeanInfo("a.b.c", "blah", null, null, null, null, 126 empty), 127 128 new MBeanAttributeInfo("blah", "blah", getWhatever, setWhatever), 129 // Following constructor deleted because Method has implicit Descriptor 130 // from annotations 131 // new MBeanAttributeInfo("blah", "blah", getWhatever, setWhatever, 132 // (Descriptor) null), 133 // new MBeanAttributeInfo("blah", "blah", getWhatever, setWhatever, 134 // empty), 135 136 new MBeanAttributeInfo("blah", "a.b.c", "blah", 137 true, true, false), 138 new MBeanAttributeInfo("blah", "a.b.c", "blah", 139 true, true, false, (Descriptor) null), 140 new MBeanAttributeInfo("blah", "a.b.c", "blah", 141 true, true, false, empty), 142 143 new MBeanConstructorInfo("blah", con), 144 // Following constructor deleted because Constructor has implicit Descriptor 145 // from annotations 146 // new MBeanConstructorInfo("blah", con, (Descriptor) null), 147 // new MBeanConstructorInfo("blah", con, empty), 148 149 new MBeanConstructorInfo("blah", "blah", null), 150 new MBeanConstructorInfo("blah", "blah", null, (Descriptor) null), 151 new MBeanConstructorInfo("blah", "blah", null, empty), 152 153 // this class should be abstract but isn't 154 new MBeanFeatureInfo("blah", "blah"), 155 new MBeanFeatureInfo("blah", "blah", (Descriptor) null), 156 new MBeanFeatureInfo("blah", "blah", empty), 157 158 new MBeanNotificationInfo(new String[] {"a.b.c"}, "blah", "blah"), 159 new MBeanNotificationInfo(new String[] {"a.b.c"}, "blah", "blah", 160 (Descriptor) null), 161 new MBeanNotificationInfo(new String[] {"a.b.c"}, "blah", "blah", 162 empty), 163 164 165 new MBeanOperationInfo("blah", doWhatever), 166 // Following constructor deleted because Method has implicit Descriptor 167 // from annotations 168 // new MBeanOperationInfo("blah", doWhatever, (Descriptor) null), 169 // new MBeanOperationInfo("blah", doWhatever, empty), 170 171 new MBeanOperationInfo("blah", "blah", null, "a.b.c", 172 MBeanOperationInfo.ACTION_INFO), 173 new MBeanOperationInfo("blah", "blah", null, "a.b.c", 174 MBeanOperationInfo.ACTION, 175 (Descriptor) null), 176 new MBeanOperationInfo("blah", "blah", null, "a.b.c", 177 MBeanOperationInfo.INFO, 178 empty), 179 180 new MBeanParameterInfo("blah", "a.b.c", "blah"), 181 new MBeanParameterInfo("blah", "a.b.c", "blah", (Descriptor) null), 182 new MBeanParameterInfo("blah", "a.b.c", "blah", empty), 183 184 new OpenMBeanInfoSupport("x", "y", null, null, null, null), 185 new OpenMBeanInfoSupport("x", "y", null, null, null, null, 186 (Descriptor) null), 187 new OpenMBeanInfoSupport("x", "y", null, null, null, null, 188 empty), 189 190 ombpi1, 191 ombpi2, 192 ombpi3, 193 ombpi4, 194 ombpi5, 195 ombpi6, 196 197 new OpenMBeanAttributeInfoSupport("x", "y", SimpleType.STRING, 198 true, true, false), 199 new OpenMBeanAttributeInfoSupport("x", "y", SimpleType.STRING, 200 true, true, false, 201 (Descriptor) null), 202 new OpenMBeanAttributeInfoSupport("x", "y", SimpleType.STRING, 203 true, true, false, 204 empty), 205 new OpenMBeanAttributeInfoSupport("x", "y", SimpleType.STRING, 206 true, true, false, 207 "defaultString"), 208 new OpenMBeanAttributeInfoSupport("x", "y", SimpleType.INTEGER, 209 true, true, false, 210 null, 3, 5), 211 new OpenMBeanAttributeInfoSupport("x", "y", SimpleType.LONG, 212 true, true, false, 213 53L, new Long[] {28L, 53L}), 214 215 new OpenMBeanConstructorInfoSupport("x", "y", 216 new OpenMBeanParameterInfo[] { 217 ombpi1, ombpi2 218 }), 219 new OpenMBeanConstructorInfoSupport("x", "y", 220 new OpenMBeanParameterInfo[] { 221 ombpi1, ombpi2 222 }, (Descriptor) null), 223 new OpenMBeanConstructorInfoSupport("x", "y", 224 new OpenMBeanParameterInfo[] { 225 ombpi1, ombpi2 226 }, empty), 227 228 new OpenMBeanOperationInfoSupport("x", "y", 229 new OpenMBeanParameterInfo[] { 230 ombpi1, ombpi2 231 }, SimpleType.DATE, 232 MBeanOperationInfo.ACTION), 233 new OpenMBeanOperationInfoSupport("x", "y", 234 new OpenMBeanParameterInfo[] { 235 ombpi1, ombpi2 236 }, SimpleType.DATE, 237 MBeanOperationInfo.ACTION, 238 (Descriptor) null), 239 new OpenMBeanOperationInfoSupport("x", "y", 240 new OpenMBeanParameterInfo[] { 241 ombpi1, ombpi2 242 }, SimpleType.DATE, 243 MBeanOperationInfo.ACTION, 244 empty), 245 246 mmbi1, 247 mmbi2, 248 249 new ModelMBeanInfoSupport(mmbi1), 250 new ModelMBeanInfoSupport(mmbi2), 251 252 (DescriptorRead) mmbi1.clone(), 253 (DescriptorRead) mmbi2.clone(), 254 255 mmbai1, 256 mmbai2, 257 mmbai3, 258 mmbai4, 259 260 new ModelMBeanAttributeInfo(mmbai1), 261 new ModelMBeanAttributeInfo(mmbai2), 262 new ModelMBeanAttributeInfo(mmbai3), 263 new ModelMBeanAttributeInfo(mmbai4), 264 265 (DescriptorRead) mmbai1.clone(), 266 (DescriptorRead) mmbai2.clone(), 267 (DescriptorRead) mmbai3.clone(), 268 (DescriptorRead) mmbai4.clone(), 269 270 mmbci1, 271 mmbci2, 272 mmbci3, 273 mmbci4, 274 275 // Oddly enough there's no public copy constructor for this class 276 277 (DescriptorRead) mmbci1.clone(), 278 (DescriptorRead) mmbci2.clone(), 279 (DescriptorRead) mmbci3.clone(), 280 (DescriptorRead) mmbci4.clone(), 281 282 mmbni1, 283 mmbni2, 284 285 new ModelMBeanNotificationInfo(mmbni1), 286 new ModelMBeanNotificationInfo(mmbni2), 287 288 (DescriptorRead) mmbni1.clone(), 289 (DescriptorRead) mmbni2.clone(), 290 291 mmboi1, 292 mmboi2, 293 mmboi3, 294 mmboi4, 295 296 new ModelMBeanOperationInfo(mmboi1), 297 new ModelMBeanOperationInfo(mmboi2), 298 new ModelMBeanOperationInfo(mmboi3), 299 new ModelMBeanOperationInfo(mmboi4), 300 301 (DescriptorRead) mmboi1.clone(), 302 (DescriptorRead) mmboi2.clone(), 303 (DescriptorRead) mmboi3.clone(), 304 (DescriptorRead) mmboi4.clone(), 305 306 }; 307 308 System.out.println("Testing that a default descriptor is always " + 309 "supplied"); 310 for (DescriptorRead info : infos) { 311 System.out.println(info); 312 Descriptor d = info.getDescriptor(); 313 if (d == null) 314 throw new Exception("getDescriptor returned null: " + info); 315 } 316 System.out.println("Test passed"); 317 } 318 319 public int getWhatever() { 320 return 0; 321 } 322 323 public void setWhatever(int x) { 324 } 325 326 public void doWhatever(String x) { 327 } 328 }