summaryrefslogtreecommitdiff
path: root/t/027Watch3.t
diff options
context:
space:
mode:
Diffstat (limited to 't/027Watch3.t')
-rw-r--r--t/027Watch3.t152
1 files changed, 152 insertions, 0 deletions
diff --git a/t/027Watch3.t b/t/027Watch3.t
new file mode 100644
index 0000000..a07a959
--- /dev/null
+++ b/t/027Watch3.t
@@ -0,0 +1,152 @@
+#testing init_and_watch
+#same as 027Watch2, just with signal handling instead of watch/delay code
+
+BEGIN {
+ if($ENV{INTERNAL_DEBUG}) {
+ require Log::Log4perl::InternalDebug;
+ Log::Log4perl::InternalDebug->enable();
+ }
+}
+
+use warnings;
+use strict;
+use Test::More;
+use Config;
+
+our $SIGNALS_AVAILABLE = 0;
+
+BEGIN {
+ no warnings;
+ # Check if this platform supports signals
+ if (length $Config{sig_name} and length $Config{sig_num}) {
+ eval {
+ $SIG{USR1} = sub { $SIGNALS_AVAILABLE = 1 };
+ # From the Config.pm manpage
+ my(%sig_num);
+ my @names = split ' ', $Config{sig_name};
+ @sig_num{@names} = split ' ', $Config{sig_num};
+
+ kill $sig_num{USR1}, $$;
+ };
+ if($@) {
+ $SIGNALS_AVAILABLE = 0;
+ }
+ }
+
+ if ($SIGNALS_AVAILABLE) {
+ plan tests => 15;
+ }else{
+ plan skip_all => "only on platforms supporting signals";
+ }
+}
+
+use Log::Log4perl;
+use Log::Log4perl::Appender::TestBuffer;
+use File::Spec;
+
+my $WORK_DIR = "tmp";
+if(-d "t") {
+ $WORK_DIR = File::Spec->catfile(qw(t tmp));
+}
+unless (-e "$WORK_DIR"){
+ mkdir("$WORK_DIR", 0755) || die "can't create $WORK_DIR ($!)";
+}
+
+my $testconf= File::Spec->catfile($WORK_DIR, "test27.conf");
+unlink $testconf if (-e $testconf);
+
+Log::Log4perl::Appender::TestBuffer->reset();
+
+my $conf1 = <<EOL;
+log4j.category = WARN, myAppender
+
+log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer
+log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout
+
+log4j.category.animal.dog = DEBUG, goneAppender
+
+log4j.appender.goneAppender = Log::Log4perl::Appender::TestBuffer
+log4j.appender.goneAppender.layout = Log::Log4perl::Layout::SimpleLayout
+
+log4j.category.animal.cat = INFO, myAppender
+
+EOL
+open (CONF, ">$testconf") || die "can't open $testconf $!";
+print CONF $conf1;
+close CONF;
+
+Log::Log4perl->init_and_watch($testconf, 'HUP');
+
+my $logger = Log::Log4perl::get_logger('animal.dog');
+
+ok( $logger->is_debug(), "is_debug - true");
+ok( $logger->is_info(), "is_info - true");
+ok( $logger->is_warn(), "is_warn - true");
+ok( $logger->is_error(), "is_error - true");
+ok( $logger->is_fatal(), "is_fatal - true");
+
+my $app0 = Log::Log4perl::Appender::TestBuffer->by_name("myAppender");
+
+$logger->debug('debug message, should appear');
+
+is($app0->buffer(), "DEBUG - debug message, should appear\n", "debug()");
+
+
+#---------------------------
+#now reload and then signal
+
+$conf1 = <<EOL;
+log4j.category = WARN, myAppender
+
+log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer
+log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout
+
+#*****log4j.category.animal.dog = DEBUG, goneAppender
+
+#*****log4j.appender.goneAppender = Log::Log4perl::Appender::TestBuffer
+#*****log4j.appender.goneAppender.layout = Log::Log4perl::Layout::SimpleLayout
+
+log4j.category.animal.cat = INFO, myAppender
+
+EOL
+open (CONF, ">$testconf") || die "can't open $testconf $!";
+print CONF $conf1;
+close CONF;
+
+#---------------------------
+# send the signal to the process itself
+kill(1, $$) or die "Cannot signal";
+
+ok(! $logger->is_debug(), "is_debug - false");
+ok(! $logger->is_info(), "is_info - false");
+ok( $logger->is_warn(), "is_warn - true");
+ok( $logger->is_error(), "is_error - true");
+ok( $logger->is_fatal(), "is_fatal - true");
+
+#now the logger is ruled by root's WARN level
+$logger->debug('debug message, should NOT appear');
+
+my $app1 = Log::Log4perl::Appender::TestBuffer->by_name("myAppender");
+
+is($app1->buffer(), "", "buffer empty");
+
+$logger->warn('warning message, should appear');
+
+is($app1->buffer(), "WARN - warning message, should appear\n", "warn in");
+
+#check the root logger
+$logger = Log::Log4perl::get_logger();
+
+$logger->warn('warning message, should appear');
+
+like($app1->buffer(), qr/(WARN - warning message, should appear\n){2}/,
+ "2nd warn in");
+
+# -------------------------------------------
+#double-check an unrelated category with a lower level
+$logger = Log::Log4perl::get_logger('animal.cat');
+$logger->info('warning message to cat, should appear');
+
+like($app1->buffer(), qr/(WARN - warning message, should appear\n){2}INFO - warning message to cat, should appear/, "message output");
+
+unlink $testconf;