blob: 352a8e69c3dce3e3c45dd559d31ea3ae620380f7 [file] [log] [blame]
/*
* Copyright (c) 2005, 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 5045358
* @summary Test that Open MBeans support arrays of primitive types.
* @author Luis-Miguel Alventosa
* @run clean ArrayTypeTest
* @run build ArrayTypeTest
* @run main ArrayTypeTest
*/
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.management.ObjectName;
import javax.management.openmbean.ArrayType;
import javax.management.openmbean.OpenDataException;
import javax.management.openmbean.SimpleType;
public class ArrayTypeTest {
private static final String toStringResult[] = {
"javax.management.openmbean.ArrayType(name=[[Ljava.lang.String;,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[I,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[Ljava.lang.Integer;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[[[[I,dimension=4,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[[[[Ljava.lang.Integer;,dimension=4,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[Ljava.lang.String;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)",
"OpenDataException",
"javax.management.openmbean.ArrayType(name=[Ljava.lang.Integer;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[[Ljava.lang.Integer;,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[[I,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[[[I,dimension=3,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[F,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Float),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[[F,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Float),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[Ljavax.management.ObjectName;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=javax.management.ObjectName),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[[Ljavax.management.ObjectName;,dimension=2,elementType=javax.management.openmbean.SimpleType(name=javax.management.ObjectName),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[[[Ljava.lang.String;,dimension=3,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[[[Ljava.lang.String;,dimension=3,elementType=javax.management.openmbean.SimpleType(name=java.lang.String),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[I,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Integer),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[[Z,dimension=2,elementType=javax.management.openmbean.SimpleType(name=java.lang.Boolean),primitiveArray=true)",
"javax.management.openmbean.ArrayType(name=[Ljava.lang.Long;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Long),primitiveArray=false)",
"javax.management.openmbean.ArrayType(name=[Ljava.lang.Double;,dimension=1,elementType=javax.management.openmbean.SimpleType(name=java.lang.Double),primitiveArray=false)",
};
private static int checkResult(int i, ArrayType a) {
if (a.toString().equals(toStringResult[i])) {
System.out.println("Test passed!");
return 0;
} else {
System.out.println("Test failed!");
return 1;
}
}
private static int checkGetters(ArrayType a,
String className,
String description,
String typeName,
boolean isArray,
boolean isPrimitiveArray,
int dimension) {
int error = 0;
if (a.getClassName().equals(className)) {
System.out.println("\tArrayType.getClassName() OK!");
} else {
System.out.println("\tArrayType.getClassName() KO!");
System.out.println("\t\t---> expecting " + className);
error++;
}
if (a.getDescription().equals(description)) {
System.out.println("\tArrayType.getDescription() OK!");
} else {
System.out.println("\tArrayType.getDescription() KO!");
System.out.println("\t\t---> expecting " + description);
error++;
}
if (a.getTypeName().equals(typeName)) {
System.out.println("\tArrayType.getTypeName() OK!");
} else {
System.out.println("\tArrayType.getTypeName() KO!");
System.out.println("\t\t---> expecting " + typeName);
error++;
}
if (a.isArray() == isArray) {
System.out.println("\tArrayType.isArray() OK!");
} else {
System.out.println("\tArrayType.isArray() KO!");
System.out.println("\t\t---> expecting " + isArray);
error++;
}
if (a.isPrimitiveArray() == isPrimitiveArray) {
System.out.println("\tArrayType.isPrimitiveArray() OK!");
} else {
System.out.println("\tArrayType.isPrimitiveArray() KO!");
System.out.println("\t\t---> expecting " + isPrimitiveArray);
error++;
}
if (a.getDimension() == dimension) {
System.out.println("\tArrayType.getDimension() OK!");
} else {
System.out.println("\tArrayType.getDimension() KO!");
System.out.println("\t\t---> expecting " + dimension);
error++;
}
if (error > 0) {
System.out.println("Test failed!");
return 1;
} else {
System.out.println("Test passed!");
return 0;
}
}
private static void printArrayType(ArrayType a) {
System.out.println("\tArrayType.getClassName() = " + a.getClassName());
System.out.println("\tArrayType.getDescription() = " + a.getDescription());
System.out.println("\tArrayType.getTypeName() = " + a.getTypeName());
System.out.println("\tArrayType.isArray() = " + a.isArray());
System.out.println("\tArrayType.isPrimitiveArray() = " + a.isPrimitiveArray());
System.out.println("\tArrayType.getDimension() = " + a.getDimension());
}
public static void main(String[] args) throws Exception {
System.out.println("\nTest that Open MBeans support arrays of primitive types.");
int index = 0;
int error = 0;
//
// Constructor tests
//
System.out.println("\n>>> Constructor tests");
System.out.println("\nArrayType<String[][]> a1 = new ArrayType<String[][]>(2, SimpleType.STRING)");
ArrayType<String[][]> a1 = new ArrayType<String[][]>(2, SimpleType.STRING);
printArrayType(a1);
error += checkResult(index++, a1);
System.out.println("\nArrayType<int[]> a2 = new ArrayType<int[]>(SimpleType.INTEGER, true)");
ArrayType<int[]> a2 = new ArrayType<int[]>(SimpleType.INTEGER, true);
printArrayType(a2);
error += checkResult(index++, a2);
System.out.println("\nArrayType<Integer[]> a3 = new ArrayType<Integer[]>(SimpleType.INTEGER, false)");
ArrayType<Integer[]> a3 = new ArrayType<Integer[]>(SimpleType.INTEGER, false);
printArrayType(a3);
error += checkResult(index++, a3);
System.out.println("\nArrayType<int[][][][]> a4 = new ArrayType<int[][][][]>(3, a2)");
ArrayType<int[][][][]> a4 = new ArrayType<int[][][][]>(3, a2);
printArrayType(a4);
error += checkResult(index++, a4);
System.out.println("\nArrayType<Integer[][][][]> a5 = new ArrayType<Integer[][][][]>(3, a3)");
ArrayType<Integer[][][][]> a5 = new ArrayType<Integer[][][][]>(3, a3);
printArrayType(a5);
error += checkResult(index++, a5);
System.out.println("\nArrayType<String[]> a6 = new ArrayType<String[]>(SimpleType.STRING, false)");
ArrayType<String[]> a6 = new ArrayType<String[]>(SimpleType.STRING, false);
printArrayType(a6);
error += checkResult(index++, a6);
System.out.println("\nArrayType<String[]> a7 = new ArrayType<String[]>(SimpleType.STRING, true)");
index++; // skip this dummy entry in the toStringResult array
try {
ArrayType<String[]> a7 =
new ArrayType<String[]>(SimpleType.STRING, true);
System.out.println("\tDid not get expected OpenDataException!");
System.out.println("Test failed!");
error++;
} catch (OpenDataException e) {
System.out.println("\tGot expected OpenDataException: " + e);
System.out.println("Test passed!");
}
//
// Factory tests
//
System.out.println("\n>>> Factory tests");
System.out.println("\nArrayType<Integer[]> a8 = ArrayType.getArrayType(SimpleType.INTEGER)");
ArrayType<Integer[]> a8 = ArrayType.getArrayType(SimpleType.INTEGER);
printArrayType(a8);
error += checkResult(index++, a8);
System.out.println("\nArrayType<Integer[][]> a9 = ArrayType.getArrayType(a8)");
ArrayType<Integer[][]> a9 = ArrayType.getArrayType(a8);
printArrayType(a9);
error += checkResult(index++, a9);
System.out.println("\nArrayType<int[][]> a10 = ArrayType.getPrimitiveArrayType(int[][].class)");
ArrayType<int[][]> a10 = ArrayType.getPrimitiveArrayType(int[][].class);
printArrayType(a10);
error += checkResult(index++, a10);
System.out.println("\nArrayType<int[][][]> a11 = ArrayType.getArrayType(a10)");
ArrayType<int[][][]> a11 = ArrayType.getArrayType(a10);
printArrayType(a11);
error += checkResult(index++, a11);
System.out.println("\nArrayType<float[]> a12 = ArrayType.getPrimitiveArrayType(float[].class)");
ArrayType<float[]> a12 = ArrayType.getPrimitiveArrayType(float[].class);
printArrayType(a12);
error += checkResult(index++, a12);
System.out.println("\nArrayType<float[][]> a13 = ArrayType.getArrayType(a12)");
ArrayType<float[][]> a13 = ArrayType.getArrayType(a12);
printArrayType(a13);
error += checkResult(index++, a13);
System.out.println("\nArrayType<ObjectName[]> a14 = ArrayType.getArrayType(SimpleType.OBJECTNAME)");
ArrayType<ObjectName[]> a14 = ArrayType.getArrayType(SimpleType.OBJECTNAME);
printArrayType(a14);
error += checkResult(index++, a14);
System.out.println("\nArrayType<ObjectName[][]> a15 = ArrayType.getArrayType(a14)");
ArrayType<ObjectName[][]> a15 = ArrayType.getArrayType(a14);
printArrayType(a15);
error += checkResult(index++, a15);
System.out.println("\nArrayType<String[][][]> a16 = new ArrayType<String[][][]>(3, SimpleType.STRING)");
ArrayType<String[][][]> a16 = new ArrayType<String[][][]>(3, SimpleType.STRING);
printArrayType(a16);
error += checkResult(index++, a16);
System.out.println("\nArrayType<String[]> a17 = new ArrayType<String[]>(1, SimpleType.STRING)");
System.out.println("ArrayType<String[][]> a18 = new ArrayType<String[][]>(1, a17)");
System.out.println("ArrayType<String[][][]> a19 = new ArrayType<String[][][]>(1, a18)");
ArrayType<String[]> a17 = new ArrayType<String[]>(1, SimpleType.STRING);
ArrayType<String[][]> a18 = new ArrayType<String[][]>(1, a17);
ArrayType<String[][][]> a19 = new ArrayType<String[][][]>(1, a18);
printArrayType(a19);
error += checkResult(index++, a19);
//
// Serialization tests
//
System.out.println("\n>>> Serialization tests\n");
ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class);
ArrayType<int[]> i2 = null;
ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class);
ArrayType<boolean[][]> b2 = null;
ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG);
ArrayType<Long[]> l2 = null;
ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE);
ArrayType<Double[]> d2 = null;
// serialize the objects
try {
FileOutputStream fo = new FileOutputStream("serial.tmp");
ObjectOutputStream so = new ObjectOutputStream(fo);
System.out.println("Serialize ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)");
so.writeObject(i1);
System.out.println("Serialize ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)");
so.writeObject(b1);
System.out.println("Serialize ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)");
so.writeObject(l1);
System.out.println("Serialize ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)");
so.writeObject(d1);
so.flush();
} catch (Exception e) {
System.out.println(e);
System.exit(1);
}
// deserialize the objects
try {
FileInputStream fi = new FileInputStream("serial.tmp");
ObjectInputStream si = new ObjectInputStream(fi);
System.out.println("Deserialize ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)");
i2 = (ArrayType<int[]>) si.readObject();
System.out.println("Deserialize ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)");
b2 = (ArrayType<boolean[][]>) si.readObject();
System.out.println("Deserialize ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)");
l2 = (ArrayType<Long[]>) si.readObject();
System.out.println("Deserialize ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)");
d2 = (ArrayType<Double[]>) si.readObject();
} catch (Exception e) {
System.out.println(e);
System.exit(1);
}
if (i1.toString().equals(toStringResult[index++]) &&
i1.toString().equals(i2.toString())) {
System.out.println("Test passed for ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)");
} else {
System.out.println("Test failed for ArrayType<int[]> i1 = ArrayType.getPrimitiveArrayType(int[].class)");
error++;
}
if (b1.toString().equals(toStringResult[index++]) &&
b1.toString().equals(b2.toString())) {
System.out.println("Test passed for ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)");
} else {
System.out.println("Test failed for ArrayType<boolean[][]> b1 = ArrayType.getPrimitiveArrayType(boolean[][].class)");
error++;
}
if (l1.toString().equals(toStringResult[index++]) &&
l1.toString().equals(l2.toString())) {
System.out.println("Test passed for ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)");
} else {
System.out.println("Test failed for ArrayType<Long[]> l1 = ArrayType.getArrayType(SimpleType.LONG)");
error++;
}
if (d1.toString().equals(toStringResult[index++]) &&
d1.toString().equals(d2.toString())) {
System.out.println("Test passed for ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)");
} else {
System.out.println("Test failed for ArrayType<Double[]> d1 = ArrayType.getArrayType(SimpleType.DOUBLE)");
error++;
}
//
// Test getters
//
System.out.println("\n>>> Getter tests");
System.out.println("\nArrayType<Integer[][]> g1 = new ArrayType<Integer[][]>(2, SimpleType.INTEGER)");
ArrayType<Integer[][]> g1 = new ArrayType<Integer[][]>(2, SimpleType.INTEGER);
printArrayType(g1);
error += checkGetters(g1,
"[[Ljava.lang.Integer;",
"2-dimension array of java.lang.Integer",
"[[Ljava.lang.Integer;",
true,
false,
2);
System.out.println("\nArrayType<int[][]> g2 = ArrayType.getPrimitiveArrayType(int[][].class)");
ArrayType<int[][]> g2 = ArrayType.getPrimitiveArrayType(int[][].class);
printArrayType(g2);
error += checkGetters(g2,
"[[I",
"2-dimension array of int",
"[[I",
true,
true,
2);
if (error > 0) {
final String msg = "\nTest FAILED! Got " + error + " error(s)";
System.out.println(msg);
throw new IllegalArgumentException(msg);
} else {
System.out.println("\nTest PASSED!");
}
}
}