Skip pg_baseback long filename test if path too long on Windows
authorAndrew Dunstan
Thu, 6 Jul 2023 16:27:40 +0000 (12:27 -0400)
committerAndrew Dunstan
Thu, 6 Jul 2023 16:34:18 +0000 (12:34 -0400)
On Windows, it's sometimes difficult to create a file with a path longer
than 255 chars, and if it can be created it might not be seen by the
archiver. This can be triggered by the test for tar backups with
filenames greater than 100 bytes. So we skip that test if the path would
exceed 255.

Backpatch to all live branches.

Reviewed by Daniel Gustafsson

Discussion: https://postgr.es/m/666ac55b-3400-fb2c-2cea-0281bf36a53c@dunslane.net

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

index ac1ac79470385012ecae8e38ff9d1152dd36ae0d..09c540060a4db40956a2694a01de4d969918805b 100644 (file)
@@ -199,17 +199,23 @@ $node->command_fails(
    [ 'pg_basebackup', '-D', "$tempdir/backup_foo", '-Fp', "-Tfoo" ],
    '-T with invalid format fails');
 
-# Tar format doesn't support filenames longer than 100 bytes.
 my $superlongname = "superlongname_" . ("x" x 100);
-my $superlongpath = "$pgdata/$superlongname";
+# Tar format doesn't support filenames longer than 100 bytes.
+SKIP:
+{
+   my $superlongpath = "$pgdata/$superlongname";
 
-open my $file, '>', "$superlongpath"
-  or die "unable to create file $superlongpath";
-close $file;
-$node->command_fails(
-   [ 'pg_basebackup', '-D', "$tempdir/tarbackup_l1", '-Ft' ],
-   'pg_basebackup tar with long name fails');
-unlink "$pgdata/$superlongname";
+   skip "File path too long", 1
+     if $windows_os && length($superlongpath) > 255;
+
+   open my $file, '>', "$superlongpath"
+     or die "unable to create file $superlongpath";
+   close $file;
+   $node->command_fails(
+       [ 'pg_basebackup', '-D', "$tempdir/tarbackup_l1", '-Ft' ],
+       'pg_basebackup tar with long name fails');
+   unlink "$superlongpath";
+}
 
 # The following tests test symlinks. Windows doesn't have symlinks, so
 # skip on Windows.