summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrion Hodson <oth@google.com>2017-04-24 14:54:19 +0100
committerOrion Hodson <oth@google.com>2017-04-26 09:53:16 +0100
commitdb3fb7d72b025d0c8d4922f8c24abdff0999274f (patch)
treebf0d38ac8545cd36f6d2dc27aa0c7ba7328ea152
parent468b2b3d6f7b363d176377876b7c6b14d2c89fc0 (diff)
downloadapache-harmony-db3fb7d72b025d0c8d4922f8c24abdff0999274f.tar.gz
Revert^2 "JDWP: Add test for SourceDebugExtension"
This reverts commit 3e8986f15d519fddaa46e061748fea86eeb976c1. Bug: 30109642 Bug: 37560145 Test: art/tools/run-jdwp-tests.sh --mode=host --test org.apache.harmony.jpda.tests.jdwp.ReferenceType.SourceDebugExtensionTest Test: art/tools/run-jdwp-tests.sh --mode=device --test org.apache.harmony.jpda.tests.jdwp.ReferenceType.SourceDebugExtensionTest Change-Id: Ie1036eb9c2b32f9ec234aeb5f4969a868711024e
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java143
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java42
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java2
3 files changed, 163 insertions, 24 deletions
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
index b898a25..5a04599 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
@@ -25,13 +25,154 @@
*/
package org.apache.harmony.jpda.tests.jdwp.ReferenceType;
+import java.lang.reflect.Constructor;
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Base64;
+
import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
import org.apache.harmony.jpda.tests.share.SyncDebuggee;
public class SourceDebugExtensionDebuggee extends SyncDebuggee {
+ private final static String classWithSourceDebugExtension =
+ "org.apache.harmony.jpda.tests.jdwp.Events.SourceDebugExtensionMockClass";
+
+ private final static String inMemoryDexClassLoaderClass =
+ "dalvik.system.InMemoryDexClassLoader";
+
+ /*
+ * A base64 string of a dex file built from the
+ * class packaged with apache-harmony for JSR45 testing:
+ *
+ * cd apache-harmony/jdwp/src/test/resources
+ * dx --dex --output=classes.dex \
+ * org/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass.class
+ *
+ * This simplifies dealing with multiple dex files in the Android
+ * build system and with Jack which discards the JSR45 metadata.
+ */
+ private final static String base64DexWithExtensionClass =
+"ZGV4CjAzNQAktKYbHXK+eDSBH4IRfDw2pS8X3+CKeds0BAAAcAAAAHhWNBIAAAAAAAAAAHADAAAT" +
+"AAAAcAAAAAgAAAC8AAAAAwAAANwAAAABAAAAAAEAAAQAAAAIAQAAAQAAACgBAADsAgAASAEAAKYB" +
+"AACuAQAAuwEAAOUBAAD8AQAAEAIAACQCAAA4AgAAgwIAAOkCAAANAwAAEAMAABQDAAApAwAALwMA" +
+"ADUDAAA6AwAAQwMAAEkDAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAKAAAADAAAAAoAAAAGAAAA" +
+"AAAAAAsAAAAGAAAAmAEAAAsAAAAGAAAAoAEAAAQAAQAPAAAAAQABABAAAAACAAAAAAAAAAUAAAAA" +
+"AAAABQACAA4AAAAFAAAAAQAAAAIAAAAAAAAACQAAAIgBAABiAwAAAAAAAAEAAABcAwAAAQABAAEA" +
+"AABQAwAABAAAAHAQAQAAAA4AAwABAAIAAABVAwAACAAAAGIAAAAaAQEAbiAAABAADgBIAQAAAAAA" +
+"AAAAAAAAAAAAAQAAAAMAAAABAAAABwAGPGluaXQ+AAtIZWxsbyBXb3JsZAAoTGRhbHZpay9hbm5v" +
+"dGF0aW9uL1NvdXJjZURlYnVnRXh0ZW5zaW9uOwAVTGphdmEvaW8vUHJpbnRTdHJlYW07ABJMamF2" +
+"YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwASTGphdmEvbGFuZy9TeXN0ZW07AElM" +
+"b3JnL2FwYWNoZS9oYXJtb255L2pwZGEvdGVzdHMvamR3cC9FdmVudHMvU291cmNlRGVidWdFeHRl" +
+"bnNpb25Nb2NrQ2xhc3M7AGRTTUFQCmhlbGxvd29ybGRfanNwLmphdmEKSlNQCipTIEpTUAoqRgor" +
+"IDAgaGVsbG93b3JsZC5qc3AKaGVsbG93b3JsZC5qc3AKKkwKMSw1OjUzCjY6NTgsMwo3LDQ6NjEK" +
+"KkUKACJTb3VyY2VEZWJ1Z0V4dGVuc2lvbk1vY2tDbGFzcy5qYXZhAAFWAAJWTAATW0xqYXZhL2xh" +
+"bmcvU3RyaW5nOwAEYXJncwAEbWFpbgADb3V0AAdwcmludGxuAAR0aGlzAAV2YWx1ZQADAAcOAAYB" +
+"DgcOeAACAAESFwgAAAIAAoGABNACAQnoAhAAAAAAAAAAAQAAAAAAAAABAAAAEwAAAHAAAAACAAAA" +
+"CAAAALwAAAADAAAAAwAAANwAAAAEAAAAAQAAAAABAAAFAAAABAAAAAgBAAAGAAAAAQAAACgBAAAD" +
+"EAAAAQAAAEgBAAABIAAAAgAAAFABAAAGIAAAAQAAAIgBAAABEAAAAgAAAJgBAAACIAAAEwAAAKYB" +
+"AAADIAAAAgAAAFADAAAEIAAAAQAAAFwDAAAAIAAAAQAAAGIDAAAAEAAAAQAAAHADAAA=";
+
+ /*
+ * A base64 string of a jar file containing:
+ * org/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass.class
+ */
+ private final static String base64JarWithExtensionClass =
+"UEsDBBQACAgIAAZwmUoAAAAAAAAAAAAAAAAJAAQATUVUQS1JTkYv/soAAAMAUEsHCAAAAAACAAAA" +
+"AAAAAFBLAwQUAAgICAAGcJlKAAAAAAAAAAAAAAAAFAAAAE1FVEEtSU5GL01BTklGRVNULk1G803M" +
+"y0xLLS7RDUstKs7Mz7NSMNQz4OVyLkpNLElN0XWqBAlY6BnEm5jqZuaVpBblJeYoaPgXJSbnpCo4" +
+"5xcV5BcllgD1afJy8XIBAFBLBwiUuAa1TAAAAE0AAABQSwMECgAACAAATYIRSQAAAAAAAAAAAAAA" +
+"AAQAAABvcmcvUEsDBAoAAAgAAE2CEUkAAAAAAAAAAAAAAAALAAAAb3JnL2FwYWNoZS9QSwMECgAA" +
+"CAAATYIRSQAAAAAAAAAAAAAAABMAAABvcmcvYXBhY2hlL2hhcm1vbnkvUEsDBAoAAAgAAE2CEUkA" +
+"AAAAAAAAAAAAAAAYAAAAb3JnL2FwYWNoZS9oYXJtb255L2pwZGEvUEsDBAoAAAgAAE2CEUkAAAAA" +
+"AAAAAAAAAAAeAAAAb3JnL2FwYWNoZS9oYXJtb255L2pwZGEvdGVzdHMvUEsDBAoAAAgAAE2CEUkA" +
+"AAAAAAAAAAAAAAAjAAAAb3JnL2FwYWNoZS9oYXJtb255L2pwZGEvdGVzdHMvamR3cC9QSwMECgAA" +
+"CAAAHUmYSgAAAAAAAAAAAAAAACoAAABvcmcvYXBhY2hlL2hhcm1vbnkvanBkYS90ZXN0cy9qZHdw" +
+"L0V2ZW50cy9QSwMEFAAICAgATYIRSQAAAAAAAAAAAAAAAE0AAABvcmcvYXBhY2hlL2hhcm1vbnkv" +
+"anBkYS90ZXN0cy9qZHdwL0V2ZW50cy9Tb3VyY2VEZWJ1Z0V4dGVuc2lvbk1vY2tDbGFzcy5jbGFz" +
+"c61RTW/TQBB926Rxsg20JE35Brdc0hDVRCUtShASKikfciGSUThwQBt75TjYXst2Wvqz4AASB34A" +
+"PwoxdipFoIgTe5i3M/tm9N7sz1/ffwDo4J6GFYbnKnYNEQl7Io2JiAMVnhvTyBFGKpM0MabOWWQM" +
+"TmVId0vNYls+k+OZO/iUyjDxVHii7I9HvkgSDUWGjak4FYYvQtd4M55KO2UoPfZCL33CUGjujhiK" +
+"R8qRHAVUqlhFiWHd9EL5ehaMZfxWjH3JUDOVLfyRiL0svygW04mXMLw0/5PcPo0MhBcybDXfmwvZ" +
+"Vhp7odvfHVVwBXUNtT9MWedJKoMqNtEgQ2pG/hrzZk8ZQ+pMqV+KoF/GVYa1F9L3lf5Oxb7DcR03" +
+"NdxgqC/hV3ELtxm0KCv5JKrRXKaJNIvYpTXUl0hm4HPHx162sJ1/2t/L2hk2l5GwDTKH7KzQjX6J" +
+"okaZQcgIV1vfUP6cP3OKpbxYwBrF6pxAeImwgstYv2g+zIdR7Qs2altfcW0xgBNmY8pEXAyp4A7u" +
+"5hw9j9vYIXSsk6dDPskWe5bt9cM0iXIz/JU15C1Lz+GY39cf6AvWHrH4X2nL5J12t9fd5we97qP2" +
+"Pj9sP+wddHhrwH8DUEsHCFc9MsLTAQAAIwMAAFBLAQIUABQACAgIAAZwmUoAAAAAAgAAAAAAAAAJ" +
+"AAQAAAAAAAAAAAAAAAAAAABNRVRBLUlORi/+ygAAUEsBAhQAFAAICAgABnCZSpS4BrVMAAAATQAA" +
+"ABQAAAAAAAAAAAAAAAAAPQAAAE1FVEEtSU5GL01BTklGRVNULk1GUEsBAgoACgAACAAATYIRSQAA" +
+"AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAywAAAG9yZy9QSwECCgAKAAAIAABNghFJAAAAAAAAAAAA" +
+"AAAACwAAAAAAAAAAAAAAAADtAAAAb3JnL2FwYWNoZS9QSwECCgAKAAAIAABNghFJAAAAAAAAAAAA" +
+"AAAAEwAAAAAAAAAAAAAAAAAWAQAAb3JnL2FwYWNoZS9oYXJtb255L1BLAQIKAAoAAAgAAE2CEUkA" +
+"AAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAEcBAABvcmcvYXBhY2hlL2hhcm1vbnkvanBkYS9QSwEC" +
+"CgAKAAAIAABNghFJAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAB9AQAAb3JnL2FwYWNoZS9oYXJt" +
+"b255L2pwZGEvdGVzdHMvUEsBAgoACgAACAAATYIRSQAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAA" +
+"uQEAAG9yZy9hcGFjaGUvaGFybW9ueS9qcGRhL3Rlc3RzL2pkd3AvUEsBAgoACgAACAAAHUmYSgAA" +
+"AAAAAAAAAAAAACoAAAAAAAAAAAAAAAAA+gEAAG9yZy9hcGFjaGUvaGFybW9ueS9qcGRhL3Rlc3Rz" +
+"L2pkd3AvRXZlbnRzL1BLAQIUABQACAgIAE2CEUlXPTLC0wEAACMDAABNAAAAAAAAAAAAAAAAAEIC" +
+"AABvcmcvYXBhY2hlL2hhcm1vbnkvanBkYS90ZXN0cy9qZHdwL0V2ZW50cy9Tb3VyY2VEZWJ1Z0V4" +
+"dGVuc2lvbk1vY2tDbGFzcy5jbGFzc1BLBQYAAAAACgAKAN8CAACQBAAAAAA=";
+
+ private ClassLoader getClassLoaderInitializedWithDexFile() {
+ try {
+ byte[] dexBytes = Base64.getDecoder().decode(base64DexWithExtensionClass);
+ ByteBuffer dexBuffer = ByteBuffer.wrap(dexBytes);
+ Class<?> klass = Class.forName(inMemoryDexClassLoaderClass);
+ Constructor<?> constructor = klass.getConstructor(ByteBuffer.class, ClassLoader.class);
+ return (ClassLoader) constructor.newInstance(dexBuffer,
+ ClassLoader.getSystemClassLoader());
+ } catch (Exception e) {
+ logWriter.println("--> Debuggee: Failed to instantiate " + inMemoryDexClassLoaderClass
+ + " " + e);
+ return null;
+ }
+ }
+
+ private ClassLoader getClassLoaderInitializedWithClassFile() {
+ try {
+ byte[] jarBytes = Base64.getDecoder().decode(base64JarWithExtensionClass);
+ Path jarPath = Files.createTempFile(null, "jar");
+ jarPath.toFile().deleteOnExit();
+ Files.write(jarPath, jarBytes);
+ return new URLClassLoader(new URL[] { jarPath.toUri().toURL() });
+ } catch (Exception e) {
+ logWriter.println("--> Debuggee: Failed to instantiate URLClassLoader: " + e);
+ return null;
+ }
+ }
+
@Override
public void run() {
+ ClassLoader classLoader = null;
+ if (System.getProperty("java.vendor").contains("Android")) {
+ classLoader = getClassLoaderInitializedWithDexFile();
+ } else {
+ classLoader = getClassLoaderInitializedWithClassFile();
+ }
+
+ Class<?> klass = null;
+ try {
+ klass = classLoader.loadClass(classWithSourceDebugExtension);
+ } catch (ClassNotFoundException e) {
+ logWriter.println("--> Debuggee: Could not find class " +
+ classWithSourceDebugExtension);
+ }
+
+ // Create an instance of classWithSourceDebugExtension so the
+ // SourceDebugExtension metadata can be reported back to the debugger.
+ Object o = null;
+ if (klass != null) {
+ try {
+ o = klass.getConstructor().newInstance();
+ } catch (Exception e) {
+ logWriter.println("--> Debuggee: Failed to instantiate " +
+ classWithSourceDebugExtension + ": " + e);
+ }
+ }
+
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
logWriter.println("--> Debuggee: SourceDebugExtensionDebuggee...");
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
@@ -41,4 +182,4 @@ public class SourceDebugExtensionDebuggee extends SyncDebuggee {
runDebuggee(SourceDebugExtensionDebuggee.class);
}
-} \ No newline at end of file
+}
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
index c002e08..93dbfa9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
@@ -41,7 +41,12 @@ public class SourceDebugExtensionTest extends JDWPSyncTestCase {
static final int testStatusPassed = 0;
static final int testStatusFailed = -1;
static final String thisCommandName = "ReferenceType.SourceDebugExtension command";
- static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee;";
+ static final String debuggeeSignature =
+ "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee;";
+ static final String classWithSourceDebugExtension =
+ "Lorg/apache/harmony/jpda/tests/jdwp/Events/SourceDebugExtensionMockClass;";
+ static final String expectedSourceDebugExtension = "SMAP\nhelloworld_jsp.java\nJSP\n*S JSP\n" +
+ "*F\n+ 0 helloworld.jsp\nhelloworld.jsp\n*L\n1,5:53\n6:58,3\n7,4:61\n*E\n";
@Override
protected String getDebuggeeClassName() {
@@ -50,10 +55,14 @@ public class SourceDebugExtensionTest extends JDWPSyncTestCase {
/**
* This testcase exercises ReferenceType.SourceDebugExtension command.
- * <BR>The test starts SourceDebugExtensionDebuggee class, requests referenceTypeId
- * for this class by VirtualMachine.ClassesBySignature command, then
- * performs ReferenceType.SourceDebugExtension command and checks that
- * no any unexpected ERROR is returned.
+ *
+ * <BR>The test starts a SourceDebugExtensionDebuggee instance, which instantiates a
+ * SourceDebugExtensionMockClass instance. The SourceDebugExtensionMockClass comes from a
+ * class file generated by a JSP to Java bytecode compiler. The testcase requests
+ * referenceTypeId for this class by VirtualMachine.ClassesBySignature command, then
+ * performs ReferenceType.SourceDebugExtension to get the JSR45 metadata for the
+ * class. The testcase checks that no any unexpected ERROR is returned and that
+ * the JSR45 metadata matches the expected value.
*/
public void testSourceDebugExtension001() {
String thisTestName = "testSourceDebugExtension001";
@@ -67,11 +76,9 @@ public class SourceDebugExtensionTest extends JDWPSyncTestCase {
logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": START...");
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
-
- long refTypeID = getClassIDBySignature(debuggeeSignature);
-
- logWriter.println("=> Debuggee class = " + getDebuggeeClassName());
- logWriter.println("=> referenceTypeID for Debuggee class = " + refTypeID);
+ long refTypeID = getClassIDBySignature(classWithSourceDebugExtension);
+ logWriter.println("=> Class with SourceDebugExtension = " + classWithSourceDebugExtension);
+ logWriter.println("=> referenceTypeID for class with SourceDebugExtension = " + refTypeID);
logWriter.println("=> CHECK: send " + thisCommandName + " and check reply...");
CommandPacket checkedCommand = new CommandPacket(
@@ -87,18 +94,9 @@ public class SourceDebugExtensionTest extends JDWPSyncTestCase {
switch ( errorCode ) {
case JDWPConstants.Error.NONE:
logWriter.println("=> No any ERROR is returned");
- String SourceDebugExtension = checkedReply.getNextValueAsString();
- logWriter.println("=> Returned SourceDebugExtension = " + SourceDebugExtension);
- break;
- case JDWPConstants.Error.NOT_IMPLEMENTED:
- logWriter.println("=> ERROR is returned: "+ errorCode
- + "(" + JDWPConstants.Error.getName(errorCode) + ")");
- logWriter.println("=> It is possible ERROR");
- break;
- case JDWPConstants.Error.ABSENT_INFORMATION:
- logWriter.println("=> ERROR is returned: "+ errorCode
- + "(" + JDWPConstants.Error.getName(errorCode) + ")");
- logWriter.println("=> It is possible ERROR");
+ String sourceDebugExtension = checkedReply.getNextValueAsString();
+ logWriter.println("=> Returned SourceDebugExtension = " + sourceDebugExtension);
+ assertEquals(expectedSourceDebugExtension, sourceDebugExtension);
break;
default:
logWriter.println("\n## FAILURE: " + thisCommandName + " returns unexpected ERROR = "
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java
index 1cfefb0..6432b98 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java
@@ -50,7 +50,7 @@ public class CapabilitiesNewTest extends JDWPSyncTestCase {
{"canUnrestrictedlyRedefineClasses", null},
{"canPopFrames", null},
{"canUseInstanceFilters", "true"},
- {"canGetSourceDebugExtension", null},
+ {"canGetSourceDebugExtension", "true"},
{"canRequestVMDeathEvent", null},
{"canSetDefaultStratum", null},
{"canGetInstanceInfo", "true"},