diff --git a/test/antispam_tests.erl b/test/antispam_tests.erl index f6f589c0d..d56ac53cd 100644 --- a/test/antispam_tests.erl +++ b/test/antispam_tests.erl @@ -58,7 +58,8 @@ single_cases() -> single_test(block_domain_in_vhost), single_test(unblock_domain_in_vhost2), single_test(jid_cache), - single_test(rtbl_domains)]}. + single_test(rtbl_domains), + single_test(rtbl_domains_whitelisted)]}. %%%=================================================================== @@ -200,6 +201,46 @@ rtbl_domains(Config) -> {result, _} = mod_pubsub:delete_node(RTBLHost, RTBLDomainsNode, Owner), disconnect(Config). +rtbl_domains_whitelisted(Config) -> + Host = ?config(server, Config), + RTBLHost = + jid:to_string( + suite:pubsub_jid(Config)), + RTBLDomainsNode = <<"spam_source_domains">>, + OldOpts = gen_mod:get_module_opts(Host, mod_antispam), + NewOpts = + maps:merge(OldOpts, #{rtbl_host => RTBLHost, rtbl_domains_node => RTBLDomainsNode}), + Owner = jid:make(?config(user, Config), ?config(server, Config), <<>>), + {result, _} = + mod_pubsub:create_node(RTBLHost, + ?config(server, Config), + RTBLDomainsNode, + Owner, + <<"flat">>), + {result, _} = + mod_pubsub:publish_item(RTBLHost, + ?config(server, Config), + RTBLDomainsNode, + Owner, + <<"whitelisted.domain">>, + [xmpp:encode(#ps_item{id = <<"whitelisted.domain">>, + sub_els = []})]), + mod_antispam:reload(Host, OldOpts, NewOpts), + {result, _} = + mod_pubsub:publish_item(RTBLHost, + ?config(server, Config), + RTBLDomainsNode, + Owner, + <<"yetanother.domain">>, + [xmpp:encode(#ps_item{id = <<"yetanother.domain">>, + sub_els = []})]), + ?retry(100, 10, ?match(true, (has_spam_domain(<<"yetanother.domain">>))(Host))), + %% we assume that the previous "whitelisted.domain" pubsub item has been consumed by now, so we + %% can check that it doesn't exist + ?match(false, (has_spam_domain(<<"whitelisted.domain">>))(Host)), + {result, _} = mod_pubsub:delete_node(RTBLHost, RTBLDomainsNode, Owner), + disconnect(Config). + %%%=================================================================== %%% Internal functions %%%=================================================================== diff --git a/test/ejabberd_SUITE_data/ejabberd.mnesia.yml b/test/ejabberd_SUITE_data/ejabberd.mnesia.yml index c8585e6e4..80f4da81c 100644 --- a/test/ejabberd_SUITE_data/ejabberd.mnesia.yml +++ b/test/ejabberd_SUITE_data/ejabberd.mnesia.yml @@ -11,6 +11,7 @@ define_macro: spam_jids_file: spam_jids.txt spam_domains_file: spam_domains.txt spam_urls_file: spam_urls.txt + whitelist_domains_file: whitelist_domains.txt mod_blocking: [] mod_caps: db_type: internal diff --git a/test/ejabberd_SUITE_data/ejabberd.redis.yml b/test/ejabberd_SUITE_data/ejabberd.redis.yml index cdbc905bd..14737b17c 100644 --- a/test/ejabberd_SUITE_data/ejabberd.redis.yml +++ b/test/ejabberd_SUITE_data/ejabberd.redis.yml @@ -12,6 +12,7 @@ define_macro: spam_jids_file: spam_jids.txt spam_domains_file: spam_domains.txt spam_urls_file: spam_urls.txt + whitelist_domains_file: whitelist_domains.txt mod_blocking: [] mod_caps: db_type: internal diff --git a/test/ejabberd_SUITE_data/whitelist_domains.txt b/test/ejabberd_SUITE_data/whitelist_domains.txt new file mode 100644 index 000000000..b953fb7f6 --- /dev/null +++ b/test/ejabberd_SUITE_data/whitelist_domains.txt @@ -0,0 +1 @@ +whitelisted.domain diff --git a/test/suite.erl b/test/suite.erl index 62b442580..7bc27e913 100644 --- a/test/suite.erl +++ b/test/suite.erl @@ -54,6 +54,7 @@ init_config(Config) -> copy_file(Config, "spam_jids.txt"), copy_file(Config, "spam_urls.txt"), copy_file(Config, "spam_domains.txt"), + copy_file(Config, "whitelist_domains.txt"), {ok, MacrosContentTpl} = file:read_file(MacrosPathTpl), Password = <<"password!@#$%^&*()'\"`~<>+-/;:_=[]{}|\\">>, Backends = get_config_backends(),