summaryrefslogtreecommitdiff
path: root/t/038XML-DOM1.t
diff options
context:
space:
mode:
Diffstat (limited to 't/038XML-DOM1.t')
-rw-r--r--t/038XML-DOM1.t287
1 files changed, 287 insertions, 0 deletions
diff --git a/t/038XML-DOM1.t b/t/038XML-DOM1.t
new file mode 100644
index 0000000..b6f2c80
--- /dev/null
+++ b/t/038XML-DOM1.t
@@ -0,0 +1,287 @@
+
+BEGIN {
+ if($ENV{INTERNAL_DEBUG}) {
+ require Log::Log4perl::InternalDebug;
+ Log::Log4perl::InternalDebug->enable();
+ }
+}
+
+use Test::More;
+use Log::Log4perl;
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+$SIG{__WARN__} = sub { die @_; };
+
+our $no_XMLDOM;
+
+BEGIN {
+ my $dvrq = $Log::Log4perl::DOM_VERSION_REQUIRED;
+
+ eval {
+ require XML::DOM;
+ XML::DOM->VERSION($dvrq);
+ my $dver = XML::DOM->VERSION($dvrq);
+ require XML::Parser;
+ my $pver = XML::Parser->VERSION;
+ if ($pver >= 2.32 && $dver <= 1.42){
+ print STDERR "Your version of XML::DOM ($dver) is incompatible with your version of XML::Parser ($pver). You should upgrade your XML::DOM to 1.43 or greater.\n";
+ die 'skip tests';
+ }
+
+ };
+ if ($@) {
+ plan skip_all => "only with XML::DOM > $dvrq";
+ }else{
+ plan tests => 2;
+ }
+}
+
+if ($no_XMLDOM){
+ ok(1);
+ exit(0);
+}
+
+
+my $xmlconfig = <<EOL;
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
+ threshold="debug">
+
+ <appender name="A1" class="Log::Log4perl::Appender::TestBuffer">
+ <layout class="Log::Log4perl::Layout::SimpleLayout"/>
+ </appender>
+ <appender name="A2" class="Log::Log4perl::Appender::TestBuffer">
+ <layout class="Log::Log4perl::Layout::SimpleLayout"/>
+ </appender>
+ <appender name="BUF0" class="Log::Log4perl::Appender::TestBuffer">
+ <layout class="Log::Log4perl::Layout::SimpleLayout"/>
+ <param name="Threshold" value="error"/>
+ </appender>
+ <appender name="FileAppndr1" class="org.apache.log4j.FileAppender">
+ <layout class="Log::Log4perl::Layout::PatternLayout">
+ <param name="ConversionPattern"
+ value="%d %4r [%t] %-5p %c %t - %m%n"/>
+ </layout>
+ <param name="File" value="t/tmp/DOMtest"/>
+ <param name="Append" value="false"/>
+ </appender>
+
+ <category name="a.b.c.d" additivity="false">
+ <level value="warn"/> <!-- note lowercase! -->
+ <appender-ref ref="A1"/>
+
+ </category>
+ <category name="a.b">
+ <priority value="info"/>
+ <appender-ref ref="A1"/>
+ </category>
+ <category name="animal.dog">
+ <priority value="info"/>
+ <appender-ref ref="FileAppndr1"/>
+ <appender-ref ref="A2"/>
+ </category>
+ <category name="animal">
+ <priority value="info"/>
+ <appender-ref ref="FileAppndr1"/>
+ </category>
+ <category name="xa.b.c.d">
+ <priority value="info"/>
+ <appender-ref ref="A2"/>
+ </category>
+ <category name="xa.b">
+ <priority value="warn"/>
+ <appender-ref ref="A2"/>
+ </category>
+
+ <root>
+ <priority value="warn"/>
+ <appender-ref ref="FileAppndr1"/>
+ </root>
+
+
+</log4j:configuration>
+
+EOL
+
+
+#Log::Log4perl::init(\$config);
+
+my $xmldata = Log::Log4perl::Config::config_read(\$xmlconfig);
+
+my $propsconfig = <<EOL;
+log4j.appender.A1 = Log::Log4perl::Appender::TestBuffer
+log4j.appender.A1.layout = Log::Log4perl::Layout::SimpleLayout
+
+log4j.appender.A2 = Log::Log4perl::Appender::TestBuffer
+log4j.appender.A2.layout = Log::Log4perl::Layout::SimpleLayout
+
+log4j.appender.BUF0 = Log::Log4perl::Appender::TestBuffer
+log4j.appender.BUF0.layout = Log::Log4perl::Layout::SimpleLayout
+log4j.appender.BUF0.Threshold = ERROR
+
+log4j.appender.FileAppndr1 = org.apache.log4j.FileAppender
+log4j.appender.FileAppndr1.layout = Log::Log4perl::Layout::PatternLayout
+log4j.appender.FileAppndr1.layout.ConversionPattern = %d %4r [%t] %-5p %c %t - %m%n
+log4j.appender.FileAppndr1.File = t/tmp/DOMtest
+log4j.appender.FileAppndr1.Append = false
+
+log4j.category.a.b.c.d = WARN, A1
+log4j.category.a.b = INFO, A1
+
+log4j.category.xa.b.c.d = INFO, A2
+log4j.category.xa.b = WARN, A2
+
+log4j.category.animal = INFO, FileAppndr1
+log4j.category.animal.dog = INFO, FileAppndr1,A2
+
+log4j.category = WARN, FileAppndr1
+
+log4j.threshold = DEBUG
+
+log4j.additivity.a.b.c.d = 0
+
+EOL
+
+
+
+my $propsdata = Log::Log4perl::Config::config_read(\$propsconfig);
+
+#brute force testing here, not very granular, but it is thorough
+
+eval {require Data::Dump};
+my $dump_available;
+if (! $@) {
+ $dump_available = 1;
+}
+
+
+require File::Spec->catfile('t','compare.pl');
+
+ok(Compare($xmldata, $propsdata)) ||
+ do {
+ if ($dump_available) {
+ print STDERR "got: ",Data::Dump::dump($xmldata),"\n";
+ print STDERR "================\n";
+ print STDERR "expected: ", Data::Dump::dump($propsdata),"\n";
+ }
+ };
+
+
+# =======================================================\
+# test variable substitutions
+# more brute force
+
+$xmlconfig = <<'EOL';
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
+ threshold="${rootthreshold}">
+
+ <appender name="${A1}" class="${testbfr}">
+ <layout class="${simplelayout}"/>
+ </appender>
+ <appender name="${A2}" class="${testbfr}">
+ <layout class="Log::Log4perl::Layout::SimpleLayout"/>
+ </appender>
+ <appender name="BUF0" class="Log::Log4perl::Appender::TestBuffer">
+ <layout class="Log::Log4perl::Layout::SimpleLayout"/>
+ <param name="${appthreshold}" value="${appthreshlevel}"/>
+ </appender>
+ <appender name="FileAppndr1" class="org.apache.log4j.FileAppender">
+ <layout class="Log::Log4perl::Layout::PatternLayout">
+ <param name="${convpatt}"
+ value="${thepatt}"/>
+ </layout>
+ <param name="${pfile}" value="${pfileval}"/>
+ <param name="Append" value="false"/>
+ </appender>
+
+ <category name="${abcd}" additivity="${abcd_add}">
+ <level value="${abcd_level}"/> <!-- note lowercase! -->
+ <appender-ref ref="A1"/>
+
+ </category>
+ <category name="a.b">
+ <priority value="info"/>
+ <appender-ref ref="A1"/>
+ </category>
+ <category name="animal.dog">
+ <priority value="info"/>
+ <appender-ref ref="FileAppndr1"/>
+ <appender-ref ref="A2"/>
+ </category>
+ <category name="animal">
+ <priority value="info"/>
+ <appender-ref ref="FileAppndr1"/>
+ </category>
+ <category name="xa.b.c.d">
+ <priority value="info"/>
+ <appender-ref ref="A2"/>
+ </category>
+ <category name="xa.b">
+ <priority value="warn"/>
+ <appender-ref ref="A2"/>
+ </category>
+
+ <root>
+ <priority value="warn"/>
+ <appender-ref ref="FileAppndr1"/>
+ </root>
+
+
+</log4j:configuration>
+
+EOL
+
+
+$ENV{rootthreshold} = 'debug';
+$ENV{A1} = 'A1';
+$ENV{A2} = 'A2';
+$ENV{testbfr} = 'Log::Log4perl::Appender::TestBuffer';
+$ENV{simplelayout} = 'Log::Log4perl::Layout::SimpleLayout';
+$ENV{appthreshold} = 'Threshold';
+$ENV{appthreshlevel} = 'error';
+$ENV{convpatt} = 'ConversionPattern';
+$ENV{thepatt} = '%d %4r [%t] %-5p %c %t - %m%n';
+$ENV{pfile} = 'File';
+$ENV{pfileval} = 't/tmp/DOMtest';
+$ENV{abcd} = 'a.b.c.d';
+$ENV{abcd_add} = 'false';
+$ENV{abcd_level} = 'warn';
+$ENV{a1_appenderref} = 'A1';
+
+my $varsubsdata = Log::Log4perl::Config::config_read(\$xmlconfig);
+
+ok(Compare($varsubsdata, $xmldata)) ||
+ do {
+ if ($dump_available) {
+ print STDERR "got: ",Data::Dump::dump($varsubsdata),"\n";
+ print STDERR "================\n";
+ print STDERR "expected: ", Data::Dump::dump($xmldata),"\n";
+ }
+ };
+
+#<param name="Threshold" value="error"/>
+$xmlconfig = <<EOL;
+<?xml version="1.0" encoding="utf-8"?>
+<log4perl:configuration xmlns:log4perl="http://log4perl.sourceforge.net/" threshold="debug" oneMessagePerAppender="true">
+<appender name="AppGeneralScreen" class="Log::Log4perl::Appender::Screen">
+<layout class="Log::Log4perl::Layout::SimpleLayout"/>
+</appender>
+<root>
+<priority value="WARN" />
+<appender-ref ref="AppGeneralScreen" />
+</root>
+</log4perl:configuration>
+EOL
+
+Log::Log4perl::init( \$xmlconfig );
+my $logger = Log::Log4perl->get_logger();
+
+$logger->info("Info");
+$logger->debug("Debug");