Packages

Erlang round-robin load balancer for Erlang processes based on ETS

Current section

Files

Jump to
erlpool test integrity_test_SUITE.erl
Raw

test/integrity_test_SUITE.erl

-module(integrity_test_SUITE).
-include_lib("eunit/include/eunit.hrl").
-export([
all/0,
groups/0,
init_per_suite/1,
end_per_suite/1,
test_map/1,
test_pid_round_robin/1,
test_not_existing_pool/1,
test_group/1,
test_add_worker/1
]).
all() -> [
{group, erlpool_group}
].
groups() -> [
{erlpool_group, [sequence], [
test_map,
test_pid_round_robin,
test_not_existing_pool,
test_group,
test_add_worker
]}
].
init_per_suite(Config) ->
ok = erlpool:start(),
Args = [{start_mfa, {dummy_worker, start_link, [[]]}}],
ok = erlpool:start_pool(pool1, [{size, 10} |Args]),
ok = erlpool:start_pool(pool2, [{size, 5} |Args]),
Config.
end_per_suite(_Config) ->
ok = erlpool:stop_pool(pool1),
%disable info report
logger:add_handler_filter(default, ?MODULE, {fun(_,_) -> stop end, nostate}),
%let pool2 to be destroyed by the app supervisor
erlpool:stop().
test_map(_Config) ->
L1 = erlpool:map(pool1, fun(X) -> X end),
L2 = erlpool:map(pool2, fun(X) -> X end),
Length1 = length(L1),
Length2 = length(L2),
Length1 = erlpool:pool_size(pool1),
Length2 = erlpool:pool_size(pool2),
ok.
test_pid_round_robin(_Config) ->
L1 = erlpool:map(pool1, fun(X) -> X end),
Size = erlpool:pool_size(pool1),
Fun = fun(_X, Acc) ->
Pid = erlpool:pid(pool1),
lists:delete(Pid, Acc)
end,
[] = lists:foldl(Fun, L1, lists:seq(1, Size)),
ok.
test_not_existing_pool(_Config) ->
{error, not_found} = erlpool:pid(dummy),
{error, not_found} = erlpool:map(dummy, fun(X) -> X end),
{error, not_found} = erlpool:pool_size(dummy),
ok.
test_group(_Config) ->
Args = [{start_mfa, {dummy_worker, start_link, [[{dummy1, 1}, {dummy2, 2}]]}}],
ok = erlpool:start_pool('node_pool1_127.0.0.1_6379', [{size, 2}, {group, g1} |Args]),
ok = erlpool:start_pool(gpool2, [{size, 3}, {group, g1} |Args]),
ok = erlpool:start_pool(gpool3, [{size, 4}, {group, g2} |Args]),
ok = erlpool:start_pool(gpool4, [{size, 5}, {group, g2} |Args]),
PG1 = whereis(erlpool_pool_sup:name('node_pool1_127.0.0.1_6379')),
PG2 = whereis(erlpool_pool_sup:name(gpool2)),
PG3 = whereis(erlpool_pool_sup:name(gpool3)),
PG4 = whereis(erlpool_pool_sup:name(gpool4)),
true = erlpool:restart_pool('node_pool1_127.0.0.1_6379'),
false = erlpool:restart_pool(gpool5),
timer:sleep(100),
PG11 = whereis(erlpool_pool_sup:name('node_pool1_127.0.0.1_6379')),
?assert(PG11 =/= undefined),
?assert(PG11 =/= PG1),
ok = erlpool:restart_group(g2),
timer:sleep(100),
NPG1 = whereis(erlpool_pool_sup:name('node_pool1_127.0.0.1_6379')),
NPG2 = whereis(erlpool_pool_sup:name(gpool2)),
NPG3 = whereis(erlpool_pool_sup:name(gpool3)),
NPG4 = whereis(erlpool_pool_sup:name(gpool4)),
?assert(NPG1 =:= PG11),
?assert(NPG2 =:= PG2),
?assert(NPG3 =/= PG3),
?assert(NPG4 =/= PG4),
ok = erlpool:stop_group(g2),
timer:sleep(100),
NPG1 = whereis(erlpool_pool_sup:name('node_pool1_127.0.0.1_6379')),
NPG2 = whereis(erlpool_pool_sup:name(gpool2)),
undefined = whereis(erlpool_pool_sup:name(gpool3)),
undefined = whereis(erlpool_pool_sup:name(gpool4)),
ok.
test_add_worker(_Config) ->
Size = erlpool:pool_size(pool1),
ok = erlpool:add_worker(pool1),
NewSize = Size + 1,
NewSize = erlpool:pool_size(pool1),
ok.