Files
fluxer/fluxer_gateway/test/session_manager_shard_session_index_tests.erl

61 lines
2.0 KiB
Erlang

%% SPDX-License-Identifier: AGPL-3.0-or-later
-module(session_manager_shard_session_index_tests).
-include_lib("eunit/include/eunit.hrl").
put_builds_ref_index_test() ->
Ref = make_ref(),
State = session_manager_shard_session_index:put(<<"s1">>, {self(), Ref}, #{
sessions => #{}
}),
?assertEqual(#{<<"s1">> => {self(), Ref}}, maps:get(sessions, State)),
?assertEqual(#{Ref => <<"s1">>}, maps:get(session_refs, State)).
remove_clears_ref_index_test() ->
Ref = make_ref(),
State0 = session_manager_shard_session_index:put(<<"s1">>, {self(), Ref}, #{
sessions => #{}
}),
State1 = session_manager_shard_session_index:remove(<<"s1">>, State0),
?assertEqual(#{}, maps:get(sessions, State1)),
?assertEqual(#{}, maps:get(session_refs, State1)).
cleanup_down_uses_ref_index_test() ->
Ref1 = make_ref(),
Ref2 = make_ref(),
Pid1 = spawn(fun wait_forever/0),
Pid2 = spawn(fun wait_forever/0),
State0 = #{
sessions => #{
<<"s1">> => {Pid1, Ref1},
<<"s2">> => {Pid2, Ref2}
},
session_refs => #{Ref1 => <<"s1">>, Ref2 => <<"s2">>}
},
State1 = session_manager_shard_session_index:cleanup_down(Ref1, Pid1, State0),
?assertEqual(#{<<"s2">> => {Pid2, Ref2}}, maps:get(sessions, State1)),
?assertEqual(#{Ref2 => <<"s2">>}, maps:get(session_refs, State1)),
exit(Pid1, kill),
exit(Pid2, kill).
cleanup_down_rebuilds_missing_ref_index_test() ->
Ref1 = make_ref(),
Ref2 = make_ref(),
DeadPid = spawn(fun() -> ok end),
LivePid = self(),
State0 = #{
sessions => #{
<<"s1">> => {DeadPid, Ref1},
<<"s2">> => {LivePid, Ref2}
}
},
State1 = session_manager_shard_session_index:cleanup_down(Ref1, DeadPid, State0),
?assertEqual(#{<<"s2">> => {LivePid, Ref2}}, maps:get(sessions, State1)),
?assertEqual(#{Ref2 => <<"s2">>}, maps:get(session_refs, State1)).
wait_forever() ->
receive
after infinity -> ok
end.