#!env perl use strict;use warnings; use lib '../lib'; use lib 'lib'; use Test::More tests => 83; use_ok('IPC::Transit') or exit; use_ok('IPC::Transit::Router') or exit; use_ok('IPC::Transit::Test') or exit; IPC::Transit::Test::clear_test_queue(); ok not IPC::Transit::Router::config_trans(); { my $config = { routes => [ { match => { a => 'b', }, forwards => [ { qname => 'test', } ] } ] }; ok IPC::Transit::Router::config_trans($config)->{routes}->[0]->{match}->{a} eq 'b'; ok IPC::Transit::Router::config_trans()->{routes}->[0]->{match}->{a} eq 'b'; ok IPC::Transit::Router::_match({a => 'b', c => 'd'}, $config->{routes}->[0]->{match}); ok not IPC::Transit::Router::_match({a => 'c', e => 'd'}, $config->{routes}->[0]->{match}); } { my $config = { routes => [ { match => { a => 'b', 10 => 20, }, forwards => [ { qname => 'test', } ] } ] }; ok IPC::Transit::Router::config_trans($config)->{routes}->[0]->{match}->{a} eq 'b'; ok IPC::Transit::Router::config_trans()->{routes}->[0]->{match}->{a} eq 'b'; ok IPC::Transit::Router::_match({a => 'b', 10 => 20, hi => 'there'}, $config->{routes}->[0]->{match}); ok IPC::Transit::Router::_match({a => 'b', 10 => '20', foo => 'bar'}, $config->{routes}->[0]->{match}); ok not IPC::Transit::Router::_match({a => 'c', e => 'd'}, $config->{routes}->[0]->{match}); } { my $config = { routes => [ { match => { source => 'gather.pl', }, forwards => [ { qname => 'test', } ] } ] }; ok IPC::Transit::Router::config_trans($config); ok IPC::Transit::Router::route_trans({source => 'logtail.pl'}); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); } { my $config = { routes => [ { match => { a => 'b', }, forwards => [ { qname => 'test', } ] } ] }; ok IPC::Transit::Router::config_trans($config); ok IPC::Transit::Router::route_trans({a => 'b'}); ok my $m = IPC::Transit::receive(qname => 'test', nonblock => 1); ok $m->{a} eq 'b'; ok not IPC::Transit::receive(qname => 'test', nonblock => 1); } { my $config = { routes => [ { match => { a => 'b', 10 => 12, }, forwards => [ { qname => 'test1' }, { qname => 'test2' } ] } ] }; ok IPC::Transit::Router::config_trans($config); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok not IPC::Transit::receive(qname => 'test1', nonblock => 1); ok not IPC::Transit::receive(qname => 'test2', nonblock => 1); ok IPC::Transit::Router::route_trans({a => 'b'}); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok not IPC::Transit::receive(qname => 'test1', nonblock => 1); ok not IPC::Transit::receive(qname => 'test2', nonblock => 1); ok IPC::Transit::Router::route_trans({a => 'b', 10 => '12', x => 'y'}); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok my $m = IPC::Transit::receive(qname => 'test1', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; ok $m = IPC::Transit::receive(qname => 'test2', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; } #this is testing the default behaviour to stop looking for routes #once one has matched. { my $config = { routes => [ { match => { a => 'b', 10 => 12, }, forwards => [ { qname => 'test1' }, { qname => 'test2' } ] },{ match => { a => 'b', 10 => 12, }, forwards => [ { qname => 'test1' }, { qname => 'test2' } ] } ] }; ok IPC::Transit::Router::config_trans($config); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok not IPC::Transit::receive(qname => 'test1', nonblock => 1); ok not IPC::Transit::receive(qname => 'test2', nonblock => 1); ok IPC::Transit::Router::route_trans({a => 'b'}); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok not IPC::Transit::receive(qname => 'test1', nonblock => 1); ok not IPC::Transit::receive(qname => 'test2', nonblock => 1); ok IPC::Transit::Router::route_trans({a => 'b', 10 => '12', x => 'y'}); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok my $m = IPC::Transit::receive(qname => 'test1', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; ok $m = IPC::Transit::receive(qname => 'test2', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; } #this is testing the non-default behaviour to continue looking for routes #after a match { my $config = { routes => [ { match => { a => 'b', 10 => 12, }, forwards => [ { qname => 'test1' }, { qname => 'test2' } ], continue_processing => 1, },{ match => { a => 'b', 10 => 12, }, forwards => [ { qname => 'test1' }, { qname => 'test2' } ] } ] }; ok IPC::Transit::Router::config_trans($config); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok not IPC::Transit::receive(qname => 'test1', nonblock => 1); ok not IPC::Transit::receive(qname => 'test2', nonblock => 1); ok IPC::Transit::Router::route_trans({a => 'b'}); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok not IPC::Transit::receive(qname => 'test1', nonblock => 1); ok not IPC::Transit::receive(qname => 'test2', nonblock => 1); ok IPC::Transit::Router::route_trans({a => 'b', 10 => '12', x => 'y'}); ok not IPC::Transit::receive(qname => 'test', nonblock => 1); ok my $m = IPC::Transit::receive(qname => 'test1', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; ok $m = IPC::Transit::receive(qname => 'test1', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; ok $m = IPC::Transit::receive(qname => 'test2', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; ok $m = IPC::Transit::receive(qname => 'test2', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{x} eq 'y'; } { my $config = { routes => [ { match => { a => 'b', }, forwards => [ { qname => 'test' } ], changes => [ { who => 'there' }, { 123 => 234, xray => 'kilo' } ], } ] }; ok IPC::Transit::Router::config_trans($config); ok IPC::Transit::Router::route_trans({a => 'b'}); ok my $m = IPC::Transit::receive(qname => 'test', nonblock => 1); ok $m->{a} eq 'b'; ok $m->{who} eq 'there'; ok $m->{123} == 234; ok $m->{xray} eq 'kilo'; ok not IPC::Transit::receive(qname => 'test', nonblock => 1); } __END__ { my $simple_route = { routes => [ { match => { a => 'b', }, forwards => [ { qname => 'test', } ] } ] }; ok IPC::Transit::Router::config_trans($simple_route)->{routes}->[0]->{match}->{a} eq 'b'; __END__ #clean out the queue if there's something in it ok IPC::Transit::send(qname => 'test', message => { a => 'b' }); ok my $m = IPC::Transit::receive(qname => 'test'); ok $m->{a} eq 'b'; for(1..20) { ok IPC::Transit::send(qname => 'test', message => { a => $_ }); } foreach my $ct (1..20) { ok my $m = IPC::Transit::receive(qname => 'test'); ok $m->{a} == $ct; }