psql: Rework TAP routine psql_fails_like() to define WAL sender context
authorMichael Paquier <michael@paquier.xyz>
Wed, 23 Apr 2025 06:33:07 +0000 (15:33 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 23 Apr 2025 06:33:07 +0000 (15:33 +0900)
The routine was coded so as a WAL sender was always used, state required
only for one failure test related to START_REPLICATION.  This test is
changed so as a WAL sender is used by passing a replication option to
psql_fails_like(), instead of forcing the use of a WAL sender for all
the tests.

This has come up as useful in the context of a separate bug fix where
we are looking at extending tests for some failure scenarios.  These
tests need to happen in the context of a normal backend, and not a WAL
sender where the extended query protocol cannot be used.

Discussion: https://postgr.es/m/aAXkJIOildLUA7vQ@paquier.xyz

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

index 739cb43970875de97e4d44cce17fcbc6d2d3021a..b0e4919d4d71fd1e7af5b8e72098c1c8d8709853 100644 (file)
@@ -34,11 +34,13 @@ sub psql_fails_like
 {
    local $Test::Builder::Level = $Test::Builder::Level + 1;
 
-   my ($node, $sql, $expected_stderr, $test_name) = @_;
+   my ($node, $sql, $expected_stderr, $test_name, $replication) = @_;
+
+   # Use the context of a WAL sender, if requested by the caller.
+   $replication = '' unless defined($replication);
 
-   # Use the context of a WAL sender, some of the tests rely on that.
    my ($ret, $stdout, $stderr) =
-     $node->psql('postgres', $sql, replication => 'database');
+     $node->psql('postgres', $sql, replication => $replication);
 
    isnt($ret, 0, "$test_name: exit code not 0");
    like($stderr, $expected_stderr, "$test_name: matches");
@@ -79,7 +81,7 @@ psql_fails_like(
    $node,
    'START_REPLICATION 0/0',
    qr/unexpected PQresultStatus: 8$/,
-   'handling of unexpected PQresultStatus');
+   'handling of unexpected PQresultStatus', 'database');
 
 # test \timing
 psql_like(