test: provide more general `keymapper_info/1`

This commit is contained in:
Andrew Mayorov 2023-01-12 17:59:15 +03:00
parent 0d495c97c8
commit b7566ab7e7
No known key found for this signature in database
GPG Key ID: 2837C62ACFBFED5D
2 changed files with 13 additions and 9 deletions

View File

@ -105,7 +105,7 @@
%% Debug/troubleshooting: %% Debug/troubleshooting:
%% Keymappers %% Keymappers
-export([ -export([
bitsize/1, keymapper_info/1,
compute_bitstring/3, compute_bitstring/3,
compute_topic_bitmask/2, compute_topic_bitmask/2,
compute_time_bitmask/1, compute_time_bitmask/1,
@ -390,9 +390,9 @@ refresh_iterator(It = #it{handle = Handle, cursor = Cursor, next_action = Action
%% Internal exports %% Internal exports
%%================================================================================ %%================================================================================
-spec bitsize(keymapper()) -> bits(). -spec keymapper_info(keymapper()) -> [bitsource()].
bitsize(#keymapper{bitsize = Bitsize}) -> keymapper_info(#keymapper{source = Source, bitsize = Bitsize, epoch = Epoch}) ->
Bitsize. #{source => Source, bitsize => Bitsize, epoch => Epoch}.
make_message_key(Topic, PublishedAt, MessageID, Keymapper) -> make_message_key(Topic, PublishedAt, MessageID, Keymapper) ->
combine(compute_bitstring(Topic, PublishedAt, Keymapper), MessageID, Keymapper). combine(compute_bitstring(Topic, PublishedAt, Keymapper), MessageID, Keymapper).

View File

@ -28,13 +28,14 @@
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
prop_bitstring_computes() -> prop_bitstring_computes() ->
?FORALL(Keymapper, keymapper(), begin ?FORALL(
Bitsize = emqx_replay_message_storage:bitsize(Keymapper), Keymapper,
keymapper(),
?FORALL({Topic, Timestamp}, {topic(), integer()}, begin ?FORALL({Topic, Timestamp}, {topic(), integer()}, begin
BS = emqx_replay_message_storage:compute_bitstring(Topic, Timestamp, Keymapper), BS = emqx_replay_message_storage:compute_bitstring(Topic, Timestamp, Keymapper),
is_integer(BS) andalso (BS < (1 bsl Bitsize)) is_integer(BS) andalso (BS < (1 bsl get_keymapper_bitsize(Keymapper)))
end) end)
end). ).
prop_topic_bitmask_computes() -> prop_topic_bitmask_computes() ->
Keymapper = make_keymapper(16, [8, 12, 16], 100), Keymapper = make_keymapper(16, [8, 12, 16], 100),
@ -56,7 +57,7 @@ prop_next_seek_monotonic() ->
), ),
?FORALL( ?FORALL(
Bitstring, Bitstring,
bitstr(emqx_replay_message_storage:bitsize(Keymapper)), bitstr(get_keymapper_bitsize(Keymapper)),
emqx_replay_message_storage:compute_next_seek(Bitstring, Filter) >= Bitstring emqx_replay_message_storage:compute_next_seek(Bitstring, Filter) >= Bitstring
) )
end end
@ -436,6 +437,9 @@ make_keymapper(TimestampBits, TopicBits, MaxEpoch) ->
epoch => MaxEpoch epoch => MaxEpoch
}). }).
get_keymapper_bitsize(Keymapper) ->
maps:get(bitsize, emqx_replay_message_storage:keymapper_info(Keymapper)).
-spec interleave(list({Tag, list(E)}), rand:state()) -> list({Tag, E}). -spec interleave(list({Tag, list(E)}), rand:state()) -> list({Tag, E}).
interleave(Seqs, Rng) -> interleave(Seqs, Rng) ->
interleave(Seqs, length(Seqs), Rng). interleave(Seqs, length(Seqs), Rng).