diff options
Diffstat (limited to 't/90rt92904.t')
-rw-r--r-- | t/90rt92904.t | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/t/90rt92904.t b/t/90rt92904.t new file mode 100644 index 0000000..7c2534a --- /dev/null +++ b/t/90rt92904.t @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More; +use IO::Async::Test; +use IO::Async::Loop; + +use Net::Async::HTTP; + +my $loop = IO::Async::Loop->new; +testing_loop( $loop ); + +my $http = Net::Async::HTTP->new( + max_connections_per_host => 2, +); + +$loop->add( $http ); + +my @conn_f; +no warnings 'redefine'; +local *IO::Async::Loop::connect = sub { + shift; + my %args = @_; + $args{host} eq "localhost" or die "Cannot fake connect - expected host 'localhost'"; + $args{service} eq "5000" or die "Cannot fake connect - expected service '5000'"; + + push @conn_f, my $f = $loop->new_future; + return $f; +}; + +my @f = map { $http->do_request(uri=>'http://localhost:5000/') } 0 .. 1; + +is( scalar @conn_f, 2, 'Two pending connect() attempts after two concurrent ->do_request' ); + +# Fail them both +( shift @conn_f )->fail( "Connection refused", connect => ) for 0 .. 1; + +ok( $f[$_]->is_ready && $f[$_]->failure, "Request [$_] Future fails after connect failure" ) for 0 .. 1; + +ok( !@conn_f, 'No more pending connect() attempts' ); + +done_testing; |