blob: 75cbcfc264eaab6c32f1a7de69f6f3b0414b5b26 [file] [log] [blame]
#!/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/');
}