Improve TAP tests of pg_basebackup
authorMichael Paquier <michael@paquier.xyz>
Thu, 23 Jan 2025 06:15:36 +0000 (15:15 +0900)
committerMichael Paquier <michael@paquier.xyz>
Thu, 23 Jan 2025 06:15:36 +0000 (15:15 +0900)
This addresses some minor issues with the TAP tests of pg_basebackup:
- Remove three duplicated tests used for incorrect option combinations.
- Add more pattern checks for commands doomed to fail, to make sure that
the error generated is the expected one.  These are for tests related to
the tablespace mapping and incorrect option combinations.
- Fix the description of one test for the case of backup target versus
format.

Issues noticed while reviewing this area of the tests.

Discussion: https://postgr.es/m/87bjvy50cs.fsf@wibble.ilmari.org

src/bin/pg_basebackup/t/010_pg_basebackup.pl

index 81c82cf712d54092b6cba9fe534fe9330998fbc3..89ff26b631432f3a3a628a49999cb4fdeefc4afe 100644 (file)
@@ -324,53 +324,59 @@ $node->command_ok(
 ok(-f "$tempdir/tarbackup/base.tar", 'backup tar was created');
 rmtree("$tempdir/tarbackup");
 
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backup_foo",
        '--format' => 'plain',
        '--tablespace-mapping' => '=/foo'
    ],
+   qr/invalid tablespace mapping format/,
    '--tablespace-mapping with empty old directory fails');
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backup_foo",
        '--format' => 'plain',
        '--tablespace-mapping' => '/foo='
    ],
+   qr/invalid tablespace mapping format/,
    '--tablespace-mapping with empty new directory fails');
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backup_foo",
        '--format' => 'plain',
        '--tablespace-mapping' => '/foo=/bar=/baz'
    ],
+   qr/multiple "=" signs in tablespace mapping/,
    '--tablespace-mapping with multiple = fails');
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backup_foo",
        '--format' => 'plain',
        '--tablespace-mapping' => 'foo=/bar'
    ],
+   qr/old directory is not an absolute path in tablespace mapping/,
    '--tablespace-mapping with old directory not absolute fails');
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backup_foo",
        '--format' => 'plain',
        '--tablespace-mapping' => '/foo=bar'
    ],
+   qr/new directory is not an absolute path in tablespace mapping/,
    '--tablespace-mapping with new directory not absolute fails');
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backup_foo",
        '--format' => 'plain',
        '--tablespace-mapping' => 'foo'
    ],
+   qr/invalid tablespace mapping format/,
    '--tablespace-mapping with invalid format fails');
 
 my $superlongname = "superlongname_" . ("x" x 100);
@@ -709,7 +715,7 @@ $node->command_fails_like(
        '--format' => 'tar'
    ],
    qr/cannot specify both format and backup target/,
-   'backup target and output directory');
+   'backup target and format');
 $node->command_ok(
    [
        @pg_basebackup_defs,
@@ -742,24 +748,26 @@ ok( -f "$tempdir/backuponserver/base.tar",
    'backup tar was created as non-superuser');
 rmtree("$tempdir/backuponserver");
 
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backupxs_sl_fail",
        '--wal-method' => 'stream',
        '--slot' => 'slot0'
    ],
+   qr/replication slot "slot0" does not exist/,
    'pg_basebackup fails with nonexistent replication slot');
 
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backupxs_slot",
        '--create-slot'
    ],
+   qr/--create-slot needs a slot to be specified using --slot/,
    'pg_basebackup --create-slot fails without slot name');
 
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backupxs_slot",
@@ -767,6 +775,7 @@ $node->command_fails(
        '--slot' => 'slot0',
        '--no-slot'
    ],
+   qr/--no-slot cannot be used with slot name/,
    'pg_basebackup fails with --create-slot --slot --no-slot');
 $node->command_fails_like(
    [
@@ -785,33 +794,6 @@ $node->command_ok(
    ],
    'pg_basebackup --wal-method fetch runs');
 
-$node->command_fails(
-   [
-       @pg_basebackup_defs,
-       '--pgdata' => "$tempdir/backupxs_sl_fail",
-       '--wal-method' => 'stream',
-       '--slot' => 'slot0'
-   ],
-   'pg_basebackup fails with nonexistent replication slot');
-
-$node->command_fails(
-   [
-       @pg_basebackup_defs,
-       '--pgdata' => "$tempdir/backupxs_slot",
-       '--create-slot'
-   ],
-   'pg_basebackup --create-slot fails without slot name');
-
-$node->command_fails(
-   [
-       @pg_basebackup_defs,
-       '--pgdata' => "$tempdir/backupxs_slot",
-       '--create-slot',
-       '--slot' => 'slot0',
-       '--no-slot'
-   ],
-   'pg_basebackup fails with --create-slot --slot --no-slot');
-
 $node->command_ok(
    [
        @pg_basebackup_defs,
@@ -836,13 +818,14 @@ isnt(
    '',
    'restart LSN of new slot is not null');
 
-$node->command_fails(
+$node->command_fails_like(
    [
        @pg_basebackup_defs,
        '--pgdata' => "$tempdir/backupxs_slot1",
        '--create-slot',
        '--slot' => 'slot0'
    ],
+   qr/replication slot "slot0" already exists/,
    'pg_basebackup fails with --create-slot --slot and a previously existing slot'
 );