Mojolicious
view release on metacpan or search on metacpan
t/mojo/daemon.t view on Meta::CPAN
$id = $daemon->acceptors->[0];
ok !!Mojo::IOLoop->acceptor($id), 'acceptor has been added';
undef $daemon;
ok !Mojo::IOLoop->acceptor($id), 'acceptor has been removed';
};
subtest 'Single-accept and connection limit' => sub {
my $loop = Mojo::IOLoop->new;
my $daemon = Mojo::Server::Daemon->new(
app => $app,
ioloop => $loop,
listen => ['http://127.0.0.1?single_accept=1'],
max_clients => 2,
silent => 1
)->start;
my $acceptor = $loop->acceptor($daemon->acceptors->[0]);
my @accepting;
$acceptor->on(
accept => sub {
my $acceptor = shift;
$loop->next_tick(sub {
push @accepting, $acceptor->is_accepting;
shift->stop if @accepting == 2;
});
}
);
$loop->client({port => $acceptor->port} => sub { }) for 1 .. 2;
$loop->start;
ok $accepting[0], 'accepting connections';
ok !$accepting[1], 'connection limit reached';
};
subtest 'Request limit' => sub {
my $daemon = Mojo::Server::Daemon->new(app => $app, listen => ['http://127.0.0.1'], silent => 1)->start;
my $port = $daemon->ports->[0];
is $daemon->max_requests, 100, 'right value';
is $daemon->max_requests(2)->max_requests, 2, 'right value';
my $tx = $ua->get("http://127.0.0.1:$port/keep_alive/1");
ok $tx->keep_alive, 'will be kept alive';
is $tx->res->code, 200, 'right status';
is $tx->res->body, 'Whatever!', 'right content';
$tx = $ua->get("http://127.0.0.1:$port/keep_alive/1");
ok !$tx->keep_alive, 'will not be kept alive';
is $tx->res->code, 200, 'right status';
is $tx->res->body, 'Whatever!', 'right content';
};
subtest 'File descriptor' => sub {
my $listen = IO::Socket::INET->new(Listen => 5, LocalAddr => '127.0.0.1');
my $fd = fileno $listen;
my $daemon = Mojo::Server::Daemon->new(app => $app, listen => ["http://127.0.0.1?fd=$fd"], silent => 1)->start;
my $port = $listen->sockport;
is $daemon->ports->[0], $port, 'same port';
my $tx = $ua->get("http://127.0.0.1:$port/port");
is $tx->res->code, 200, 'right status';
is $tx->res->body, $port, 'right content';
};
subtest 'No TLS support' => sub {
eval { Mojo::Server::Daemon->new(listen => ['https://127.0.0.1'], silent => 1)->start };
like $@, qr/IO::Socket::SSL/, 'right error';
};
subtest 'Abstract methods' => sub {
eval { Mojo::Server->run };
like $@, qr/Method "run" not implemented by subclass/, 'right error';
};
done_testing();
( run in 1.012 second using v1.01-cache-2.11-cpan-6aa56a78535 )