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 )