Commit | Line | Data |
60029bf7 |
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" }; |
a663aea5 |
11 | my %metadata = ( |
55c0d020 |
12 | exporter => $controller_name, |
a663aea5 |
13 | caller_package => __PACKAGE__, caller_level => 0, |
572a9a00 |
14 | message_level => 'test1', message_sub => $generator, message_args => [], |
a663aea5 |
15 | ); |
60029bf7 |
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; |
a663aea5 |
32 | $router->handle_log_request(%metadata); |
60029bf7 |
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}; |
a663aea5 |
36 | is(ref $logger->feedback_input->[2]->{message_sub}, 'CODE', 'message sub did exist'); |
37 | delete $logger->feedback_input->[2]->{message_sub}; |
60029bf7 |
38 | is_deeply($logger->feedback_input, [ |
39 | 'test1', [ 'Generator output' ], { |
572a9a00 |
40 | exporter => 'Test::Log::Controller', message_level => 'test1', |
a663aea5 |
41 | hostname => hostname(), pid => $$, caller_package => __PACKAGE__, |
60029bf7 |
42 | line => $linenum, method => undef, filename => __FILE__, |
a663aea5 |
43 | message_args => [], object_remote => { |
60029bf7 |
44 | connection_id => 'TestConnectionId', router => undef, |
45 | }, |
46 | }, |
47 | ], 'Input to logger was correct'); |
48 | |
49 | $logger->reset; |
50 | undef($selector); |
a663aea5 |
51 | $router->handle_log_request(%metadata); |
60029bf7 |
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); |
a663aea5 |
59 | $router->handle_log_request(%metadata); |
60029bf7 |
60 | ok(scalar(@{$router->_connections} == 1), 'Connection is still active'); |
61 | |
62 | done_testing; |