summaryrefslogtreecommitdiff
path: root/t/056SyncApp2.t
diff options
context:
space:
mode:
Diffstat (limited to 't/056SyncApp2.t')
-rw-r--r--t/056SyncApp2.t88
1 files changed, 88 insertions, 0 deletions
diff --git a/t/056SyncApp2.t b/t/056SyncApp2.t
new file mode 100644
index 0000000..6c0841c
--- /dev/null
+++ b/t/056SyncApp2.t
@@ -0,0 +1,88 @@
+#!/usr/bin/perl
+##########################################################################
+# The test checks Log::Log4perl::Appender::Synchronized for correct semaphore
+# destruction when using parameter "destroy".
+# Based on: 042SyncApp.t
+# Jens Berthold, 2009 (log4perl@jebecs.de)
+##########################################################################
+use warnings;
+use strict;
+
+BEGIN {
+ if($ENV{INTERNAL_DEBUG}) {
+ require Log::Log4perl::InternalDebug;
+ Log::Log4perl::InternalDebug->enable();
+ }
+}
+
+use Test::More;
+use Log::Log4perl qw(:easy);
+Log::Log4perl->easy_init($DEBUG);
+use constant INTERNAL_DEBUG => 0;
+
+our $INTERNAL_DEBUG = 0;
+
+$| = 1;
+
+BEGIN {
+ if(exists $ENV{"L4P_ALL_TESTS"}) {
+ plan tests => 1;
+ } else {
+ plan skip_all => "- only with L4P_ALL_TESTS";
+ }
+}
+
+use Log::Log4perl::Util::Semaphore;
+use Log::Log4perl qw(get_logger);
+use Log::Log4perl::Appender::Synchronized;
+
+my $EG_DIR = "eg";
+$EG_DIR = "../eg" unless -d $EG_DIR;
+
+my $logfile = "$EG_DIR/fork.log";
+
+our $lock;
+
+unlink $logfile;
+
+my $conf = qq(
+log4perl.category.Bar.Twix = WARN, Syncer
+
+log4perl.appender.Logfile = Log::Log4perl::Appender::TestFileCreeper
+log4perl.appender.Logfile.autoflush = 1
+log4perl.appender.Logfile.filename = $logfile
+log4perl.appender.Logfile.layout = Log::Log4perl::Layout::PatternLayout
+log4perl.appender.Logfile.layout.ConversionPattern = %F{1}%L> %m%n
+
+log4perl.appender.Syncer = Log::Log4perl::Appender::Synchronized
+log4perl.appender.Syncer.appender = Logfile
+log4perl.appender.Syncer.key = blah
+log4perl.appender.Syncer.destroy = 1
+);
+
+Log::Log4perl::init(\$conf);
+
+my $pid = fork();
+
+die "fork failed" unless defined $pid;
+
+my $logger = get_logger("Bar::Twix");
+if($pid) {
+ # parent
+ # no logging test here: if child erroneously deletes semaphore,
+ # any log output at this point would crash the test
+} else {
+ # child
+ exit 0;
+}
+
+# Wait for child to finish
+print "Waiting for pid $pid\n" if $INTERNAL_DEBUG;
+waitpid($pid, 0);
+print "Done waiting for pid $pid\n" if $INTERNAL_DEBUG;
+unlink $logfile;
+
+# Destroying appender (+semaphore) fails if child process already destroyed it
+Log::Log4perl->appender_by_name('Syncer')->DESTROY();
+ok(!$@, "Destroying appender");
+