summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Palka <patrick@parcs.ath.cx>2015-07-29 11:59:25 -0400
committerPatrick Palka <patrick@parcs.ath.cx>2015-07-29 12:47:24 -0400
commit06265e53f4657a86f3ac3485552b97c942c9f4ac (patch)
tree812c47d0e20f05823521767336b45e81eb415e47
parente77e648e93adf564fb10e725e4d8800d30a83eb5 (diff)
downloadbinutils-gdb-06265e53f4657a86f3ac3485552b97c942c9f4ac.tar.gz
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.
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.base/batch-preserve-term-settings.exp116
2 files changed, 122 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 44725b4fe86..3722e287f16 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -16,6 +16,12 @@
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
(test_terminal_settings_preserved_after_cli_exit): New test.
diff --git a/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp b/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp
index ca6f1735558..a4c87967626 100644
--- a/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp
+++ b/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp
@@ -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
+}