aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_basebackup/t/010_pg_basebackup.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_basebackup/t/010_pg_basebackup.pl')
-rw-r--r--src/bin/pg_basebackup/t/010_pg_basebackup.pl139
1 files changed, 72 insertions, 67 deletions
diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
index b605fa91c01..4dbf8ca5224 100644
--- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl
+++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
@@ -1,6 +1,7 @@
use strict;
use warnings;
use Cwd;
+use Config;
use TestLib;
use Test::More tests => 51;
@@ -25,11 +26,7 @@ if (open BADCHARS, ">>$tempdir/pgdata/FOO\xe0\xe0\xe0BAR")
close BADCHARS;
}
-open HBA, ">>$tempdir/pgdata/pg_hba.conf";
-print HBA "local replication all trust\n";
-print HBA "host replication all 127.0.0.1/32 trust\n";
-print HBA "host replication all ::1/128 trust\n";
-close HBA;
+configure_hba_for_replication "$tempdir/pgdata";
system_or_bail 'pg_ctl', '-D', "$tempdir/pgdata", 'reload';
command_fails(
@@ -62,61 +59,6 @@ command_ok([ 'pg_basebackup', '-D', "$tempdir/tarbackup", '-Ft' ],
'tar format');
ok(-f "$tempdir/tarbackup/base.tar", 'backup tar was created');
-my $superlongname = "superlongname_" . ("x" x 100);
-
-system_or_bail 'touch', "$tempdir/pgdata/$superlongname";
-command_fails([ 'pg_basebackup', '-D', "$tempdir/tarbackup_l1", '-Ft' ],
- 'pg_basebackup tar with long name fails');
-unlink "$tempdir/pgdata/$superlongname";
-
-# Create a temporary directory in the system location and symlink it
-# to our physical temp location. That way we can use shorter names
-# for the tablespace directories, which hopefully won't run afoul of
-# the 99 character length limit.
-my $shorter_tempdir = tempdir_short . "/tempdir";
-symlink "$tempdir", $shorter_tempdir;
-
-mkdir "$tempdir/tblspc1";
-psql 'postgres',
- "CREATE TABLESPACE tblspc1 LOCATION '$shorter_tempdir/tblspc1';";
-psql 'postgres', "CREATE TABLE test1 (a int) TABLESPACE tblspc1;";
-command_ok([ 'pg_basebackup', '-D', "$tempdir/tarbackup2", '-Ft' ],
- 'tar format with tablespaces');
-ok(-f "$tempdir/tarbackup2/base.tar", 'backup tar was created');
-my @tblspc_tars = glob "$tempdir/tarbackup2/[0-9]*.tar";
-is(scalar(@tblspc_tars), 1, 'one tablespace tar was created');
-
-command_fails(
- [ 'pg_basebackup', '-D', "$tempdir/backup1", '-Fp' ],
- 'plain format with tablespaces fails without tablespace mapping');
-
-command_ok(
- [ 'pg_basebackup', '-D', "$tempdir/backup1", '-Fp',
- "-T$shorter_tempdir/tblspc1=$tempdir/tbackup/tblspc1" ],
- 'plain format with tablespaces succeeds with tablespace mapping');
-ok(-d "$tempdir/tbackup/tblspc1", 'tablespace was relocated');
-opendir(my $dh, "$tempdir/pgdata/pg_tblspc") or die;
-ok( ( grep {
- -l "$tempdir/backup1/pg_tblspc/$_"
- and readlink "$tempdir/backup1/pg_tblspc/$_" eq
- "$tempdir/tbackup/tblspc1"
- } readdir($dh)),
- "tablespace symlink was updated");
-closedir $dh;
-
-mkdir "$tempdir/tbl=spc2";
-psql 'postgres', "DROP TABLE test1;";
-psql 'postgres', "DROP TABLESPACE tblspc1;";
-psql 'postgres',
- "CREATE TABLESPACE tblspc2 LOCATION '$shorter_tempdir/tbl=spc2';";
-command_ok(
- [ 'pg_basebackup', '-D', "$tempdir/backup3", '-Fp',
- "-T$shorter_tempdir/tbl\\=spc2=$tempdir/tbackup/tbl\\=spc2" ],
- 'mapping tablespace with = sign in path');
-ok(-d "$tempdir/tbackup/tbl=spc2", 'tablespace with = sign was relocated');
-
-psql 'postgres', "DROP TABLESPACE tblspc2;";
-
command_fails(
[ 'pg_basebackup', '-D', "$tempdir/backup_foo", '-Fp', "-T=/foo" ],
'-T with empty old directory fails');
@@ -137,12 +79,75 @@ command_fails(
[ 'pg_basebackup', '-D', "$tempdir/backup_foo", '-Fp', "-Tfoo" ],
'-T with invalid format fails');
-mkdir "$tempdir/$superlongname";
-psql 'postgres',
- "CREATE TABLESPACE tblspc3 LOCATION '$tempdir/$superlongname';";
-command_ok([ 'pg_basebackup', '-D', "$tempdir/tarbackup_l3", '-Ft' ],
- 'pg_basebackup tar with long symlink target');
-psql 'postgres', "DROP TABLESPACE tblspc3;";
+# Tar format doesn't support filenames longer than 100 bytes.
+my $superlongname = "superlongname_" . ("x" x 100);
+my $superlongpath = "$tempdir/pgdata/$superlongname";
+
+open FILE, ">$superlongpath" or die "unable to create file $superlongpath";
+close FILE;
+command_fails([ 'pg_basebackup', '-D', "$tempdir/tarbackup_l1", '-Ft' ],
+ 'pg_basebackup tar with long name fails');
+unlink "$tempdir/pgdata/$superlongname";
+
+# The following tests test symlinks. Windows doesn't have symlinks, so
+# skip on Windows.
+SKIP: {
+ skip "symlinks not supported on Windows", 10 if ($Config{osname} eq "MSWin32");
+
+ # Create a temporary directory in the system location and symlink it
+ # to our physical temp location. That way we can use shorter names
+ # for the tablespace directories, which hopefully won't run afoul of
+ # the 99 character length limit.
+ my $shorter_tempdir = tempdir_short . "/tempdir";
+ symlink "$tempdir", $shorter_tempdir;
+
+ mkdir "$tempdir/tblspc1";
+ psql 'postgres',
+ "CREATE TABLESPACE tblspc1 LOCATION '$shorter_tempdir/tblspc1';";
+ psql 'postgres', "CREATE TABLE test1 (a int) TABLESPACE tblspc1;";
+ command_ok([ 'pg_basebackup', '-D', "$tempdir/tarbackup2", '-Ft' ],
+ 'tar format with tablespaces');
+ ok(-f "$tempdir/tarbackup2/base.tar", 'backup tar was created');
+ my @tblspc_tars = glob "$tempdir/tarbackup2/[0-9]*.tar";
+ is(scalar(@tblspc_tars), 1, 'one tablespace tar was created');
+
+ command_fails(
+ [ 'pg_basebackup', '-D', "$tempdir/backup1", '-Fp' ],
+ 'plain format with tablespaces fails without tablespace mapping');
+
+ command_ok(
+ [ 'pg_basebackup', '-D', "$tempdir/backup1", '-Fp',
+ "-T$shorter_tempdir/tblspc1=$tempdir/tbackup/tblspc1" ],
+ 'plain format with tablespaces succeeds with tablespace mapping');
+ ok(-d "$tempdir/tbackup/tblspc1", 'tablespace was relocated');
+ opendir(my $dh, "$tempdir/pgdata/pg_tblspc") or die;
+ ok( ( grep {
+ -l "$tempdir/backup1/pg_tblspc/$_"
+ and readlink "$tempdir/backup1/pg_tblspc/$_" eq
+ "$tempdir/tbackup/tblspc1"
+ } readdir($dh)),
+ "tablespace symlink was updated");
+ closedir $dh;
+
+ mkdir "$tempdir/tbl=spc2";
+ psql 'postgres', "DROP TABLE test1;";
+ psql 'postgres', "DROP TABLESPACE tblspc1;";
+ psql 'postgres',
+ "CREATE TABLESPACE tblspc2 LOCATION '$shorter_tempdir/tbl=spc2';";
+ command_ok(
+ [ 'pg_basebackup', '-D', "$tempdir/backup3", '-Fp',
+ "-T$shorter_tempdir/tbl\\=spc2=$tempdir/tbackup/tbl\\=spc2" ],
+ 'mapping tablespace with = sign in path');
+ ok(-d "$tempdir/tbackup/tbl=spc2", 'tablespace with = sign was relocated');
+ psql 'postgres', "DROP TABLESPACE tblspc2;";
+
+ mkdir "$tempdir/$superlongname";
+ psql 'postgres',
+ "CREATE TABLESPACE tblspc3 LOCATION '$tempdir/$superlongname';";
+ command_ok([ 'pg_basebackup', '-D', "$tempdir/tarbackup_l3", '-Ft' ],
+ 'pg_basebackup tar with long symlink target');
+ psql 'postgres', "DROP TABLESPACE tblspc3;";
+}
command_ok([ 'pg_basebackup', '-D', "$tempdir/backupR", '-R' ],
'pg_basebackup -R runs');
@@ -169,7 +174,7 @@ is($lsn, '', 'restart LSN of new slot is null');
command_ok([ 'pg_basebackup', '-D', "$tempdir/backupxs_sl", '-X', 'stream', '-S', 'slot1' ],
'pg_basebackup -X stream with replication slot runs');
$lsn = psql 'postgres', q{SELECT restart_lsn FROM pg_replication_slots WHERE slot_name = 'slot1'};
-like($lsn, qr!^0/[0-9A-Z]{8}$!, 'restart LSN of slot has advanced');
+like($lsn, qr!^0/[0-9A-Z]{7,8}$!, 'restart LSN of slot has advanced');
command_ok([ 'pg_basebackup', '-D', "$tempdir/backupxs_sl_R", '-X', 'stream', '-S', 'slot1', '-R' ],
'pg_basebackup with replication slot and -R runs');