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