< 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 >