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" }; |
11 | my $metadata = { |
12 | controller => $controller_name, package => __PACKAGE__, level => 'test1', |
13 | caller_level => 0, |
14 | }; |
15 | |
16 | my $router = Object::Remote::Logging::Router->new; |
17 | $router->_remote_metadata({ router => undef, connection_id => 'TestConnectionId' }); |
18 | isa_ok($router, 'Object::Remote::Logging::Router'); |
19 | ok($router->does('Log::Contextual::Role::Router'), 'Router does router role'); |
20 | |
21 | require 't/lib/ORFeedbackLogger.pm'; |
22 | my $logger = ORFeedbackLogger->new(level_names => [qw( test1 test2 )], min_level => 'test1'); |
23 | |
24 | my $selector = sub { $logger }; |
25 | $router->connect($selector, 1); |
26 | ok($router->_connections->[0] eq $selector, 'Selector is stored in connections'); |
27 | ok(scalar(@{$router->_connections} == 1), 'There is a single connection'); |
28 | |
29 | $logger->reset; |
30 | my $linenum = __LINE__ + 1; |
31 | $router->handle_log_request($metadata, $generator); |
32 | is($logger->feedback_output, "test1: Generator output\n", 'Rendered log message is correct'); |
33 | ok($logger->feedback_input->[2]->{timestamp} > 0, 'Timestamp value is present'); |
34 | delete $logger->feedback_input->[2]->{timestamp}; |
35 | is_deeply($logger->feedback_input, [ |
36 | 'test1', [ 'Generator output' ], { |
37 | controller => 'Test::Log::Controller', level => 'test1', |
38 | hostname => hostname(), pid => $$, package => __PACKAGE__, |
39 | line => $linenum, method => undef, filename => __FILE__, |
40 | object_remote => { |
41 | connection_id => 'TestConnectionId', router => undef, |
42 | }, |
43 | }, |
44 | ], 'Input to logger was correct'); |
45 | |
46 | $logger->reset; |
47 | undef($selector); |
48 | $router->handle_log_request($metadata, $generator); |
49 | ok(scalar(@{$router->_connections}) == 0, 'Selector has been disconnected'); |
50 | ok(! defined $logger->feedback_output, 'Logger has no output feedback'); |
51 | ok(! defined $logger->feedback_input, 'Logger has no input feedback'); |
52 | |
53 | $router->connect($logger); |
54 | ok(scalar(@{$router->_connections} == 1), 'There is a single connection'); |
55 | undef($logger); |
56 | $router->handle_log_request($metadata, $generator); |
57 | ok(scalar(@{$router->_connections} == 1), 'Connection is still active'); |
58 | |
59 | done_testing; |