diff options
author | Eric Wong <e@80x24.org> | 2016-02-23 23:17:01 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-02-23 23:17:01 +0000 |
commit | 4b644ab063e1390ec09dd85e3c9a019ad86682e2 (patch) | |
tree | 925ed5c95be2a9eba680ef4c934bd0d60ff36418 /t | |
parent | dbaf64b646943bd92e1aa8d581e23a5adb4a3e57 (diff) | |
download | public-inbox-4b644ab063e1390ec09dd85e3c9a019ad86682e2.tar.gz |
Just in case my knowledge of chunking is wrong.
Diffstat (limited to 't')
-rw-r--r-- | t/httpd-corner.t | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/t/httpd-corner.t b/t/httpd-corner.t index 5834c1bd..366e56cb 100644 --- a/t/httpd-corner.t +++ b/t/httpd-corner.t @@ -16,7 +16,7 @@ use Digest::SHA qw(sha1_hex); use File::Temp qw/tempdir/; use Cwd qw/getcwd/; use IO::Socket; -use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD); +use Fcntl qw(FD_CLOEXEC F_SETFD F_GETFD :seek); use Socket qw(SO_KEEPALIVE IPPROTO_TCP TCP_NODELAY); my $tmpdir = tempdir(CLEANUP => 1); my $err = "$tmpdir/stderr.log"; @@ -82,6 +82,43 @@ my $check_self = sub { is($body, sha1_hex($str), 'read expected body'); }; +SKIP: { + use POSIX qw(dup2); + use IO::File; + my $have_curl = 0; + foreach my $p (split(':', $ENV{PATH})) { + -x "$p/curl" or next; + $have_curl = 1; + last; + } + my $ntest = 2; + $have_curl or skip('curl(1) missing', $ntest); + my $url = 'http://' . $sock->sockhost . ':' . $sock->sockport . '/sha1'; + my ($r, $w); + pipe($r, $w) or die "pipe: $!"; + my $tout = IO::File->new_tmpfile or die "new_tmpfile: $!"; + my $pid = fork; + defined $pid or die "fork: $!"; + my @cmd = (qw(curl --tcp-nodelay --no-buffer -T- -HExpect: -sS), $url); + if ($pid == 0) { + dup2(fileno($r), 0) or die "redirect stdin failed: $!\n"; + dup2(fileno($tout), 1) or die "redirect stdout failed: $!\n"; + exec(@cmd) or die 'exec `' . join(' '). "' failed: $!\n"; + } + $w->autoflush(1); + foreach my $c ('a'..'z') { + print $w $c or die "failed to write to curl: $!"; + delay(); + } + close $w or die "close write pipe: $!"; + close $r or die "close read pipe: $!"; + my $kid = waitpid $pid, 0; + is($?, 0, 'curl exited successfully'); + $tout->sysseek(0, SEEK_SET); + $tout->sysread(my $buf, 100); + is($buf, sha1_hex($str), 'read expected body'); +} + { my $conn = conn_for($sock, '1.1 pipeline together'); $conn->write("PUT /sha1 HTTP/1.1\r\nUser-agent: hello\r\n\r\n" . |