This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH v4 8/9] python: Add tests for record Python bindings


Thank you!

Changed locally.
Tim

-----Original Message-----
From: Luis Machado [mailto:lgustavo@codesourcery.com] 
Sent: Friday, January 6, 2017 5:58 PM
To: Wiederhake, Tim <tim.wiederhake@intel.com>; gdb-patches@sourceware.org
Cc: Metzger, Markus T <markus.t.metzger@intel.com>
Subject: Re: [PATCH v4 8/9] python: Add tests for record Python bindings

On 01/04/2017 06:46 AM, Tim Wiederhake wrote:
> 2017-01-04  Tim Wiederhake  <tim.wiederhake@intel.com>

> diff --git a/gdb/testsuite/gdb.python/py-record-btrace.exp 
> b/gdb/testsuite/gdb.python/py-record-btrace.exp
> new file mode 100644
> index 0000000..9c166d7
> --- /dev/null
> +++ b/gdb/testsuite/gdb.python/py-record-btrace.exp
> @@ -0,0 +1,142 @@
> +# This testcase is part of GDB, the GNU debugger.
> +#
> +# Copyright 2016-2017 Free Software Foundation, Inc.
> +#
> +# Contributed by Intel Corp. <tim.wiederhake@intel.com> # # This 
> +program is free software; you can redistribute it and/or modify # it 
> +under the terms of the GNU General Public License as published by # 
> +the Free Software Foundation; either version 3 of the License, or # 
> +(at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful, # 
> +but WITHOUT ANY WARRANTY; without even the implied warranty of # 
> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the # GNU 
> +General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License # 
> +along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +# Skip this test if btrace is disabled.
> +
> +if { [skip_btrace_tests] } { return -1 }

untested "skipping btrace tests"

> +
> +load_lib gdb-python.exp
> +
> +standard_testfile
> +
> +if [prepare_for_testing $testfile.exp $testfile $srcfile] { return -1 
> +}
> +

"failed to prepare" instead of $testfile.exp

> +# Skip this test if python is disabled.
> +
> +if { [skip_python_tests] } { return -1 }
> +

Please also add an untested call

> +if ![runto_main ] then {
> +    fail "Can't run to main"

Test names start with lowercase.

> +    return -1
> +}
> +
> +with_test_prefix "no or double record" {
> +    gdb_test "python print(gdb.current_recording())" "None"
> +
> +    gdb_test_no_output "python gdb.start_recording(\"btrace\")"
> +    gdb_test "python gdb.start_recording(\"btrace\")" ".*gdb\.error: The process is already being recorded\..*"
> +
> +    gdb_test_no_output "python gdb.stop_recording()" "first"
> +    gdb_test "python gdb.stop_recording()" ".*gdb\.error: No record target is currently active\..*" "second"
> +}
> +
> +with_test_prefix "preopened record btrace" {
> +    gdb_test_no_output "record btrace"
> +    gdb_test "python print(gdb.current_recording().method)" "btrace"
> +    gdb_test "python print(gdb.current_recording().format)" "pt|bts"
> +    gdb_test_no_output "python gdb.stop_recording()"
> +}
> +
> +with_test_prefix "prepare record" {
> +    gdb_test_no_output "python r = gdb.start_recording(\"btrace\")"
> +    gdb_test "python print(len(r.ptid))" "3"
> +    gdb_test "python print(r.method)" "btrace"
> +    gdb_test "python print(r.format)" "pt|bts"
> +    gdb_test "stepi 100" ".*"
> +    gdb_test_no_output "python insn = r.instruction_history"
> +    gdb_test_no_output "python call = r.function_call_history"
> +    gdb_test_no_output "python i = insn\[0\]"
> +    gdb_test_no_output "python c = call\[0\]"
> +}
> +
> +with_test_prefix "replay begin" {
> +    gdb_test "python print(r.replay_position)" "None"
> +    gdb_test "python r.goto(r.begin)"
> +    gdb_test "python print(r.replay_position.number)" "1"
> +}
> +
> +with_test_prefix "replay end" {
> +    gdb_test "python r.goto(r.end)"
> +    gdb_test "python print(r.replay_position)" "None"
> +}
> +
> +with_test_prefix "instruction " {
> +    gdb_test "python print(i.number)" "1"
> +    gdb_test "python print(i.error)" "None"
> +    gdb_test "python print(i.sal)" "symbol and line for .*"
> +    gdb_test "python print(i.pc)" "$decimal"
> +    gdb_test "python print(i.data)" "<memory at $hex>"
> +    gdb_test "python print(i.decoded)" ".*"
> +    gdb_test "python print(i.size)" "$decimal"
> +    gdb_test "python print(i.is_speculative)" "False"
> +}
> +
> +with_test_prefix "function call" {
> +    gdb_test "python print(c.number)" "1"
> +    gdb_test "python print(c.symbol)" "main"
> +    gdb_test "python print(c.level)" "$decimal"
> +    gdb_test "python print(len(c.instructions))" "$decimal"
> +    gdb_test "python print(c.up)" "None"
> +    gdb_test "python print(c.prev_sibling)" "None"
> +    gdb_test "python print(c == c.next_sibling.prev_sibling)" "True"
> +}
> +
> +with_test_prefix "list" {
> +    gdb_test "python print(len(insn))" "100"
> +    gdb_test "python print(len(insn\[23:65\]))" "42"
> +    gdb_test "python print(insn\[17:\]\[2\].number)" "20"
> +    gdb_test "python print(i in insn)" "True"
> +    gdb_test "python print(i in call)" "False"
> +    gdb_test "python print(c in insn)" "False"
> +    gdb_test "python print(c in call)" "True"
> +    gdb_test "python print(insn.index(i))" "0"
> +    gdb_test "python print(insn.count(i))" "1"
> +}
> +
> +with_test_prefix "sublist" {
> +    gdb_test_no_output "python s1 = insn\[3:72:5\]"
> +    gdb_test_no_output "python s2 = s1\[2:13:3\]"
> +    gdb_test_no_output "python s3 = s1\[13:2:-3\]"
> +    gdb_test_no_output "python s4 = insn\[::-1\]"
> +
> +    gdb_test "python print(\[i.number for i in s1\])" "\\\[4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69\\\]"
> +    gdb_test "python print(\[i.number for i in s2\])" "\\\[14, 29, 44, 59\\\]"
> +    gdb_test "python print(\[i.number for i in s3\])" "\\\[69, 54, 39, 24\\\]"
> +
> +    gdb_test "python print(len(s1))" "14"
> +    gdb_test "python print(len(s2))" "4"
> +    gdb_test "python print(len(s3))" "4"
> +    gdb_test "python print(len(s4))" "100"
> +
> +    gdb_test "python print(s4\[5\].number)" "95"
> +    gdb_test "python print(s4\[-5\].number)" "5"
> +    gdb_test "python print(s4\[100\].number)" ".*IndexError.*"
> +    gdb_test "python print(s4\[-101\].number)" ".*IndexError.*"
> +}
> +
> +with_test_prefix "level" {
> +    gdb_test_no_output "python gdb.stop_recording()"
> +    gdb_test "break inner" "Breakpoint.*"
> +    gdb_test "continue" "Continuing\..*"
> +    gdb_test_no_output "record btrace"
> +    gdb_test "step" "outer ().*" "step one"
> +    gdb_test "step" "main ().*" "step two"
> +    gdb_test "python print(gdb.current_recording().function_call_history\[0\].level)" "1"
> +    gdb_test "python print(gdb.current_recording().function_call_history\[1\].level)" "0"
> +}
> diff --git a/gdb/testsuite/gdb.python/py-record-full.c 
> b/gdb/testsuite/gdb.python/py-record-full.c
> new file mode 100644
> index 0000000..3d48846
> --- /dev/null
> +++ b/gdb/testsuite/gdb.python/py-record-full.c
> @@ -0,0 +1,48 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 2016-2017 Free Software Foundation, Inc.
> +
> +   Contributed by Intel Corp. <tim.wiederhake@intel.com>
> +
> +   This program is free software; you can redistribute it and/or modify
> +   it under the terms of the GNU General Public License as published by
> +   the Free Software Foundation; either version 3 of the License, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Public License
> +   along with this program.  If not, see 
> + <http://www.gnu.org/licenses/>.  */
> +
> +int
> +function (int arg)
> +{
> +  return arg + 1;
> +}
> +
> +void
> +inner (void)
> +{
> +}
> +
> +void
> +outer (void)
> +{
> +  inner ();
> +}
> +
> +int
> +main (void)
> +{
> +  int i, j;
> +
> +  for (i = 0, j = 0; i < 100; ++i)
> +    j = function (j);
> +
> +  outer ();
> +
> +  return j;
> +}
> diff --git a/gdb/testsuite/gdb.python/py-record-full.exp 
> b/gdb/testsuite/gdb.python/py-record-full.exp
> new file mode 100644
> index 0000000..5ecea46
> --- /dev/null
> +++ b/gdb/testsuite/gdb.python/py-record-full.exp
> @@ -0,0 +1,50 @@
> +# This testcase is part of GDB, the GNU debugger.
> +#
> +# Copyright 2016-2017 Free Software Foundation, Inc.
> +#
> +# Contributed by Intel Corp. <tim.wiederhake@intel.com> # # This 
> +program is free software; you can redistribute it and/or modify # it 
> +under the terms of the GNU General Public License as published by # 
> +the Free Software Foundation; either version 3 of the License, or # 
> +(at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful, # 
> +but WITHOUT ANY WARRANTY; without even the implied warranty of # 
> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the # GNU 
> +General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License # 
> +along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +load_lib gdb-python.exp
> +
> +standard_testfile
> +
> +if [prepare_for_testing $testfile.exp $testfile $srcfile] { return -1 
> +}
> +

Please use "failed to prepare" instead of $testfile.exp.

> +# Skip this test if python is disabled.
> +
> +if { [skip_python_tests] } { return -1 }
> +

Explicit untested message.

> +if ![runto_main ] then {
> +    fail "Can't run to main"

Test name starts with lowercase.

> +    return -1
> +}
> +
> +with_test_prefix "no or double record" {
> +    gdb_test "python print(gdb.current_recording())" "None"
> +
> +    gdb_test_no_output "python gdb.start_recording(\"full\")"
> +    gdb_test "python gdb.start_recording(\"full\")" ".*gdb\.error: The process is already being recorded\..*"
> +
> +    gdb_test_no_output "python gdb.stop_recording()" "first"
> +    gdb_test "python gdb.stop_recording()" ".*gdb\.error: No record target is currently active\..*" "second"
> +}
> +
> +with_test_prefix "preopened record full" {
> +    gdb_test_no_output "record full"
> +    gdb_test "python print(gdb.current_recording().method)" "full"
> +    gdb_test "python print(gdb.current_recording().format)" "full"
> +    gdb_test_no_output "python gdb.stop_recording()"
> +}
>

Intel Deutschland GmbH
Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Christin Eisenschmid, Christian Lamprechter
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]