| From 3eff3ad69a46364475e1f4abdf9412cfa87e3d6c Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Tim=20R=C3=BChsen?= <tim.ruehsen@gmx.de> |
| Date: Tue, 28 Oct 2014 11:40:34 +0100 |
| Subject: [PATCH] synchronize client and server in Test-proxied-https-auth.px |
| |
| --- |
| tests/ChangeLog | 4 ++++ |
| tests/Test-proxied-https-auth.px | 36 +++++++++++++++++++++++++----------- |
| 2 files changed, 29 insertions(+), 11 deletions(-) |
| |
| 2014-10-28 Tim Ruehsen <tim.ruehsen@gmx.de> |
| |
| * tests/Test-proxied-https-auth.px: synchronize client and server |
| |
| diff --git a/tests/Test-proxied-https-auth.px b/tests/Test-proxied-https-auth.px |
| index cc987ff..272003f 100755 |
| --- a/tests/Test-proxied-https-auth.px |
| +++ b/tests/Test-proxied-https-auth.px |
| @@ -49,12 +49,15 @@ sub get_request { |
| } |
| |
| sub do_server { |
| + my ($synch_callback) = @_; |
| my $alrm = alarm 10; |
| - |
| my $s = $SOCKET; |
| my $conn; |
| my $rqst; |
| my $rspn; |
| + |
| + $synch_callback->(); |
| + |
| for my $expect_inner_auth (0, 1) { |
| $conn = $s->accept; |
| $rqst = $conn->get_request; |
| @@ -90,7 +93,7 @@ sub do_server { |
| Connection => 'close' |
| ]); |
| $rspn->protocol('HTTP/1.0'); |
| - print $rspn->as_string; |
| + print STDERR $rspn->as_string; |
| print $conn $rspn->as_string; |
| } else { |
| die "No proxied auth\n" unless $rqst->header('Authorization'); |
| @@ -100,9 +103,9 @@ sub do_server { |
| 'Connection' => 'close', |
| ], "foobarbaz\n"); |
| $rspn->protocol('HTTP/1.0'); |
| - print "=====\n"; |
| - print $rspn->as_string; |
| - print "\n=====\n"; |
| + print STDERR "=====\n"; |
| + print STDERR $rspn->as_string; |
| + print STDERR "\n=====\n"; |
| print $conn $rspn->as_string; |
| } |
| $conn->close; |
| @@ -113,18 +116,29 @@ sub do_server { |
| } |
| |
| sub fork_server { |
| - my $pid = fork; |
| - die "Couldn't fork" if ($pid < 0); |
| - return $pid if $pid; |
| + 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; |
| + do_server(sub { print TO_PARENT "SYNC\n"; close TO_PARENT }); |
| + } else { |
| + # parent |
| + close TO_PARENT; |
| + chomp(my $line = <FROM_CHILD>); |
| + close FROM_CHILD; |
| + } |
| |
| - &do_server; |
| - exit; |
| + return $pid; |
| } |
| |
| system ('rm -f needs-auth.txt'); |
| my $pid = &fork_server; |
| |
| -sleep 1; |
| my $cmdline = $WgetTest::WGETPATH . " --user=fiddle-dee-dee" |
| . " --password=Dodgson -e https_proxy=localhost:{{port}}" |
| . " --no-check-certificate" |
| -- |
| 2.1.2 |
| |