Skip to content

Commit

Permalink
Rework integration test helper
Browse files Browse the repository at this point in the history
  • Loading branch information
NelsonVides committed Jun 13, 2024
1 parent 5f883d9 commit cd84d44
Showing 1 changed file with 53 additions and 35 deletions.
88 changes: 53 additions & 35 deletions integration_test/extra_code_paths/path1/dummy_helper.erl
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
-module(dummy_helper).

-include_lib("stdlib/include/assert.hrl").

-required_variable(#{name=>dummy_var, description=>"dummy_var",
default_value=>default_value}).

Expand All @@ -11,58 +13,56 @@ test_amoc_dist() ->
Master = amoc_cluster:master_node(),
Slaves = amoc_cluster:slave_nodes(),
%% check the status of the nodes
disabled = rpc:call(Master, amoc_controller, get_status, []),
[{running, #{scenario := dummy_scenario}} = rpc:call(Node, amoc_controller, get_status, [])
|| Node <- Slaves],
%% check user ids
?assertEqual(disabled, get_status(Master)),
[ ?assertMatch({running, #{scenario := dummy_scenario}}, get_status(Node)) || Node <- Slaves],
%% check user ids, users have all been started at the first two nodes
{N1, Nodes1, Ids1, Max1} = get_users_info(Slaves),
true = N1 > 0,
N1 = Max1,
Ids1 = lists:seq(1, N1),
?assert(N1 > 0),
?assertEqual(N1, Max1),
?assertEqual(Ids1, lists:seq(1, N1)),
[AddedNode] = Slaves -- Nodes1,
%% add 20 users
{ok, _} = rpc:call(Master, amoc_dist, add, [20]),
timer:sleep(3000),
add_and_wait(Master, 20),
{N2, Nodes2, Ids2, Max2} = get_users_info(Slaves),
N2 = Max2,
Ids2 = lists:seq(1, N2),
[AddedNode] = Nodes2 -- Nodes1,
N2 = N1 + 20,
?assertEqual(N2, Max2),
?assertEqual(Ids2, lists:seq(1, N2)),
?assertEqual([AddedNode], Nodes2 -- Nodes1),
?assertEqual(N2, N1 + 20),
%% remove 10 users
{ok, _} = rpc:call(Master, amoc_dist, remove, [10, true]),
timer:sleep(3000),
{N3, Nodes3, _Ids3, Max3} = get_users_info(Slaves),
Nodes2 = Nodes3,
Max3 = Max2,
N2 = N3 + 10,
remove_and_wait(Master, 10),
{N3, Nodes3, _, Max3} = get_users_info(Slaves),
?assertEqual(Nodes2, Nodes3),
?assertEqual(Max3, Max2 + 1), %% TODO
?assertEqual(N2, N3 + 10),
%% try to remove N3 users
{ok, Ret} = rpc:call(Master, amoc_dist, remove, [N3, true]),
Ret = remove_and_wait(Master, N3),
RemovedN = lists:sum([N || {_, N} <- Ret]),
timer:sleep(3000),
{N4, Nodes4, Ids4, _Max4} = get_users_info(Slaves),
Nodes1 = Nodes4,
N3 = N4 + RemovedN,
true = RemovedN < N3,
?assertEqual(Nodes1, Nodes4),
?assertEqual(N3, N4 + RemovedN),
?assert(RemovedN < N3),
%% add 20 users
{ok, _} = rpc:call(Master, amoc_dist, add, [20]),
timer:sleep(3000),
add_and_wait(Master, 20),
{N5, Nodes5, Ids5, Max5} = get_users_info(Slaves),
Nodes2 = Nodes5,
Max5 = Max2 + 20,
N5 = N4 + 20,
true = Ids5 -- Ids4 =:= lists:seq(Max2 + 1, Max5),
?assertEqual(Nodes2, Nodes5),
?assertEqual(Max5, Max2 + 20),
?assertEqual(N5, N4 + 20),
?assertEqual(Ids5 -- Ids4, lists:seq(Max2 + 1, Max5)),
%% terminate scenario
{ok,_} = rpc:call(Master, amoc_dist, stop, []),
timer:sleep(3000),
[{finished, dummy_scenario} = rpc:call(Node, amoc_controller, get_status, [])
|| Node <- Slaves],
stop(Master),
[ ?assertEqual({finished, dummy_scenario}, get_status(Node)) || Node <- Slaves],
%% return expected value
amoc_dist_works_as_expected
catch
C:E:S ->
{error, {C, E, S}}
{C, E, S}
end.

-spec get_users_info([node()]) ->
{RunningUsers :: non_neg_integer(),
[node()],
[amoc_scenario:user_id()],
MaxId :: non_neg_integer()}.
get_users_info(SlaveNodes) ->
Users = [{Node, Id} ||
Node <- SlaveNodes,
Expand All @@ -73,3 +73,21 @@ get_users_info(SlaveNodes) ->
N = length(Users),
MaxId = lists:max(Ids),
{N, Nodes, Ids, MaxId}.

add_and_wait(Master, Num) ->
{ok, Ret} = rpc:call(Master, amoc_dist, add, [Num]),
timer:sleep(3000),
Ret.

remove_and_wait(Master, Num) ->
{ok, Ret} = rpc:call(Master, amoc_dist, remove, [Num, true]),
timer:sleep(3000),
Ret.

stop(Master) ->
{ok, Ret} = rpc:call(Master, amoc_dist, stop, []),
timer:sleep(3000),
Ret.

get_status(Node) ->
rpc:call(Node, amoc_controller, get_status, []).

0 comments on commit cd84d44

Please sign in to comment.