[Moscow.pm] Простые однотипные операции с AnyEvent
Mons Anderson
mons на cpan.org
Вт Авг 14 04:11:51 PDT 2012
У меня есть набросок Test::Async
Если интересно, могу выложить.
используется в тесте вот так:
my $c = AnyEvent::*::Client->new(...);
my $test = Test::Async->new(
prepare => sub {
my $s = shift;
$s->{w} = $c->on(
error => sub {
diag "@_";
}
);
},
postpone => sub {
my $s = shift;
delete $s->{w};
},
finish => sub {
undef $c;
},
);
$test->test(sub {
my $ok = shift;
$c->connect;
my $w;$w = $c->on('connected', sub {
$ok->('con');
undef $w;
});
}, 'connect', wait => ['con'], t => 2);
# waits for $ok->('con') for 2 seconds, fails otherwise
$test->test(sub {
my $ok = shift;
delete $test->{proxy};
my $w;$w = $c->on(
'disconnected', sub {
shift;
diag "disconnected: @_";
$ok->('dis');
},
'connfail' => sub {
shift;
diag "connfail: @_";
$ok->('fail');
$test->{proxy} = tcp_proxy(0,12321,0,11300);
},
'connected' => sub {
shift;
diag "connected: @_";
$ok->('con');
undef $w;
},
);
}, 'disconnect', wait => [qw(dis fail con)], t => 20);
# waits for 3 ok's: dis fail con for 20 seconds, fails otherwise
...
$test->run;
On Thursday 09 August 2012 11:13:17 Ivan Petrov wrote:
> > Приветствую!
> >
> > Время от времени при написании (интеграционных?) тестов чего-то с
> > эниэвентом возникает почти одинаковая портянка:
> >
> > my $cv = AnyEvent->condvar;
> > my $tm = AnyEvent->timer( after => 10, cb => sub { $cv->croak("Timeout");
> > }; do_something( sub{ $cv->send(shift); }, sub{ $cv->croak(shift); } );
> > my $result = $cv->recv();
> > undef $tm;
> > analyze_do_something( $result );
> >
> > Чешутся руки написать вместо этого
> >
> > my $result = ae_recv {
> > do_something( ae_send, ae_croak );
> > } 10; # timeout
> > analyze_do_something( $result );
> >
> > Соответственно, вопрос:
> > 1) А есть ли уже такой интерфейс?
> > 2) Нужен ли он кому-то ещё?
>
> если будет соответствующе оформлен, то хороший будет модуль.
> только кроме ae_send, очевидно надо еще обязательно приделать ae_begin
> и ae_end.
>
> потому что очень много групповых тестов, вроде того "делаем 5
> одновременных запросов"
--
Mons Anderson aka Vladimir Perepelitsa
<mons на cpan.org> / #99779956 / quanth на irc.freenode.net
Подробная информация о списке рассылки Moscow-pm