summaryrefslogtreecommitdiff
path: root/t/002Logger.t
diff options
context:
space:
mode:
Diffstat (limited to 't/002Logger.t')
-rwxr-xr-xt/002Logger.t403
1 files changed, 403 insertions, 0 deletions
diff --git a/t/002Logger.t b/t/002Logger.t
new file mode 100755
index 0000000..fd6df46
--- /dev/null
+++ b/t/002Logger.t
@@ -0,0 +1,403 @@
+###########################################
+# Test Suite for Log::Log4perl::Logger
+# Mike Schilli, 2002 (m@perlmeister.com)
+###########################################
+
+#use Data::Dump qw(dump);
+
+BEGIN {
+ if($ENV{INTERNAL_DEBUG}) {
+ require Log::Log4perl::InternalDebug;
+ Log::Log4perl::InternalDebug->enable();
+ }
+}
+
+use warnings;
+use strict;
+
+#########################
+# used Test::Simple to help debug the test script
+use Test::More tests => 74;
+
+use Log::Log4perl;
+use Log::Log4perl::Level;
+use Log::Log4perl::Util;
+
+ok(1); # If we made it this far, we're ok.
+
+# Check unintialized case
+my $logger = Log::Log4perl::get_logger("");
+is $logger->is_trace, 0, "is_trace false when L4p is uninitialized";
+is $logger->is_debug, 0, "is_debug false when L4p is uninitialized";
+is $logger->is_error, 0, "is_error false when L4p is uninitialized";
+
+my $log0 = Log::Log4perl->get_logger("abc.def");
+is $log0->category(), "abc.def", "category accessor";
+my $log1 = Log::Log4perl->get_logger("abc.def");
+my $log2 = Log::Log4perl->get_logger("abc.def");
+my $log3 = Log::Log4perl->get_logger("abc.def.ghi");
+my $log4 = Log::Log4perl->get_logger("def.abc.def");
+my $log5 = Log::Log4perl->get_logger("def.abc.def");
+my $log6 = Log::Log4perl->get_logger("");
+my $log7 = Log::Log4perl->get_logger("");
+my $log8 = Log::Log4perl->get_logger("abc.def");
+my $log9 = Log::Log4perl->get_logger("abc::def::ghi");
+
+# Loggers for the same namespace have to be identical
+ok($log1 == $log2, "Log1 same as Log2");
+ok($log4 == $log5, "Log4 same as Log5");
+ok($log6 == $log7, "Log6 same as Log7");
+ok($log1 == $log8, "Log1 same as Log8");
+ok($log3 == $log9, "log3 same as Log9");
+
+# Loggers for different namespaces have to be different
+ok($log1 != $log3, "Log1 not Log3");
+ok($log3 != $log4, "Log3 not Log4");
+ok($log1 != $log6, "Log1 not Log6");
+ok($log3 != $log6, "Log3 not Log6");
+ok($log5 != $log6, "Log5 not Log6");
+ok($log5 != $log7, "Log5 not Log7");
+ok($log5 != $log1, "Log5 not Log1");
+ok($log7 != $log8, "Log7 not Log8");
+ok($log8 != $log9, "Log8 not Log9");
+
+my $app = Log::Log4perl::Appender->new(
+ "Log::Log4perl::Appender::TestBuffer");
+
+##################################################
+# Suppress debug
+##################################################
+$log1->add_appender($app);
+$log1->level($ERROR);
+
+# warn "level is: ", $log1->level(), "\n";
+
+my $ret;
+
+$ret = $log1->error("Error Message");
+ok($ret == 1);
+
+$ret = $log1->debug("Debug Message");
+ok(!defined $ret);
+
+ok($app->buffer() eq "ERROR - Error Message\n", "log1 app buffer contains ERROR - Error Message");
+
+# warn "app buffer is: \"", $app->buffer(), "\"\n";
+
+##################################################
+# Allow debug
+##################################################
+$log1->level($DEBUG);
+$app->buffer("");
+$log1->error("Error Message");
+$log1->debug("Debug Message");
+ok($app->buffer() eq "ERROR - Error Message\nDEBUG - Debug Message\n",
+ "app buffer contains both ERROR and DEBUG message");
+
+# warn "app buffer is: \"", $app->buffer(), "\"\n";
+
+##################################################
+# Multiple Appenders
+##################################################
+my $app2 = Log::Log4perl::Appender->new(
+ "Log::Log4perl::Appender::TestBuffer");
+my $app3 = Log::Log4perl::Appender->new(
+ "Log::Log4perl::Appender::TestBuffer");
+
+$app->buffer("");
+$app2->buffer("");
+ # 2nd appender to $log1
+$log1->add_appender($app2);
+$log1->level($ERROR);
+$log1->error("Error Message");
+#TODO
+ok($app->buffer() eq "ERROR - Error Message\n", "app buffer contains ERROR only");
+ok($app2->buffer() eq "ERROR - Error Message\n", "app2 buffer contains ERROR only");
+
+##################################################
+# Multiple Appenders in different hierarchy levels
+##################################################
+$app->buffer("");
+$app2->buffer("");
+$app3->buffer("");
+
+$log1 = Log::Log4perl->get_logger("xxx.yyy.zzz");
+$log2 = Log::Log4perl->get_logger("xxx");
+$log3 = Log::Log4perl->get_logger("");
+
+ # Root logger
+$log3->add_appender($app3);
+
+$log3->level($ERROR);
+
+ ##################################################
+ # Log to lower level, check if gets propagated up to root
+ ##################################################
+$log1->error("Error Message");
+
+ # Should be distributed to root
+ok($app3->buffer() eq "ERROR - Error Message\n", "app3 buffer contains ERROR");
+ ##################################################
+ # Log in lower levels and propagate to root
+ ##################################################
+$app->buffer("");
+$app2->buffer("");
+$app3->buffer("");
+
+$log1->add_appender($app);
+$log2->add_appender($app2);
+# log3 already has app3 attached
+$ret = $log1->error("Error Message");
+ok($ret == 3);
+ok($app->buffer() eq "ERROR - Error Message\n", "app buffer contains ERROR");
+ok($app2->buffer() eq "ERROR - Error Message\n", "app2 buffer contains ERROR");
+ok($app3->buffer() eq "ERROR - Error Message\n", "app3 buffer contains ERROR");
+
+ ##################################################
+ # Block appenders via priority
+ ##################################################
+$app->buffer("");
+$app2->buffer("");
+$app3->buffer("");
+
+$log1->level($ERROR);
+$log2->level($DEBUG);
+$log3->level($DEBUG);
+
+$log1->debug("Debug Message");
+ok($app->buffer() eq "", "app buffer is empty");
+ok($app2->buffer() eq "", "app2 buffer is empty");
+ok($app3->buffer() eq "", "app3 buffer is empty");
+
+ ##################################################
+ # Block via 'false' additivity
+ ##################################################
+$app->buffer("");
+$app2->buffer("");
+$app3->buffer("");
+
+$log1->level($DEBUG);
+$log2->additivity(0);
+$log2->level($DEBUG);
+$log3->level($DEBUG);
+
+$log1->debug("Debug Message");
+ok($app->buffer() eq "DEBUG - Debug Message\n", "app buffer contains DEBUG");
+ok($app2->buffer() eq "DEBUG - Debug Message\n", "app2 buffer contains DEBUG");
+ok($app3->buffer() eq "", "app3 buffer is empty");
+
+ ##################################################
+ # Check is_*() functions
+ ##################################################
+$log0->level($TRACE);
+$log1->level($DEBUG);
+$log2->level($ERROR);
+$log3->level($INFO);
+
+ok($log0->is_trace(), "log0 is_trace == 1");
+ok($log0->is_error(), "log0 is_error == 1");
+
+ok($log1->is_error(), "log1 is_error == 1");
+ok($log1->is_info(), "log1 is_info == 1");
+ok($log1->is_fatal(), "log1 is_fatal == 1");
+ok($log1->is_debug(), "log1 is_debug == 1");
+
+ok($log2->is_error(), "log2 is_error == 1");
+ok(!$log2->is_info(), "log2 is_info == 0");
+ok($log2->is_fatal(), "log2 is_fatal == 1");
+ok(!$log2->is_debug(), "log2 is_debug == 0");
+
+ok($log3->is_error(), "log3 is_error == 1");
+ok($log3->is_info(), "log3 is_info == 1");
+ok($log3->is_fatal(), "log3 is_fatal == 1");
+ok(!$log3->is_debug(), "log3 is_debug == 0");
+
+
+ ##################################################
+ # Check is_*() functions with text
+ ##################################################
+$log3->level('DEBUG');
+$log2->level('ERROR');
+$log1->level('INFO');
+
+ok($log3->is_error(), "log3 is_error == 1");
+ok($log3->is_info(), "log3 is_info == 1");
+ok($log3->is_fatal(), "log3 is_fatal == 1");
+ok($log3->is_debug(), "log3 is_debug == 1");
+
+ok($log2->is_error(), "log2 is_error == 1");
+ok(!$log2->is_info(), "log2 is_info == 0");
+ok($log2->is_fatal(), "log2 is_fatal == 1");
+ok(!$log2->is_debug(), "log2 is_debug == 0");
+
+ok($log1->is_error(), "log1 is_error == 1");
+ok($log1->is_info(), "log1 is_info == 1");
+ok($log1->is_fatal(), "log1 is_fatal == 1");
+ok(!$log1->is_debug(), "log1 is_debug == 0");
+
+
+ ##################################################
+ # Check log->(<level_const>,<msg>)
+ ##################################################
+$app->buffer("");
+$app2->buffer("");
+$app3->buffer("");
+
+$log1->level($DEBUG);
+$log2->level($ERROR);
+$log3->level($INFO);
+
+$log1->log($DEBUG, "debug message");
+$log1->log($INFO, "info message ");
+
+$log2->log($DEBUG, "debug message");
+$log2->log($INFO, "info message ");
+
+$log3->log($DEBUG, "debug message");
+$log3->log($INFO, "info message ");
+
+ok($app->buffer() eq "DEBUG - debug message\nINFO - info message \n",
+ "app buffer contains DEBUG and INFO");
+ok($app2->buffer() eq "DEBUG - debug message\nINFO - info message \n",
+ "app2 buffer contains DEBUG");
+ok($app3->buffer() eq "INFO - info message \n",
+ "app3 buffer contains INFO");
+
+ ##################################################
+ # Check several messages concatenated
+ ##################################################
+$app->buffer("");
+
+$log1->level($DEBUG);
+
+$log1->log($DEBUG, "1", " ", "2", " ");
+$log1->debug("3 ", "4 ");
+$log1->info("5 ", "6 ");
+$log1->warn("7 ", "8 ");
+$log1->error("9 ", "10 ");
+$log1->fatal("11 ", "12 ", "13 ");
+
+my $got = $app->buffer();
+my $expected = <<EOT;
+DEBUG - 1 2
+DEBUG - 3 4
+INFO - 5 6
+WARN - 7 8
+ERROR - 9 10
+FATAL - 11 12 13
+EOT
+
+ok($got eq $expected) || print STDERR "got $got\n expected $expected";
+
+
+#ok($app->buffer() eq <<EOT, "app buffer six lines");
+#DEBUG - 1 2
+#DEBUG - 3 4
+#INFO - 5 6
+#WARN - 7 8
+#ERROR - 9 10
+#FATAL - 11 12 13
+#EOT
+
+ ##################################################
+ # Check several messages concatenated
+ ##################################################
+$app->buffer("");
+
+$log1->level($DEBUG);
+
+$log1->log($DEBUG, sub { "1" . " " . "2" } );
+$log1->info(
+ sub { "3 " . "4 " }, # subroutine
+ # filter (throw out blanks)
+ { filter => sub { my $v = shift;
+ $v =~ s/\s+//g;
+ return $v;
+ },
+ value => " 5 6 " },
+ " 7" );
+
+is($app->buffer(), <<EOT, "app buffer contains 2 lines");
+DEBUG - 1 2
+INFO - 3 4 56 7
+EOT
+
+# warn("app buffer is: ", $app->buffer(), "\n");
+
+############################################################
+# testing multiple parameters, nested hashes
+############################################################
+
+our $stub_hook;
+
+# -----------------------------------
+# here/s a stub
+package Log::Log4perl::AppenderTester;
+sub new {
+ my($class, %params) = @_;
+ my $self = {};
+ bless $self, $class;
+
+ $self->{P} = \%params;
+
+ $main::stub_hook = $self;
+
+ return $self;
+}
+package main;
+# -----------------------------------
+
+$app = Log::Log4perl::Appender->new(
+ "Log::Log4perl::AppenderTester",
+ name => 'dumpy',
+ login => { hostname => 'a.jabber.server',
+ port => 5222,
+ username => "bugs",
+ password => "bunny",
+ resource => "logger" },
+ to => [ 'elmer@a.jabber.server', 'sam@another.jabber.server' ],
+);
+
+ok($stub_hook->{P}{login}{hostname}, 'a.jabber.server');
+ok($stub_hook->{P}{login}{password}, 'bunny');
+ok($stub_hook->{P}{to}[0], 'elmer@a.jabber.server');
+ok($stub_hook->{P}{to}[1], 'sam@another.jabber.server');
+
+# ------------------------------------
+# Check if we get all appenders
+
+my $href = Log::Log4perl->appenders();
+my $result = "";
+
+for(sort keys %$href) {
+ $result .= "$_ => " . ref($href->{$_}->{appender});
+}
+
+like($result, qr/(app\d+.*?Log::Log4perl::Appender::TestBuffer){3}/,
+ "all appenders");
+
+
+##################################################
+# Bug reported by Brian Edwards: add_appender()
+# with screen/file appender fails because of missing
+# base class declaration
+##################################################
+my $log10 = Log::Log4perl->get_logger("xxx.yyy.zzz");
+
+use Log::Log4perl::Appender::Screen;
+use Log::Log4perl::Appender::File;
+
+my $app_screen = Log::Log4perl::Appender::Screen->new();
+
+my $tmpfile = Log::Log4perl::Util::tmpfile_name();
+END { unlink $tmpfile if defined $tmpfile };
+
+my $app_file = Log::Log4perl::Appender::File->new(
+ filename => $tmpfile
+);
+
+eval { $log10->add_appender($app_file); };
+is($@, "", "Adding file appender");
+eval { $log10->add_appender($app_screen); };
+is($@, "", "Adding screen appender");
+