X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=tests%2FTest.pm;h=058a7c505807dff05a65f936e46e2683e4f85b56;hp=d996e77d7612bea3f6675a4b29e128dc77df10a1;hb=f2613b6ddb8784e5abfddc4e3ef2ec7aa4cb32bd;hpb=a309257cbde0b7066ac9abcd18eee471945eb8cb diff --git a/tests/Test.pm b/tests/Test.pm index d996e77d..058a7c50 100755 --- a/tests/Test.pm +++ b/tests/Test.pm @@ -72,11 +72,7 @@ sub run { chdir ("$self->{_workdir}/$self->{_name}/input"); # Launch server - my $pid = fork(); - if($pid == 0) { - $self->_launch_server(); - } - # print STDERR "Spawned server with pid: $pid\n"; + my $pid = $self->_fork_and_launch_server(); # Call wget chdir ("$self->{_workdir}/$self->{_name}/output"); @@ -87,8 +83,10 @@ sub run { : system ("$self->{_workdir}/../src/$self->{_cmdline}"); # Shutdown server + # if we didn't explicitely kill the server, we would have to call + # waitpid ($pid, 0) here in order to wait for the child process to + # terminate kill ('TERM', $pid); - # print "Killed server\n"; # Verify download unless ($errcode == $self->{_errcode}) { @@ -211,6 +209,31 @@ sub __dir_walk { } } + +sub _fork_and_launch_server +{ + my $self = shift; + + pipe(FROM_CHILD, TO_PARENT) or die "Cannot create pipe!"; + select((select(TO_PARENT), $| = 1)[0]); + + my $pid = fork(); + if ($pid < 0) { + die "Cannot fork"; + } elsif ($pid == 0) { + # child + close FROM_CHILD; + $self->_launch_server(sub { print TO_PARENT "SYNC\n"; close TO_PARENT }); + } else { + # father + close TO_PARENT; + chomp(my $line = ); + close FROM_CHILD; + } + + return $pid; +} + 1; # vim: et ts=4 sw=4