AnyEvent-Task

 view release on metacpan or  search on metacpan

t/logger.t  view on Meta::CPAN

##      request is fulfilled.



AnyEvent::Task::Server::fork_task_server(
  listen => ['unix/', '/tmp/anyevent-task-test.socket'],
  interface => { normal =>
                   sub {
                     logger->info("hello from", $$);
                     logger->timer("junk");
                     1;
                   },
                 error =>
                   sub {
                     logger->warn("something weird happened");
                     die "uh oh";
                   },
                 sleep =>
                   sub { select undef,undef,undef,shift; },
               },
);



my $client = AnyEvent::Task::Client->new(
               connect => ['unix/', '/tmp/anyevent-task-test.socket'],
             );


my $cv = AE::cv;


my $log_defer_object = Log::Defer->new(sub {
  my $msg = shift;

  is($msg->{logs}->[0]->[2], 'hello from', 'message from client');
  is($msg->{logs}->[1]->[2], 'hello from', 'message from worker');
  isnt($msg->{logs}->[0]->[3], $msg->{logs}->[1]->[3], 'pids are different');
  is($msg->{logs}->[2]->[2], 'after', 'order of msgs ok');
  is($msg->{logs}->[3]->[2], 'something weird happened', 'log messages transfered even on error');

  is(@{$msg->{timers}}, 5, 'right number of timers');
  is($msg->{timers}->[0]->[0], 'normal', 'normal is timer 1');
  is($msg->{timers}->[1]->[0], 'junk', 'junk is timer 2');
  is($msg->{timers}->[2]->[0], 'sleep', 'sleep is timer 3');
  is($msg->{timers}->[3]->[0], 'sleep', 'sleep is timer 4');
  is($msg->{timers}->[4]->[0], 'error', 'error is timer 5');
});

$log_defer_object->info("hello from", $$);

$client->checkout(log_defer_object => $log_defer_object)->normal(sub {
  my ($checkout, $ret) = @_;

  $log_defer_object->info("after");

  $checkout->sleep(0.1, sub {});
  $checkout->sleep(0.1, sub {});

  $checkout->error(frame(code => sub {
    die "error not thrown?";
  }, catch => sub {
    ok(1, 'error caught');
    $cv->send;
  }));
});


$cv->recv;


$cv = AE::cv;

$log_defer_object = Log::Defer->new(sub {
  my $msg = shift;

  is($msg->{timers}->[0]->[0], '->()', "didn't leak first arg when called as code ref");
});

$client->checkout(log_defer_object => $log_defer_object)->('first arg', frame(code => sub {
  die "error not thrown by calling interface as a sub?";
}, catch => sub {
  ok(1, 'error caught');
  $cv->send;
}));

$cv->recv;



( run in 0.466 second using v1.01-cache-2.11-cpan-524268b4103 )