Skip to content

Commit

Permalink
More tests for mod_admin_extra_.*
Browse files Browse the repository at this point in the history
  • Loading branch information
ludwikbukowski committed Dec 2, 2015
1 parent 6c223e5 commit ad0a10a
Show file tree
Hide file tree
Showing 2 changed files with 232 additions and 17 deletions.
2 changes: 2 additions & 0 deletions test/ejabberd_tests/roster.template
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
[
{"alice", "localhost", "Group", "Alice"},
{"bob", "localhost", "Group", "Bob"},
{"kate", "localhost", "Group", "Kate"},
{"mike", "localhost", "Group", "Mike"},
{"unicoder-иии", "localhost", "Group-иии", "Unicoder-иии"}
].
247 changes: 230 additions & 17 deletions test/ejabberd_tests/tests/ejabberdctl_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ all() ->
{group, sessions},
{group, vcard},
{group, roster},
{group, roster_advanced},
{group, last},
{group, private},
{group, stanza},
Expand All @@ -51,16 +52,16 @@ all() ->
end.

groups() ->
[{basic, [sequence], basic()},
{accounts, [sequence], accounts()},
{sessions, [sequence], sessions()},
{vcard, [sequence], vcard()},
{roster, [sequence], roster()},
{last, [sequence], last()},
{private, [sequence], private()},
{stanza, [sequence], stanza()},
{stats, [sequence], stats()}
].
[{accounts, [sequence], accounts()},
{sessions, [sequence], sessions()},
{vcard, [sequence], vcard()},
{roster, [sequence], roster()},
{last, [sequence], last()},
{private, [sequence], private()},
{stanza, [sequence], stanza()},
{roster_advanced, [sequence], roster_advanced()},
{basic, [sequence], basic()},
{stats, [sequence], stats()}].

basic() ->
[simple_register, simple_unregister, register_twice,
Expand All @@ -84,13 +85,22 @@ sessions() -> [num_resources_num, kick_session, status,
vcard() -> [vcard_rw, vcard2_rw, vcard2_multi_rw].

roster() -> [rosteritem_rw, presence_after_add_rosteritem,
push_roster, push_roster_all, push_roster_alltoall].
push_roster,
push_roster_all,
push_roster_alltoall].

roster_advanced() ->[process_rosteritems_list_simple,
process_rosteritems_list_nomatch,
process_rosteritems_list_advanced1,
process_rosteritems_list_advanced2,
process_rosteritems_delete_advanced,
process_rosteritems_delete_advanced2].

last() -> [set_last].

private() -> [private_rw].

stanza() -> [send_message, send_stanza].
stanza() -> [send_message, send_message_wrong_jid, send_stanza, send_stanzac2s_wrong].

stats() -> [stats_global, stats_host].

Expand Down Expand Up @@ -130,21 +140,31 @@ init_per_group(vcard, Config) ->
_ ->
Config
end;

init_per_group(roster_advanced, Config) ->
case escalus_ejabberd:rpc(gen_mod,get_module_opt,[ct:get_config(ejabberd_domain), mod_roster, backend, mnesia]) of
mnesia ->
Config;
_ ->
{skip, command_process_rosteritems_supports_only_mnesia}
end;

init_per_group(_GroupName, Config) ->
Config.

end_per_group(roster, Config) ->
end_per_group(Rosters, Config) when (Rosters == roster) or (Rosters == roster_advanced) ->
TemplatePath = escalus_config:get_config(roster_template, Config),
RegUsers = [atom_to_list(U) || {U, _} <- escalus_config:get_config(escalus_users, Config)],
{ok, [Roster]} = file:consult(TemplatePath),
io:format("Roster is ~p~n and registred is ~p",[Roster, RegUsers]),
C = fun({U, S, _, _}) ->
case lists:member(U, RegUsers) of
true ->
ok;
_ ->
SB = string_to_binary(S),
UB = string_to_binary(U),
escalus_ejabberd:rpc(ejabberd_hooks, run, [remove_user, SB, [UB, SB]])
escalus_ejabberd:rpc(ejabberd_hooks, run, [remove_user, SB, [UB, SB]]);
_ ->
ok
end
end,
lists:foreach(C, Roster),
Expand Down Expand Up @@ -457,6 +477,162 @@ push_roster(Config) ->
escalus:send(Alice, escalus_stanza:roster_remove_contact(bob)) % cleanup
end).

process_rosteritems_list_simple(Config) ->
escalus:story(Config, [{alice, 1}, {bob, 1}], fun(Alice, Bob) ->
%% given
Action = "list",
Subs = "any",
Asks = "any",
User = escalus_client:short_jid(Alice),
Contact =string:to_lower(binary_to_list(escalus_client:short_jid(Bob))),
{AliceName, Domain, _} = get_user_data(alice, Config),
{BobName, Domain, _} = get_user_data(bob, Config),
%% when
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, BobName, Domain, "MyBob", "MyGroup", "both"], Config),
S = escalus:wait_for_stanzas(Alice, 2),
{R, 0} = ejabberdctl("process_rosteritems", [Action, Subs, Asks, User, Contact], Config),
%% then
{match, _} = re:run(R, ".*Matches:.*"++Contact++".*"),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, BobName, Domain], Config)
end).

process_rosteritems_list_nomatch(Config) ->
escalus:story(Config, [{alice, 1}, {bob, 1}], fun(Alice, Bob) ->
%% given
Action = "list",
Subs = "from:both",
Asks = "any",
User = escalus_client:short_jid(Alice),
Contact =string:to_lower(binary_to_list(escalus_client:short_jid(Bob))),
{AliceName, Domain, _} = get_user_data(alice, Config),
{BobName, Domain, _} = get_user_data(bob, Config),
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, BobName,
Domain, "MyBob", "MyGroup", "to"], Config),
escalus:wait_for_stanzas(Alice, 2),
%% when
{R, 0} = ejabberdctl("process_rosteritems", [Action, Subs, Asks, User, Contact], Config),
%% then
nomatch = re:run(R, ".*Matches:.*"++Contact++".*"),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, BobName, Domain], Config)
end).

process_rosteritems_list_advanced1(Config) ->
escalus:story(Config, [{alice, 1}, {mike, 1}, {kate, 1}], fun(Alice, Mike, Kate) ->
%% given
Action = "list",
Subs = "from:both",
Asks = "any",
User = escalus_client:short_jid(Alice),
{AliceName, Domain, _} = get_user_data(alice, Config),
{MikeName, Domain, _} = get_user_data(mike, Config),
{KateName, Domain, _} = get_user_data(kate, Config),
ContactMike = string:to_lower(binary_to_list(escalus_client:short_jid(Mike))),
ContactKate= string:to_lower(binary_to_list(escalus_client:short_jid(Kate))),
ContactsRegexp = ContactMike ++ ":" ++ string:substr(binary_to_list(KateName), 1, 2) ++ ".*@.*",

{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, MikeName,
Domain, "DearMike", "MyGroup", "both"], Config),
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, KateName,
Domain, "BestFriend", "MyGroup", "both"], Config),
escalus:wait_for_stanzas(Alice,4),
%% when
{R, 0} = ejabberdctl("process_rosteritems", [Action, Subs, Asks, User, ContactsRegexp], Config),
%% then
{match, _} = re:run(R, ".*Matches:.*"++ContactMike++".*"),
{match, _} = re:run(R, ".*Matches:.*"++ContactKate++".*"),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, MikeName, Domain], Config),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, KateName, Domain], Config)
end).

process_rosteritems_delete_advanced(Config) ->
escalus:story(Config, [{alice, 1}, {mike, 1}, {kate, 1}], fun(Alice, Mike, Kate) ->
%% given
Action = "delete",
Subs = "from",
Asks = "any",
User = escalus_client:short_jid(Alice),
{AliceName, Domain, _} = get_user_data(alice, Config),
{MikeName, Domain, _} = get_user_data(mike, Config),
{KateName, Domain, _} = get_user_data(kate, Config),
ContactMike = string:to_lower(binary_to_list(escalus_client:short_jid(Mike))),
ContactKate= string:to_lower(binary_to_list(escalus_client:short_jid(Kate))),
ContactsRegexp = ".*" ++ string:substr(ContactMike, 3) ++
":" ++ string:substr(ContactKate, 1,2) ++"@" ++ binary_to_list(Domain),
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, MikeName,
Domain, "DearMike", "MyGroup", "from"], Config),
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, KateName,
Domain, "Friend", "MyGroup", "from"], Config),
escalus:wait_for_stanzas(Alice,4),
%% when
{R, 0} = ejabberdctl("process_rosteritems", [Action, Subs, Asks, User, ContactsRegexp], Config),
%% then
{match, _} = re:run(R, ".*Matches:.*"++ContactMike++".*"),
nomatch = re:run(R, ".*Matches:.*"++ContactKate++".*"),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, MikeName, Domain], Config),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, KateName, Domain], Config)
end).

process_rosteritems_list_advanced2(Config) ->
escalus:story(Config, [{alice, 1}, {mike, 1}, {kate, 1}], fun(Alice, Mike, Kate) ->
%% given
Action = "list",
Subs = "any",
Asks = "any",
User = escalus_client:short_jid(Alice),
{AliceName, Domain, _} = get_user_data(alice, Config),
{MikeName, Domain, _} = get_user_data(mike, Config),
{KateName, Domain, _} = get_user_data(kate, Config),
ContactMike = string:to_lower(binary_to_list(escalus_client:short_jid(Mike))),
ContactKate= string:to_lower(binary_to_list(escalus_client:short_jid(Kate))),
ContactsRegexp = ".*e@lo.*",
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, MikeName,
Domain, "DearMike", "MyGroup", "both"], Config),
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, KateName,
Domain, "KateFromSchool", "MyGroup", "from"], Config),
escalus:wait_for_stanzas(Alice,4),
%% when
{R, 0} = ejabberdctl("process_rosteritems", [Action, Subs, Asks, User, ContactsRegexp], Config),
%% then
{match, _} = re:run(R, ".*Matches:.*"++ContactMike++".*"),
{match, _} = re:run(R, ".*Matches:.*"++ContactKate++".*"),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, MikeName, Domain], Config),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, KateName, Domain], Config)
end).

process_rosteritems_delete_advanced2(Config) ->
escalus:story(Config, [{alice, 1}, {bob, 1}, {mike, 1}, {kate, 1}], fun(Alice, Bob, Mike, Kate) ->
%% given
Action = "delete",
Subs = "to:from",
Asks = "any",
User = "'al.c[e]@.*host:((b[o]b)|(mike))@loc.*t2'",
{AliceName, Domain, _} = get_user_data(alice, Config),
{BobName, Domain, _} = get_user_data(bob, Config),
{MikeName, Domain, _} = get_user_data(mike, Config),
{KateName, Domain, _} = get_user_data(kate, Config),
ContactMike = string:to_lower(binary_to_list(escalus_client:short_jid(Mike))),
ContactKate= string:to_lower(binary_to_list(escalus_client:short_jid(Kate))),
ContactBob= string:to_lower(binary_to_list(escalus_client:short_jid(Bob))),
ContactsReg = "'.ik[ea]@localho+.*:k@loc.*st:(alice)+@.*:no'",
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, MikeName,
Domain, "DearMike", "MyGroup", "to"], Config),
{_, 0} = ejabberdctl("add_rosteritem", [AliceName, Domain, KateName,
Domain, "HateHerSheHasSoNiceLegs", "MyGroup", "to"], Config),
{_, 0} = ejabberdctl("add_rosteritem", [BobName, Domain, AliceName,
Domain, "Girlfriend", "MyGroup", "from"], Config),
escalus:wait_for_stanzas(Alice,4),
escalus:wait_for_stanzas(Bob, 2),
%% when
{R, 0} = ejabberdctl("process_rosteritems", [Action, Subs, Asks, User, ContactsReg], Config),
%% then
{match, _} = re:run(R, ".*Matches:.*" ++ ContactMike ++ ".*"),
nomatch = re:run(R, ".*Matches:.*" ++ ContactKate ++ ".*"),
nomatch = re:run(R, ".*Matches:.*" ++ ContactBob ++ ".*"),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, MikeName, Domain], Config),
{_, 0} = ejabberdctl("delete_rosteritem", [AliceName, Domain, KateName, Domain], Config),
{_, 0} = ejabberdctl("delete_rosteritem", [BobName, Domain, AliceName, Domain], Config)
end).

push_roster_all(Config) ->
escalus:story(Config, [{alice, 1}, {bob,1}], fun(Alice, Bob) ->
TemplatePath = escalus_config:get_config(roster_template, Config),
Expand Down Expand Up @@ -561,6 +737,22 @@ send_message(Config) ->
escalus:assert(is_headline_message, [<<"Subj">>, <<"Hi Bob!!">>], Stanza3)
end).

send_message_wrong_jid(Config) ->
escalus:story(Config, [{alice, 1}, {bob, 1}], fun(Alice, Bob) ->
{_, Err1} = ejabberdctl("send_message_chat", ["'@@#$%!!.§§£'",
escalus_client:full_jid(Bob),
"\"Hello bobby!\""], Config),
{_, Err2} = ejabberdctl("send_message_headline", ["'%%@&@&@==//\///'",
escalus_client:short_jid(Bob),
"Subj", "\"Are
you there?\""],
Config),
Err1 =/=0,
Err2 =/=0,
escalus_assert:has_no_stanzas(Alice),
escalus_assert:has_no_stanzas(Bob)
end).

send_stanza(Config) ->
escalus:story(Config, [{alice, 1}, {bob,1}], fun(Alice, Bob) ->
Domain = escalus_client:server(Alice),
Expand All @@ -577,6 +769,26 @@ send_stanza(Config) ->
escalus:assert(is_stanza_from, [Bob], Message)
end).

send_stanzac2s_wrong(Config) ->
escalus:story(Config, [{alice, 1}, {bob,1}], fun(Alice, Bob) ->
Domain = escalus_client:server(Alice),
Resource = escalus_client:resource(Alice),
WrongBobName = "bobby_the_great",
{BobName, _, _} = get_user_data(bob, Config),
BobJID = <<BobName/binary, $@, Domain/binary, $/, (escalus_client:resource(Bob))/binary>>,
Stanza = re:replace(exml:to_binary(escalus_stanza:from(escalus_stanza:chat_to(Alice, "Hi"), BobJID)),
<<?DOUBLE_QUOTE_CHAR>>, <<?SINGLE_QUOTE_CHAR>>, [global, {return, binary}]),
StanzaWrong = <<"<iq type='get' id='234234'><xmlns='wrongwrong'>">>,
{_, Err} = ejabberdctl("send_stanza_c2s", [WrongBobName, Domain, Resource, <<$\", Stanza/binary, $\">>],
Config),
{_, Err2} = ejabberdctl("send_stanza_c2s", [BobName, Domain, Resource, <<$\", StanzaWrong/binary, $\">>],
Config),

Err =/= 0,
Err2 =/= 0,
escalus_assert:has_no_stanzas(Alice)
end).

%%--------------------------------------------------------------------
%% mod_admin_extra_stats tests
%%--------------------------------------------------------------------
Expand Down Expand Up @@ -807,7 +1019,8 @@ get_sha(AccountPass) ->

set_last(User, Domain, TStamp) ->
Mod = escalus_ejabberd:rpc(mod_admin_extra_last, get_lastactivity_module, [Domain]),
escalus_ejabberd:rpc(Mod, store_last_info, [escalus_utils:jid_to_lower(User), Domain, TStamp, <<>>]).
Fun = escalus_ejabberd:rpc(mod_admin_extra_last, get_lastactivity_fun, [Domain]),
escalus_ejabberd:rpc(Mod, Fun, [escalus_utils:jid_to_lower(User), Domain, TStamp, <<>>]).

delete_users(Config) ->
Users = escalus_users:get_users({by_name, [alice, bob, kate, mike]}),
Expand Down

0 comments on commit ad0a10a

Please sign in to comment.