aboutsummaryrefslogtreecommitdiff
path: root/test/java/lang
diff options
context:
space:
mode:
authorsspitsyn <none@none>2015-04-08 14:02:29 -0700
committersspitsyn <none@none>2015-04-08 14:02:29 -0700
commit45079c750674bbd069b85026f416ce21b2ebb733 (patch)
treeca10934a34f3e5a95768d27692e60bb907e3daea /test/java/lang
parent6b804b9312e94203329ee14d368eba178fbe7ce3 (diff)
downloadjdk8u_jdk-45079c750674bbd069b85026f416ce21b2ebb733.tar.gz
8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
Summary: update java/lang/instrument/RedefineMethodInBacktrace.sh test to cover the hotspot fix Reviewed-by: coleenp, dcubed
Diffstat (limited to 'test/java/lang')
-rw-r--r--test/java/lang/instrument/RedefineMethodInBacktrace.sh4
-rw-r--r--test/java/lang/instrument/RedefineMethodInBacktraceApp.java58
-rw-r--r--test/java/lang/instrument/RedefineMethodInBacktraceTarget.java11
-rw-r--r--test/java/lang/instrument/RedefineMethodInBacktraceTargetB.java14
-rw-r--r--test/java/lang/instrument/RedefineMethodInBacktraceTargetB_2.java5
-rw-r--r--test/java/lang/instrument/RedefineMethodInBacktraceTarget_2.java6
6 files changed, 86 insertions, 12 deletions
diff --git a/test/java/lang/instrument/RedefineMethodInBacktrace.sh b/test/java/lang/instrument/RedefineMethodInBacktrace.sh
index 4ebaaa8e73..b61fe48f36 100644
--- a/test/java/lang/instrument/RedefineMethodInBacktrace.sh
+++ b/test/java/lang/instrument/RedefineMethodInBacktrace.sh
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -77,7 +77,7 @@ fi
cat output.log
-MESG="Exception"
+MESG="Test failed"
grep "$MESG" output.log
result=$?
if [ "$result" = 0 ]; then
diff --git a/test/java/lang/instrument/RedefineMethodInBacktraceApp.java b/test/java/lang/instrument/RedefineMethodInBacktraceApp.java
index 7f7ddbf19b..7c363c3953 100644
--- a/test/java/lang/instrument/RedefineMethodInBacktraceApp.java
+++ b/test/java/lang/instrument/RedefineMethodInBacktraceApp.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -46,12 +46,15 @@ import sun.management.ManagementFactoryHelper;
* could be freed, since class redefinition didn't know about the backtraces.
*/
public class RedefineMethodInBacktraceApp {
+ static boolean failed = false;
+
public static void main(String args[]) throws Exception {
System.out.println("Hello from RedefineMethodInBacktraceApp!");
-
new RedefineMethodInBacktraceApp().doTest();
- System.exit(0);
+ if (failed) {
+ throw new Exception("ERROR: RedefineMethodInBacktraceApp failed.");
+ }
}
public static CountDownLatch stop = new CountDownLatch(1);
@@ -63,13 +66,18 @@ public class RedefineMethodInBacktraceApp {
}
private void doMethodInBacktraceTest() throws Exception {
- Throwable t = getThrowableFromMethodToRedefine();
+ Throwable t1 = getThrowableFromMethodToRedefine();
+ Throwable t2 = getThrowableFromMethodToDelete();
doRedefine(RedefineMethodInBacktraceTarget.class);
doClassUnloading();
- touchRedefinedMethodInBacktrace(t);
+ System.out.println("checking backtrace for throwable from methodToRedefine");
+ touchRedefinedMethodInBacktrace(t1);
+
+ System.out.println("checking backtrace for throwable from methodToDelete");
+ touchRedefinedMethodInBacktrace(t2);
}
private void doMethodInBacktraceTestB() throws Exception {
@@ -115,6 +123,10 @@ public class RedefineMethodInBacktraceApp {
if (!(thrownFromMethodToRedefine instanceof RuntimeException)) {
throw e;
}
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("\nTest failed: unexpected exception: " + e.toString());
+ failed = true;
}
method = null;
c = null;
@@ -122,15 +134,49 @@ public class RedefineMethodInBacktraceApp {
return thrownFromMethodToRedefine;
}
+ private static Throwable getThrowableFromMethodToDelete() throws Exception {
+ Class<RedefineMethodInBacktraceTarget> c =
+ RedefineMethodInBacktraceTarget.class;
+ Method method = c.getMethod("callMethodToDelete");
+
+ Throwable thrownFromMethodToDelete = null;
+ try {
+ method.invoke(null);
+ } catch (InvocationTargetException e) {
+ thrownFromMethodToDelete = e.getCause();
+ if (!(thrownFromMethodToDelete instanceof RuntimeException)) {
+ throw e;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("\nTest failed: unexpected exception: " + e.toString());
+ failed = true;
+ }
+ return thrownFromMethodToDelete;
+ }
+
+
private static void doClassUnloading() {
// This will clean out old, unused redefined methods.
System.gc();
}
private static void touchRedefinedMethodInBacktrace(Throwable throwable) {
+ throwable.printStackTrace();
// Make sure that we can convert the backtrace, which is referring to
// the redefined method, to a StrackTraceElement[] without crashing.
- throwable.getStackTrace();
+ StackTraceElement[] stackTrace = throwable.getStackTrace();
+ for (int i = 0; i < stackTrace.length; i++) {
+ StackTraceElement frame = stackTrace[i];
+ if (frame.getClassName() == null) {
+ System.out.println("\nTest failed: trace[" + i + "].getClassName() returned null");
+ failed = true;
+ }
+ if (frame.getMethodName() == null) {
+ System.out.println("\nTest failed: trace[" + i + "].getMethodName() returned null");
+ failed = true;
+ }
+ }
}
private static void doRedefine(Class<?> clazz) throws Exception {
diff --git a/test/java/lang/instrument/RedefineMethodInBacktraceTarget.java b/test/java/lang/instrument/RedefineMethodInBacktraceTarget.java
index fad881137c..87e817a72c 100644
--- a/test/java/lang/instrument/RedefineMethodInBacktraceTarget.java
+++ b/test/java/lang/instrument/RedefineMethodInBacktraceTarget.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,4 +29,13 @@ public class RedefineMethodInBacktraceTarget {
public static void methodToRedefine() {
throw new RuntimeException("Test exception");
}
+
+ public static void callMethodToDelete() {
+ methodToDelete();
+ }
+
+ private static void methodToDelete() {
+ throw new RuntimeException("Test exception in methodToDelete");
+ }
+
}
diff --git a/test/java/lang/instrument/RedefineMethodInBacktraceTargetB.java b/test/java/lang/instrument/RedefineMethodInBacktraceTargetB.java
index baefeb7870..80bc48f9e1 100644
--- a/test/java/lang/instrument/RedefineMethodInBacktraceTargetB.java
+++ b/test/java/lang/instrument/RedefineMethodInBacktraceTargetB.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -37,4 +37,16 @@ public class RedefineMethodInBacktraceTargetB {
// ignore, test will fail
}
}
+
+ public static void callMethodToDelete() {
+ try {
+ // signal that we are here
+ RedefineMethodInBacktraceApp.called.countDown();
+
+ // wait until test is done
+ RedefineMethodInBacktraceApp.stop.await();
+ } catch (InterruptedException ex) {
+ // ignore, test will fail
+ }
+ }
}
diff --git a/test/java/lang/instrument/RedefineMethodInBacktraceTargetB_2.java b/test/java/lang/instrument/RedefineMethodInBacktraceTargetB_2.java
index de98206a8d..c5b482dab6 100644
--- a/test/java/lang/instrument/RedefineMethodInBacktraceTargetB_2.java
+++ b/test/java/lang/instrument/RedefineMethodInBacktraceTargetB_2.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -28,4 +28,7 @@
public class RedefineMethodInBacktraceTargetB {
public static void methodToRedefine() {
}
+
+ public static void callMethodToDelete() {
+ }
}
diff --git a/test/java/lang/instrument/RedefineMethodInBacktraceTarget_2.java b/test/java/lang/instrument/RedefineMethodInBacktraceTarget_2.java
index d2ba225993..77d816a305 100644
--- a/test/java/lang/instrument/RedefineMethodInBacktraceTarget_2.java
+++ b/test/java/lang/instrument/RedefineMethodInBacktraceTarget_2.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,4 +29,8 @@ public class RedefineMethodInBacktraceTarget {
public static void methodToRedefine() {
throw new RuntimeException("Test exception 2");
}
+
+ public static void callMethodToDelete() {
+ throw new RuntimeException("Test exception 2 in callMethodToDelete");
+ }
}