| #!/usr/bin/perl -T |
| |
| BEGIN { |
| if (-e 't/test_dir') { # if we are running "t/rule_tests.t", kluge around ... |
| chdir 't'; |
| } |
| |
| if (-e 'test_dir') { # running from test directory, not .. |
| unshift(@INC, '../blib/lib'); |
| unshift(@INC, '../lib'); |
| } |
| } |
| |
| use lib '.'; use lib 't'; |
| use SATest; sa_t_init("urilocalbl"); |
| |
| $tests = 0; |
| eval { require MaxMind::DB::Reader; $tests += 8; $has{GEOIP2} = 1 }; |
| eval { require Geo::IP; $tests += 8; $has{GEOIP} = 1 }; |
| eval { require IP::Country::DB_File; $tests += 8; $has{DB_FILE} = 1 }; |
| eval { require IP::Country::Fast; $tests += 8; $has{FAST} = 1 }; |
| |
| use Test::More; |
| |
| plan skip_all => "No supported GeoDB module installed" unless $tests; |
| |
| $net = conf_bool('run_net_tests'); |
| $ipv6 = $net && conf_bool('run_ipv6_dns_tests'); |
| |
| $tests *= 2 if $net; |
| $tests += 1 if $ipv6 && defined $has{GEOIP2}; |
| $tests += 1 if $ipv6 && defined $has{DB_FILE}; |
| |
| plan tests => $tests; |
| |
| # --------------------------------------------------------------------------- |
| |
| tstpre (" |
| loadplugin Mail::SpamAssassin::Plugin::URILocalBL |
| "); |
| |
| %patterns_ipv4 = ( |
| q{ X_URIBL_USA } => 'USA', |
| q{ X_URIBL_FINEG } => 'except Finland', |
| q{ X_URIBL_NA } => 'north America', |
| q{ X_URIBL_EUNEG } => 'except Europe', |
| q{ X_URIBL_CIDR1 } => 'our TestIP1', |
| q{ X_URIBL_CIDR2 } => 'our TestIP2', |
| q{ X_URIBL_CIDR3 } => 'our TestIP3', |
| ); |
| |
| %patterns_ipv6 = ( |
| q{ X_URIBL_CIDR4 } => 'our TestIP4', |
| ); |
| |
| my $rules = " |
| |
| uri_block_cc X_URIBL_USA us |
| describe X_URIBL_USA uri located in USA |
| |
| uri_block_cc X_URIBL_FINEG !fi |
| describe X_URIBL_FINEG uri located anywhere except Finland |
| |
| uri_block_cont X_URIBL_NA na |
| describe X_URIBL_NA uri located in north America |
| |
| uri_block_cont X_URIBL_EUNEG !eu !af |
| describe X_URIBL_EUNEG uri located anywhere except Europe/Africa |
| |
| uri_block_cidr X_URIBL_CIDR1 8.0.0.0/8 1.2.3.4 |
| describe X_URIBL_CIDR1 uri is our TestIP1 |
| |
| uri_block_cidr X_URIBL_CIDR2 8.8.8.8 |
| describe X_URIBL_CIDR2 uri is our TestIP2 |
| |
| uri_block_cidr X_URIBL_CIDR3 8.8.8.0/24 |
| describe X_URIBL_CIDR3 uri is our TestIP3 |
| "; |
| |
| my $rules_ipv6 = " |
| |
| uri_block_cidr X_URIBL_CIDR4 2001:4860:4860::8888 |
| describe X_URIBL_CIDR4 uri is our TestIP4 |
| "; |
| |
| if (defined $has{GEOIP2}) { |
| my $lrules = " |
| geodb_module GeoIP2 |
| geodb_search_path data/geodb |
| $rules |
| "; |
| tstlocalrules ($lrules); |
| %patterns = %patterns_ipv4; |
| ok sarun ("-L -t < data/spam/relayUS.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| |
| if ($net) { |
| $lrules .= $rules_ipv6 if $ipv6; |
| tstlocalrules ($lrules); |
| if ($ipv6) { |
| %patterns = (%patterns_ipv4, %patterns_ipv6); |
| } else { |
| %patterns = %patterns_ipv4; |
| warn "skipping IPv6 DNS lookup tests (run_ipv6_dns_tests=n)\n"; |
| } |
| ok sarun ("-t < data/spam/urilocalbl_net.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| } else { |
| warn "skipping DNS lookup tests (run_net_tests=n)\n"; |
| } |
| } else { |
| warn "skipping MaxMind::DB::Reader (GeoIP2) tests (not installed)\n"; |
| } |
| |
| |
| if (defined $has{GEOIP}) { |
| tstlocalrules (" |
| geodb_module Geo::IP |
| geodb_search_path data/geodb |
| $rules |
| "); |
| %patterns = %patterns_ipv4; |
| ok sarun ("-L -t < data/spam/relayUS.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| |
| if ($net) { |
| ok sarun ("-t < data/spam/urilocalbl_net.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| } else { |
| warn "skipping DNS lookup tests (run_net_tests=n)\n"; |
| } |
| } else { |
| warn "skipping Geo::IP tests (not installed)\n"; |
| } |
| |
| |
| if (defined $has{DB_FILE}) { |
| my $lrules = " |
| geodb_module DB_File |
| geodb_options country:data/geodb/ipcc.db |
| $rules |
| "; |
| tstlocalrules ($lrules); |
| %patterns = %patterns_ipv4; |
| ok sarun ("-L -t < data/spam/relayUS.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| |
| if ($net) { |
| $lrules .= $rules_ipv6 if $ipv6; |
| tstlocalrules ($lrules); |
| if ($ipv6) { |
| %patterns = (%patterns_ipv4, %patterns_ipv6); |
| } else { |
| %patterns = %patterns_ipv4; |
| warn "skipping IPv6 DNS lookup tests (run_ipv6_dns_tests=n)\n"; |
| } |
| ok sarun ("-t < data/spam/urilocalbl_net.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| } else { |
| warn "skipping DNS lookup tests (run_net_tests=n)\n"; |
| } |
| } else { |
| warn "skipping IP::Country::DB_File tests (not installed)\n"; |
| } |
| |
| |
| if (defined $has{FAST}) { |
| tstlocalrules (" |
| geodb_module Fast |
| $rules |
| "); |
| %patterns = %patterns_ipv4; |
| ok sarun ("-L -t < data/spam/relayUS.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| |
| if ($net) { |
| ok sarun ("-t < data/spam/urilocalbl_net.eml", \&patterns_run_cb); |
| ok_all_patterns(); |
| clear_pattern_counters(); |
| } else { |
| warn "skipping DNS lookup tests (run_net_tests=n)\n"; |
| } |
| } else { |
| warn "skipping IP::Country::Fast tests (not installed)\n"; |
| } |
| |
| |