@@ -87,6 +87,8 @@ our @EXPORT = qw(
87
87
88
88
our ($windows_os , $tmp_check , $log_path , $test_logfile );
89
89
90
+ my @no_stdin ;
91
+
90
92
BEGIN
91
93
{
92
94
@@ -178,6 +180,21 @@ INIT
178
180
autoflush STDOUT 1;
179
181
autoflush STDERR 1;
180
182
autoflush $testlog 1;
183
+
184
+ # Settings to close stdin for certain commands.
185
+ # On non-Windows, use a pseudo-terminal, so that libraries like openssl
186
+ # which open the tty if they think stdin isn't one for a password
187
+ # don't block. Windows doesn't have ptys, so just provide an empty
188
+ # string for stdin.
189
+ if ($windows_os )
190
+ {
191
+ @no_stdin = (' <' , \" " );
192
+ }
193
+ else
194
+ {
195
+ use charnames ' :full' ;
196
+ @no_stdin = (' <pty<' , \" \N{END OF TRANSMISSION} " );
197
+ }
181
198
}
182
199
183
200
END
@@ -343,7 +360,7 @@ sub run_command
343
360
{
344
361
my ($cmd ) = @_ ;
345
362
my ($stdout , $stderr );
346
- my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr ;
363
+ my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin ;
347
364
chomp ($stdout );
348
365
chomp ($stderr );
349
366
return ($stdout , $stderr );
@@ -576,7 +593,7 @@ sub check_pg_config
576
593
my ($regexp ) = @_ ;
577
594
my ($stdout , $stderr );
578
595
my $result = IPC::Run::run [ ' pg_config' , ' --includedir' ], ' >' ,
579
- \$stdout , ' 2>' , \$stderr
596
+ \$stdout , ' 2>' , \$stderr , @no_stdin
580
597
or die " could not execute pg_config" ;
581
598
chomp ($stdout );
582
599
$stdout =~ s /\r $// ;
@@ -673,7 +690,7 @@ sub program_help_ok
673
690
my ($stdout , $stderr );
674
691
print (" # Running: $cmd --help\n " );
675
692
my $result = IPC::Run::run [ $cmd , ' --help' ], ' >' , \$stdout , ' 2>' ,
676
- \$stderr ;
693
+ \$stderr , @no_stdin ;
677
694
ok($result , " $cmd --help exit code 0" );
678
695
isnt($stdout , ' ' , " $cmd --help goes to stdout" );
679
696
is($stderr , ' ' , " $cmd --help nothing to stderr" );
@@ -695,7 +712,7 @@ sub program_version_ok
695
712
my ($stdout , $stderr );
696
713
print (" # Running: $cmd --version\n " );
697
714
my $result = IPC::Run::run [ $cmd , ' --version' ], ' >' , \$stdout , ' 2>' ,
698
- \$stderr ;
715
+ \$stderr , @no_stdin ;
699
716
ok($result , " $cmd --version exit code 0" );
700
717
isnt($stdout , ' ' , " $cmd --version goes to stdout" );
701
718
is($stderr , ' ' , " $cmd --version nothing to stderr" );
@@ -718,8 +735,7 @@ sub program_options_handling_ok
718
735
my ($stdout , $stderr );
719
736
print (" # Running: $cmd --not-a-valid-option\n " );
720
737
my $result = IPC::Run::run [ $cmd , ' --not-a-valid-option' ], ' >' ,
721
- \$stdout ,
722
- ' 2>' , \$stderr ;
738
+ \$stdout , ' 2>' , \$stderr , @no_stdin ;
723
739
ok(!$result , " $cmd with invalid option nonzero exit code" );
724
740
isnt($stderr , ' ' , " $cmd with invalid option prints error message" );
725
741
return ;
@@ -740,7 +756,7 @@ sub command_like
740
756
my ($cmd , $expected_stdout , $test_name ) = @_ ;
741
757
my ($stdout , $stderr );
742
758
print (" # Running: " . join (" " , @{$cmd }) . " \n " );
743
- my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr ;
759
+ my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin ;
744
760
ok($result , " $test_name : exit code 0" );
745
761
is($stderr , ' ' , " $test_name : no stderr" );
746
762
like($stdout , $expected_stdout , " $test_name : matches" );
@@ -769,7 +785,8 @@ sub command_like_safe
769
785
my $stdoutfile = File::Temp-> new();
770
786
my $stderrfile = File::Temp-> new();
771
787
print (" # Running: " . join (" " , @{$cmd }) . " \n " );
772
- my $result = IPC::Run::run $cmd , ' >' , $stdoutfile , ' 2>' , $stderrfile ;
788
+ my $result = IPC::Run::run $cmd , ' >' , $stdoutfile , ' 2>' , $stderrfile ,
789
+ @no_stdin ;
773
790
$stdout = slurp_file($stdoutfile );
774
791
$stderr = slurp_file($stderrfile );
775
792
ok($result , " $test_name : exit code 0" );
@@ -793,7 +810,7 @@ sub command_fails_like
793
810
my ($cmd , $expected_stderr , $test_name ) = @_ ;
794
811
my ($stdout , $stderr );
795
812
print (" # Running: " . join (" " , @{$cmd }) . " \n " );
796
- my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr ;
813
+ my $result = IPC::Run::run $cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin ;
797
814
ok(!$result , " $test_name : exit code not 0" );
798
815
like($stderr , $expected_stderr , " $test_name : matches" );
799
816
return ;
@@ -831,7 +848,7 @@ sub command_checks_all
831
848
# run command
832
849
my ($stdout , $stderr );
833
850
print (" # Running: " . join (" " , @{$cmd }) . " \n " );
834
- IPC::Run::run($cmd , ' >' , \$stdout , ' 2>' , \$stderr );
851
+ IPC::Run::run($cmd , ' >' , \$stdout , ' 2>' , \$stderr , @no_stdin );
835
852
836
853
# See http://perldoc.perl.org/perlvar.html#%24CHILD_ERROR
837
854
my $ret = $? ;
0 commit comments