< prev index next >
test/jdk/java/lang/management/CompositeData/ThreadInfoCompositeData.java
Print this page
@@ -27,12 +27,13 @@
* @summary Test ThreadInfo.from to return a valid
* ThreadInfo object. Or throw exception if
* the input CompositeData is invalid.
* @author Mandy Chung
*
+ * @modules java.management/sun.management
* @build ThreadInfoCompositeData OpenTypeConverter
- * @run main ThreadInfoCompositeData
+ * @run testng/othervm ThreadInfoCompositeData
*/
import javax.management.openmbean.*;
import java.lang.management.LockInfo;
@@ -40,45 +41,32 @@
import java.lang.management.ThreadInfo;
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Stream;
+import org.testng.annotations.Test;
+import static org.testng.Assert.*;
+
public class ThreadInfoCompositeData {
private static String lockClassName = "myClass";
private static int lockIdentityHashCode = 123456;
private static String lockName = lockClassName + '@' +
Integer.toHexString(lockIdentityHashCode);
private static LockInfo lockInfo =
new LockInfo(lockClassName, lockIdentityHashCode);
- public static void main(String[] argv) throws Exception {
- // A valid CompositeData is passed to ThreadInfo
- createGoodCompositeData();
- // A valid CompositeData for JDK 5 ThreadInfo
- // is passed to ThreadInfo
- createV5ThreadInfo();
- // ThreadInfo of version N can accept lockedMonitors of version >= N
- withNewMonitorInfoCompositeData();
-
- // An invalid CompositeData is passed to ThreadInfo.from()
- badNameCompositeData();
- badTypeCompositeData();
- badMissingCompositeData();
- withV5StackTraceCompositeData();
- withInvalidMonitorInfoCompositeData();
- System.out.println("Test passed");
- }
-
+ @Test
public static void createGoodCompositeData() throws Exception {
CompositeData cd = Factory.makeThreadInfoCompositeData();
ThreadInfo info = ThreadInfo.from(cd);
checkThreadInfo(info);
}
/*
* An invalid CompositeData with JDK 9 attributes but missing JDK 6 attributes
*/
+ @Test
public static void badMissingCompositeData() throws Exception {
CompositeData cd = Factory.makeCompositeDataMissingV6();
try {
ThreadInfo info = ThreadInfo.from(cd);
throw new RuntimeException("IllegalArgumentException not thrown");
@@ -90,10 +78,11 @@
/*
* Current version of ThreadInfo but an older version of StackTraceElement
*/
+ @Test
public static void withV5StackTraceCompositeData() throws Exception {
CompositeData cd = Factory.makeThreadInfoWithV5StackTrace();
try {
ThreadInfo info = ThreadInfo.from(cd);
throw new RuntimeException("IllegalArgumentException not thrown");
@@ -102,10 +91,11 @@
/*
* Current version of ThreadInfo but an older version of MonitorInfo
* and the value of "lockedStackFrame" attribute is null.
*/
+ @Test
public static void withInvalidMonitorInfoCompositeData() throws Exception {
CompositeData cd = Factory.makeThreadInfoWithIncompatibleMonitorInfo();
// verify MonitorInfo is valid
CompositeData[] monitors = (CompositeData[])cd.get("lockedMonitors");
@@ -126,25 +116,39 @@
}
/*
* ThreadInfo of version N can accept lockedMonitors of version >= N
*/
+ @Test
public static void withNewMonitorInfoCompositeData() throws Exception {
CompositeData cd = Factory.makeThreadInfoWithNewMonitorInfo();
ThreadInfo info = ThreadInfo.from(cd);
checkThreadInfo(info);
}
/*
* Test CompositeData representing JDK 5 ThreadInfo
*/
+ @Test
public static void createV5ThreadInfo() throws Exception {
CompositeData cd = Factory.makeThreadInfoV5CompositeData();
ThreadInfo info = ThreadInfo.from(cd);
checkThreadInfoV5(info);
}
+ /*
+ * Test ThreadInfoCompositeData.toCompositeData
+ */
+ @Test
+ public static void internalToCompositeData() throws Exception {
+ CompositeData cd = Factory.makeThreadInfoCompositeData();
+ ThreadInfo info = ThreadInfo.from(cd);
+ cd = sun.management.ThreadInfoCompositeData.toCompositeData(info);
+ info = ThreadInfo.from(cd);
+ checkThreadInfo(info);
+ }
+
static void checkThreadInfoV5(ThreadInfo info) {
Object[] values = Factory.VALUES;
if (info.getThreadId() != ((Long) values[THREAD_ID]).longValue()) {
throw new RuntimeException("Thread Id = " + info.getThreadId() +
@@ -260,18 +264,20 @@
li.getIdentityHashCode() + " expected = " +
lockInfo.getIdentityHashCode());
}
}
+ @Test
public static void badNameCompositeData() throws Exception {
CompositeData cd = Factory.makeCompositeDataWithBadNames();
try {
ThreadInfo info = ThreadInfo.from(cd);
throw new RuntimeException("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) { }
}
+ @Test
public static void badTypeCompositeData() throws Exception {
CompositeData cd = Factory.makeCompositeDataWithBadTypes();
try {
ThreadInfo info = ThreadInfo.from(cd);
@@ -298,11 +304,11 @@
private static final int LOCKED_SYNCS = 15;
// JDK 9 ThreadInfo attributes
private static final int DAEMON = 16;
private static final int PRIORITY = 17;
- static class Factory {
+ private static class Factory {
static final CompositeType STE_COMPOSITE_TYPE;
static final CompositeType LOCK_INFO_COMPOSITE_TYPE;
static final CompositeType MONITOR_INFO_COMPOSITE_TYPE;
static final ArrayType STE_ARRAY_COMPOSITE_TYPE;
< prev index next >