PostgreSQL/src/bin/psql/t/001_basic.pl
Daniel Gustafsson 549ec201d6 Replace Test::More plans with done_testing
Rather than doing manual book keeping to plan the number of tests to run
in each TAP suite, conclude each run with done_testing() summing up the
the number of tests that ran. This removes the need for maintaning and
updating the plan count at the expense of an accurate count of remaining
during the test suite runtime.

This patch has been discussed a number of times, often in the context of
other patches which updates tests, so a larger number of discussions can
be found in the archives.

Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Reviewed-by: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Discussion: https://postgr.es/m/DD399313-3D56-4666-8079-88949DAC870F@yesql.se
2022-02-11 20:54:44 +01:00

85 lines
2.2 KiB
Perl

# Copyright (c) 2021-2022, PostgreSQL Global Development Group
use strict;
use warnings;
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
use Test::More;
program_help_ok('psql');
program_version_ok('psql');
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;
ok($result, "psql --help=$arg exit code 0");
isnt($stdout, '', "psql --help=$arg goes to stdout");
is($stderr, '', "psql --help=$arg nothing to stderr");
}
my $node = PostgreSQL::Test::Cluster->new('main');
$node->init;
$node->append_conf(
'postgresql.conf', q{
wal_level = 'logical'
max_replication_slots = 4
max_wal_senders = 4
});
$node->start;
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
psql_like(
$node,
'handling of unexpected PQresultStatus',
'START_REPLICATION 0/0',
undef, qr/unexpected PQresultStatus: 8$/);
done_testing();