From 6ff6f8b0246cea08b7e329a3e5f49cec3f83a5bc Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 21 Jul 2021 21:46:11 +0200 Subject: [PATCH] psql: Add test for query canceling --- src/bin/psql/t/020_cancel.pl | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/bin/psql/t/020_cancel.pl diff --git a/src/bin/psql/t/020_cancel.pl b/src/bin/psql/t/020_cancel.pl new file mode 100644 index 0000000000..0d56b47ff3 --- /dev/null +++ b/src/bin/psql/t/020_cancel.pl @@ -0,0 +1,32 @@ +use strict; +use warnings; + +use PostgresNode; +use TestLib; +use Test::More tests => 2; + +my $tempdir = TestLib::tempdir; + +my $node = get_new_node('main'); +$node->init; +$node->start; + +# test query canceling by sending SIGINT to a running psql +SKIP: { + skip "cancel test requires a Unix shell", 2 if $windows_os; + + local %ENV = $node->_get_env(); + + local $SIG{ALRM} = sub { + my $psql_pid = TestLib::slurp_file("$tempdir/psql.pid"); + kill 'INT', $psql_pid; + }; + alarm 1; + + my $stdin = "\\! echo \$PPID >$tempdir/psql.pid\nselect pg_sleep(5);"; + my ($stdout, $stderr); + my $result = IPC::Run::run(['psql', '-v', 'ON_ERROR_STOP=1'], '<', \$stdin, '>', \$stdout, '2>', \$stderr); + + ok(!$result, 'query failed'); + like($stderr, qr/canceling statement due to user request/, 'query was canceled'); +} -- 2.32.0