diff --git a/src/bin/psql/t/001_basic.pl b/src/bin/psql/t/001_basic.pl index 685744744a..eb9041d1f3 100644 --- a/src/bin/psql/t/001_basic.pl +++ b/src/bin/psql/t/001_basic.pl @@ -15,10 +15,46 @@ program_options_handling_ok('psql'); my ($stdout, $stderr); my $result; +# Execute a psql command and check its result patterns. +sub psql_like +{ + local $Test::Builder::Level = $Test::Builder::Level + 1; + + my $node = shift; + my $test_name = shift; + my $query = shift; + my $expected_stdout = shift; + my $expected_stderr = shift; + + die "cannot specify both expected stdout and stderr here" + if (defined($expected_stdout) && defined($expected_stderr)); + + # Use the context of a WAL sender, some of the tests rely on that. + my ($ret, $stdout, $stderr) = $node->psql( + 'postgres', $query, + on_error_die => 0, + replication => 'database'); + + if (defined($expected_stdout)) + { + is($ret, 0, "$test_name: expected result code"); + is($stderr, '', "$test_name: no stderr"); + like($stdout, $expected_stdout, "$test_name: stdout matches"); + } + if (defined($expected_stderr)) + { + isnt($ret, 0, "$test_name: expected result code"); + like($stderr, $expected_stderr, "$test_name: stderr matches"); + } + + return; +} + # test --help=foo, analogous to program_help_ok() foreach my $arg (qw(commands variables)) { - $result = IPC::Run::run [ 'psql', "--help=$arg" ], '>', \$stdout, '2>', \$stderr; + $result = IPC::Run::run [ 'psql', "--help=$arg" ], '>', \$stdout, '2>', + \$stderr; ok($result, "psql --help=$arg exit code 0"); isnt($stdout, '', "psql --help=$arg goes to stdout"); is($stderr, '', "psql --help=$arg nothing to stderr"); @@ -34,11 +70,13 @@ max_wal_senders = 4 }); $node->start; -$node->command_like([ 'psql', '-c', '\copyright' ], qr/Copyright/, '\copyright'); -$node->command_like([ 'psql', '-c', '\help' ], qr/ALTER/, '\help without arguments'); -$node->command_like([ 'psql', '-c', '\help SELECT' ], qr/SELECT/, '\help'); - +psql_like($node, '\copyright', '\copyright', qr/Copyright/, undef); +psql_like($node, '\help without arguments', '\help', qr/ALTER/, undef); +psql_like($node, '\help with argument', '\help SELECT', qr/SELECT/, undef); # Test clean handling of unsupported replication command responses -$node->command_fails_like([ 'psql', '-d', 'replication=database', '-c', 'START_REPLICATION 0/0' ], - qr/^unexpected PQresultStatus: 8$/, 'handling of unexpected PQresultStatus'); +psql_like( + $node, + 'handling of unexpected PQresultStatus', + 'START_REPLICATION 0/0', + undef, qr/unexpected PQresultStatus: 8$/);