Skip Menu |

This queue is for tickets about the Net-Async-HTTP CPAN distribution.

Report information
The Basics
Id: 75615
Status: resolved
Priority: 0/
Queue: Net-Async-HTTP

People
Owner: Nobody in particular
Requestors: TEAM [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: 0.16
Fixed in: 0.17



Subject: URI::http not loaded so URI::http->default_port fails
This one's nice and simple - the attached test case should report the following: 1..2 Can't locate object method "default_port" via package "URI::http" (perhaps you forgot to load "URI::http"?) at /home/tom/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2/Net/Async/HTTP.pm line 414. # Looks like your test exited with -1 before it could output anything. and that's easily fixed by a couple of use lines: === modified file 'lib/Net/Async/HTTP.pm' --- lib/Net/Async/HTTP.pm 2012-02-29 21:45:31 +0000 +++ lib/Net/Async/HTTP.pm 2012-03-07 23:24:36 +0000 @@ -21,6 +21,8 @@ use HTTP::Request; use HTTP::Request::Common qw(); +use URI; +use URI::http; use IO::Async::Stream; use IO::Async::Loop 0.31; # for ->connect( extensions ) This leads to the next bug which I'll report separately ;) cheers, Tom
Subject: 25uri_no_default_port.t
#!/usr/bin/perl use strict; use warnings; use Test::More tests => 2; use IO::Async::Test; use IO::Async::Loop; use Net::Async::HTTP; my $CRLF = "\x0d\x0a"; # because \r\n isn't portable my $loop = IO::Async::Loop->new(); testing_loop( $loop ); my $http = Net::Async::HTTP->new( user_agent => "", # Don't put one in request headers ); $loop->add( $http ); my $port; $loop->listen( host => "127.0.0.1", service => 0, socktype => "stream", on_listen => sub { $port = shift->sockport; }, on_stream => sub { my ( $stream ) = @_; $stream->configure( on_read => sub { my ( $self, $buffref ) = @_; return 0 unless $$buffref =~ s/^(.*?)$CRLF$CRLF//s; my $header = $1; my $response = ( $header =~ m{^GET /redir} ) ? "HTTP/1.1 301 Moved Permanently$CRLF" . "Content-Length: 0$CRLF" . "Location: /moved$CRLF" . "Connection: close$CRLF" . "$CRLF" : "HTTP/1.1 200 OK$CRLF" . "Content-Type: text/plain$CRLF" . "Content-Length: 2$CRLF" . "Connection: close$CRLF" . "$CRLF" . "OK"; $self->write( $response ); return 1; }, ); $loop->add( $stream ); }, on_listen_error => sub { die "Test failed early - $_[-1]" }, on_resolve_error => sub { die "Test failed early - $_[-1]" }, ); wait_for { defined $port }; my $code = \&IO::Async::Protocol::connect; no warnings 'redefine'; local *IO::Async::Protocol::connect = sub { my $self = shift; my %args = @_; $args{service} = $port if $args{service} eq 'http'; $code->($self, %args); }; my $response; my $req = HTTP::Request->new(GET => '/redir'); $req->protocol('HTTP/1.1'); $req->header(Host => '127.0.0.1'); $http->do_request( method => "GET", host => '127.0.0.1', request => $req, on_response => sub { $response = $_[0]; }, on_error => sub { die "Test failed early - $_[-1]" }, ); wait_for { defined $response }; is( $response->content_type, "text/plain", '$response->content_type' ); is( $response->content, "OK", '$response->content' );
Applied, by some code modification, in latest source. Will be in next version. -- Paul Evans
This was released in 0.17 but I forgot to update the ticket. -- Paul Evans