X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fhttpd-corner.t;h=a720670ec774e00a651db8767b89ac263de1b04c;hb=4db4bfa2c9178b315d2ac09cff794a4476ba1f6e;hp=5ecc69b5e5862021a4808240453b04f70de3301f;hpb=193e9a586d49fb111fd201f491b1ad0be4e386b3;p=public-inbox.git
diff --git a/t/httpd-corner.t b/t/httpd-corner.t
index 5ecc69b5..a720670e 100644
--- a/t/httpd-corner.t
+++ b/t/httpd-corner.t
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 all contributors
+# Copyright (C) 2016-2018 all contributors
# License: AGPL-3.0+
# note: our HTTP server should be standalone and capable of running
# generic Rack apps.
@@ -85,6 +85,30 @@ my $spawn_httpd = sub {
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';
@@ -219,7 +243,6 @@ my $check_self = sub {
SKIP: {
use POSIX qw(dup2);
- use IO::File;
my $have_curl = 0;
foreach my $p (split(':', $ENV{PATH})) {
-x "$p/curl" or next;
@@ -231,7 +254,7 @@ SKIP: {
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);
@@ -489,4 +512,13 @@ SKIP: {
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;