Blame t/170_keepalive.t

Packit 3f4df8
#!perl
Packit 3f4df8
Packit 3f4df8
use strict;
Packit 3f4df8
use warnings;
Packit 3f4df8
use File::Basename;
Packit 3f4df8
use Test::More 0.88;
Packit 3f4df8
use lib 't';
Packit 3f4df8
use Util qw[
Packit 3f4df8
    tmpfile monkey_patch dir_list clear_socket_source set_socket_source
Packit 3f4df8
    $CRLF
Packit 3f4df8
];
Packit 3f4df8
use HTTP::Tiny;
Packit 3f4df8
our $can_read;
Packit 3f4df8
Packit 3f4df8
BEGIN {
Packit 3f4df8
    no warnings qw/redefine once/;
Packit 3f4df8
    monkey_patch();
Packit 3f4df8
    *HTTP::Tiny::Handle::can_read = sub { $can_read++ };
Packit 3f4df8
}
Packit 3f4df8
Packit 3f4df8
my $response = <<'RESPONSE';
Packit 3f4df8
HTTP/1.1 200 OK
Packit 3f4df8
Date: Thu, 03 Feb 1994 00:00:00 GMT
Packit 3f4df8
Content-Type: text/html
Packit 3f4df8
Content-Length: 10
Packit 3f4df8
Packit 3f4df8
0123456789
Packit 3f4df8
Packit 3f4df8
RESPONSE
Packit 3f4df8
Packit 3f4df8
trim($response);
Packit 3f4df8
Packit 3f4df8
my $h;
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
test_ht( "Keep-alive", 1, 'http://foo.com' );
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
test_ht( "Different scheme", 0, 'https://foo.com' );
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
test_ht( "Different host", 0, 'http://bar.com' );
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
test_ht( "Different port", 0, 'http://foo.com:8000' );
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
$h->timeout(30);
Packit 3f4df8
test_ht( "Different timeout", 0, 'http://foo.com' );
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
$h->timeout(60);
Packit 3f4df8
test_ht( "Same timeout", 1, 'http://foo.com' );
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
$h->default_headers({ 'X-Foo' => 'Bar' });
Packit 3f4df8
test_ht( "Default headers change", 1, 'http://foo.com' );
Packit 3f4df8
Packit 3f4df8
new_ht();
Packit 3f4df8
$h->{handle}->close;
Packit 3f4df8
test_ht( "Socket closed", 0, 'http://foo.com' );
Packit 3f4df8
Packit 3f4df8
for my $file ( dir_list( "corpus", qr/^keepalive/ ) ) {
Packit 3f4df8
    my $label = basename($file);
Packit 3f4df8
    my $data = do { local ( @ARGV, $/ ) = $file; <> };
Packit 3f4df8
    my ( $title, $ok, $response ) = map { trim($_) } split /--+/, $data;
Packit 3f4df8
    new_ht();
Packit 3f4df8
    clear_socket_source();
Packit 3f4df8
    set_socket_source( tmpfile(), tmpfile($response) );
Packit 3f4df8
    $h->request( 'POST', 'http://foo.com', { content => 'xx' } );
Packit 3f4df8
    is !!$h->{handle}, !!$ok, "$label - $title";
Packit 3f4df8
}
Packit 3f4df8
Packit 3f4df8
sub test_ht {
Packit 3f4df8
    my $title  = shift;
Packit 3f4df8
    my $result = !!shift();
Packit 3f4df8
    my $url    = shift;
Packit 3f4df8
Packit 3f4df8
    clear_socket_source();
Packit 3f4df8
    set_socket_source( tmpfile(), tmpfile($response) );
Packit 3f4df8
    $can_read = 0 if $result;
Packit 3f4df8
    my $old = $h->{handle} || 'old';
Packit 3f4df8
    $h->request( 'POST', $url, { content => 'xx' } );
Packit 3f4df8
    my $new = $h->{handle} || 'new';
Packit 3f4df8
    is $old eq $new, $result, $title;
Packit 3f4df8
}
Packit 3f4df8
Packit 3f4df8
sub new_ht {
Packit 3f4df8
    $h = HTTP::Tiny->new( keep_alive => 1, @_ );
Packit 3f4df8
    $can_read = 1;
Packit 3f4df8
    clear_socket_source();
Packit 3f4df8
    set_socket_source( tmpfile(), tmpfile($response) );
Packit 3f4df8
    $h->request( 'POST', 'http://foo.com' );
Packit 3f4df8
}
Packit 3f4df8
Packit 3f4df8
sub trim { $_[0] =~ s/^\s+//; $_[0] =~ s/\s+$//; return $_ }
Packit 3f4df8
Packit 3f4df8
done_testing;
Packit 3f4df8