diff options
Diffstat (limited to 't/044XML-Filter.t')
-rw-r--r-- | t/044XML-Filter.t | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/t/044XML-Filter.t b/t/044XML-Filter.t new file mode 100644 index 0000000..05a6afd --- /dev/null +++ b/t/044XML-Filter.t @@ -0,0 +1,256 @@ +#adding filters to XML-DOM configs --kg + +BEGIN { + if($ENV{INTERNAL_DEBUG}) { + require Log::Log4perl::InternalDebug; + Log::Log4perl::InternalDebug->enable(); + } +} + +use Test::More; +use Log::Log4perl; +use strict; +use Data::Dumper; +use File::Spec; + +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 => 3; + } +} + +if ($no_XMLDOM){ + ok(1); + exit(0); +} + + +#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'); + +# ***************************************************** +# first, test a very basic filter setup +# ***************************************************** + +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/"> + + <appender name="A1" class="Log::Log4perl::Appender::TestBuffer"> + <layout class="Log::Log4perl::Layout::SimpleLayout"/> + <filter class="Log::Log4perl::Filter::Boolean"> + <param name="logic" value="!Match3 && (Match1 || Match2)"/> + </filter> + </appender> + + <root> + <priority value="info"/> + <appender-ref ref="A1"/> + </root> + +</log4j:configuration> + +EOL + + +#Log::Log4perl::init(\$config); + +my $xmldata = Log::Log4perl::Config::config_read(\$xmlconfig); + +my $propsconfig = <<EOL; +log4perl.category = INFO, A1 + +log4perl.appender.A1 = Log::Log4perl::Appender::TestBuffer +log4perl.appender.A1.Filter = Log::Log4perl::Filter::Boolean +log4perl.appender.A1.Filter.logic = !Match3 && (Match1 || Match2) +log4perl.appender.A1.layout = Log::Log4perl::Layout::SimpleLayout + + +EOL + + + +my $propsdata = Log::Log4perl::Config::config_read(\$propsconfig); + +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"; + } + }; + + +# ***************************************************** +# second, log4perl's boolean filters +# ***************************************************** + +$xmlconfig = <<EOL; +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE log4perl:configuration SYSTEM "log4perl.dtd"> + +<log4perl:configuration xmlns:log4perl="http://log4perl.sourceforge.net/"> + + + <appender name="A1" class="Log::Log4perl::Appender::TestBuffer"> + <layout class="Log::Log4perl::Layout::SimpleLayout"/> + <filter class="Log::Log4perl::Filter::Boolean"> + <param name="logic" value="!Match3 && (Match1 || Match2)"/> + </filter> + </appender> + + <log4perl:filter name="Match1" value="sub { /let this through/ }" /> + + <log4perl:filter name="Match2">sub { /and that, too/ }</log4perl:filter> + + <log4perl:filter name="Match3" class="Log::Log4perl::Filter::StringMatch"> + <param name="StringToMatch" value="suppress"/> + <param name="AcceptOnMatch" value="true"/> + </log4perl:filter> + + <log4perl:filter name="MyBoolean" class="Log::Log4perl::Filter::Boolean"> + <param name="logic" value="!Match3 && (Match1 || Match2)"/> + </log4perl:filter> + + + <root> + <priority value="info"/> + <appender-ref ref="A1"/> + </root> + +</log4perl:configuration> +EOL + + +#Log::Log4perl::init(\$config); + +$xmldata = Log::Log4perl::Config::config_read(\$xmlconfig); + +$propsconfig = <<EOL; +log4perl.category = INFO, A1 + +log4perl.filter.Match1 = sub { /let this through/ } +log4perl.filter.Match2 = sub { /and that, too/ } +log4perl.filter.Match3 = Log::Log4perl::Filter::StringMatch +log4perl.filter.Match3.StringToMatch = suppress +log4perl.filter.Match3.AcceptOnMatch = true + +log4perl.filter.MyBoolean = Log::Log4perl::Filter::Boolean +log4perl.filter.MyBoolean.logic = !Match3 && (Match1 || Match2) + +log4perl.appender.A1 = Log::Log4perl::Appender::TestBuffer +log4perl.appender.A1.Filter = Log::Log4perl::Filter::Boolean +log4perl.appender.A1.Filter.logic = !Match3 && (Match1 || Match2) +log4perl.appender.A1.layout = Log::Log4perl::Layout::SimpleLayout + + +EOL + + + +$propsdata = Log::Log4perl::Config::config_read(\$propsconfig); + +#brute force testing here, not very granular, but it is thorough + + +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"; + } + }; + + + + +# ***************************************************** +# third, level range filter, just for something different +# ***************************************************** + + +$xmlconfig = <<EOL; +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE log4perl:configuration SYSTEM "log4perl.dtd"> + +<log4perl:configuration xmlns:log4perl="http://log4perl.sourceforge.net/"> + + <log4perl:appender name="A1" class="Log::Log4perl::Appender::TestBuffer"> + <layout class="Log::Log4perl::Layout::SimpleLayout"/> + <filter-ref id="Range1"/> + </log4perl:appender> + + <log4perl:filter name="Range1" class="Log::Log4perl::Filter::LevelRange"> + <param name="LevelMin" value="info"/> + <param name="LevelMax" value="warn"/> + <param name="AcceptOnMatch" value="true"/> + </log4perl:filter> + + <root> + <priority value="debug"/> + <appender-ref ref="A1"/> + </root> +</log4perl:configuration> +EOL + + +#Log::Log4perl::init(\$config); + +$xmldata = Log::Log4perl::Config::config_read(\$xmlconfig); + +$propsconfig = <<EOL; +log4perl.category = DEBUG, A1 +log4perl.filter.Range1 = Log::Log4perl::Filter::LevelRange +log4perl.filter.Range1.LevelMin = INFO +log4perl.filter.Range1.LevelMax = WARN +log4perl.filter.Range1.AcceptOnMatch = true +log4perl.appender.A1 = Log::Log4perl::Appender::TestBuffer +log4perl.appender.A1.Filter = Range1 +log4perl.appender.A1.layout = Log::Log4perl::Layout::SimpleLayout + + +EOL + +$propsdata = Log::Log4perl::Config::config_read(\$propsconfig); + +#brute force testing here, not very granular, but it is thorough + +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"; + } + }; + + + |