1 /* 2 * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 25 /* 26 * @test 27 * 28 * @summary converted from VM Testbase nsk/jdb/where/where005. 29 * VM Testbase keywords: [jpda, jdb] 30 * VM Testbase readme: 31 * DECSRIPTION 32 * A test case for the 'where' command. The debugged 'where005a' 33 * application throws a null pointer exception in 'func6()' method. 34 * The test passes if the 'where' command produces the correct 35 * stack trace. 36 * COMMENTS 37 * This test functionally equals to nsk/jdb/where/where002 test 38 * and replaces it. 39 * Modified due to fix of the bug: 40 * 4818762 TEST_BUG: two jdb test incorrectly check debuggee exit code 41 * 42 * @library /vmTestbase 43 * /test/lib 44 * @run driver jdk.test.lib.FileInstaller . . 45 * @build nsk.jdb.where.where005.where005 46 * nsk.jdb.where.where005.where005a 47 * @run main/othervm PropertyResolvingWrapper nsk.jdb.where.where005.where005 48 * -arch=${os.family}-${os.simpleArch} 49 * -waittime=5 50 * -debugee.vmkind=java 51 * -transport.address=dynamic 52 * -jdb=${test.jdk}/bin/jdb 53 * -java.options="${test.vm.opts} ${test.java.opts}" 54 * -workdir=. 55 * -debugee.vmkeys="${test.vm.opts} ${test.java.opts}" 56 */ 57 58 package nsk.jdb.where.where005; 59 60 import nsk.share.*; 61 import nsk.share.jdb.*; 62 63 import java.io.*; 64 import java.util.*; 65 66 public class where005 extends JdbTest { 67 main(String argv[])68 public static void main (String argv[]) { 69 System.exit(run(argv, System.out) + JCK_STATUS_BASE); 70 } 71 run(String argv[], PrintStream out)72 public static int run(String argv[], PrintStream out) { 73 debuggeeClass = DEBUGGEE_CLASS; 74 firstBreak = FIRST_BREAK; 75 lastBreak = LAST_BREAK; 76 return new where005(true).runTest(argv, out); 77 } 78 where005(boolean debuggeeShouldFail)79 public where005 (boolean debuggeeShouldFail) { 80 super(debuggeeShouldFail); 81 } 82 83 static final String PACKAGE_NAME = "nsk.jdb.where.where005"; 84 static final String TEST_CLASS = PACKAGE_NAME + ".where005"; 85 static final String DEBUGGEE_CLASS = TEST_CLASS + "a"; 86 static final String FIRST_BREAK = DEBUGGEE_CLASS + ".main"; 87 static final String LAST_BREAK = DEBUGGEE_CLASS + ".lastBreak"; 88 89 static final String[][] FRAMES = new String[][] { 90 {DEBUGGEE_CLASS + ".func6", "76"}, 91 {DEBUGGEE_CLASS + ".func5", "71"}, 92 {DEBUGGEE_CLASS + ".func4", "67"}, 93 {DEBUGGEE_CLASS + ".func3", "63"}, 94 {DEBUGGEE_CLASS + ".func2", "59"}, 95 {DEBUGGEE_CLASS + ".func1", "55"}, 96 {DEBUGGEE_CLASS + ".runIt", "48"}, 97 {DEBUGGEE_CLASS + ".main", "39"} 98 }; runCases()99 protected void runCases() { 100 String[] reply; 101 Paragrep grep; 102 int count; 103 Vector v; 104 String found; 105 106 reply = jdb.receiveReplyFor(JdbCommand.cont); 107 grep = new Paragrep(reply); 108 109 if (grep.find("NullPointerException") == 0) { 110 failure("Expected NullPointerException is not thrown"); 111 } else { 112 reply = jdb.receiveReplyFor(JdbCommand.where); 113 grep = new Paragrep(reply); 114 115 for (int i = 0; i < FRAMES.length; i++) { 116 v = new Vector(); 117 v.add(FRAMES[i][0]); 118 v.add(FRAMES[i][1]); 119 count = grep.find(v); 120 if (count != 1) { 121 failure("Unexpected number or location of the stack frame: " + FRAMES[i][0] + 122 "\n\texpected value : 1, got one: " + count); 123 } 124 } 125 } 126 jdb.sendCommand(JdbCommand.quit); 127 } 128 } 129