#!perl use strict; use utf8; use warnings qw(all); use Test::More; use AnyEvent::HTTP; use Scalar::Util qw(looks_like_number); use Test::HTTP::AnyEvent::Server; $AnyEvent::Log::FILTER->level(q(fatal)); my $server = Test::HTTP::AnyEvent::Server->new; my $cv = AE::cv; $cv->begin; http_request GET => $server->uri . q(echo/head), sub { my ($body, $hdr) = @_; like($body, qr{^GET\s+/echo/head\s+HTTP/1\.[12]\b}isx, q(echo/head)); ok($hdr->{q(content-type)} eq q(text/plain), q(Content-Type)); ok($hdr->{connection} eq q(close), q(Connection)); like($hdr->{server}, qr{^Test::HTTP::AnyEvent::Server/}x, q(User-Agent)); $cv->end; }; $cv->begin; my $body = q(key1=value1&key2=value2); http_request POST => $server->uri . q(echo/body), body => $body, sub { ok($_[0] eq $body, q(echo/body)); $cv->end; }; $cv->begin; http_request GET => $server->uri . q(repeat/123/qwerty), sub { like($_[0], qr{^(?:qwerty){123}$}x, q(repeat)); $cv->end; }; $cv->begin; my $stamp = time; http_request GET => $server->uri . q(delay/3), timeout => 5, sub { if ($_[0] =~ m{^issued\s+(.+)$}ix) { my $issued = AnyEvent::HTTP::parse_date($1); ok(looks_like_number($issued), qq(parsed time string "$1" as $issued)); ok(is_within_range($issued, $stamp, 1), qq(replied (almost) immediately (started at $stamp))); my $now = time; ok(is_within_range($issued + 3, $now, 1), qq(delayed until $now)); } else { fail(q(invalid date response)); } $cv->end; }; $cv->begin; http_request GET => $server->uri . q(non-existent), sub { ok($_[1]->{Status} == 404, q(Not Found)); $cv->end; }; $cv->begin; http_request HEAD => $server->uri, sub { ok($_[1]->{Status} == 400, q(Bad Request)); $cv->end; }; $cv->wait; done_testing(11); sub is_within_range { my ($val, $ref, $range) = @_; return (abs($val - $ref) <= $range) ? 1 : 0 }