diff options
author | sspitsyn <none@none> | 2015-04-08 14:02:29 -0700 |
---|---|---|
committer | sspitsyn <none@none> | 2015-04-08 14:02:29 -0700 |
commit | 45079c750674bbd069b85026f416ce21b2ebb733 (patch) | |
tree | ca10934a34f3e5a95768d27692e60bb907e3daea /test/java/lang | |
parent | 6b804b9312e94203329ee14d368eba178fbe7ce3 (diff) | |
download | jdk8u_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')
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"); + } } |