diff options
Diffstat (limited to 't/027Watch3.t')
-rw-r--r-- | t/027Watch3.t | 152 |
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; |