summaryrefslogtreecommitdiff
path: root/t/026FileApp.t
diff options
context:
space:
mode:
Diffstat (limited to 't/026FileApp.t')
-rw-r--r--t/026FileApp.t494
1 files changed, 494 insertions, 0 deletions
diff --git a/t/026FileApp.t b/t/026FileApp.t
new file mode 100644
index 0000000..b3ae4f4
--- /dev/null
+++ b/t/026FileApp.t
@@ -0,0 +1,494 @@
+#Testing if the file-appender appends in default mode
+
+END {
+ # Must be before enabling the Log4Perl stuff, or file will still
+ # be open and locked (under Win32) on program close.
+
+ unlink_testfiles();
+ }
+
+BEGIN {
+ if($ENV{INTERNAL_DEBUG}) {
+ require Log::Log4perl::InternalDebug;
+ Log::Log4perl::InternalDebug->enable();
+ }
+}
+
+use Test::More;
+
+use warnings;
+use strict;
+
+use Log::Log4perl;
+use File::Spec;
+use File::Path qw(remove_tree);
+
+our $LOG_DISPATCH_PRESENT;
+
+BEGIN {
+ eval { require Log::Dispatch; };
+ if(! $@) {
+ $LOG_DISPATCH_PRESENT = 1;
+ }
+};
+
+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 $testfile = File::Spec->catfile($WORK_DIR, "test26.log");
+my $testpath = File::Spec->catfile($WORK_DIR, "test26");
+
+BEGIN {plan tests => 26}
+
+sub unlink_testfiles {
+ unlink $testfile;
+ unlink "${testfile}_1";
+ unlink "${testfile}_2";
+ unlink "${testfile}_3";
+ unlink "${testfile}_4";
+ unlink "${testfile}_5";
+ remove_tree ($testpath, "${testpath}_1");
+}
+
+unlink_testfiles();
+
+####################################################
+# First, preset the log file with some content
+####################################################
+open FILE, ">$testfile" or die "Cannot create $testfile";
+print FILE "previous content\n";
+close FILE;
+
+####################################################
+# Append to a log file without specifying append mode
+# explicitely
+####################################################
+my $data = <<EOT;
+log4j.category = INFO, FileAppndr
+log4j.appender.FileAppndr = Log::Log4perl::Appender::File
+log4j.appender.FileAppndr.filename = $testfile
+log4j.appender.FileAppndr.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+my $log = Log::Log4perl::get_logger("");
+$log->info("Shu-wa-chi!");
+
+open FILE, "<$testfile" or die "Cannot create $testfile";
+my $content = join '', <FILE>;
+close FILE;
+
+is($content, "previous content\nINFO - Shu-wa-chi!\n");
+
+####################################################
+# Clobber the log file if overwriting is required
+####################################################
+$data = <<EOT;
+log4j.category = INFO, FileAppndr
+log4j.appender.FileAppndr = Log::Log4perl::Appender::File
+log4j.appender.FileAppndr.filename = $testfile
+log4j.appender.FileAppndr.mode = write
+log4j.appender.FileAppndr.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("Shu-wa-chi!");
+
+open FILE, "<$testfile" or die "Cannot create $testfile";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - Shu-wa-chi!\n");
+
+####################################################
+# Explicetly say "append"
+####################################################
+$data = <<EOT;
+log4j.category = INFO, FileAppndr
+log4j.appender.FileAppndr = Log::Log4perl::Appender::File
+log4j.appender.FileAppndr.filename = $testfile
+log4j.appender.FileAppndr.mode = append
+log4j.appender.FileAppndr.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("Shu-wa-chi!");
+
+open FILE, "<$testfile" or die "Cannot create $testfile";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - Shu-wa-chi!\nINFO - Shu-wa-chi!\n");
+
+#########################################################
+# Mix Log::Dispatch and Log::Log4perl::Appender appenders
+#########################################################
+SKIP: {
+ skip "Skipping Log::Dispatch tests", 2 unless $LOG_DISPATCH_PRESENT;
+
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1, FileAppndr2
+log4perl.appender.FileAppndr1 = Log::Dispatch::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.mode = append
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+
+log4perl.appender.FileAppndr2 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr2.filename = ${testfile}_2
+log4perl.appender.FileAppndr2.mode = append
+log4perl.appender.FileAppndr2.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("Shu-wa-chi!");
+
+for(qw(1 2)) {
+ open FILE, "<${testfile}_$_" or die "Cannot open ${testfile}_$_";
+ $content = join '', <FILE>;
+ close FILE;
+
+ is($content, "INFO - Shu-wa-chi!\n");
+}
+};
+
+#########################################################
+# Check if the 0.33 Log::Log4perl::Appender::File bug is
+# fixed which caused all messages to end up in the same
+# file.
+#########################################################
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1, FileAppndr2
+log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.mode = write
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+
+log4perl.appender.FileAppndr2 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr2.filename = ${testfile}_2
+log4perl.appender.FileAppndr2.mode = write
+log4perl.appender.FileAppndr2.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("Shu-wa-chi!");
+
+for(qw(1 2)) {
+ open FILE, "<${testfile}_$_" or die "Cannot open ${testfile}_$_";
+ $content = join '', <FILE>;
+ close FILE;
+
+ is($content, "INFO - Shu-wa-chi!\n");
+}
+
+#########################################################
+# Check if switching over to a new file will work
+#########################################################
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1
+log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.mode = write
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+my $app = Log::Log4perl->appenders()->{FileAppndr1};
+$app->file_switch("${testfile}_2");
+$log->info("File2");
+
+for(qw(1 2)) {
+ open FILE, "<${testfile}_$_" or die "Cannot open ${testfile}_$_";
+ $content = join '', <FILE>;
+ close FILE;
+
+ is($content, "INFO - File$_\n");
+}
+
+is($app->filename(), "${testfile}_2");
+
+#########################################################
+# Testing syswrite
+#########################################################
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1
+log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.syswrite = 1
+log4perl.appender.FileAppndr1.mode = write
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+open FILE, "<${testfile}_1" or die "Cannot open ${testfile}_1";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - File1\n");
+
+Log::Log4perl::init(\$data);
+$log->info("File1");
+
+open FILE, "<${testfile}_1" or die "Cannot open ${testfile}_1";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - File1\n");
+
+#########################################################
+# Testing syswrite with append
+#########################################################
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1
+log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.syswrite = 1
+log4perl.appender.FileAppndr1.mode = append
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+open FILE, "<${testfile}_1" or die "Cannot open ${testfile}_1";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - File1\nINFO - File1\n");
+
+#########################################################
+# Testing syswrite and recreate
+#########################################################
+SKIP: {
+ skip "File recreation not supported on Win32", 1 if $^O eq "MSWin32";
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1
+log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.syswrite = 1
+log4perl.appender.FileAppndr1.recreate = 1
+log4perl.appender.FileAppndr1.recreate_check_interval = 0
+log4perl.appender.FileAppndr1.mode = write
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+unlink "${testfile}_1";
+
+$log->info("File1-1");
+
+open FILE, "<${testfile}_1" or die "Cannot open ${testfile}_1";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - File1-1\n");
+};
+
+#########################################################
+# Testing syswrite and recreate without check_interval
+#########################################################
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1
+log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.syswrite = 1
+log4perl.appender.FileAppndr1.recreate = 1
+log4perl.appender.FileAppndr1.mode = write
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+unlink "${testfile}_1";
+
+eval { $log->info("File1-1"); };
+
+is($@, "", "no error on moved file/syswrite");
+
+SKIP: {
+ skip "Signals not supported on Win32", 2 if $^O eq "MSWin32";
+
+#########################################################
+# Testing syswrite and recreate_check_signal
+#########################################################
+$data = <<EOT;
+log4perl.category = INFO, FileAppndr1
+log4perl.appender.FileAppndr1 = Log::Log4perl::Appender::File
+log4perl.appender.FileAppndr1.filename = ${testfile}_1
+log4perl.appender.FileAppndr1.syswrite = 1
+log4perl.appender.FileAppndr1.recreate = 1
+log4perl.appender.FileAppndr1.recreate_check_signal = USR1
+log4perl.appender.FileAppndr1.mode = write
+log4perl.appender.FileAppndr1.layout = Log::Log4perl::Layout::SimpleLayout
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+unlink "${testfile}_1";
+
+is(kill('USR1', $$), 1, "sending signal");
+$log->info("File1");
+
+open FILE, "<${testfile}_1" or die "Cannot open ${testfile}_1";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - File1\n");
+};
+
+#########################################################
+# Testing create_at_logtime
+#########################################################
+unlink "${testfile}_3"; # delete leftovers from previous tests
+
+$data = qq(
+log4perl.category = DEBUG, Logfile
+log4perl.appender.Logfile = Log::Log4perl::Appender::File
+log4perl.appender.Logfile.filename = ${testfile}_3
+log4perl.appender.Logfile.create_at_logtime = 1
+log4perl.appender.Logfile.layout = Log::Log4perl::Layout::SimpleLayout
+);
+
+Log::Log4perl->init(\$data);
+ok(! -f "${testfile}_3");
+
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+open FILE, "<${testfile}_3" or die "Cannot open ${testfile}_3";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - File1\n");
+
+unlink "${testfile}_3";
+
+#########################################################
+# Testing create_at_logtime with recreate_check_signal
+#########################################################
+unlink "${testfile}_4"; # delete leftovers from previous tests
+
+$data = qq(
+log4perl.category = DEBUG, Logfile
+log4perl.appender.Logfile = Log::Log4perl::Appender::File
+log4perl.appender.Logfile.filename = ${testfile}_4
+log4perl.appender.Logfile.create_at_logtime = 1
+log4perl.appender.Logfile.recreate = 1;
+log4perl.appender.Logfile.recreate_check_signal = USR1
+log4perl.appender.Logfile.layout = Log::Log4perl::Layout::SimpleLayout
+);
+
+Log::Log4perl->init(\$data);
+ok(! -f "${testfile}_4");
+
+$log = Log::Log4perl::get_logger("");
+$log->info("File1");
+
+open FILE, "<${testfile}_4" or die "Cannot open ${testfile}_4";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - File1\n");
+
+unlink "${testfile}_4";
+
+#########################################################
+# Print a header into a newly opened file
+#########################################################
+$data = qq(
+log4perl.category = DEBUG, Logfile
+log4perl.appender.Logfile = Log::Log4perl::Appender::File
+log4perl.appender.Logfile.filename = ${testfile}_5
+log4perl.appender.Logfile.header_text = This is a nice header.
+log4perl.appender.Logfile.layout = Log::Log4perl::Layout::SimpleLayout
+);
+
+Log::Log4perl->init(\$data);
+open FILE, "<${testfile}_5" or die "Cannot open ${testfile}_5";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "This is a nice header.\n", "header_text");
+
+####################################################
+# Create path if it is not already created
+####################################################
+
+
+my $testmkpathfile = File::Spec->catfile($testpath, "test26.log");
+
+$data = <<EOT;
+log4j.category = INFO, FileAppndr
+log4j.appender.FileAppndr = Log::Log4perl::Appender::File
+log4j.appender.FileAppndr.filename = $testmkpathfile
+log4j.appender.FileAppndr.layout = Log::Log4perl::Layout::SimpleLayout
+log4j.appender.FileAppndr.mkpath = 1
+EOT
+
+Log::Log4perl::init(\$data);
+$log = Log::Log4perl::get_logger("");
+$log->info("Shu-wa-chi!");
+
+open FILE, "<$testmkpathfile" or die "Cannot create $testmkpathfile";
+$content = join '', <FILE>;
+close FILE;
+
+is($content, "INFO - Shu-wa-chi!\n");
+
+####################################################
+# Create path with umask if it is not already created
+####################################################
+
+SKIP: {
+ skip "Umask not supported on Win32", 3 if $^O eq "MSWin32";
+
+ my $oldumask = umask;
+
+ $testmkpathfile = File::Spec->catfile("${testpath}_1", "test26.log");
+
+ $data = <<EOT;
+ log4j.category = INFO, FileAppndr
+ log4j.appender.FileAppndr = Log::Log4perl::Appender::File
+ log4j.appender.FileAppndr.filename = $testmkpathfile
+ log4j.appender.FileAppndr.layout = Log::Log4perl::Layout::SimpleLayout
+ log4j.appender.FileAppndr.umask = 0026
+ log4j.appender.FileAppndr.mkpath = 1
+ log4j.appender.FileAppndr.mkpath_umask = 0027
+EOT
+
+ Log::Log4perl::init(\$data);
+ $log = Log::Log4perl::get_logger("");
+ $log->info("Shu-wa-chi!");
+
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat("${testpath}_1");
+
+ is($mode & 07777,0750); #Win32 777
+
+ ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat($testmkpathfile);
+
+ is($mode & 07777,0640); #Win32 666
+
+ is(umask,$oldumask);
+};