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
# 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,
'-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");
$old_sub->stop;
-command_fails(
+command_checks_all(
[
'pg_upgrade',
'--no-sync',
$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'
);
'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,
'--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'
);