From: Patrick Palka <patrick@parcs.ath.cx>
To: gdb-patches@sourceware.org
Cc: Patrick Palka <patrick@parcs.ath.cx>
Subject: [PATCH] Test that terminal settings are restored after quitting via SIGTERM
Date: Wed, 29 Jul 2015 16:10:00 -0000 [thread overview]
Message-ID: <1438186203-13183-1-git-send-email-patrick@parcs.ath.cx> (raw)
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.
---
.../gdb.base/batch-preserve-term-settings.exp | 116 +++++++++++++++++++++
1 file changed, 116 insertions(+)
diff --git a/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp b/gdb/testsuite/gdb.base/batch-preserve-term-settings.exp
index ca6f173..a4c8796 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
+}
--
2.5.0.rc2.22.g69b1679.dirty
next reply other threads:[~2015-07-29 16:10 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-29 16:10 Patrick Palka [this message]
2015-07-29 16:35 ` Pedro Alves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1438186203-13183-1-git-send-email-patrick@parcs.ath.cx \
--to=patrick@parcs.ath.cx \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox