Improve some psql test code
authorPeter Eisentraut <peter@eisentraut.org>
Tue, 22 Feb 2022 12:42:38 +0000 (13:42 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 28 Feb 2022 13:06:25 +0000 (14:06 +0100)
Split psql_like() into two functions psql_like() and psql_fails_like()
and make them mirror the existing command_like() and
command_fails_like() more closely.  In particular, follow the
universal convention that the test name is the last argument.

Discussion: https://www.postgresql.org/message-id/3199e176-424e-1bef-f180-c1548466c2da@enterprisedb.com

src/bin/psql/t/001_basic.pl

index ba3dd846bad81165c9ac74e7f691e1d6f10c2cca..f416e0ab5e8f0c45e9c705c77bb956cbe5cca422 100644 (file)
@@ -12,40 +12,36 @@ 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.
+# Execute a psql command and check its output.
 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;
+   my ($node, $sql, $expected_stdout, $test_name) = @_;
+
+   my ($ret, $stdout, $stderr) = $node->psql('postgres', $sql);
+
+   is($ret,    0,  "$test_name: exit code 0");
+   is($stderr, '', "$test_name: no stderr");
+   like($stdout, $expected_stdout, "$test_name: matches");
+
+   return;
+}
+
+# Execute a psql command and check that it fails and check the stderr.
+sub psql_fails_like
+{
+   local $Test::Builder::Level = $Test::Builder::Level + 1;
 
-   die "cannot specify both expected stdout and stderr here"
-     if (defined($expected_stdout) && defined($expected_stderr));
+   my ($node, $sql, $expected_stderr, $test_name) = @_;
 
    # 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,
+       'postgres', $sql,
        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");
-   }
+   isnt($ret, 0, "$test_name: exit code not 0");
+   like($stderr, $expected_stderr, "$test_name: matches");
 
    return;
 }
@@ -53,6 +49,9 @@ sub psql_like
 # test --help=foo, analogous to program_help_ok()
 foreach my $arg (qw(commands variables))
 {
+   my ($stdout, $stderr);
+   my $result;
+
    $result = IPC::Run::run [ 'psql', "--help=$arg" ], '>', \$stdout, '2>',
      \$stderr;
    ok($result, "psql --help=$arg exit code 0");
@@ -70,15 +69,15 @@ 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);
+psql_like($node, '\copyright', qr/Copyright/, '\copyright');
+psql_like($node, '\help', qr/ALTER/, '\help without arguments');
+psql_like($node, '\help SELECT', qr/SELECT/, '\help with argument');
 
 # Test clean handling of unsupported replication command responses
-psql_like(
+psql_fails_like(
    $node,
-   'handling of unexpected PQresultStatus',
    'START_REPLICATION 0/0',
-   undef, qr/unexpected PQresultStatus: 8$/);
+   qr/unexpected PQresultStatus: 8$/,
+   'handling of unexpected PQresultStatus');
 
 done_testing();