Commit 792dba73 authored by Andrew Dunstan's avatar Andrew Dunstan

Fix closing stdin in TestLib.pm

Commit 9af34f3c naively assumed that all non-windows platforms would
have pseudoterminals and that perl would have IO::Pty. Such is not the
case. Instead of assumung anything, test for the presence of IO::Pty and
only use code that might depend on it if it's present. The test result is
exposed in $TestLib::have_io_pty so that it can be conveniently used in
SKIP tests.

Discussion: https://postgr.es/m/20191126044110.GB5435@paquier.xyz
parent 553d2ec2
...@@ -21,6 +21,7 @@ TestLib - helper module for writing PostgreSQL's C<prove> tests. ...@@ -21,6 +21,7 @@ TestLib - helper module for writing PostgreSQL's C<prove> tests.
# Miscellanea # Miscellanea
print "on Windows" if $TestLib::windows_os; print "on Windows" if $TestLib::windows_os;
print "IO::Pty is available" if $TestLib::have_io_pty;
my $path = TestLib::perl2host($backup_dir); my $path = TestLib::perl2host($backup_dir);
ok(check_mode_recursive($stream_dir, 0700, 0600), ok(check_mode_recursive($stream_dir, 0700, 0600),
"check stream dir permissions"); "check stream dir permissions");
...@@ -83,9 +84,10 @@ our @EXPORT = qw( ...@@ -83,9 +84,10 @@ our @EXPORT = qw(
command_checks_all command_checks_all
$windows_os $windows_os
$have_io_pty
); );
our ($windows_os, $tmp_check, $log_path, $test_logfile); our ($windows_os, $tmp_check, $log_path, $test_logfile, $have_io_pty);
my @no_stdin; my @no_stdin;
...@@ -119,6 +121,9 @@ BEGIN ...@@ -119,6 +121,9 @@ BEGIN
require Win32API::File; require Win32API::File;
Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle)); Win32API::File->import(qw(createFile OsFHandleOpen CloseHandle));
} }
eval { require IO::Pty; };
$have_io_pty = 1 unless $@;
} }
=pod =pod
...@@ -133,6 +138,12 @@ Set to true when running under Windows, except on Cygwin. ...@@ -133,6 +138,12 @@ Set to true when running under Windows, except on Cygwin.
=back =back
=item C<$have_io_pty>
Set to true when IO::Pty is available.
=back
=cut =cut
INIT INIT
...@@ -182,18 +193,17 @@ INIT ...@@ -182,18 +193,17 @@ INIT
autoflush $testlog 1; autoflush $testlog 1;
# Settings to close stdin for certain commands. # Settings to close stdin for certain commands.
# On non-Windows, use a pseudo-terminal, so that libraries like openssl # If IO::Pty is present, use a pseudo-terminal, so that libraries like
# which open the tty if they think stdin isn't one for a password # openssl which open the tty if they think stdin isn't one for a password
# don't block. Windows doesn't have ptys, so just provide an empty # don't block. Elsewhere just provide an empty string for stdin.
# string for stdin. if ($have_io_pty)
if ($windows_os)
{ {
@no_stdin = ('<', \""); use charnames ':full';
@no_stdin = ('<pty<', \"\N{END OF TRANSMISSION}");
} }
else else
{ {
use charnames ':full'; @no_stdin = ('<', \"");
@no_stdin = ('<pty<', \"\N{END OF TRANSMISSION}");
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment