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] Make environ.exp run on all platforms (and create info-program.exp)


On Friday, March 31 2017, I wrote:

> This has been on my TODO list for a while.  There's a really old bug
> about this (PR testsuite/8595), and there was no reason for
> environ.exp to be specific for hppa* targets.  So this patch removes
> this constraint, modernizes the testcase, and cleans up some things.
> Most of the tests remained, and some were rewritten (especially the
> one that checks if "show environment" works, which is something kind
> of hard to do).
>
> As a bonus, I'm adding a separated info-program.exp file containing
> all the tests related to "info program" that were present on
> environ.exp.
>
> Tested locally, everything still passes.

Ping.

> gdb/testsuite/ChangeLog:
> 2017-03-31  Sergio Durigan Junior  <sergiodj@redhat.com>
>
> 	PR testsuite/8595
> 	* gdb.base/environ.exp: Make test available in all architectures.
> 	Move bits related to "info program" testing to
> 	gdb.base/info-program.exp.  Rewrite tests to use the two new
> 	procedures mentione below.
> 	(test_set_show_env_var) New procedure.
> 	(test_set_show_env_var_equal): Likewise.
> 	* gdb.base/info-program.exp: New file.
> ---
>  gdb/testsuite/ChangeLog                 |  11 ++
>  gdb/testsuite/gdb.base/environ.exp      | 302 ++++++--------------------------
>  gdb/testsuite/gdb.base/info-program.exp |  45 +++++
>  3 files changed, 105 insertions(+), 253 deletions(-)
>  create mode 100644 gdb/testsuite/gdb.base/info-program.exp
>
> diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
> index eb543eb..98901a0 100644
> --- a/gdb/testsuite/ChangeLog
> +++ b/gdb/testsuite/ChangeLog
> @@ -1,3 +1,14 @@
> +2017-03-31  Sergio Durigan Junior  <sergiodj@redhat.com>
> +
> +	PR testsuite/8595
> +	* gdb.base/environ.exp: Make test available in all architectures.
> +	Move bits related to "info program" testing to
> +	gdb.base/info-program.exp.  Rewrite tests to use the two new
> +	procedures mentione below.
> +	(test_set_show_env_var) New procedure.
> +	(test_set_show_env_var_equal): Likewise.
> +	* gdb.base/info-program.exp: New file.
> +
>  2017-03-29  Jan Kratochvil  <jan.kratochvil@redhat.com>
>  
>  	* gdb.python/py-section-script.exp (sepdebug): New testcases.
> diff --git a/gdb/testsuite/gdb.base/environ.exp b/gdb/testsuite/gdb.base/environ.exp
> index a833f79..5ea5626 100644
> --- a/gdb/testsuite/gdb.base/environ.exp
> +++ b/gdb/testsuite/gdb.base/environ.exp
> @@ -13,297 +13,93 @@
>  # You should have received a copy of the GNU General Public License
>  # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
>  
> -#
> -# test running programs
> -#
> +gdb_start
>  
> -# This test exists solely to exercise the "environment" commands for
> -# code-coverage on HP-UX.
> -#
> -if ![istarget "hppa*-*-hpux*"] then {
> -  return
> -}
> -
> -standard_testfile break.c break1.c
> -
> -if {[prepare_for_testing "failed to prepare" $testfile \
> -	 [list $srcfile $srcfile2] {debug nowarnings}]} {
> -    return -1
> -}
> -
> -if ![runto_main] then { fail "environment command tests suppressed" }
> -
> -# (No, this is not really related to the environment commands.  But it's
> -# a convenient place to verify that this command works.)
> -#
> -send_gdb "info program\n"
> -gdb_expect {
> -  -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at breakpoint 1..*$gdb_prompt $"\
> -          {pass "info program"}
> -  -re "$gdb_prompt $"\
> -          {fail "info program"}
> -  timeout {fail "(timeout) info program"}
> -}
> -
> -# We don't really care where this step lands, so long as it gets
> -# the inferior pushed off the breakpoint it's currently on...
> -#
> -send_gdb "next\n"
> -gdb_expect {
> -  -re ".*$gdb_prompt $"\
> -          {pass "step before info program"}
> -  timeout {fail "(timeout) step before info program"}
> +proc test_set_show_env_var { name value test_name } {
> +    gdb_test_no_output "set environment $name $value" "$test_name"
> +    gdb_test "show environment $name" "$name = $value" \
> +	"confirm $test_name"
>  }
> -send_gdb "info program\n"
> -gdb_expect {
> -  -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped after being stepped..*$gdb_prompt $"\
> -          {pass "info program after step"}
> -  -re "$gdb_prompt $"\
> -          {fail "info program after step"}
> -  timeout {fail "(timeout) info program after step"}
> -}
> -
> -if ![runto_main] then { fail "environment command tests suppressed" }
>  
> -send_gdb "delete\n"
> -gdb_expect {
> -  -re ".*y or n. $"\
> -          {send_gdb "y\n"
> -           gdb_expect {
> -             -re ".*$gdb_prompt $"\
> -                     {pass "delete breakpoint before info program"}
> -             timeout {fail "(timeout) delete breakpoint before info program"}
> -           }
> -          }
> -  -re "$gdb_prompt $"\
> -          {fail "delete breakpoint before info program"}
> -  timeout {fail "(timeout) delete breakpoint before info program"}
> -}
> -send_gdb "info program\n"
> -gdb_expect {
> -  -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at a breakpoint that has since been deleted..*$gdb_prompt $"\
> -          {pass "info program after deleted breakpoint"}
> -  -re "$gdb_prompt $"\
> -          {fail "info program after deleted breakpoint"}
> -  timeout {fail "(timeout) info program after deleted breakpoint"}
> +proc test_set_show_env_var_equal { name value test_name } {
> +    gdb_test_no_output "set environment $name = $value" "$test_name"
> +    gdb_test "show environment $name" "$name = $value" \
> +	"confirm $test_name"
>  }
>  
>  # Verify that we can show all currently-set environment variables.
> -# (It's a bit hacky, but nonetheless probably safe to check for at
> -# least the SHELL variable.)
> -#
> -# need to increase timeout because of very long output
> -set oldtimeout $timeout
> -set timeout [expr "$timeout + 300"]
> -
> -send_gdb "show environment\n"
> -gdb_expect {
> -  -re ".*SHELL=(\[a-zA-Z0-9\]*).*$gdb_prompt $"\
> -          {pass "show environment"}
> -  -re "$gdb_prompt $"\
> -          {fail "show environment"}
> -  timeout {fail "(timeout) show environment"}
> -}
> -set timeout $oldtimeout
> +# It's hard to do this verification since we can't really compare each
> +# entry with the current environment.  So we just check to see if
> +# there is anything that looks like an environment variable being
> +# printed.
> +gdb_test "show environment" "(\[A-Za-z_\]\[A-Za-z0-9_\]*=.*\r\n)+" \
> +    "show environment works"
>  
>  # Verify that we can unset a specific environment variable.
> -#
> -send_gdb "unset environment EDITOR\n"
> -gdb_expect {
> -  -re "$gdb_prompt $"\
> -          {pass "issue unset environment"}
> -  timeout {fail "(timeout) issue unset environment"}
> -}
> -send_gdb "show environment EDITOR\n"
> -gdb_expect {
> -  -re "Environment variable \"EDITOR\" not defined.\r\n$gdb_prompt $"\
> -          {pass "unset environment"}
> -  -re "$gdb_prompt $"\
> -          {fail "unset environment"}
> -  timeout {fail "(timeout) unset environment"}
> -}
> +gdb_test_no_output "unset environment EDITOR" "unset environment variable"
> +
> +gdb_test "show environment EDITOR" "Environment variable \"EDITOR\" not defined\." \
> +    "confirm unset environment variable worked"
>  
>  # Verify that we can unset all environment variables.
> -#
> -send_gdb "unset environment\n"
> -gdb_expect {
> -  -re "Delete all environment variables.*y or n. $"\
> -          {send_gdb "y\n"
> -           gdb_expect {
> -             -re "$gdb_prompt $"\
> -                     {pass "unset entire environment"}
> -             timeout {fail "(timeout) unset entire environment"}
> -           }
> -          }
> -  -re "$gdb_prompt $"\
> -          {fail "unset entire environment"}
> -  timeout {fail "(timeout) unset entire environment"}
> +set msg "unset all environment variables"
> +gdb_test_multiple "unset environment" $msg {
> +    -re "Delete all environment variables.*y or n.*$" {
> +	gdb_test_no_output "y" $msg
> +    }
> +    -re "$gdb_prompt $" {
> +	fail $msg
> +    }
>  }
>  
>  # Verify that we can set a specific environment variable.
> -#
> -send_gdb "set environment EDITOR emacs\n"
> -gdb_expect {
> -  -re "$gdb_prompt $"\
> -          {pass "issue set environment"}
> -  timeout {fail "(timeout) issue set environment"}
> -}
> -send_gdb "show environment EDITOR\n"
> -gdb_expect {
> -  -re "EDITOR = emacs\r\n$gdb_prompt $"\
> -          {pass "set environment"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment"}
> -  timeout {fail "(timeout) set environment"}
> -}
> +test_set_show_env_var "EDITOR" "emacs" "set environment variable"
>  
>  # Verify that GDB responds gracefully to a request to set environment,
>  # with no variable name.
> -#
> -send_gdb "set environment\n"
> -gdb_expect {
> -  -re "Argument required .environment variable and value..*$gdb_prompt $"\
> -          {pass "set environment without variable disallowed"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment without variable disallowed"}
> -  timeout {fail "(timeout) set environment without variable disallowed"}
> -}
> +gdb_test "set environment" "Argument required \\\(environment variable and value\\\)\." \
> +    "set environment without arguments"
>  
>  # I'm not sure just what GDB has in mind in explicitly checking
>  # for this variant, but since GDB handles it, test it.
> -#
> -send_gdb "set environment =\n"
> -gdb_expect {
> -  -re "Argument required .environment variable to set..*$gdb_prompt $"\
> -          {pass "set environment equals without variable disallowed"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment equals without variable disallowed"}
> -  timeout {fail "(timeout) set environment equals without variable disallowed"}
> -}
> +gdb_test "set environment =" "Argument required \\\(environment variable to set\\\)\." \
> +    "set environment without variable name"
>  
>  # Setting an environment variable without a value sets it to a NULL
>  # value.
> -#
> -send_gdb "set environment EDITOR\n"
> -gdb_expect {
> -  -re "Setting environment variable \"EDITOR\" to null value..*$gdb_prompt $"\
> -          {pass "issue set environment without variable value"}
> -  -re "$gdb_prompt $"\
> -          {fail "issue set environment without variable value"}
> -  timeout {fail "(timeout) issue set environment without variable value"}
> -}
> -send_gdb "show environment EDITOR\n"
> -gdb_expect {
> -  -re "EDITOR = \r\n$gdb_prompt $"\
> -          {pass "set environment without variable value"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment without variable value"}
> -  timeout {fail "(timeout) set environment without variable value"}
> -}
> +gdb_test "set environment EDITOR" "Setting environment variable \"EDITOR\" to null value\." \
> +    "set environment variable to null value"
> +gdb_test "show environment EDITOR" "EDITOR = " "show null environment variable"
>  
>  # Verify that GDB responds gracefully to an attempt to show a
>  # non-existent environment variable.  (We hope this variable is
>  # undefined!)
> -#
> -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
> -gdb_expect {
> -  -re "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined..*$gdb_prompt $"\
> -          {pass "show non-existent environment variable disallowed"}
> -  -re "$gdb_prompt $"\
> -          {fail "show non-existent environment variable disallowed"}
> -  timeout {fail "(timeout) show non-existent environment variable disallowed"}
> -}
> +gdb_test "show environment FOOBARBAZGRUNGESPAZBALL" \
> +    "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined\." \
> +    "show non-existent environment variable"
>  
>  # Verify that GDB can set an environment variable hitherto undefined.
> -#
> -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t\n"
> -gdb_expect {
> -  -re "$gdb_prompt $"\
> -          {pass "issue set environment for previously undefined variable"}
> -  timeout {fail "(timeout) issue set environment for previously undefined variable"}
> -}
> -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
> -gdb_expect {
> -  -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\
> -          {pass "set environment for previously undefined variable"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment for previously undefined variable"}
> -  timeout {fail "(timeout) set environment for previously undefined variable"}
> -}
> +test_set_show_env_var "FOOBARBAZGRUNGESPAZBALL" "t" \
> +    "set environment variable previously undefined"
>  
>  # Verify that GDB can also set an environment variable using the "="
>  # syntax.
> -#
> -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL = t\n"
> -gdb_expect {
> -  -re "$gdb_prompt $"\
> -          {pass "issue set environment with equals"}
> -  timeout {fail "(timeout) issue set environment with equals"}
> -}
> -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
> -gdb_expect {
> -  -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\
> -          {pass "set environment with equals"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment with equals"}
> -  timeout {fail "(timeout) set environment with equals"}
> -}
> +test_set_show_env_var_equal "FOOBARBAZGRUNGESPAZBALL" "y" \
> +    "set environment variable using = syntax"
>  
>  # Verify that GDB can set an environment variable to a value that has
>  # an embedded (trailing, in this case) equals.
> -#
> -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t=\n"
> -gdb_expect {
> -  -re "$gdb_prompt $"\
> -          {pass "issue set environment with trailing equals"}
> -  timeout {fail "(timeout) issue set environment with trailing equals"}
> -}
> -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
> -gdb_expect {
> -  -re "FOOBARBAZGRUNGESPAZBALL = t=\r\n$gdb_prompt $"\
> -          {pass "set environment with trailing equals"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment with trailing equals"}
> -  timeout {fail "(timeout) set environment with trailing equals"}
> -}
> +test_set_show_env_var_equal "FOOBARBAZGRUNGESPAZBALL" "t=" \
> +    "set environment variable with trailing equals"
>  
>  # Verify that GDB can set an environment variable to a value preceded
>  # by whitespace, and that such whitespace is ignored (not included
>  # in the set value).
> -#
> -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL =     foo\n"
> -gdb_expect {
> -  -re "$gdb_prompt $"\
> -          {pass "issue set environment with preceding whitespace"}
> -  timeout {fail "(timeout) issue set environment with preceding whitespace"}
> -}
> -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
> -gdb_expect {
> -  -re "FOOBARBAZGRUNGESPAZBALL = foo\r\n$gdb_prompt $"\
> -          {pass "set environment with preceding whitespace"}
> -  -re "$gdb_prompt $"\
> -          {fail "set environment with preceding whitespace"}
> -  timeout {fail "(timeout) set environment with preceding whitespace"}
> -}
> -
> -# Verify that GDB can manipulate the distinguished PATH variable.
> -#
> -send_gdb "path /tmp/FOOBARBAZGRUNGESPAZBALL\n"
> -gdb_expect {
> -  -re ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
> -          {pass "issue path"}
> -  -re "$gdb_prompt $"\
> -          {fail "issue path"}
> -  timeout {fail "(timeout) issue path"}
> -}
> -send_gdb "show paths\n"
> -gdb_expect {
> -  -re "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
> -          {pass "show paths"}
> -  -re "$gdb_prompt $"\
> -          {fail "show paths"}
> -  timeout {fail "(timeout) show paths"}
> -}
> +gdb_test_no_output "set environment FOOBARBAZGRUNGESPAZBALL =        foo" \
> +    "set environment variable with trailing whitespace"
> +gdb_test "show environment FOOBARBAZGRUNGESPAZBALL" \
> +    "FOOBARBAZGRUNGESPAZBALL = foo" \
> +    "confirm set environment variable with trailing whitespace"
>  
>  gdb_exit
>  return 0
> diff --git a/gdb/testsuite/gdb.base/info-program.exp b/gdb/testsuite/gdb.base/info-program.exp
> new file mode 100644
> index 0000000..a24a654
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/info-program.exp
> @@ -0,0 +1,45 @@
> +# Copyright 2017 Free Software Foundation, Inc.
> +
> +# 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/>.
> +
> +standard_testfile normal.c
> +
> +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
> +    return -1
> +}
> +
> +if { ![runto_main] } {
> +    fail "can't run to main"
> +    return -1
> +}
> +
> +gdb_test "info program" "\tUsing the running image of child process $decimal\.\r\nProgram stopped at $hex\.\r\nIt stopped at breakpoint $decimal\.\r\nType \"info stack\" or \"info registers\" for more information\." \
> +    "info program after run to main"
> +
> +# We don't really care where this step lands, so long as it gets
> +# the inferior pushed off the breakpoint it's currently on...
> +gdb_test "next" "$decimal\t.*" "advancing pc"
> +
> +gdb_test "info program" "\tUsing the running image of child process $decimal\.\r\nProgram stopped at $hex\.\r\nIt stopped after being stepped\.\r\nType \"info stack\" or \"info registers\" for more information\." \
> +    "info program after next"
> +
> +if { ![runto_main] } then {
> +    fail "can't restart program"
> +    return -1
> +}
> +
> +delete_breakpoints
> +
> +gdb_test "info program" "\tUsing the running image of child process $decimal\.\r\nProgram stopped at $hex\.\r\nIt stopped at a breakpoint that has since been deleted\.\r\nType \"info stack\" or \"info registers\" for more information\." \
> +    "info program after deleting all breakpoints"
> -- 
> 2.9.3

-- 
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF  31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
http://sergiodj.net/


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