Test that terminal settings are restored after quitting via SIGTERM

Tested on x86_64 Debian Stretch, native, gdbserver and
extended-gdbserver.  Also tested that the various error paths, like if
$PPID is empty or if SIGTERM did not not kill GDB, function correctly.

gdb/testsuite/ChangeLog:

	* gdb.base/batch-preserve-term-settings.exp (send_quit_command):
	New proc.
	(test_terminal_settings_preserved_after_sigterm): New test.
This commit is contained in:
Patrick Palka
2015-07-29 11:59:25 -04:00
parent e77e648e93
commit 06265e53f4
2 changed files with 122 additions and 0 deletions

View File

@ -14,6 +14,12 @@
* gdb.python/py-objfile.exp: Fix typo that snuck in from my last
commit.
2015-07-29 Patrick Palka <patrick@parcs.ath.cx>
* gdb.base/batch-preserve-term-settings.exp (send_quit_command):
New proc.
(test_terminal_settings_preserved_after_sigterm): New test.
2015-07-29 Patrick Palka <patrick@parcs.ath.cx>
* gdb.base/batch-preserve-term-settings.exp

View File

@ -176,6 +176,33 @@ proc test_terminal_settings_preserved {} {
exit_shell
}
# Send the quit command to GDB and make sure it exits.
proc send_quit_command { test_name } {
global shell_prompt_re
set test $test_name
send_gdb "quit\n"
gdb_expect {
-re "(y or n)" {
send_gdb "y\n"
exp_continue
}
-re ".*$shell_prompt_re$" {
pass $test
return
}
timeout {
fail "$test (timeout)"
return 0
}
eof {
fail "$test (eof)"
return 0
}
}
}
# Check that quitting from the CLI via the "quit" command does not leave the
# terminal in the wrong state. The GDB commands CMDS are executed before
# quitting.
@ -254,6 +281,91 @@ proc test_terminal_settings_preserved_after_cli_exit { cmds } {
exit_shell
}
# Check that sending SIGTERM kills GDB and does not leave the terminal in the
# wrong state.
proc test_terminal_settings_preserved_after_sigterm { } {
global file_arg
global GDB INTERNAL_GDBFLAGS GDBFLAGS
global gdb_prompt
global shell_prompt_re
if ![spawn_shell] {
return
}
set saved_gdbflags $GDBFLAGS
set stty_supported [run_stty "stty before" stty_before]
set test "start gdb"
send_gdb "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS [host_info gdb_opts]\n"
gdb_expect {
-re "$gdb_prompt $" {
pass $test
}
timeout {
fail "$test (timeout)"
}
eof {
fail "$test (eof)"
}
}
# Retrieve the pid of gdb with the gdb command "shell echo $PPID"
set gdb_pid -1
set test "run shell echo \$PPID"
send_gdb "shell echo \$PPID\n"
gdb_expect {
-re ".*\r\n(\\d+)\r\n$gdb_prompt $" {
set gdb_pid $expect_out(1,string)
pass $test
}
-re ".*\r\n\r\n$gdb_prompt $" {
fail "$test (no \$PPID)"
}
timeout {
fail "$test (timeout)"
}
eof {
fail "$test (eof)"
}
}
set test "kill gdb with SIGTERM"
if { $gdb_pid == -1 } {
fail "$test (no pid)"
send_quit_command "quit gdb"
} else {
remote_exec host "kill -TERM $gdb_pid"
set gdb_killed 0
gdb_expect {
-re ".*$shell_prompt_re$" {
pass $test
set gdb_killed 1
}
default {
fail "$test (did not quit)"
}
}
if !$gdb_killed {
send_quit_command "quit gdb"
}
}
set test "terminal settings preserved"
if $stty_supported {
run_stty "stty after" stty_after
gdb_assert [string equal $stty_before $stty_after] $test
} else {
unsupported "$test (no stty)"
}
exit_shell
}
with_test_prefix "batch run" {
test_terminal_settings_preserved
}
@ -269,3 +381,7 @@ with_test_prefix "cli exit after start cmd" {
with_test_prefix "cli exit after run cmd" {
test_terminal_settings_preserved_after_cli_exit { "run" }
}
with_test_prefix "cli exit after SIGTERM" {
test_terminal_settings_preserved_after_sigterm
}