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 5045358 27 * @summary Test that Open MBeans support arrays of primitive types. 28 * @author Luis-Miguel Alventosa 29 * 30 * @run clean ArrayTypeTest 31 * @run build ArrayTypeTest 32 * @run main ArrayTypeTest 33 */ 34 35 import java.io.FileInputStream; 36 import java.io.FileOutputStream; 37 import java.io.ObjectInputStream; 38 import java.io.ObjectOutputStream; 39 import javax.management.ObjectName; 40 import javax.management.openmbean.ArrayType; 41 import javax.management.openmbean.OpenDataException; 42 import javax.management.openmbean.SimpleType; 43 44 public class ArrayTypeTest { 45 46 private static final String toStringResult[] = { 47 "javax.management.openmbean.ArrayType(name=[[Ljava.lang.String;,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)", 48 "javax.management.openmbean.ArrayType(name=[I,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)", 49 "javax.management.openmbean.ArrayType(name=[Ljava.lang.Integer;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)", 50 "javax.management.openmbean.ArrayType(name=[[[[I,dimension=4,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)", 51 "javax.management.openmbean.ArrayType(name=[[[[Ljava.lang.Integer;,dimension=4,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)", 52 "javax.management.openmbean.ArrayType(name=[Ljava.lang.String;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)", 53 "OpenDataException", 54 "javax.management.openmbean.ArrayType(name=[Ljava.lang.Integer;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)", 55 "javax.management.openmbean.ArrayType(name=[[Ljava.lang.Integer;,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)", 56 "javax.management.openmbean.ArrayType(name=[[I,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)", 57 "javax.management.openmbean.ArrayType(name=[[[I,dimension=3,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)", 58 "javax.management.openmbean.ArrayType(name=[F,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Float),primitiveArray=true)", 59 "javax.management.openmbean.ArrayType(name=[[F,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Float),primitiveArray=true)", 60 "javax.management.openmbean.ArrayType(name=[Ljavax.management.ObjectName;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=javax.management.ObjectName),primitiveArray=false)", 61 "javax.management.openmbean.ArrayType(name=[[Ljavax.management.ObjectName;,dimension=2,elementType=javax.management.openmbean.SimpleType(name=javax.management.ObjectName),primitiveArray=false)", 62 "javax.management.openmbean.ArrayType(name=[[[Ljava.lang.String;,dimension=3,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)", 63 "javax.management.openmbean.ArrayType(name=[[[Ljava.lang.String;,dimension=3,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)", 64 "javax.management.openmbean.ArrayType(name=[I,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)", 65 "javax.management.openmbean.ArrayType(name=[[Z,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Boolean),primitiveArray=true)", 66 "javax.management.openmbean.ArrayType(name=[Ljava.lang.Long;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Long),primitiveArray=false)", 67 "javax.management.openmbean.ArrayType(name=[Ljava.lang.Double;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Double),primitiveArray=false)", 68 }; 69 70 private static int checkResult(int i, ArrayType a) { 71 if (a.toString().equals(toStringResult[i])) { 72 System.out.println("Test passed!"); 73 return 0; 74 } else { 75 System.out.println("Test failed!"); 76 return 1; 77 } 78 } 79 80 private static int checkGetters(ArrayType a, 81 String className, 82 String description, 83 String typeName, 84 boolean isArray, 85 boolean isPrimitiveArray, 86 int dimension) { 87 int error = 0; 88 if (a.getClassName().equals(className)) { 89 System.out.println("\tArrayType.getClassName() OK!"); 90 } else { 91 System.out.println("\tArrayType.getClassName() KO!"); 92 System.out.println("\t\t---> expecting " + className); 93 error++; 94 } 95 if (a.getDescription().equals(description)) { 96 System.out.println("\tArrayType.getDescription() OK!"); 97 } else { 98 System.out.println("\tArrayType.getDescription() KO!"); 99 System.out.println("\t\t---> expecting " + description); 100 error++; 101 } 102 if (a.getTypeName().equals(typeName)) { 103 System.out.println("\tArrayType.getTypeName() OK!"); 104 } else { 105 System.out.println("\tArrayType.getTypeName() KO!"); 106 System.out.println("\t\t---> expecting " + typeName); 107 error++; 108 } 109 if (a.isArray() == isArray) { 110 System.out.println("\tArrayType.isArray() OK!"); 111 } else { 112 System.out.println("\tArrayType.isArray() KO!"); 113 System.out.println("\t\t---> expecting " + isArray); 114 error++; 115 } 116 if (a.isPrimitiveArray() == isPrimitiveArray) { 117 System.out.println("\tArrayType.isPrimitiveArray() OK!"); 118 } else { 119 System.out.println("\tArrayType.isPrimitiveArray() KO!"); 120 System.out.println("\t\t---> expecting " + isPrimitiveArray); 121 error++; 122 } 123 if (a.getDimension() == dimension) { 124 System.out.println("\tArrayType.getDimension() OK!"); 125 } else { 126 System.out.println("\tArrayType.getDimension() KO!"); 127 System.out.println("\t\t---> expecting " + dimension); 128 error++; 129 } 130 131 if (error > 0) { 132 System.out.println("Test failed!"); 133 return 1; 134 } else { 135 System.out.println("Test passed!"); 136 return 0; 137 } 138 } 139 140 private static void printArrayType(ArrayType a) { 141 System.out.println("\tArrayType.getClassName() = " + a.getClassName()); 142 System.out.println("\tArrayType.getDescription() = " + a.getDescription()); 143 System.out.println("\tArrayType.getTypeName() = " + a.getTypeName()); 144 System.out.println("\tArrayType.isArray() = " + a.isArray()); 145 System.out.println("\tArrayType.isPrimitiveArray() = " + a.isPrimitiveArray()); 146 System.out.println("\tArrayType.getDimension() = " + a.getDimension()); 147 } 148 149 public static void main(String[] args) throws Exception { 150 151 System.out.println("\nTest that Open MBeans support arrays of primitive types."); 152 153 int index = 0; 154 int error = 0; 155 156 // 157 // Constructor tests 158 // 159 System.out.println("\n>>> Constructor tests"); 160 161 System.out.println("\nArrayType<String[][]> a1 = new ArrayType<String[][]>(2, SimpleType.STRING)"); 162 ArrayType<String[][]> a1 = new ArrayType<String[][]>(2, SimpleType.STRING); 163 printArrayType(a1); 164 error += checkResult(index++, a1); 165 166 System.out.println("\nArrayType<int[]> a2 = new ArrayType<int[]>(SimpleType.INTEGER, true)"); 167 ArrayType<int[]> a2 = new ArrayType<int[]>(SimpleType.INTEGER, true); 168 printArrayType(a2); 169 error += checkResult(index++, a2); 170 171 System.out.println("\nArrayType<Integer[]> a3 = new ArrayType<Integer[]>(SimpleType.INTEGER, false)"); 172 ArrayType<Integer[]> a3 = new ArrayType<Integer[]>(SimpleType.INTEGER, false); 173 printArrayType(a3); 174 error += checkResult(index++, a3); 175 176 System.out.println("\nArrayType<int[][][][]> a4 = new ArrayType<int[][][][]>(3, a2)"); 177 ArrayType<int[][][][]> a4 = new ArrayType<int[][][][]>(3, a2); 178 printArrayType(a4); 179 error += checkResult(index++, a4); 180 181 System.out.println("\nArrayType<Integer[][][][]> a5 = new ArrayType<Integer[][][][]>(3, a3)"); 182 ArrayType<Integer[][][][]> a5 = new ArrayType<Integer[][][][]>(3, a3); 183 printArrayType(a5); 184 error += checkResult(index++, a5); 185 186 System.out.println("\nArrayType<String[]> a6 = new ArrayType<String[]>(SimpleType.STRING, false)"); 187 ArrayType<String[]> a6 = new ArrayType<String[]>(SimpleType.STRING, false); 188 printArrayType(a6); 189 error += checkResult(index++, a6); 190 191 System.out.println("\nArrayType<String[]> a7 = new ArrayType<String[]>(SimpleType.STRING, true)"); 192 index++; // skip this dummy entry in the toStringResult array 193 try { 194 ArrayType<String[]> a7 = 195 new ArrayType<String[]>(SimpleType.STRING, true); 196 System.out.println("\tDid not get expected OpenDataException!"); 197 System.out.println("Test failed!"); 198 error++; 199 } catch (OpenDataException e) { 200 System.out.println("\tGot expected OpenDataException: " + e); 201 System.out.println("Test passed!"); 202 } 203 204 // 205 // Factory tests 206 // 207 System.out.println("\n>>> Factory tests"); 208 209 System.out.println("\nArrayType<Integer[]> a8 = ArrayType.getArrayType(SimpleType.INTEGER)"); 210 ArrayType<Integer[]> a8 = ArrayType.getArrayType(SimpleType.INTEGER); 211 printArrayType(a8); 212 error += checkResult(index++, a8); 213 214 System.out.println("\nArrayType<Integer[][]> a9 = ArrayType.getArrayType(a8)"); 215 ArrayType<Integer[][]> a9 = ArrayType.getArrayType(a8); 216 printArrayType(a9); 217 error += checkResult(index++, a9); 218 219 System.out.println("\nArrayType<int[][]> a10 = ArrayType.getPrimitiveArrayType(int[][].class)"); 220 ArrayType<int[][]> a10 = ArrayType.getPrimitiveArrayType(int[][].class); 221 printArrayType(a10); 222 error += checkResult(index++, a10); 223 224 System.out.println("\nArrayType<int[][][]> a11 = ArrayType.getArrayType(a10)"); 225 ArrayType<int[][][]> a11 = ArrayType.getArrayType(a10); 226 printArrayType(a11); 227 error += checkResult(index++, a11); 228 229 System.out.println("\nArrayType<float[]> a12 = ArrayType.getPrimitiveArrayType(float[].class)"); 230 ArrayType<float[]> a12 = ArrayType.getPrimitiveArrayType(float[].class); 231 printArrayType(a12); 232 error += checkResult(index++, a12); 233 234 System.out.println("\nArrayType<float[][]> a13 = ArrayType.getArrayType(a12)"); 235 ArrayType<float[][]> a13 = ArrayType.getArrayType(a12); 236 printArrayType(a13); 237 error += checkResult(index++, a13); 238 239 System.out.println("\nArrayType<ObjectName[]> a14 = ArrayType.getArrayType(SimpleType.OBJECTNAME)"); 240 ArrayType<ObjectName[]> a14 = ArrayType.getArrayType(SimpleType.OBJECTNAME); 241 printArrayType(a14); 242 error += checkResult(index++, a14); 243 244 System.out.println("\nArrayType<ObjectName[][]> a15 = ArrayType.getArrayType(a14)"); 245 ArrayType<ObjectName[][]> a15 = ArrayType.getArrayType(a14); 246 printArrayType(a15); 247 error += checkResult(index++, a15); 248 249 System.out.println("\nArrayType<String[][][]> a16 = new ArrayType<String[][][]>(3, SimpleType.STRING)"); 250 ArrayType<String[][][]> a16 = new ArrayType<String[][][]>(3, SimpleType.STRING); 251 printArrayType(a16); 252 error += checkResult(index++, a16); 253 254 System.out.println("\nArrayType<String[]> a17 = new ArrayType<String[]>(1, SimpleType.STRING)"); 255 System.out.println("ArrayType<String[][]> a18 = new ArrayType<String[][]>(1, a17)"); 256 System.out.println("ArrayType<String[][][]> a19 = new ArrayType<String[][][]>(1, a18)"); 257 ArrayType<String[]> a17 = new ArrayType<String[]>(1, SimpleType.STRING); 258 ArrayType<String[][]> a18 = new ArrayType<String[][]>(1, a17); 259 ArrayType<String[][][]> a19 = new ArrayType<String[][][]>(1, a18); 260 printArrayType(a19); 261 error += checkResult(index++, a19); 262 263 // 264 // Serialization tests 265 // 266 System.out.println("\n>>> Serialization tests\n"); 267 268 ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class); 269 ArrayType<int[]> i2 = null; 270 271 ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class); 272 ArrayType<boolean[][]> b2 = null; 273 274 ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG); 275 ArrayType<Long[]> l2 = null; 276 277 ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE); 278 ArrayType<Double[]> d2 = null; 279 280 // serialize the objects 281 try { 282 FileOutputStream fo = new FileOutputStream("serial.tmp"); 283 ObjectOutputStream so = new ObjectOutputStream(fo); 284 System.out.println("Serialize ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)"); 285 so.writeObject(i1); 286 System.out.println("Serialize ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)"); 287 so.writeObject(b1); 288 System.out.println("Serialize ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)"); 289 so.writeObject(l1); 290 System.out.println("Serialize ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)"); 291 so.writeObject(d1); 292 so.flush(); 293 } catch (Exception e) { 294 System.out.println(e); 295 System.exit(1); 296 } 297 298 // deserialize the objects 299 try { 300 FileInputStream fi = new FileInputStream("serial.tmp"); 301 ObjectInputStream si = new ObjectInputStream(fi); 302 System.out.println("Deserialize ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)"); 303 i2 = (ArrayType<int[]>) si.readObject(); 304 System.out.println("Deserialize ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)"); 305 b2 = (ArrayType<boolean[][]>) si.readObject(); 306 System.out.println("Deserialize ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)"); 307 l2 = (ArrayType<Long[]>) si.readObject(); 308 System.out.println("Deserialize ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)"); 309 d2 = (ArrayType<Double[]>) si.readObject(); 310 } catch (Exception e) { 311 System.out.println(e); 312 System.exit(1); 313 } 314 315 if (i1.toString().equals(toStringResult[index++]) && 316 i1.toString().equals(i2.toString())) { 317 System.out.println("Test passed for ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)"); 318 } else { 319 System.out.println("Test failed for ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)"); 320 error++; 321 } 322 if (b1.toString().equals(toStringResult[index++]) && 323 b1.toString().equals(b2.toString())) { 324 System.out.println("Test passed for ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)"); 325 } else { 326 System.out.println("Test failed for ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)"); 327 error++; 328 } 329 if (l1.toString().equals(toStringResult[index++]) && 330 l1.toString().equals(l2.toString())) { 331 System.out.println("Test passed for ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)"); 332 } else { 333 System.out.println("Test failed for ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)"); 334 error++; 335 } 336 if (d1.toString().equals(toStringResult[index++]) && 337 d1.toString().equals(d2.toString())) { 338 System.out.println("Test passed for ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)"); 339 } else { 340 System.out.println("Test failed for ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)"); 341 error++; 342 } 343 344 // 345 // Test getters 346 // 347 System.out.println("\n>>> Getter tests"); 348 349 System.out.println("\nArrayType<Integer[][]> g1 = new ArrayType<Integer[][]>(2, SimpleType.INTEGER)"); 350 ArrayType<Integer[][]> g1 = new ArrayType<Integer[][]>(2, SimpleType.INTEGER); 351 printArrayType(g1); 352 error += checkGetters(g1, 353 "[[Ljava.lang.Integer;", 354 "2-dimension array of java.lang.Integer", 355 "[[Ljava.lang.Integer;", 356 true, 357 false, 358 2); 359 360 System.out.println("\nArrayType<int[][]> g2 = ArrayType.getPrimitiveArrayType(int[][].class)"); 361 ArrayType<int[][]> g2 = ArrayType.getPrimitiveArrayType(int[][].class); 362 printArrayType(g2); 363 error += checkGetters(g2, 364 "[[I", 365 "2-dimension array of int", 366 "[[I", 367 true, 368 true, 369 2); 370 371 if (error > 0) { 372 final String msg = "\nTest FAILED! Got " + error + " error(s)"; 373 System.out.println(msg); 374 throw new IllegalArgumentException(msg); 375 } else { 376 System.out.println("\nTest PASSED!"); 377 } 378 } 379 }