summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2020-04-27 10:00:31 -0700
committer Treehugger Robot <treehugger-gerrit@google.com> 2020-04-27 23:53:49 +0000
commit06c0d175ef915b71e31b83bc2461e1cb9f09c9e4 (patch)
treeefaa12e1c80d75534e7c786d328e28211776ba82
parent7c25b09f62eb87b72bd8a98a31ea10fd97050f82 (diff)
Fix tests 1953, 1954, 1955 and, 1956 on --jvm
These tests check the behavior of pop-frame and should run successfully on the RI. Unfortunately in the time since they were added the RI changed some of its behavior around using PopFrame with NotifyFramePopped, now crashing when this combination of behaviors is exercised. Make the test skip these cases when running on RI. Bug: 154802847 Test: ./test/run-test --host --jvm 1953 Change-Id: Ia375cc9d13ca67a9512aa1b279fbcff1ec2feeec
-rw-r--r--test/1953-pop-frame/class-loading-expected.patch17
-rw-r--r--test/1953-pop-frame/expected.txt14
-rw-r--r--test/1953-pop-frame/src/art/Test1953.java44
-rw-r--r--test/1954-pop-frame-jit/jvm-expected.patch17
-rw-r--r--test/1955-pop-frame-jit-called/jvm-expected.patch17
-rw-r--r--test/1956-pop-frame-jit-calling/jvm-expected.patch17
-rw-r--r--test/knownfailures.json4
7 files changed, 89 insertions, 41 deletions
diff --git a/test/1953-pop-frame/class-loading-expected.patch b/test/1953-pop-frame/class-loading-expected.patch
index 2edef15dfd..1a5eda7fd6 100644
--- a/test/1953-pop-frame/class-loading-expected.patch
+++ b/test/1953-pop-frame/class-loading-expected.patch
@@ -1,4 +1,19 @@
-74a75,94
+36a37,50
+> Test stopped during notifyFramePop without exception on pop of calledFunction
+> Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+> result is StandardTestObject { cnt: 2 } base-call count: 1
+> Test stopped during notifyFramePop without exception on pop of doNothing
+> Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+> result is StandardTestObject { cnt: 1 } base-call count: 1
+> Test stopped during notifyFramePop with exception on pop of calledFunction
+> Single call with PopFrame on ExceptionThrowTestObject { cnt: 0 } base-call-count: 0
+> art.Test1953$ExceptionThrowTestObject$TestError thrown and caught!
+> result is ExceptionThrowTestObject { cnt: 2 } base-call count: 1
+> Test stopped during notifyFramePop with exception on pop of doThrow
+> Single call with PopFrame on ExceptionCatchTestObject { cnt: 0 } base-call-count: 0
+> art.Test1953$ExceptionCatchTestObject$TestError caught in called function.
+> result is ExceptionCatchTestObject { cnt: 1 } base-call count: 1
+60a75,94
> Test stopped during a ClassLoad event.
> Single call with PopFrame on ClassLoadObject { cnt: 0, curClass: 0} base-call-count: 0
> Failed to pop frame due to java.lang.RuntimeException: JVMTI_ERROR_OPAQUE_FRAME
diff --git a/test/1953-pop-frame/expected.txt b/test/1953-pop-frame/expected.txt
index 079768d4e9..dafc6b4c92 100644
--- a/test/1953-pop-frame/expected.txt
+++ b/test/1953-pop-frame/expected.txt
@@ -34,20 +34,6 @@ result is ExceptionOnceObject { cnt: 2, throwInSub: false } base-call count: 1
Test stopped during Method Exit due to exception thrown in subroutine
Single call with PopFrame on ExceptionOnceObject { cnt: 0, throwInSub: true } base-call-count: 0
result is ExceptionOnceObject { cnt: 2, throwInSub: true } base-call count: 1
-Test stopped during notifyFramePop without exception on pop of calledFunction
-Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
-result is StandardTestObject { cnt: 2 } base-call count: 1
-Test stopped during notifyFramePop without exception on pop of doNothing
-Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
-result is StandardTestObject { cnt: 1 } base-call count: 1
-Test stopped during notifyFramePop with exception on pop of calledFunction
-Single call with PopFrame on ExceptionThrowTestObject { cnt: 0 } base-call-count: 0
-art.Test1953$ExceptionThrowTestObject$TestError thrown and caught!
-result is ExceptionThrowTestObject { cnt: 2 } base-call count: 1
-Test stopped during notifyFramePop with exception on pop of doThrow
-Single call with PopFrame on ExceptionCatchTestObject { cnt: 0 } base-call-count: 0
-art.Test1953$ExceptionCatchTestObject$TestError caught in called function.
-result is ExceptionCatchTestObject { cnt: 1 } base-call count: 1
Test stopped during ExceptionCatch event of calledFunction (catch in called function, throw in called function)
Single call with PopFrame on ExceptionThrowTestObject { cnt: 0 } base-call-count: 0
art.Test1953$ExceptionThrowTestObject$TestError caught in same function.
diff --git a/test/1953-pop-frame/src/art/Test1953.java b/test/1953-pop-frame/src/art/Test1953.java
index ff41d24557..366809e362 100644
--- a/test/1953-pop-frame/src/art/Test1953.java
+++ b/test/1953-pop-frame/src/art/Test1953.java
@@ -37,6 +37,7 @@ import static art.SuspendEvents.EVENT_TYPE_CLASS_PREPARE;
import static art.SuspendEvents.setupSuspendClassEvent;
public class Test1953 {
+ private static boolean IS_ART = System.getProperty("java.vm.name").equals("Dalvik");
public final boolean canRunClassLoadTests;
public static void doNothing() {}
@@ -801,29 +802,34 @@ public class Test1953 {
(thr) -> setupSuspendMethodEvent(exceptionOnceCalledMethod, /*enter*/ false, thr),
SuspendEvents::clearSuspendMethodEvent);
- System.out.println("Test stopped during notifyFramePop without exception on pop of calledFunction");
- runTestOn(new StandardTestObject(false),
- (thr) -> setupSuspendPopFrameEvent(1, doNothingMethod, thr),
- SuspendEvents::clearSuspendPopFrameEvent);
-
- System.out.println("Test stopped during notifyFramePop without exception on pop of doNothing");
- runTestOn(new StandardTestObject(false),
- (thr) -> setupSuspendPopFrameEvent(0, doNothingMethod, thr),
- SuspendEvents::clearSuspendPopFrameEvent);
-
final Method exceptionThrowCalledMethod =
ExceptionThrowTestObject.class.getDeclaredMethod("calledFunction");
- System.out.println("Test stopped during notifyFramePop with exception on pop of calledFunction");
- runTestOn(new ExceptionThrowTestObject(false),
- (thr) -> setupSuspendPopFrameEvent(0, exceptionThrowCalledMethod, thr),
- SuspendEvents::clearSuspendPopFrameEvent);
-
final Method exceptionCatchThrowMethod =
ExceptionCatchTestObject.class.getDeclaredMethod("doThrow");
- System.out.println("Test stopped during notifyFramePop with exception on pop of doThrow");
- runTestOn(new ExceptionCatchTestObject(),
- (thr) -> setupSuspendPopFrameEvent(0, exceptionCatchThrowMethod, thr),
- SuspendEvents::clearSuspendPopFrameEvent);
+ // Disable more often then we technically need to in order to avoid the need
+ // for a huge number of possible results and allow the test to be easily
+ // used in CTS.
+ if (IS_ART && canRunClassLoadTests && CanRunClassLoadingTests()) {
+ System.out.println("Test stopped during notifyFramePop without exception on pop of calledFunction");
+ runTestOn(new StandardTestObject(false),
+ (thr) -> setupSuspendPopFrameEvent(1, doNothingMethod, thr),
+ SuspendEvents::clearSuspendPopFrameEvent);
+
+ System.out.println("Test stopped during notifyFramePop without exception on pop of doNothing");
+ runTestOn(new StandardTestObject(false),
+ (thr) -> setupSuspendPopFrameEvent(0, doNothingMethod, thr),
+ SuspendEvents::clearSuspendPopFrameEvent);
+
+ System.out.println("Test stopped during notifyFramePop with exception on pop of calledFunction");
+ runTestOn(new ExceptionThrowTestObject(false),
+ (thr) -> setupSuspendPopFrameEvent(0, exceptionThrowCalledMethod, thr),
+ SuspendEvents::clearSuspendPopFrameEvent);
+
+ System.out.println("Test stopped during notifyFramePop with exception on pop of doThrow");
+ runTestOn(new ExceptionCatchTestObject(),
+ (thr) -> setupSuspendPopFrameEvent(0, exceptionCatchThrowMethod, thr),
+ SuspendEvents::clearSuspendPopFrameEvent);
+ }
System.out.println("Test stopped during ExceptionCatch event of calledFunction " +
"(catch in called function, throw in called function)");
diff --git a/test/1954-pop-frame-jit/jvm-expected.patch b/test/1954-pop-frame-jit/jvm-expected.patch
index 718f8ad839..6539d56b27 100644
--- a/test/1954-pop-frame-jit/jvm-expected.patch
+++ b/test/1954-pop-frame-jit/jvm-expected.patch
@@ -1,4 +1,19 @@
-75,94d74
+37,50d36
+< Test stopped during notifyFramePop without exception on pop of calledFunction
+< Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+< result is StandardTestObject { cnt: 2 } base-call count: 1
+< Test stopped during notifyFramePop without exception on pop of doNothing
+< Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+< result is StandardTestObject { cnt: 1 } base-call count: 1
+< Test stopped during notifyFramePop with exception on pop of calledFunction
+< Single call with PopFrame on ExceptionThrowTestObject { cnt: 0 } base-call-count: 0
+< art.Test1953$ExceptionThrowTestObject$TestError thrown and caught!
+< result is ExceptionThrowTestObject { cnt: 2 } base-call count: 1
+< Test stopped during notifyFramePop with exception on pop of doThrow
+< Single call with PopFrame on ExceptionCatchTestObject { cnt: 0 } base-call-count: 0
+< art.Test1953$ExceptionCatchTestObject$TestError caught in called function.
+< result is ExceptionCatchTestObject { cnt: 1 } base-call count: 1
+75,94d60
< Test stopped during a ClassLoad event.
< Single call with PopFrame on ClassLoadObject { cnt: 0, curClass: 0} base-call-count: 0
< Failed to pop frame due to java.lang.RuntimeException: JVMTI_ERROR_OPAQUE_FRAME
diff --git a/test/1955-pop-frame-jit-called/jvm-expected.patch b/test/1955-pop-frame-jit-called/jvm-expected.patch
index 718f8ad839..6539d56b27 100644
--- a/test/1955-pop-frame-jit-called/jvm-expected.patch
+++ b/test/1955-pop-frame-jit-called/jvm-expected.patch
@@ -1,4 +1,19 @@
-75,94d74
+37,50d36
+< Test stopped during notifyFramePop without exception on pop of calledFunction
+< Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+< result is StandardTestObject { cnt: 2 } base-call count: 1
+< Test stopped during notifyFramePop without exception on pop of doNothing
+< Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+< result is StandardTestObject { cnt: 1 } base-call count: 1
+< Test stopped during notifyFramePop with exception on pop of calledFunction
+< Single call with PopFrame on ExceptionThrowTestObject { cnt: 0 } base-call-count: 0
+< art.Test1953$ExceptionThrowTestObject$TestError thrown and caught!
+< result is ExceptionThrowTestObject { cnt: 2 } base-call count: 1
+< Test stopped during notifyFramePop with exception on pop of doThrow
+< Single call with PopFrame on ExceptionCatchTestObject { cnt: 0 } base-call-count: 0
+< art.Test1953$ExceptionCatchTestObject$TestError caught in called function.
+< result is ExceptionCatchTestObject { cnt: 1 } base-call count: 1
+75,94d60
< Test stopped during a ClassLoad event.
< Single call with PopFrame on ClassLoadObject { cnt: 0, curClass: 0} base-call-count: 0
< Failed to pop frame due to java.lang.RuntimeException: JVMTI_ERROR_OPAQUE_FRAME
diff --git a/test/1956-pop-frame-jit-calling/jvm-expected.patch b/test/1956-pop-frame-jit-calling/jvm-expected.patch
index 718f8ad839..6539d56b27 100644
--- a/test/1956-pop-frame-jit-calling/jvm-expected.patch
+++ b/test/1956-pop-frame-jit-calling/jvm-expected.patch
@@ -1,4 +1,19 @@
-75,94d74
+37,50d36
+< Test stopped during notifyFramePop without exception on pop of calledFunction
+< Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+< result is StandardTestObject { cnt: 2 } base-call count: 1
+< Test stopped during notifyFramePop without exception on pop of doNothing
+< Single call with PopFrame on StandardTestObject { cnt: 0 } base-call-count: 0
+< result is StandardTestObject { cnt: 1 } base-call count: 1
+< Test stopped during notifyFramePop with exception on pop of calledFunction
+< Single call with PopFrame on ExceptionThrowTestObject { cnt: 0 } base-call-count: 0
+< art.Test1953$ExceptionThrowTestObject$TestError thrown and caught!
+< result is ExceptionThrowTestObject { cnt: 2 } base-call count: 1
+< Test stopped during notifyFramePop with exception on pop of doThrow
+< Single call with PopFrame on ExceptionCatchTestObject { cnt: 0 } base-call-count: 0
+< art.Test1953$ExceptionCatchTestObject$TestError caught in called function.
+< result is ExceptionCatchTestObject { cnt: 1 } base-call count: 1
+75,94d60
< Test stopped during a ClassLoad event.
< Single call with PopFrame on ClassLoadObject { cnt: 0, curClass: 0} base-call-count: 0
< Failed to pop frame due to java.lang.RuntimeException: JVMTI_ERROR_OPAQUE_FRAME
diff --git a/test/knownfailures.json b/test/knownfailures.json
index 722f866cb8..09f5cdcc40 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -1386,10 +1386,6 @@
"960-default-smali",
"966-default-conflict",
"990-field-trace",
- "1953-pop-frame",
- "1954-pop-frame-jit",
- "1955-pop-frame-jit-called",
- "1956-pop-frame-jit-calling",
"2009-structural-local-ref",
"2011-stack-walk-concurrent-instrument",
"2012-structural-redefinition-failures-jni-id",