Wrap run-test 1940 into a CTS test

Bug: 181654106
Test: atest CtsJvmtiRunTest1940HostTestCases
Change-Id: I90943e64fdb4e14f745d2a6042f2a9bb146fecc3
diff --git a/test/1940-ddms-ext/ddm_ext.cc b/test/1940-ddms-ext/ddm_ext.cc
index 110ad64..6461bdd 100644
--- a/test/1940-ddms-ext/ddm_ext.cc
+++ b/test/1940-ddms-ext/ddm_ext.cc
@@ -21,8 +21,8 @@
 
 // Test infrastructure
 #include "jvmti_helper.h"
-#include "nativehelper/scoped_local_ref.h"
-#include "nativehelper/scoped_primitive_array.h"
+#include "scoped_local_ref.h"
+#include "scoped_primitive_array.h"
 #include "test_env.h"
 
 namespace art {
diff --git a/test/1940-ddms-ext/src-art/art/Test1940.java b/test/1940-ddms-ext/src-art/art/Test1940.java
index 605e409..7adcd4a 100644
--- a/test/1940-ddms-ext/src-art/art/Test1940.java
+++ b/test/1940-ddms-ext/src-art/art/Test1940.java
@@ -16,6 +16,7 @@
 
 package art;
 
+import java.lang.reflect.Field;
 import org.apache.harmony.dalvik.ddmc.*;
 import dalvik.system.VMDebug;
 
@@ -50,18 +51,21 @@
     }
   }
 
-  private static boolean chunkEq(Chunk a, Chunk b) {
-    return a.type == b.type &&
-           a.offset == b.offset &&
-           a.length == b.length &&
-           Arrays.equals(a.data, b.data);
+  private static boolean chunkEq(Chunk c1, Chunk c2) {
+    ChunkWrapper a = new ChunkWrapper(c1);
+    ChunkWrapper b = new ChunkWrapper(c2);
+    return a.type() == b.type() &&
+           a.offset() == b.offset() &&
+           a.length() == b.length() &&
+           Arrays.equals(a.data(), b.data());
   }
 
   private static String printChunk(Chunk k) {
-    byte[] out = new byte[k.length];
-    System.arraycopy(k.data, k.offset, out, 0, k.length);
+    ChunkWrapper c = new ChunkWrapper(k);
+    byte[] out = new byte[c.length()];
+    System.arraycopy(c.data(), c.offset(), out, 0, c.length());
     return String.format("Chunk(Type: 0x%X, Len: %d, data: %s)",
-        k.type, k.length, Arrays.toString(out));
+        c.type(), c.length(), Arrays.toString(out));
   }
 
   private static final class MyDdmHandler extends ChunkHandler {
@@ -73,7 +77,8 @@
         // For this test we will simply calculate the checksum
         ByteBuffer b = ByteBuffer.wrap(new byte[8]);
         Adler32 a = new Adler32();
-        a.update(req.data, req.offset, req.length);
+        ChunkWrapper reqWrapper = new ChunkWrapper(req);
+        a.update(reqWrapper.data(), reqWrapper.offset(), reqWrapper.length());
         b.order(ByteOrder.BIG_ENDIAN);
         long val = a.getValue();
         b.putLong(val);
@@ -92,6 +97,49 @@
     }
   }
 
+
+  /**
+   * Wrapper for accessing the hidden fields in {@link Chunk} in CTS.
+   */
+  private static class ChunkWrapper {
+    private Chunk c;
+
+    ChunkWrapper(Chunk c) {
+      this.c = c;
+    }
+
+    int type() {
+      return c.type;
+    }
+
+    int length() {
+      try {
+        Field f = Chunk.class.getField("length");
+        return (int) f.get(c);
+      } catch (NoSuchFieldException | IllegalAccessException e) {
+        throw new RuntimeException(e);
+      }
+    }
+
+    byte[] data() {
+      try {
+        Field f = Chunk.class.getField("data");
+        return (byte[]) f.get(c);
+      } catch (NoSuchFieldException | IllegalAccessException e) {
+        throw new RuntimeException(e);
+      }
+    }
+
+    int offset() {
+      try {
+        Field f = Chunk.class.getField("offset");
+        return (int) f.get(c);
+      } catch (NoSuchFieldException | IllegalAccessException e) {
+        throw new RuntimeException(e);
+      }
+    }
+  }
+
   public static final ChunkHandler SINGLE_HANDLER = new MyDdmHandler();
 
   public static DdmHandler CURRENT_HANDLER;
diff --git a/test/Android.bp b/test/Android.bp
index 5bbd45a..2b7a1ba 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -680,6 +680,7 @@
         "1932-monitor-events-misc/monitor_misc.cc",
         "1934-jvmti-signal-thread/signal_threads.cc",
         "1939-proxy-frames/local_instance.cc",
+        "1940-ddms-ext/ddm_ext.cc",
         "1941-dispose-stress/dispose_stress.cc",
         "1942-suspend-raw-monitor-exit/native_suspend_monitor.cc",
         "1943-suspend-raw-monitor-wait/native_suspend_monitor.cc",
@@ -727,7 +728,6 @@
         "936-search-onload/search_onload.cc",
         "980-redefine-object/redef_object.cc",
         "983-source-transform-verify/source_transform_art.cc",
-        "1940-ddms-ext/ddm_ext.cc",
         // "1952-pop-frame-jit/pop_frame.cc",
         "1959-redefine-object-instrument/fake_redef_object.cc",
         "1960-obsolete-jit-multithread-native/native_say_hi.cc",
@@ -1066,6 +1066,7 @@
         "1936-thread-end-events/src/art/Test1936.java",
         "1937-transform-soft-fail/src/art/Test1937.java",
         "1939-proxy-frames/src/art/Test1939.java",
+        "1940-ddms-ext/src-art/art/Test1940.java",
         "1941-dispose-stress/src/art/Test1941.java",
         "1942-suspend-raw-monitor-exit/src/art/Test1942.java",
         "1943-suspend-raw-monitor-wait/src/art/Test1943.java",
@@ -1211,6 +1212,7 @@
         "1936-thread-end-events/expected-stdout.txt",
         "1937-transform-soft-fail/expected-stdout.txt",
         "1939-proxy-frames/expected-stdout.txt",
+        "1940-ddms-ext/expected-stdout.txt",
         "1941-dispose-stress/expected-stdout.txt",
         "1942-suspend-raw-monitor-exit/expected-stdout.txt",
         "1943-suspend-raw-monitor-wait/expected-stdout.txt",