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");
});
$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$/);