#!perl use common::sense; use Test::More tests => 12; use AnyEvent::Impl::Perl; use AnyEvent; use AnyEvent::HTTP; use AnyEvent::HTTPD qw/http_request/; my ($H, $P); # make sure the default is GET HEAD POST my $c = AnyEvent->condvar; my $h = AnyEvent::HTTPD->new; $h->reg_cb ( '' => sub { my ($httpd, $req) = @_; ok(scalar (grep { $req->method eq $_ } qw/GET HEAD POST/) == 1, "req " . $req->method ); if ($req->method eq 'POST') { ok($req->content eq 'hello world', "req POST body"); } $req->respond({ content => ['text/plain', $req->method . " OK" ]}); }, client_connected => sub { my ($httpd, $h, $p) = @_; ($H, $P) = ($h, $p); }, ); is_deeply( $h->allowed_methods, [qw/GET HEAD POST/], 'allowed_methods()' ); http_request( GET => sprintf("http://%s:%d/foo", '127.0.0.1', $h->port), sub { my ($body, $hdr) = @_; ok($hdr->{'Status'} == 200, "resp GET 200 OK") or diag explain $hdr; ok($body eq 'GET OK', 'resp GET body OK') or diag explain $body; $c->send; } ); $c->recv; $c = AnyEvent->condvar; http_request( POST => sprintf("http://%s:%d/foo", '127.0.0.1', $h->port), body => 'hello world', sub { my ($body, $hdr) = @_; ok($hdr->{'Status'} == 200, "resp POST 200 OK") or diag explain $hdr; ok($body eq 'POST OK', 'resp POST body OK') or diag explain $body; $c->send; } ); $c->recv; $c = AnyEvent->condvar; http_request( HEAD => sprintf("http://%s:%d/foo", '127.0.0.1', $h->port), sub { my ($body, $hdr) = @_; ok($hdr->{'Status'} == 200, "resp HEAD 200 OK") or diag explain $hdr; $c->send; } ); $c->recv; $c = AnyEvent->condvar; http_request( OPTIONS => sprintf("http://%s:%d/foo", '127.0.0.1', $h->port), sub { my ($body, $hdr) = @_; ok($hdr->{'Status'} == 501, "resp OPTIONS 501") or diag explain $hdr; ok($hdr->{'Reason'} == 'not implemented', 'resp OPTIONS reason') or diag explain $hdr; $c->send; } ); $c->recv; done_testing();