ci: add tests (#1141)

This commit is contained in:
Jiralite authored and GitHub committed 2026-06-23 04:41:46 +02:00
1 parent ad99de22bc
commit 545814abc1
152 files changed
+287 -532

No files matched your search

+1 -3
View File
@@ -205,11 +205,9 @@ active_nodes_for_role(undefined) ->
active_nodes_for_role(Role) ->
gateway_node_router:active_nodes(Role).
-spec select_owner_nodes(term(), [node()], pos_integer()) -> [node()].
-spec select_owner_nodes(term(), [node(), ...], pos_integer()) -> [node()].
select_owner_nodes(Key, CandidateNodes, ReplicaCount) ->
case lists:usort(CandidateNodes) of
[] ->
[];
[SingleNode] ->
[SingleNode];
UniqueNodes when ReplicaCount =:= 1 ->
@@ -15,6 +15,7 @@
ranch,
cowboy,
ezstd,
erlcass,
base64url,
enats
]},
@@ -180,7 +180,7 @@ resume_lookup_trace_meta(SessionId) ->
session_pid_trace_meta(Pid) ->
node_trace_meta(session, node(Pid)).
-spec node_trace_meta(term(), node()) -> map().
-spec node_trace_meta(atom(), node()) -> map().
node_trace_meta(Operation, NodeName) ->
#{
remote => #{
@@ -189,13 +189,9 @@ node_trace_meta(Operation, NodeName) ->
}
}.
-spec trace_key(term()) -> binary().
trace_key(Value) when is_binary(Value) ->
Value;
trace_key(Value) when is_atom(Value) ->
atom_to_binary(Value, utf8);
-spec trace_key(atom()) -> binary().
trace_key(Value) ->
list_to_binary(io_lib:format("~p", [Value])).
atom_to_binary(Value, utf8).
-spec node_pod_name_or_name(node()) -> binary().
node_pod_name_or_name(NodeName) ->
@@ -89,7 +89,6 @@ beam_module_from_info(Info) ->
beam_md5(Beam) when is_binary(Beam) ->
case beam_lib:md5(Beam) of
{ok, {_Module, Md5}} when is_binary(Md5) -> {ok, Md5};
{ok, Md5} when is_binary(Md5) -> {ok, Md5};
Error -> {error, {beam_md5_failed, Error}}
end.
@@ -42,8 +42,7 @@ fetch_events(BuildSha) when is_binary(BuildSha) ->
case erlcass:execute(?STMT_FETCH_EVENTS, [BuildSha]) of
{ok, _Columns, Rows} -> {ok, normalize_event_rows(Rows)};
ok -> {ok, []};
{error, Reason} -> {error, Reason};
Other -> {error, {unexpected_fetch_result, Other}}
{error, Reason} -> {error, Reason}
end.
-spec append_event(binary(), binary(), binary(), binary(), binary()) ->
@@ -99,8 +98,7 @@ execute_append_event(EventId, Params) ->
case erlcass:execute(?STMT_APPEND_EVENT, Params) of
ok -> {ok, EventId};
{ok, _Columns, _Rows} -> {ok, EventId};
{error, Reason} -> {error, Reason};
Other -> {error, {unexpected_append_result, Other}}
{error, Reason} -> {error, Reason}
end.
-spec audit_applied(binary(), binary(), binary(), map(), ok | {error, term()}) ->
@@ -116,8 +114,7 @@ audit_applied(BuildSha, NodeName, EventId, Summary, Result) when
case erlcass:execute(?STMT_AUDIT_APPLIED, Params) of
ok -> ok;
{ok, _Columns, _Rows} -> ok;
{error, Reason} -> {error, Reason};
Other -> {error, {unexpected_audit_result, Other}}
{error, Reason} -> {error, Reason}
end.
-spec normalize_event_rows([list()]) -> [map()].
@@ -15,6 +15,9 @@
{no_opaque, [
handle_info/2,
handle_connect_ok/4,
handle_connect_ok_entry/5,
accept_connect_ok/4,
ignore_stale_connect_ok/2,
handle_ready/4,
handle_conn_event_down/2,
handle_slot_monitor_down/5,
@@ -340,8 +340,7 @@ subscribe_to_nats(State) ->
subscribe_to_rollout_subject() ->
try gateway_nats_rpc:subscribe(?NATS_SUBJECT, <<>>) of
{ok, Sid} -> {ok, Sid};
{error, Reason} -> {error, Reason};
Other -> {error, Other}
{error, Reason} -> {error, Reason}
catch
Class:Reason -> {error, {Class, Reason}}
end.
+1 -3
View File
@@ -52,9 +52,7 @@ upsert_voice_state(ConnectionId, VoiceState, State) ->
end,
State#{voice_states => VoiceStates}.
-spec strip_members
(map()) -> map();
(term()) -> term().
-spec strip_members(term()) -> term().
strip_members(Data) when is_map(Data) ->
Data1 = maps:remove(<<"members">>, Data),
maps:remove(<<"member_role_index">>, Data1);
@@ -34,9 +34,7 @@
-export_type([guild_data/0]).
-spec normalize_data
(map()) -> guild_data();
(term()) -> term().
-spec normalize_data(term()) -> term().
normalize_data(Data) when is_map(Data) ->
Data0 =
case guild_data_normalize:guild_data(Data) of
@@ -40,9 +40,7 @@ channel_index(Data) when is_map(Data) ->
channel_index(_) ->
#{}.
-spec put_channels
(term(), guild_data()) -> guild_data();
(term(), term()) -> term().
-spec put_channels(term(), term()) -> term().
put_channels(Channels, Data) when is_map(Data) ->
ChannelList = lists:filtermap(
fun normalize_channel_item/1,
@@ -37,9 +37,7 @@ role_index(Data) when is_map(Data) ->
role_index(_) ->
#{}.
-spec put_roles
(term(), guild_data()) -> guild_data();
(term(), term()) -> term().
-spec put_roles(term(), term()) -> term().
put_roles(Roles, Data) when is_map(Data) ->
RoleList = [
normalize_role(Role)
@@ -10,16 +10,13 @@
channel/1
]).
-spec guild_data
(map()) -> map();
(term()) -> term().
-spec guild_data(term()) -> term().
guild_data(Data) when is_map(Data) ->
normalize_nested_map(<<"guild">>, fun guild/1, Data);
guild_data(Data) ->
Data.
-spec member
(map()) -> map();
(term()) -> term().
-spec member(term()) -> term().
member(Member) when is_map(Member) ->
Member1 = normalize_nested_map(<<"user">>, fun user/1, Member),
Member2 = normalize_snowflake_list_field(<<"roles">>, Member1),
@@ -30,9 +27,7 @@ member(Member) when is_map(Member) ->
member(Member) ->
Member.
-spec role
(map()) -> map();
(term()) -> term().
-spec role(term()) -> term().
role(Role) when is_map(Role) ->
Role1 = normalize_required_snowflake_field(<<"id">>, Role),
Role2 = normalize_permission_field(<<"permissions">>, Role1),
@@ -44,9 +39,7 @@ role(Role) when is_map(Role) ->
role(Role) ->
Role.
-spec channel
(map()) -> map();
(term()) -> term().
-spec channel(term()) -> term().
channel(Channel) when is_map(Channel) ->
Channel1 = normalize_required_snowflake_field(<<"id">>, Channel),
Channel2 = normalize_optional_snowflake_field(<<"guild_id">>, Channel1),
@@ -36,8 +36,7 @@ from_sorted(OSet, Keys) ->
-spec destroy(oset()) -> ok.
destroy(OSet) ->
try guild_member_list_oset_nif:destroy(OSet) of
ok -> ok;
_ -> ok
ok -> ok
catch
_:_ -> ok
end.
@@ -79,18 +79,18 @@ range(_OSet, _Start, _Count) ->
to_list(_OSet) ->
erlang:nif_error(nif_not_loaded).
-spec nif_path() -> file:filename().
-spec nif_path() -> file:filename_all().
nif_path() ->
filename:join(priv_dir(), ?NIF_NAME).
-spec priv_dir() -> file:filename().
-spec priv_dir() -> file:filename_all().
priv_dir() ->
case code:priv_dir(fluxer_gateway) of
{error, _Reason} -> priv_dir_from_beam();
Dir -> Dir
end.
-spec priv_dir_from_beam() -> file:filename().
-spec priv_dir_from_beam() -> file:filename_all().
priv_dir_from_beam() ->
case code:which(?MODULE) of
Beam when is_list(Beam) ->
@@ -44,12 +44,12 @@ start_async(State) ->
UserIds -> spawn_reconcile_fetch(UserIds, self())
end.
-spec spawn_reconcile_fetch([user_id()], pid()) -> ok.
-spec spawn_reconcile_fetch([user_id(), ...], pid()) -> ok.
spawn_reconcile_fetch(UserIds, Parent) ->
_ = spawn(fun() -> fetch_and_reply(UserIds, Parent) end),
ok.
-spec fetch_and_reply([user_id()], pid()) -> ok.
-spec fetch_and_reply([user_id(), ...], pid()) -> ok.
fetch_and_reply(UserIds, Parent) ->
Parent ! {presence_reconcile_apply, authoritative_presence_map(UserIds)},
ok.
@@ -183,9 +183,7 @@ authoritative_presence(UserId) ->
exit:_ -> undefined
end.
-spec authoritative_presence_map([user_id()]) -> presence_by_id().
authoritative_presence_map([]) ->
#{};
-spec authoritative_presence_map([user_id(), ...]) -> presence_by_id().
authoritative_presence_map(UserIds) ->
lists:foldl(fun add_presence_to_map/2, #{}, safe_bulk_get(UserIds)).
@@ -199,8 +197,7 @@ add_presence_to_map(Presence, Acc) ->
-spec safe_bulk_get([user_id()]) -> [presence()].
safe_bulk_get(UserIds) ->
try presence_cache:bulk_get(UserIds) of
Presences when is_list(Presences) -> Presences;
_ -> []
Presences -> Presences
catch
error:_ -> [];
exit:_ -> []
+1 -3
View File
@@ -162,9 +162,7 @@ sanitize_text(Bin) when is_binary(Bin) ->
safe_codepoints_to_binary(Codepoints, Bin);
_ ->
Bin
end;
sanitize_text(Other) ->
Other.
end.
-spec safe_codepoints_to_binary([integer()], binary()) -> binary().
safe_codepoints_to_binary(Codepoints, Fallback) ->
@@ -35,8 +35,7 @@ render_bounded_context(Content, ContextJson) when
byte_size(ContextJson) =< ?MAX_CONTEXT_JSON_BYTES
->
try push_markdown_plaintext_nif:render_push_preview_nif(Content, ContextJson) of
Preview when is_binary(Preview) -> Preview;
_ -> strip_to_safe(Content)
Preview when is_binary(Preview) -> Preview
catch
_:_ -> strip_to_safe(Content)
end;
@@ -20,24 +20,24 @@ init() ->
-spec available() -> boolean().
available() ->
false.
erlang:nif_error(nif_not_loaded).
-spec render_push_preview_nif(binary(), binary()) -> binary().
render_push_preview_nif(_Content, _ContextJson) ->
erlang:nif_error(nif_not_loaded).
-spec nif_path() -> file:filename().
-spec nif_path() -> file:filename_all().
nif_path() ->
filename:join(priv_dir(), ?NIF_NAME).
-spec priv_dir() -> file:filename().
-spec priv_dir() -> file:filename_all().
priv_dir() ->
case code:priv_dir(fluxer_gateway) of
{error, _Reason} -> priv_dir_from_beam();
Dir -> Dir
end.
-spec priv_dir_from_beam() -> file:filename().
-spec priv_dir_from_beam() -> file:filename_all().
priv_dir_from_beam() ->
case code:which(?MODULE) of
Beam when is_list(Beam) ->
@@ -167,9 +167,7 @@ user_nickname(UserId0, UserNicknames) when is_map(UserNicknames) ->
case user_id_binary(UserId0) of
Id when is_binary(Id) -> maps:get(Id, UserNicknames, undefined);
undefined -> undefined
end;
user_nickname(_UserId0, _UserNicknames) ->
undefined.
end.
-spec user_id_binary(term()) -> binary() | undefined.
user_id_binary(UserId) when is_integer(UserId), UserId > 0 ->
@@ -266,9 +264,7 @@ channel_names_from_guild_data(ChannelIds, GuildData) when is_map(GuildData) ->
fun(ChannelId, Acc) -> put_index_channel_name(ChannelId, ChannelIndex, Acc) end,
#{},
ChannelIds
);
channel_names_from_guild_data(_ChannelIds, _GuildData) ->
#{}.
).
-spec put_index_channel_name(integer(), map(), map()) -> map().
put_index_channel_name(ChannelId, ChannelIndex, Acc) ->
@@ -171,8 +171,6 @@ rollback_on_start_failure({reply, {success, Pid}, _State} = Result, _UserId) whe
Result;
rollback_on_start_failure({reply, {error, _Reason}, _State} = Result, UserId) ->
session_abuse_protection:decrement_user_sessions(UserId),
Result;
rollback_on_start_failure(Result, _UserId) ->
Result.
-spec validate_identify_payload(term()) ->
@@ -82,10 +82,6 @@ user_id(User) when is_map(User) ->
user_id(_) ->
undefined.
-spec presence_visible(map()) -> boolean().
presence_visible(P) ->
presence_utils:is_visible_presence(P).
-spec dedup_presences([map()]) -> [map()].
dedup_presences(Presences) ->
Map = lists:foldl(fun add_presence_by_id/2, #{}, Presences),
@@ -325,15 +321,6 @@ ensure_relationship_id(Rel, UserId) ->
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
presence_visible_test() ->
?assertEqual(true, presence_visible(#{<<"status">> => <<"online">>})),
?assertEqual(true, presence_visible(#{<<"status">> => <<"idle">>})),
?assertEqual(true, presence_visible(#{<<"status">> => <<"dnd">>})),
?assertEqual(false, presence_visible(#{<<"status">> => <<"offline">>})),
?assertEqual(false, presence_visible(#{<<"status">> => <<"invisible">>})),
?assertEqual(false, presence_visible(#{})),
ok.
presence_user_id_rejects_malformed_id_test() ->
?assertEqual(undefined, presence_user_id(#{<<"user">> => #{<<"id">> => <<"001">>}})).
@@ -199,10 +199,7 @@ cleanup_on_down(DeadPid, ProcessMap) ->
ProcessMap
).
-spec cleanup_on_down
(process_prefix(), pid(), #{binary() => {pid(), reference()}}) ->
#{binary() => {pid(), reference()}};
(process_prefix(), pid(), process_map()) -> process_map().
-spec cleanup_on_down(process_prefix(), pid(), process_map()) -> process_map().
cleanup_on_down(Prefix, DeadPid, ProcessMap) ->
maps:fold(
fun