is($body, "hello world\n", 'callback body matches expected');
}
+{
+ my $conn = conn_for($sock, 'getline-die');
+ $conn->write("GET /getline-die HTTP/1.1\r\nHost: example.com\r\n\r\n");
+ ok($conn->read(my $buf, 8192), 'read some response');
+ like($buf, qr!HTTP/1\.1 200\b[^\r]*\r\n!, 'got some sort of header');
+ is($conn->read(my $nil, 8192), 0, 'read EOF');
+ $conn = undef;
+ my $after = capture($err);
+ is(scalar(grep(/GETLINE FAIL/, @$after)), 1, 'failure logged');
+ is(scalar(grep(/CLOSE FAIL/, @$after)), 1, 'body->close not called');
+}
+
+{
+ my $conn = conn_for($sock, 'close-die');
+ $conn->write("GET /close-die HTTP/1.1\r\nHost: example.com\r\n\r\n");
+ ok($conn->read(my $buf, 8192), 'read some response');
+ like($buf, qr!HTTP/1\.1 200\b[^\r]*\r\n!, 'got some sort of header');
+ is($conn->read(my $nil, 8192), 0, 'read EOF');
+ $conn = undef;
+ my $after = capture($err);
+ is(scalar(grep(/GETLINE FAIL/, @$after)), 0, 'getline not failed');
+ is(scalar(grep(/CLOSE FAIL/, @$after)), 1, 'body->close not called');
+}
+
{
my $conn = conn_for($sock, 'excessive header');
$SIG{PIPE} = 'IGNORE';
SKIP: {
use POSIX qw(dup2);
- use IO::File;
my $have_curl = 0;
foreach my $p (split(':', $ENV{PATH})) {
-x "$p/curl" or next;
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: $!";
+ open(my $tout, '+>', undef) or die "open temporary file: $!";
my $pid = fork;
defined $pid or die "fork: $!";
my @cmd = (qw(curl --tcp-nodelay --no-buffer -T- -HExpect: -sS), $url);
done_testing();
+sub capture {
+ my ($f) = @_;
+ open my $fh, '+<', $f or die "failed to open $f: $!\n";
+ local $/ = "\n";
+ my @r = <$fh>;
+ truncate($fh, 0) or die "truncate failed on $f: $!\n";
+ \@r
+}
+
1;