pg_upgrade: Check for the expected error message in TAP tests.
authorMasahiko Sawada <msawada@postgresql.org>
Tue, 4 Mar 2025 19:16:12 +0000 (11:16 -0800)
committerMasahiko Sawada <msawada@postgresql.org>
Tue, 4 Mar 2025 19:16:12 +0000 (11:16 -0800)
Since pg_upgrade prints its error messages on stdout, we can't use
command_fails_like() to check if it fails for the right reason. This
commit uses command_checks_all() in pg_upgrade TAP tests to check the
exit status and stdout, enabling proper verification of error
reasons.

Author: Dagfinn Ilmari MannsÃ¥ker <ilmari@ilmari.org>
Discussion: https://postgr.es/m/87tt8h1vb7.fsf@wibble.ilmari.org

src/bin/pg_upgrade/t/002_pg_upgrade.pl
src/bin/pg_upgrade/t/004_subscription.pl
src/bin/pg_upgrade/t/005_char_signedness.pl

index 45ea94c84bb090d516b2f80608ae97aa84286090..c00cf68d66081a244d54dc5d35fa296130ea3e2d 100644 (file)
@@ -396,7 +396,7 @@ $oldnode->stop;
 # Cause a failure at the start of pg_upgrade, this should create the logging
 # directory pg_upgrade_output.d but leave it around.  Keep --check for an
 # early exit.
-command_fails(
+command_checks_all(
    [
        'pg_upgrade', '--no-sync',
        '-d', $oldnode->data_dir,
@@ -408,6 +408,9 @@ command_fails(
        '-P', $newnode->port,
        $mode, '--check',
    ],
+   1,
+   [qr{check for ".*?does/not/exist" failed}],
+   [],
    'run of pg_upgrade --check for new instance with incorrect binary path');
 ok(-d $newnode->data_dir . "/pg_upgrade_output.d",
    "pg_upgrade_output.d/ not removed after pg_upgrade failure");
index 13773316e1d08ddb140e66964269385d1dc55f87..e3ccff9f2702ce1035c3dc4ee281f83878f39729 100644 (file)
@@ -130,7 +130,7 @@ $old_sub->safe_psql('postgres',
 
 $old_sub->stop;
 
-command_fails(
+command_checks_all(
    [
        'pg_upgrade',
        '--no-sync',
@@ -144,6 +144,11 @@ command_fails(
        $mode,
        '--check',
    ],
+   1,
+   [
+       qr/\QYour installation contains subscriptions without origin or having relations not in i (initialize) or r (ready) state\E/
+   ],
+   [],
    'run of pg_upgrade --check for old instance with relation in \'d\' datasync(invalid) state and missing replication origin'
 );
 
index b3092f03bb73a793e31864d108a498d3b081502f..d186822ac770af80ecd74410909ebe5e5baff2d2 100644 (file)
@@ -41,7 +41,7 @@ command_like(
    'updated default char signedness is unsigned in control file');
 
 # Cannot use --set-char-signedness option for upgrading from v18+
-command_fails(
+command_checks_all(
    [
        'pg_upgrade', '--no-sync',
        '-d', $old->data_dir,
@@ -54,6 +54,9 @@ command_fails(
        '--set-char-signedness', 'signed',
        $mode
    ],
+   1,
+   [qr/--set-char-signedness option cannot be used/],
+   [],
    '--set-char-signedness option cannot be used for upgrading from v18 or later'
 );