mirror of
https://github.com/postgres/postgres.git
synced 2025-10-18 04:29:09 +03:00
Make TAP tests work on Windows.
On Windows, use listen_address=127.0.0.1 to allow TCP connections. We were already using "pg_regress --config-auth" to set up HBA appropriately. The standard_initdb helper function now sets up the server's unix_socket_directories or listen_addresses in the config file, so that they don't need to be specified in the pg_ctl command line anymore. That way, the pg_ctl invocations in test programs don't need to differ between Windows and Unix. Add another helper function to configure the server's pg_hba.conf to allow replication connections. The configuration is done similarly to "pg_regress --config-auth": trust on domain sockets on Unix, and SSPI authentication on Windows. Replace calls to "cat" and "touch" programs with built-in perl code, as those programs don't normally exist on Windows. Add instructions in the docs on how to install IPC::Run on Windows. Adjust vcregress.pl to not replace PERL5LIB completely in vcregress.pl, because otherwise cannot install IPC::Run in a non-standard location easily. Michael Paquier, reviewed by Noah Misch, some additional tweaking by me.
This commit is contained in:
@@ -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');
|
||||
|
Reference in New Issue
Block a user