Blame t/http-nb.t

Packit 03f954
use strict;
Packit 03f954
use warnings;
Packit 03f954
use Test::More;
Packit 03f954
plan skip_all => "This test doesn't work on Windows" if $^O eq "MSWin32";
Packit 03f954
Packit 03f954
plan tests => 14;
Packit 03f954
Packit 03f954
require Net::HTTP::NB;
Packit 03f954
use IO::Socket::INET;
Packit 03f954
use Data::Dumper;
Packit 03f954
use IO::Select;
Packit 03f954
use Socket qw(TCP_NODELAY);
Packit 03f954
my $buf;
Packit 03f954
Packit 03f954
# bind a random TCP port for testing
Packit 03f954
my %lopts = (
Packit 03f954
    LocalAddr => "127.0.0.1",
Packit 03f954
    LocalPort => 0,
Packit 03f954
    Proto => "tcp",
Packit 03f954
    ReuseAddr => 1,
Packit 03f954
    Listen => 1024
Packit 03f954
);
Packit 03f954
Packit 03f954
my $srv = IO::Socket::INET->new(%lopts);
Packit 03f954
is(ref($srv), "IO::Socket::INET");
Packit 03f954
my $host = $srv->sockhost . ':' . $srv->sockport;
Packit 03f954
my $nb = Net::HTTP::NB->new(Host => $host, Blocking => 0);
Packit 03f954
is(ref($nb), "Net::HTTP::NB");
Packit 03f954
is(IO::Select->new($nb)->can_write(3), 1);
Packit 03f954
Packit 03f954
ok($nb->write_request("GET", "/"));
Packit 03f954
my $acc = $srv->accept;
Packit 03f954
is(ref($acc), "IO::Socket::INET");
Packit 03f954
$acc->sockopt(TCP_NODELAY, 1);
Packit 03f954
ok($acc->sysread($buf, 4096));
Packit 03f954
ok($acc->syswrite("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"));
Packit 03f954
Packit 03f954
is(1, IO::Select->new($nb)->can_read(3));
Packit 03f954
my @r = $nb->read_response_headers;
Packit 03f954
is($r[0], 200);
Packit 03f954
Packit 03f954
# calling read_entity_body before response body is readable causes
Packit 03f954
# EOF to never happen eventually
Packit 03f954
ok(!defined($nb->read_entity_body($buf, 4096)) && $!{EAGAIN});
Packit 03f954
Packit 03f954
is($acc->syswrite("hello"), 5, "server wrote response body");
Packit 03f954
Packit 03f954
is(IO::Select->new($nb)->can_read(3), 1, "client body is readable");
Packit 03f954
is($nb->read_entity_body($buf, 4096), 5, "client gets 5 bytes");
Packit 03f954
Packit 03f954
# this fails if we got EAGAIN from the first read_entity_body call:
Packit 03f954
is($nb->read_entity_body($buf, 4096), 0, "client gets EOF");