diff options
Diffstat (limited to 't/026FileApp.t')
-rw-r--r-- | t/026FileApp.t | 494 |
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); +}; |