Release commit for 0.003002
[scpubgit/Object-Remote.git] / t / logrouter.t
1 use strictures 1;
2 use Test::More;
3 use Sys::Hostname;
4
5 $ENV{OBJECT_REMOTE_TEST_LOGGER} = 1;
6
7 use Object::Remote::Logging::Router;
8
9 my $controller_name = 'Test::Log::Controller';
10 my $generator = sub { "Generator output" };
11 my %metadata = (
12   exporter => $controller_name,
13   caller_package => __PACKAGE__,  caller_level => 0,
14   message_level => 'test1', message_sub => $generator, message_args => [],
15 );
16
17 my $router = Object::Remote::Logging::Router->new;
18 $router->_remote_metadata({ router => undef, connection_id => 'TestConnectionId' });
19 isa_ok($router, 'Object::Remote::Logging::Router');
20 ok($router->does('Log::Contextual::Role::Router'), 'Router does router role');
21
22 require 't/lib/ORFeedbackLogger.pm';
23 my $logger = ORFeedbackLogger->new(level_names => [qw( test1 test2 )], min_level => 'test1');
24
25 my $selector = sub { $logger };
26 $router->connect($selector, 1);
27 ok($router->_connections->[0] eq $selector, 'Selector is stored in connections');
28 ok(scalar(@{$router->_connections} == 1), 'There is a single connection');
29
30 $logger->reset;
31 my $linenum = __LINE__ + 1;
32 $router->handle_log_request(%metadata);
33 is($logger->feedback_output, "test1: Generator output\n", 'Rendered log message is correct');
34 ok($logger->feedback_input->[2]->{timestamp} > 0, 'Timestamp value is present');
35 delete $logger->feedback_input->[2]->{timestamp};
36 is(ref $logger->feedback_input->[2]->{message_sub}, 'CODE', 'message sub did exist');
37 delete $logger->feedback_input->[2]->{message_sub};
38 is_deeply($logger->feedback_input, [
39   'test1', [ 'Generator output' ], {
40     exporter => 'Test::Log::Controller', message_level => 'test1',
41     hostname => hostname(), pid => $$, caller_package => __PACKAGE__,
42     line => $linenum, method => undef, filename => __FILE__,
43     message_args => [], object_remote => {
44       connection_id => 'TestConnectionId', router => undef,
45     },
46   },
47 ], 'Input to logger was correct');
48
49 $logger->reset;
50 undef($selector);
51 $router->handle_log_request(%metadata);
52 ok(scalar(@{$router->_connections}) == 0, 'Selector has been disconnected');
53 ok(! defined $logger->feedback_output, 'Logger has no output feedback');
54 ok(! defined $logger->feedback_input, 'Logger has no input feedback');
55
56 $router->connect($logger);
57 ok(scalar(@{$router->_connections} == 1), 'There is a single connection');
58 undef($logger);
59 $router->handle_log_request(%metadata);
60 ok(scalar(@{$router->_connections} == 1), 'Connection is still active');
61
62 done_testing;