Skip to content

Commit

Permalink
Merge pull request #3274 from esl/enable-mongooseimctl-tests-for-dyna…
Browse files Browse the repository at this point in the history
…mic-domains

Enable mongooseimctl tests for dynamic domains
  • Loading branch information
vkatsuba authored Sep 16, 2021
2 parents 0117dfa + 0fa8cf6 commit e1aa673
Show file tree
Hide file tree
Showing 17 changed files with 228 additions and 203 deletions.
2 changes: 1 addition & 1 deletion big_tests/default.spec
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
{suites, "tests", component_SUITE}.
{suites, "tests", connect_SUITE}.
{suites, "tests", disco_and_caps_SUITE}.
{suites, "tests", ejabberdctl_SUITE}.
{suites, "tests", extdisco_SUITE}.
{suites, "tests", gdpr_SUITE}.
{suites, "tests", inbox_SUITE}.
Expand All @@ -48,6 +47,7 @@
{suites, "tests", mod_version_SUITE}.
{suites, "tests", mongoose_cassandra_SUITE}.
{suites, "tests", mongoose_elasticsearch_SUITE}.
{suites, "tests", mongooseimctl_SUITE}.
{suites, "tests", muc_SUITE}.
{suites, "tests", muc_http_api_SUITE}.
{suites, "tests", muc_light_SUITE}.
Expand Down
2 changes: 2 additions & 0 deletions big_tests/dynamic_domains.spec
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@

{suites, "tests", mod_version_SUITE}.

{suites, "tests", mongooseimctl_SUITE}.

{suites, "tests", muc_SUITE}.
{skip_groups, "tests", muc_SUITE,
[register_over_s2s],
Expand Down
71 changes: 41 additions & 30 deletions big_tests/tests/cluster_commands_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
remove_node_from_cluster/2,
require_rpc_nodes/1,
rpc/4]).
-import(ejabberdctl_helper, [ejabberdctl/3, rpc_call/3]).
-import(mongooseimctl_helper, [mongooseimctl/3, rpc_call/3]).
-import(domain_helper, [host_type/1]).

-include_lib("eunit/include/eunit.hrl").
Expand Down Expand Up @@ -196,14 +196,14 @@ set_master_test(ConfigIn) ->

TableName = passwd,
NodeList = rpc_call(mnesia, system_info, [running_db_nodes]),
ejabberdctl("set_master", ["self"], ConfigIn),
mongooseimctl("set_master", ["self"], ConfigIn),
[MasterNode] = rpc_call(mnesia, table_info, [TableName, master_nodes]),
true = lists:member(MasterNode, NodeList),
RestNodesList = lists:delete(MasterNode, NodeList),
OtherNode = hd(RestNodesList),
ejabberdctl("set_master", [atom_to_list(OtherNode)], ConfigIn),
mongooseimctl("set_master", [atom_to_list(OtherNode)], ConfigIn),
[OtherNode] = rpc_call(mnesia, table_info, [TableName, master_nodes]),
ejabberdctl("set_master", ["self"], ConfigIn),
mongooseimctl("set_master", ["self"], ConfigIn),
[MasterNode] = rpc_call(mnesia, table_info, [TableName, master_nodes]).


Expand All @@ -216,7 +216,8 @@ join_successful_prompt(Config) ->
%% given
#{node := Node2} = RPCSpec2 = mim2(),
%% when
{_, OpCode} = ejabberdctl_interactive("join_cluster", [atom_to_list(Node2)], "yes\n", Config),
{_, OpCode} =
mongooseimctl_interactive("join_cluster", [atom_to_list(Node2)], "yes\n", Config),
%% then
distributed_helper:verify_result(RPCSpec2, add),
?eq(0, OpCode).
Expand All @@ -225,7 +226,7 @@ join_successful_force(Config) ->
%% given
#{node := Node2} = RPCSpec2 = mim2(),
%% when
{_, OpCode} = ejabberdctl_force("join_cluster", [atom_to_list(Node2)], "--force", Config),
{_, OpCode} = mongooseimctl_force("join_cluster", [atom_to_list(Node2)], "--force", Config),
%% then
distributed_helper:verify_result(RPCSpec2, add),
?eq(0, OpCode).
Expand All @@ -235,7 +236,7 @@ leave_successful_prompt(Config) ->
Node2 = mim2(),
add_node_to_cluster(Node2, Config),
%% when
{_, OpCode} = ejabberdctl_interactive("leave_cluster", [], "yes\n", Config),
{_, OpCode} = mongooseimctl_interactive("leave_cluster", [], "yes\n", Config),
%% then
distributed_helper:verify_result(Node2, remove),
?eq(0, OpCode).
Expand All @@ -245,7 +246,7 @@ leave_successful_force(Config) ->
Node2 = mim2(),
add_node_to_cluster(Node2, Config),
%% when
{_, OpCode} = ejabberdctl_force("leave_cluster", [], "-f", Config),
{_, OpCode} = mongooseimctl_force("leave_cluster", [], "-f", Config),
%% then
distributed_helper:verify_result(Node2, remove),
?eq(0, OpCode).
Expand All @@ -254,7 +255,7 @@ join_unsuccessful(Config) ->
%% given
Node2 = mim2(),
%% when
{_, OpCode} = ejabberdctl_interactive("join_cluster", [], "no\n", Config),
{_, OpCode} = mongooseimctl_interactive("join_cluster", [], "no\n", Config),
%% then
distributed_helper:verify_result(Node2, remove),
?ne(0, OpCode).
Expand All @@ -264,7 +265,7 @@ leave_unsuccessful(Config) ->
Node2 = mim(),
add_node_to_cluster(Node2, Config),
%% when
{_, OpCode} = ejabberdctl_interactive("leave_cluster", [], "no\n", Config),
{_, OpCode} = mongooseimctl_interactive("leave_cluster", [], "no\n", Config),
%% then
distributed_helper:verify_result(Node2, add),
?ne(0, OpCode).
Expand All @@ -273,7 +274,7 @@ leave_but_no_cluster(Config) ->
%% given
Node2 = mim2(),
%% when
{_, OpCode} = ejabberdctl_interactive("leave_cluster", [], "yes\n", Config),
{_, OpCode} = mongooseimctl_interactive("leave_cluster", [], "yes\n", Config),
%% then
distributed_helper:verify_result(Node2, remove),
?ne(0, OpCode).
Expand All @@ -282,8 +283,10 @@ join_twice(Config) ->
%% given
#{node := Node2} = RPCSpec2 = mim2(),
%% when
{_, OpCode1} = ejabberdctl_interactive("join_cluster", [atom_to_list(Node2)], "yes\n", Config),
{_, OpCode2} = ejabberdctl_interactive("join_cluster", [atom_to_list(Node2)], "yes\n", Config),
{_, OpCode1} = mongooseimctl_interactive("join_cluster",
[atom_to_list(Node2)], "yes\n", Config),
{_, OpCode2} = mongooseimctl_interactive("join_cluster",
[atom_to_list(Node2)], "yes\n", Config),
%% then
distributed_helper:verify_result(RPCSpec2, add),
?eq(0, OpCode1),
Expand Down Expand Up @@ -340,8 +343,8 @@ leave_twice(Config) ->
Node2 = mim2(),
add_node_to_cluster(Node2, Config),
%% when
{_, OpCode1} = ejabberdctl_force("leave_cluster", [], "--force", Config),
{_, OpCode2} = ejabberdctl_force("leave_cluster", [], "-f", Config),
{_, OpCode1} = mongooseimctl_force("leave_cluster", [], "--force", Config),
{_, OpCode2} = mongooseimctl_force("leave_cluster", [], "-f", Config),
%% then
distributed_helper:verify_result(Node2, remove),
?eq(0, OpCode1),
Expand All @@ -353,8 +356,10 @@ cluster_of_three(Config) ->
#{node := Node2Nodename} = Node2 = mim2(),
#{node := Node3Nodename} = Node3 = mim3(),
%% when
{_, OpCode1} = ejabberdctl_force(Node2Nodename, "join_cluster", [atom_to_list(ClusterMemberNodeName)], "-f", Config),
{_, OpCode2} = ejabberdctl_force(Node3Nodename, "join_cluster", [atom_to_list(ClusterMemberNodeName)], "-f", Config),
{_, OpCode1} = mongooseimctl_force(Node2Nodename, "join_cluster",
[atom_to_list(ClusterMemberNodeName)], "-f", Config),
{_, OpCode2} = mongooseimctl_force(Node3Nodename, "join_cluster",
[atom_to_list(ClusterMemberNodeName)], "-f", Config),
%% then
?eq(0, OpCode1),
?eq(0, OpCode2),
Expand All @@ -371,10 +376,10 @@ leave_the_three(Config) ->
ok = rpc(Node2#{timeout => Timeout}, mongoose_cluster, join, [ClusterMemberNode]),
ok = rpc(Node3#{timeout => Timeout}, mongoose_cluster, join, [ClusterMemberNode]),
%% when
{_, OpCode1} = ejabberdctl_interactive(Node2Nodename, "leave_cluster", [], "yes\n", Config),
{_, OpCode1} = mongooseimctl_interactive(Node2Nodename, "leave_cluster", [], "yes\n", Config),
nodes_clustered(Node2, ClusterMember, false),
nodes_clustered(Node3, ClusterMember, true),
{_, OpCode2} = ejabberdctl_interactive(Node3Nodename, "leave_cluster", [], "yes\n", Config),
{_, OpCode2} = mongooseimctl_interactive(Node3Nodename, "leave_cluster", [], "yes\n", Config),
%% then
nodes_clustered(Node3, ClusterMember, false),
nodes_clustered(Node2, Node3, false),
Expand All @@ -391,7 +396,8 @@ remove_dead_from_cluster(Config) ->
ok = rpc(Node3#{timeout => Timeout}, mongoose_cluster, join, [Node1Nodename]),
%% when
distributed_helper:stop_node(Node3, Config),
{_, OpCode1} = ejabberdctl_interactive(Node1, "remove_from_cluster", [atom_to_list(Node3Nodename)], "yes\n", Config),
{_, OpCode1} = mongooseimctl_interactive(Node1, "remove_from_cluster",
[atom_to_list(Node3Nodename)], "yes\n", Config),
%% then
?eq(0, OpCode1),
% node is down hence its not in mnesia cluster
Expand All @@ -413,7 +419,8 @@ remove_alive_from_cluster(Config) ->
ok = rpc(Node3#{timeout => Timeout}, mongoose_cluster, join, [Node1Name]),
%% when
%% Node2 is still running
{_, OpCode1} = ejabberdctl_force(Node1Name, "remove_from_cluster", [atom_to_list(Node2Name)], "-f", Config),
{_, OpCode1} = mongooseimctl_force(Node1Name, "remove_from_cluster",
[atom_to_list(Node2Name)], "-f", Config),
%% then
?eq(0, OpCode1),
% node is down hence its not in mnesia cluster
Expand All @@ -424,10 +431,10 @@ remove_alive_from_cluster(Config) ->


%% Helpers
ejabberdctl_interactive(C, A, R, Config) ->
mongooseimctl_interactive(C, A, R, Config) ->
#{node := DefaultNode} = mim(),
ejabberdctl_interactive(DefaultNode, C, A, R, Config).
ejabberdctl_interactive(Node, Cmd, Args, Response, Config) ->
mongooseimctl_interactive(DefaultNode, C, A, R, Config).
mongooseimctl_interactive(Node, Cmd, Args, Response, Config) ->
CtlCmd = escalus_config:get_config(ctl_path_atom(Node), Config),
run_interactive(string:join([CtlCmd, Cmd | normalize_args(Args)], " "), Response).

Expand All @@ -439,11 +446,11 @@ normalize_args(Args) ->
Arg
end, Args).

ejabberdctl_force(Command, Args, ForceFlag, Config) ->
mongooseimctl_force(Command, Args, ForceFlag, Config) ->
#{node := DefaultNode} = mim(),
ejabberdctl_force(DefaultNode, Command, Args, ForceFlag, Config).
ejabberdctl_force(Node, Cmd, Args, ForceFlag, Config) ->
ejabberdctl_helper:ejabberdctl(Node, Cmd, [ForceFlag | Args], Config).
mongooseimctl_force(DefaultNode, Command, Args, ForceFlag, Config).
mongooseimctl_force(Node, Cmd, Args, ForceFlag, Config) ->
mongooseimctl_helper:mongooseimctl(Node, Cmd, [ForceFlag | Args], Config).

ctl_path_atom(NodeName) ->
CtlString = atom_to_list(NodeName) ++ "_ctl",
Expand All @@ -457,7 +464,7 @@ run_interactive(Cmd, Response, Timeout) ->
Port = erlang:open_port({spawn, Cmd}, [exit_status]),
%% respond to interactive question (yes/no)
Port ! {self(), {command, Response}},
ejabberdctl_helper:loop(Cmd, [], Port, [], Timeout).
mongooseimctl_helper:loop(Cmd, [], Port, [], Timeout).

nodes_clustered(#{node := Node1Name} = Node1, #{node := Node2Name} = Node2, ShouldBe) ->
DbNodes1 = distributed_helper:rpc(Node1, mnesia, system_info, [db_nodes]),
Expand All @@ -475,4 +482,8 @@ have_node_in_mnesia(Node1, #{node := Node2}, ShouldBe) ->

wait_for_process_to_stop(Pid, Timeout) ->
erlang:monitor(process, Pid),
receive {'DOWN', _, process, Pid, _} -> ok after Timeout -> ct:fail(wait_for_process_to_stop_timeout) end.
receive
{'DOWN', _, process, Pid, _} -> ok
after Timeout ->
ct:fail(wait_for_process_to_stop_timeout)
end.
8 changes: 4 additions & 4 deletions big_tests/tests/distributed_helper.erl
Original file line number Diff line number Diff line change
Expand Up @@ -164,17 +164,17 @@ get_or_fail(Key) ->
Val.

start_node(Node, Config) ->
{_, 0} = ejabberdctl_helper:ejabberdctl(Node, "start", [], Config),
{_, 0} = ejabberdctl_helper:ejabberdctl(Node, "started", [], Config),
%% TODO Looks like "started" run by ejabberdctl fun is not really synchronous
{_, 0} = mongooseimctl_helper:mongooseimctl(Node, "start", [], Config),
{_, 0} = mongooseimctl_helper:mongooseimctl(Node, "started", [], Config),
%% TODO Looks like "started" run by mongooseimctl fun is not really synchronous
timer:sleep(3000).

stop_node(Node, Config) ->
{_, 0} = mongooseim_script(Node, "stop", [], Config).

mongooseim_script(Node, Cmd, Args, Config) ->
CtlCmd = script_path(Node, Config, "mongooseim"),
ejabberdctl_helper:run(CtlCmd, [Cmd | Args]).
mongooseimctl_helper:run(CtlCmd, [Cmd | Args]).

subhost_pattern(SubhostTemplate) ->
rpc(mim(), mongoose_subdomain_utils, make_subdomain_pattern, [SubhostTemplate]).
1 change: 1 addition & 0 deletions big_tests/tests/domain_removal_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ init_per_suite(Config) ->
escalus:init_per_suite(Config).

end_per_suite(Config) ->
escalus_fresh:clean(),
escalus:end_per_suite(Config).

%%%===================================================================
Expand Down
7 changes: 4 additions & 3 deletions big_tests/tests/gdpr_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
data_is_not_retrieved_for_missing_user/1
]).

-import(ejabberdctl_helper, [ejabberdctl/3]).
-import(mongooseimctl_helper, [mongooseimctl/3]).

-import(distributed_helper, [mim/0, subhost_pattern/1, rpc/4]).

Expand Down Expand Up @@ -1707,13 +1707,14 @@ make_dir_name(Filename, User) when is_list(User) ->

retrieve_personal_data(User, Domain, Config) ->
Filename = random_filename(Config),
{CommandOutput, Code} = ejabberdctl("retrieve_personal_data", [User, Domain, Filename], Config),
{CommandOutput, Code} = mongooseimctl("retrieve_personal_data",
[User, Domain, Filename], Config),
{Filename, Code, CommandOutput}.

unregister(Client, Config) ->
User = escalus_client:username(Client),
Domain = escalus_client:server(Client),
{CommandOutput, Code} = ejabberdctl("unregister", [User, Domain], Config),
{CommandOutput, Code} = mongooseimctl("unregister", [User, Domain], Config),
{Code, CommandOutput}.

random_filename(Config) ->
Expand Down
1 change: 1 addition & 0 deletions big_tests/tests/inbox_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ end_per_suite(Config) ->
domain_helper:host_type(mim), mod_inbox),
dynamic_modules:stop(
ct:get_config({hosts, mim, secondary_host_type}), mod_inbox),
escalus_fresh:clean(),
escalus:end_per_suite(Config).

init_per_group(one_to_one, Config) ->
Expand Down
1 change: 1 addition & 0 deletions big_tests/tests/inbox_extensions_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ end_per_suite(Config) ->
HostType = domain_helper:host_type(mim),
dynamic_modules:stop(HostType, mod_inbox),
muc_light_helper:clear_db(),
escalus_fresh:clean(),
escalus:end_per_suite(Config1).

init_per_group(muclight, Config) ->
Expand Down
1 change: 1 addition & 0 deletions big_tests/tests/mam_send_message_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ init_per_suite(Config) ->
escalus:init_per_suite(Config).

end_per_suite(Config) ->
escalus_fresh:clean(),
escalus:end_per_suite(Config).

%%%===================================================================
Expand Down
1 change: 1 addition & 0 deletions big_tests/tests/mod_time_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ init_per_suite(Config) ->

end_per_suite(Config) ->
dynamic_modules:stop(domain_helper:host_type(), mod_time),
escalus_fresh:clean(),
escalus:end_per_suite(Config).

init_per_group(mod_time, Config) ->
Expand Down
1 change: 1 addition & 0 deletions big_tests/tests/mod_version_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ init_per_suite(Config) ->
escalus:init_per_suite(Config).

end_per_suite(Config) ->
escalus_fresh:clean(),
escalus:end_per_suite(Config).

init_per_group(soft_version, Config) ->
Expand Down
Loading

0 comments on commit e1aa673

Please sign in to comment.