use Test::More;
use strict; use warnings qw/FATAL all/;
my $addr = 'inproc://repreqtest2';
use POE;
use_ok 'POEx::ZMQ3::Sockets';
use_ok 'POEx::ZMQ3::Requestor';
use_ok 'POEx::ZMQ3::Replier';
my $zmq = POEx::ZMQ3::Sockets->new;
my $zrequest = POEx::ZMQ3::Requestor->new( );#zmq => $zmq );
my $zreply = POEx::ZMQ3::Replier->new( );#zmq => $zmq );
my $got = {};
my $expected = {
'got connected_to' => 1,
'got replying_on' => 1,
'got got_request' => 10,
'request looks ok' => 10,
'got got_reply' => 10,
'reply looks ok' => 10,
};
alarm 10;
POE::Session->create(
inline_states => {
_start => sub {
$_[KERNEL]->sig(ALRM => 'fail');
$zreply->start( $addr );
$zrequest->start( $addr );
$poe_kernel->post( $zreply->session_id, 'subscribe' );
$poe_kernel->post( $zrequest->session_id, 'subscribe' );
},
zeromq_connected_to => sub {
$got->{'got connected_to'} = 1;
$zrequest->request( 'ping!' );
},
zeromq_replying_on => sub {
$got->{'got replying_on'} = 1;
},
zeromq_got_request => sub {
$got->{'got got_request'}++;
$got->{'request looks ok'}++
if $_[ARG0] eq 'ping!';
$zreply->reply( 'pong!' )
},
zeromq_got_reply => sub {
$got->{'got got_reply'}++;
$got->{'reply looks ok'}++
if $_[ARG0] eq 'pong!';
if ($got->{'got got_reply'} == $expected->{'got got_reply'}) {
$_[KERNEL]->call( $_[SESSION], 'stopit' );
return
}
$zrequest->request( 'ping!' )
},
stopit => sub {
$poe_kernel->alarm_remove_all;
$zrequest->stop;
$zreply->stop;
},
fail => sub {
$_[KERNEL]->call( $_[SESSION], 'stopit' );
fail "Timed out"
},
}
);
$poe_kernel->run;
POEx::ZMQ3::Context->term;
is_deeply $got, $expected, 'request/reply interaction ok';
done_testing;