]> granicus.if.org Git - postgresql/commitdiff
Avoid tests which crash the calling process on Windows
authorAndrew Dunstan <andrew@dunslane.net>
Fri, 12 May 2017 10:41:23 +0000 (06:41 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Fri, 12 May 2017 10:41:23 +0000 (06:41 -0400)
Certain recovery tests use the Perl IPC::Run module's start/kill_kill
method of processing. On at least some versions of perl this causes the
whole process and its caller to crash. If we ever find a better way of
doing these tests they can be re-enabled on this platform. This does not
affect Mingw or Cygwin builds, which use a different perl and a
different shell and so are not affected.

src/test/recovery/t/006_logical_decoding.pl
src/test/recovery/t/011_crash_recovery.pl

index 31b1218cc06e70479bbd76f0ab050b43cbddc298..1430c12923fe4a08406e0c71a809f2e5b40cdd9b 100644 (file)
@@ -8,6 +8,7 @@ use warnings;
 use PostgresNode;
 use TestLib;
 use Test::More tests => 16;
+use Config;
 
 # Initialize master node
 my $node_master = get_new_node('master');
@@ -72,13 +73,19 @@ is($node_master->psql('otherdb', "SELECT lsn FROM pg_logical_slot_peek_changes('
 $node_master->safe_psql('otherdb', qq[SELECT pg_create_logical_replication_slot('otherdb_slot', 'test_decoding');]);
 
 # make sure you can't drop a slot while active
-my $pg_recvlogical = IPC::Run::start(['pg_recvlogical', '-d', $node_master->connstr('otherdb'), '-S', 'otherdb_slot', '-f', '-', '--start']);
-$node_master->poll_query_until('otherdb', "SELECT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'otherdb_slot' AND active_pid IS NOT NULL)");
-is($node_master->psql('postgres', 'DROP DATABASE otherdb'), 3,
-       'dropping a DB with inactive logical slots fails');
-$pg_recvlogical->kill_kill;
-is($node_master->slot('otherdb_slot')->{'slot_name'}, undef,
-       'logical slot still exists');
+SKIP:
+{
+       # some Windows Perls at least don't like IPC::Run's start/kill_kill regime.
+       skip "Test fails on Windows perl", 2 if $Config{osname} eq 'MSWin32';
+
+       my $pg_recvlogical = IPC::Run::start(['pg_recvlogical', '-d', $node_master->connstr('otherdb'), '-S', 'otherdb_slot', '-f', '-', '--start']);
+       $node_master->poll_query_until('otherdb', "SELECT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'otherdb_slot' AND active_pid IS NOT NULL)");
+       is($node_master->psql('postgres', 'DROP DATABASE otherdb'), 3,
+          'dropping a DB with inactive logical slots fails');
+       $pg_recvlogical->kill_kill;
+       is($node_master->slot('otherdb_slot')->{'slot_name'}, undef,
+          'logical slot still exists');
+}
 
 $node_master->poll_query_until('otherdb', "SELECT EXISTS (SELECT 1 FROM pg_replication_slots WHERE slot_name = 'otherdb_slot' AND active_pid IS NULL)");
 is($node_master->psql('postgres', 'DROP DATABASE otherdb'), 0,
index 3c3718e6aa4ade4a4b8221a39713222652a4b936..6e924d69554d920c737baa9652efc2e2b78ca9df 100644 (file)
@@ -5,7 +5,17 @@ use strict;
 use warnings;
 use PostgresNode;
 use TestLib;
-use Test::More tests => 3;
+use Test::More;
+use Config;
+if  ($Config{osname} eq 'MSWin32')
+{
+       # some Windows Perls at least don't like IPC::Run's start/kill_kill regime.
+       plan skip_all => "Test fails on Windows perl";
+}
+else
+{
+       plan tests => 3;
+}
 
 my $node = get_new_node('master');
 $node->init(allows_streaming => 1);