aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2015-12-07 19:25:31 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2015-12-07 19:39:57 -0300
commit9821492ee417a5910a60f3d1f2ed24c062eab4e0 (patch)
treef1297b4dd6ec09c2bebfb297867f7c9563b07d23
parentb0cfb02cec9650492365c6a9eca2dfce3671096d (diff)
downloadpostgresql-9821492ee417a5910a60f3d1f2ed24c062eab4e0.tar.gz
postgresql-9821492ee417a5910a60f3d1f2ed24c062eab4e0.zip
Cleanup some problems in new Perl test code
Noted by Tom Lane: - PostgresNode had a BEGIN block which created files, contrary to perlmod suggestions to do that only on INIT blocks. - Assign ports randomly rather than starting from 90600. Noted by Noah Misch: - Change use of no-longer-set PGPORT environment variable to $node->port - Don't start a server in pg_controldata test - PostgresNode was reading the PID file incorrectly; test the right thing, and chomp the line we read from the PID file. - Remove an unused $devnull variable - Use 'pg_ctl kill' instead of "kill" directly, for Windos portability. - Make server log names more informative. Author: Michael Paquier
-rw-r--r--src/bin/pg_basebackup/t/010_pg_basebackup.pl3
-rw-r--r--src/bin/pg_controldata/t/001_pg_controldata.pl1
-rw-r--r--src/test/perl/PostgresNode.pm29
3 files changed, 14 insertions, 19 deletions
diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
index 3e491a82e4a..5991cf77f4a 100644
--- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl
+++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl
@@ -168,13 +168,14 @@ my $recovery_conf = slurp_file "$tempdir/backupR/recovery.conf";
# using a character class for the final "'" here works around an apparent
# bug in several version of the Msys DTK perl
+my $port = $node->port;
like(
$recovery_conf,
qr/^standby_mode = 'on[']$/m,
'recovery.conf sets standby_mode');
like(
$recovery_conf,
- qr/^primary_conninfo = '.*port=$ENV{PGPORT}.*'$/m,
+ qr/^primary_conninfo = '.*port=$port.*'$/m,
'recovery.conf sets primary_conninfo');
$node->command_ok(
diff --git a/src/bin/pg_controldata/t/001_pg_controldata.pl b/src/bin/pg_controldata/t/001_pg_controldata.pl
index ae45f41339c..073815aff68 100644
--- a/src/bin/pg_controldata/t/001_pg_controldata.pl
+++ b/src/bin/pg_controldata/t/001_pg_controldata.pl
@@ -13,7 +13,6 @@ command_fails([ 'pg_controldata', 'nonexistent' ],
my $node = get_new_node();
$node->init;
-$node->start;
command_like([ 'pg_controldata', $node->data_dir ],
qr/checkpoint/, 'pg_controldata produces output');
diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm
index aa7a00c9fa4..b18c6bf33c6 100644
--- a/src/test/perl/PostgresNode.pm
+++ b/src/test/perl/PostgresNode.pm
@@ -27,9 +27,8 @@ our @EXPORT = qw(
our ($test_pghost, $last_port_assigned, @all_nodes);
-BEGIN
+INIT
{
-
# PGHOST is set once and for all through a single series of tests when
# this module is loaded.
$test_pghost =
@@ -38,11 +37,7 @@ BEGIN
$ENV{PGDATABASE} = 'postgres';
# Tracking of last port value assigned to accelerate free port lookup.
- # XXX: Should this use PG_VERSION_NUM?
- $last_port_assigned = 90600 % 16384 + 49152;
-
- # Node tracking
- @all_nodes = ();
+ $last_port_assigned = int(rand() * 16384) + 49152;
}
sub new
@@ -50,12 +45,14 @@ sub new
my $class = shift;
my $pghost = shift;
my $pgport = shift;
+ my $testname = basename($0);
+ $testname =~ s/\.[^.]+$//;
my $self = {
_port => $pgport,
_host => $pghost,
_basedir => TestLib::tempdir,
_applname => "node_$pgport",
- _logfile => "$TestLib::log_path/node_$pgport.log" };
+ _logfile => "$TestLib::log_path/${testname}_node_${pgport}.log" };
bless $self, $class;
$self->dump_info;
@@ -297,17 +294,16 @@ sub _update_pid
# If we can open the PID file, read its first line and that's the PID we
# want. If the file cannot be opened, presumably the server is not
# running; don't be noisy in that case.
- open my $pidfile, $self->data_dir . "/postmaster.pid";
- if (not defined $pidfile)
+ if (open my $pidfile, $self->data_dir . "/postmaster.pid")
{
- $self->{_pid} = undef;
- print "# No postmaster PID\n";
+ chomp($self->{_pid} = <$pidfile>);
+ print "# Postmaster PID is $self->{_pid}\n";
+ close $pidfile;
return;
}
- $self->{_pid} = <$pidfile>;
- print "# Postmaster PID is $self->{_pid}\n";
- close $pidfile;
+ $self->{_pid} = undef;
+ print "# No postmaster PID\n";
}
#
@@ -327,7 +323,6 @@ sub get_new_node
{
$port++;
print "# Checking for port $port\n";
- my $devnull = $TestLib::windows_os ? "nul" : "/dev/null";
if (!TestLib::run_log([ 'pg_isready', '-p', $port ]))
{
$found = 1;
@@ -360,7 +355,7 @@ sub DESTROY
my $self = shift;
return if not defined $self->{_pid};
print "# signalling QUIT to $self->{_pid}\n";
- kill 'QUIT', $self->{_pid};
+ TestLib::system_log('pg_ctl', 'kill', 'QUIT', $self->{_pid});
}
sub teardown_node