mirror of
https://git.proxmox.com/git/proxmox-spamassassin
synced 2025-04-28 16:01:29 +00:00
126 lines
3.5 KiB
Perl
Executable File
126 lines
3.5 KiB
Perl
Executable File
#!/usr/bin/perl -T
|
|
|
|
use lib '.'; use lib 't';
|
|
use SATest; sa_t_init("decodeshorturl");
|
|
|
|
use Test::More;
|
|
|
|
use constant HAS_LWP_USERAGENT => eval { require LWP::UserAgent; require LWP::Protocol::https; };
|
|
use constant HAS_DBI => eval { require DBI; };
|
|
use constant HAS_DBD_SQLITE => eval { require DBD::SQLite; DBD::SQLite->VERSION(1.59_01); };
|
|
|
|
use constant SQLITE => (HAS_DBI && HAS_DBD_SQLITE);
|
|
|
|
plan skip_all => "Net tests disabled" unless conf_bool('run_net_tests');
|
|
plan skip_all => "LWP::Protocol::https required to run this test" unless HAS_LWP_USERAGENT;
|
|
my $tests = 11;
|
|
$tests += 4 if (SQLITE);
|
|
plan tests => $tests;
|
|
|
|
tstpre ("
|
|
loadplugin Mail::SpamAssassin::Plugin::DecodeShortURLs
|
|
");
|
|
|
|
tstprefs(q{
|
|
dns_query_restriction allow bit.ly
|
|
dns_query_restriction allow tinyurl.com
|
|
|
|
clear_url_shortener
|
|
url_shortener tinyurl.com
|
|
url_shortener .page.link
|
|
url_shortener_get bit.ly
|
|
|
|
body HAS_SHORT_URL eval:short_url()
|
|
body HAS_SHORT_REDIR eval:short_url_redir()
|
|
body SHORT_URL_CHAINED eval:short_url_chained()
|
|
body SHORT_URL_404 eval:short_url_404()
|
|
body SHORT_URL_C404 eval:short_url_code('404')
|
|
uri URI_BITLY_BLOCKED m,^https://bitly\.com/a/blocked,
|
|
uri URI_PAGE_LINK m,^https://spamassassin\.apache\.org/news\.html,
|
|
});
|
|
|
|
###
|
|
### Basic functions, no caching
|
|
###
|
|
|
|
%patterns = (
|
|
q{ 1.0 HAS_SHORT_URL } => '',
|
|
q{ 1.0 HAS_SHORT_REDIR } => '',
|
|
q{ 1.0 SHORT_URL_404 } => '',
|
|
q{ 1.0 SHORT_URL_C404 } => '',
|
|
q{ 1.0 URI_BITLY_BLOCKED } => '',
|
|
q{ 1.0 URI_PAGE_LINK } => '',
|
|
);
|
|
sarun ("-t < data/spam/decodeshorturl/base.eml", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%patterns = (
|
|
q{ 1.0 SHORT_URL_CHAINED } => '',
|
|
);
|
|
sarun ("-t < data/spam/decodeshorturl/chain.eml", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
sarun ("-t < data/spam/decodeshorturl/doubleslash.eml", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
###
|
|
### short_url() should hit even without network enabled
|
|
###
|
|
|
|
%patterns = (
|
|
q{ 1.0 HAS_SHORT_URL } => '',
|
|
);
|
|
sarun ("-t -L < data/spam/decodeshorturl/base.eml", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
%patterns = (
|
|
'https://tinyurl.com/jf8wv76t => https://spamassassin.apache.org/'
|
|
);
|
|
|
|
sarun ("-D DecodeShortURLs -t < data/spam/decodeshorturl/anchor.eml 2>&1", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
sarun ("-D DecodeShortURLs -t < data/spam/decodeshorturl/params.eml 2>&1", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
###
|
|
### With SQLITE caching
|
|
###
|
|
|
|
if (SQLITE) {
|
|
|
|
tstprefs("
|
|
dns_query_restriction allow bit.ly
|
|
dns_query_restriction allow tinyurl.com
|
|
|
|
url_shortener bit.ly
|
|
url_shortener tinyurl.com
|
|
|
|
url_shortener_cache_type dbi
|
|
url_shortener_cache_dsn dbi:SQLite:dbname=$workdir/DecodeShortURLs.db
|
|
|
|
body HAS_SHORT_URL eval:short_url()
|
|
describe HAS_SHORT_URL Message contains one or more shortened URLs
|
|
");
|
|
|
|
%patterns = (
|
|
q{ 1.0 HAS_SHORT_URL } => '',
|
|
);
|
|
sarun ("-t < data/spam/decodeshorturl/base.eml", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=$workdir/DecodeShortURLs.db","","");
|
|
my @row = $dbh->selectrow_array("SELECT decoded_url FROM short_url_cache WHERE short_url = 'http://bit.ly/30yH6WK'");
|
|
is($row[0], 'http://spamassassin.apache.org/');
|
|
|
|
# Check another email to cleanup old entries from database
|
|
sarun ("-t < data/spam/decodeshorturl/base2.eml", \&patterns_run_cb);
|
|
ok_all_patterns();
|
|
|
|
$dbh = DBI->connect("dbi:SQLite:dbname=$workdir/DecodeShortURLs.db","","");
|
|
@row = $dbh->selectrow_array("SELECT decoded_url FROM short_url_cache WHERE short_url = 'http://bit.ly/30yH6WK'");
|
|
isnt($row[0], 'https://spamassassin.apache.org/');
|
|
|
|
}
|
|
|