added test for log router
[scpubgit/Object-Remote.git] / t / logrouter.t
CommitLineData
60029bf7 1use strictures 1;
2use Test::More;
3use Sys::Hostname;
4
5$ENV{OBJECT_REMOTE_TEST_LOGGER} = 1;
6
7use Object::Remote::Logging::Router;
8
9my $controller_name = 'Test::Log::Controller';
10my $generator = sub { "Generator output" };
11my $metadata = {
12 controller => $controller_name, package => __PACKAGE__, level => 'test1',
13 caller_level => 0,
14};
15
16my $router = Object::Remote::Logging::Router->new;
17$router->_remote_metadata({ router => undef, connection_id => 'TestConnectionId' });
18isa_ok($router, 'Object::Remote::Logging::Router');
19ok($router->does('Log::Contextual::Role::Router'), 'Router does router role');
20
21require 't/lib/ORFeedbackLogger.pm';
22my $logger = ORFeedbackLogger->new(level_names => [qw( test1 test2 )], min_level => 'test1');
23
24my $selector = sub { $logger };
25$router->connect($selector, 1);
26ok($router->_connections->[0] eq $selector, 'Selector is stored in connections');
27ok(scalar(@{$router->_connections} == 1), 'There is a single connection');
28
29$logger->reset;
30my $linenum = __LINE__ + 1;
31$router->handle_log_request($metadata, $generator);
32is($logger->feedback_output, "test1: Generator output\n", 'Rendered log message is correct');
33ok($logger->feedback_input->[2]->{timestamp} > 0, 'Timestamp value is present');
34delete $logger->feedback_input->[2]->{timestamp};
35is_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;
47undef($selector);
48$router->handle_log_request($metadata, $generator);
49ok(scalar(@{$router->_connections}) == 0, 'Selector has been disconnected');
50ok(! defined $logger->feedback_output, 'Logger has no output feedback');
51ok(! defined $logger->feedback_input, 'Logger has no input feedback');
52
53$router->connect($logger);
54ok(scalar(@{$router->_connections} == 1), 'There is a single connection');
55undef($logger);
56$router->handle_log_request($metadata, $generator);
57ok(scalar(@{$router->_connections} == 1), 'Connection is still active');
58
59done_testing;