mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
55 lines
2.2 KiB
Erlang
55 lines
2.2 KiB
Erlang
%% SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-module(gateway_sharding_tests).
|
|
-typing([eqwalizer]).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
parse_identify_shard_accepts_absent_and_null_test() ->
|
|
?assertEqual({ok, undefined}, gateway_sharding:parse_identify_shard(undefined)),
|
|
?assertEqual({ok, undefined}, gateway_sharding:parse_identify_shard(null)).
|
|
|
|
parse_identify_shard_accepts_valid_pair_test() ->
|
|
?assertEqual({ok, {3, 8}}, gateway_sharding:parse_identify_shard([3, 8])).
|
|
|
|
parse_identify_shard_rejects_invalid_shape_and_range_test() ->
|
|
?assertEqual({error, invalid_shard}, gateway_sharding:parse_identify_shard([1])),
|
|
?assertEqual({error, invalid_shard}, gateway_sharding:parse_identify_shard([1, 1])),
|
|
?assertEqual({error, invalid_shard}, gateway_sharding:parse_identify_shard([-1, 2])),
|
|
?assertEqual({error, invalid_shard}, gateway_sharding:parse_identify_shard([0, 0])),
|
|
?assertEqual({error, invalid_shard}, gateway_sharding:parse_identify_shard([0, 16385])).
|
|
|
|
retain_guild_ids_for_shard_uses_reference_snowflake_formula_test() ->
|
|
Guild0 = guild_id_for_shard(0, 4, 0),
|
|
Guild1 = guild_id_for_shard(1, 4, 0),
|
|
Guild2 = guild_id_for_shard(2, 4, 0),
|
|
Guild5 = guild_id_for_shard(1, 4, 1),
|
|
?assertEqual(
|
|
[Guild1, Guild5],
|
|
gateway_sharding:retain_guild_ids_for_shard(
|
|
[Guild0, Guild1, Guild2, Guild5], {1, 4}
|
|
)
|
|
).
|
|
|
|
validate_session_guild_count_uses_filtered_shard_count_test() ->
|
|
GuildIds = [guild_id_for_shard(0, 1, I) || I <- lists:seq(0, 2500)],
|
|
?assertEqual(
|
|
{error, sharding_required},
|
|
gateway_sharding:validate_session_guild_count(GuildIds, undefined)
|
|
),
|
|
?assertEqual(ok, gateway_sharding:validate_session_guild_count(GuildIds, {1, 2})).
|
|
|
|
ready_shard_metadata_is_wire_array_test() ->
|
|
?assertEqual([2, 9], gateway_sharding:shard_to_wire({2, 9})),
|
|
?assertEqual(
|
|
#{<<"v">> => 9, <<"shard">> => [2, 9]},
|
|
gateway_sharding:maybe_put_ready_shard(#{<<"v">> => 9}, {2, 9})
|
|
),
|
|
?assertEqual(
|
|
#{<<"v">> => 9},
|
|
gateway_sharding:maybe_put_ready_shard(#{<<"v">> => 9}, undefined)
|
|
).
|
|
|
|
guild_id_for_shard(ShardId, NumShards, Offset) ->
|
|
((Offset * NumShards + ShardId) bsl 22) + 1.
|