#!/usr/bin/perl
use strict;
use Test::Simple tests => 2;
BEGIN {
$ENV{LOG_CHANNEL_CONFIG} = "t/logging.xml";
}
my $qname = "testq";
# launch sqm
my $sqm_pid;
if ($sqm_pid = fork) {
# parent
} else {
# launch queue manager
my $PERLLIB = join(":", @INC);
exec "PERLLIB=$PERLLIB ./sqm $qname";
exit;
}
# launch worker
my $worker_pid;
if ($worker_pid = fork) {
# parent
} else {
# launch worker
use Event qw(loop unloop);
my $worker = new Spread::Queue::Worker(QUEUE => $qname,
CALLBACK => sub {
my ($worker, $originator, $input) = @_;
sleep 1;
my $output = {
response => "I heard you!",
};
$worker->respond($originator, $output);
$worker->terminate;
Event::unloop;
return $output;
}
);
$worker->setup_Event;
Event::loop;
exit;
}
sleep 3; # wait for the sqm and worker to start
# this is the sender
use Event qw(loop unloop);
my $sender = new Spread::Queue::Sender(QUEUE => $qname);
$sender->submit({
name1 => 'value1',
name2 => 'value2',
});
my $response = $sender->receive;
ok($response->{response} eq "I heard you!", 'end-to-end');
sleep 3;
######################################################################
kill 15, $sqm_pid;
ok(1);
exit;