From a4afca142bdb542063103aede8fcd45e31a0ed61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Wed, 3 Jul 2024 17:32:43 +0200 Subject: [PATCH] WIP --- big_tests/tests/amp_big_SUITE.erl | 5 +- big_tests/tests/graphql_roster_SUITE.erl | 4 +- big_tests/tests/instrument_helper.erl | 2 + big_tests/tests/mam_SUITE.erl | 2 +- big_tests/tests/mod_blocking_SUITE.erl | 38 +++++---- big_tests/tests/mod_global_distrib_SUITE.erl | 14 ++-- big_tests/tests/privacy_SUITE.erl | 32 +++++--- big_tests/tests/privacy_helper.erl | 82 +++++++++++++------- big_tests/tests/roster_helper.erl | 6 +- src/roster/mod_roster.erl | 5 +- 10 files changed, 119 insertions(+), 71 deletions(-) diff --git a/big_tests/tests/amp_big_SUITE.erl b/big_tests/tests/amp_big_SUITE.erl index 8bd8a41a575..cc53df2533f 100644 --- a/big_tests/tests/amp_big_SUITE.erl +++ b/big_tests/tests/amp_big_SUITE.erl @@ -133,8 +133,9 @@ amp_test_helper_code() -> " end.\n". declared_events() -> - [ - {mod_privacy_set, #{host_type => host_type()}} % tested by privacy helpers + [ % tested by privacy helpers + {mod_privacy_set, #{host_type => host_type()}}, + {mod_privacy_get, #{host_type => host_type()}} ]. end_per_suite(C) -> diff --git a/big_tests/tests/graphql_roster_SUITE.erl b/big_tests/tests/graphql_roster_SUITE.erl index 0e2ae6e0a01..15742a0258a 100644 --- a/big_tests/tests/graphql_roster_SUITE.erl +++ b/big_tests/tests/graphql_roster_SUITE.erl @@ -398,7 +398,7 @@ admin_list_contacts_story(Config, Alice, Bob) -> [#{<<"subscription">> := <<"NONE">>, <<"ask">> := <<"NONE">>, <<"jid">> := BobBin, <<"name">> := BobName, <<"groups">> := ?DEFAULT_GROUPS}] = get_ok_value([data, roster, listContacts], Res), - roster_helper:assert_roster_event(Alice, mod_roster_get). + roster_helper:assert_roster_event(escalus_client:short_jid(Alice), mod_roster_get). admin_list_contacts_wrong_user(Config) -> % User with a non-existent domain @@ -548,7 +548,7 @@ user_list_contacts_story(Config, Alice, Bob) -> [#{<<"subscription">> := <<"NONE">>, <<"ask">> := <<"NONE">>, <<"jid">> := BobBin, <<"name">> := Name, <<"groups">> := ?DEFAULT_GROUPS}] = get_ok_value(?LIST_CONTACTS_PATH, Res), - roster_helper:assert_roster_event(Alice, mod_roster_get). + roster_helper:assert_roster_event(escalus_client:short_jid(Alice), mod_roster_get). user_get_contact(Config) -> escalus:fresh_story_with_config(Config, [{alice, 1}, {bob, 1}], diff --git a/big_tests/tests/instrument_helper.erl b/big_tests/tests/instrument_helper.erl index 668d479f951..31e26d535f4 100644 --- a/big_tests/tests/instrument_helper.erl +++ b/big_tests/tests/instrument_helper.erl @@ -10,6 +10,8 @@ -export([assert/3, assert_one/3, assert_not_emitted/3, assert_not_emitted/2, assert_not_emitted/1, wait_and_assert/3, wait_and_assert_new/3, assert/4]). +-export([timestamp/0]). + -import(distributed_helper, [rpc/4, mim/0]). -include_lib("eunit/include/eunit.hrl"). diff --git a/big_tests/tests/mam_SUITE.erl b/big_tests/tests/mam_SUITE.erl index 1fd99513ab1..0e2fc68ef46 100644 --- a/big_tests/tests/mam_SUITE.erl +++ b/big_tests/tests/mam_SUITE.erl @@ -3286,7 +3286,7 @@ prefs_set_request(Config) -> ?assert_equal(ResultIQ1, ResultIQ2), ok end, - escalus:story(Config, [{alice, 1}], F). + escalus:fresh_story(Config, [{alice, 1}], F). query_get_request(Config) -> F = fun(Alice) -> diff --git a/big_tests/tests/mod_blocking_SUITE.erl b/big_tests/tests/mod_blocking_SUITE.erl index 11e2b94ce7a..9267e7b3d0e 100644 --- a/big_tests/tests/mod_blocking_SUITE.erl +++ b/big_tests/tests/mod_blocking_SUITE.erl @@ -231,12 +231,13 @@ messages_from_blocked_user_dont_arrive(Config) -> Config, [{alice, 1}, {bob, 1}], fun(User1, User2) -> user_blocks(User1, [User2]), + TS = instrument_helper:timestamp(), message(User2, User1, <<"Hi!">>), ct:sleep(100), escalus_assert:has_no_stanzas(User1), privacy_helper:gets_error(User2, <<"cancel">>, <<"service-unavailable">>), - privacy_helper:assert_privacy_check_packet_event(User2, #{dir => out}), - privacy_helper:assert_privacy_check_packet_event(User1, #{dir => in, blocked_count => 1}) + privacy_helper:assert_privacy_check_packet_event(User2, #{dir => out}, TS), + privacy_helper:assert_privacy_check_packet_event(User1, #{dir => in, blocked_count => 1}, TS) end). messages_from_unblocked_user_arrive_again(Config) -> @@ -437,10 +438,11 @@ notify_blockee(Config) -> %% get_blocklist(User) -> + TS = instrument_helper:timestamp(), IQGet = get_blocklist_stanza(), escalus_client:send(User, IQGet), Result = escalus_client:wait_for_stanza(User), - privacy_helper:assert_privacy_get_event(User), + privacy_helper:assert_privacy_get_event(User, TS), Result. %% @@ -589,6 +591,7 @@ get_blocklist_items(Items) -> end, Items). user_blocks(Blocker, Blockees) when is_list(Blockees) -> + TS = instrument_helper:timestamp(), BlockeeJIDs = [ escalus_utils:jid_to_lower(escalus_client:short_jid(B)) || B <- Blockees ], AddStanza = block_users_stanza(BlockeeJIDs), escalus_client:send(Blocker, AddStanza), @@ -596,7 +599,7 @@ user_blocks(Blocker, Blockees) when is_list(Blockees) -> CheckPush = fun(E) -> is_xep191_push(<<"block">>, BlockeeJIDs, E) end, Preds = [is_iq_result, CheckPush], escalus:assert_many(Preds, Res), - privacy_helper:assert_privacy_set_event(Blocker, #{}). + privacy_helper:assert_privacy_set_event(Blocker, #{}, TS). blocklist_is_empty(BlockList) -> escalus:assert(is_iq_result, BlockList), @@ -607,6 +610,7 @@ blocklist_contains_jid(BlockList, Client) -> escalus:assert(fun blocklist_result_has/2, [JID], BlockList). user_unblocks(Unblocker, Unblockees) when is_list(Unblockees) -> + TS = instrument_helper:timestamp(), UnblockeeJIDs = [ escalus_utils:jid_to_lower(escalus_client:short_jid(B)) || B <- Unblockees ], AddStanza = unblock_users_stanza(UnblockeeJIDs), escalus_client:send(Unblocker, AddStanza), @@ -614,12 +618,13 @@ user_unblocks(Unblocker, Unblockees) when is_list(Unblockees) -> CheckPush = fun(E) -> is_xep191_push(<<"unblock">>, UnblockeeJIDs, E) end, Preds = [is_iq_result, CheckPush], escalus:assert_many(Preds, Res), - privacy_helper:assert_privacy_set_event(Unblocker, #{}); + privacy_helper:assert_privacy_set_event(Unblocker, #{}, TS); user_unblocks(Unblocker, Unblockee) -> + TS = instrument_helper:timestamp(), JID = escalus_utils:jid_to_lower(escalus_client:short_jid(Unblockee)), escalus_client:send(Unblocker, unblock_user_stanza(JID)), user_gets_remove_result(Unblocker, [JID]), - privacy_helper:assert_privacy_set_event(Unblocker, #{}). + privacy_helper:assert_privacy_set_event(Unblocker, #{}, TS). blocklist_doesnt_contain_jid(BlockList, Client) -> JID = escalus_utils:jid_to_lower(escalus_client:short_jid(Client)), @@ -642,32 +647,35 @@ message(From, To, MsgTxt) -> message_is_delivered(From, [To|_] = Tos, MessageText) -> BareTo = escalus_utils:jid_to_lower(escalus_client:short_jid(To)), + TS = instrument_helper:timestamp(), escalus:send(From, escalus_stanza:chat_to(BareTo, MessageText)), [ escalus:assert(is_chat_message, [MessageText], escalus:wait_for_stanza(C)) || C <- Tos ], - privacy_helper:assert_privacy_check_packet_event(From, #{dir => out}), - privacy_helper:assert_privacy_check_packet_event(To, #{dir => in}); + privacy_helper:assert_privacy_check_packet_event(From, #{dir => out}, TS), + privacy_helper:assert_privacy_check_packet_event(To, #{dir => in}, TS); message_is_delivered(From, To, MessageText) -> BareTo = escalus_utils:jid_to_lower(escalus_client:short_jid(To)), + TS = instrument_helper:timestamp(), escalus:send(From, escalus_stanza:chat_to(BareTo, MessageText)), escalus:assert(is_chat_message, [MessageText], escalus:wait_for_stanza(To)), - privacy_helper:assert_privacy_check_packet_event(From, #{dir => out}), - privacy_helper:assert_privacy_check_packet_event(To, #{dir => in}). + privacy_helper:assert_privacy_check_packet_event(From, #{dir => out}, TS), + privacy_helper:assert_privacy_check_packet_event(To, #{dir => in}, TS). message_is_blocked_by_recipient(From, To) -> + TS = instrument_helper:timestamp(), message_is_not_delivered(From, [To], <<"You blocked me!">>), privacy_helper:gets_error(From, <<"cancel">>, <<"service-unavailable">>), - privacy_helper:assert_privacy_check_packet_event(From, #{dir => out}), - privacy_helper:assert_privacy_check_packet_event(To, #{dir => in, blocked_count => 1}). + privacy_helper:assert_privacy_check_packet_event(From, #{dir => out}, TS), + privacy_helper:assert_privacy_check_packet_event(To, #{dir => in, blocked_count => 1}, TS). message_is_blocked_by_sender(From, To) -> + TS = instrument_helper:timestamp(), message_is_not_delivered(From, [To], <<"I blocked you!">>), client_gets_blocking_error(From), - privacy_helper:assert_privacy_check_packet_event(From, #{dir => out, blocked_count => 1}). + privacy_helper:assert_privacy_check_packet_event(From, #{dir => out, blocked_count => 1}, TS). message_is_not_delivered(From, [To|_] = Tos, MessageText) -> - BareTo = escalus_utils:jid_to_lower(escalus_client:short_jid(To)), - escalus:send(From, escalus_stanza:chat_to(BareTo, MessageText)), + escalus:send(From, escalus_stanza:chat_to(To, MessageText)), clients_have_no_messages(Tos). clients_have_no_messages(Cs) when is_list (Cs) -> [ client_has_no_messages(C) || C <- Cs ]. diff --git a/big_tests/tests/mod_global_distrib_SUITE.erl b/big_tests/tests/mod_global_distrib_SUITE.erl index eac6bf1bcee..6ef3222334c 100644 --- a/big_tests/tests/mod_global_distrib_SUITE.erl +++ b/big_tests/tests/mod_global_distrib_SUITE.erl @@ -452,13 +452,13 @@ test_two_way_pm(Alice, Eve) -> fun(#{count := 1, time := T, jid := Jid}) -> Jid =:= jid:to_lower(jid:from_binary(EveJid)) andalso T >= 0 end), - instrument_helper:assert_one( + instrument_helper:assert( mod_global_distrib_outgoing_established, #{}, fun(#{count := 1, host := <<"reg1">>}) -> true end), instrument_helper:assert( mod_global_distrib_outgoing_queue, #{}, fun(#{time := Time, host := <<"reg1">>}) -> Time >= 0 end), - instrument_helper:assert_one( + instrument_helper:assert( mod_global_distrib_outgoing_messages, #{}, fun(#{count := 1, host := <<"reg1">>}) -> true end). @@ -509,11 +509,11 @@ test_instrumentation_events_on_one_host(Config) -> Host = <<"localhost.bis">>, instrument_helper:assert(mod_global_distrib_incoming_established, #{}, fun(#{count := 1, peer := _}) -> true end), - instrument_helper:assert_one(mod_global_distrib_incoming_first_packet, #{}, + instrument_helper:assert(mod_global_distrib_incoming_first_packet, #{}, fun(#{count := 1, host := H}) -> H =:= Host end), instrument_helper:assert(mod_global_distrib_incoming_transfer, #{}, fun(#{time := T, host := H}) when T >= 0 -> H =:= Host end), - instrument_helper:assert_one(mod_global_distrib_incoming_messages, #{}, + instrument_helper:assert(mod_global_distrib_incoming_messages, #{}, fun(#{count := 1, host := H}) -> H =:= Host end), instrument_helper:assert(mod_global_distrib_incoming_queue, #{}, fun(#{time := T, host := H}) when T >= 0 -> H =:= Host end), @@ -522,7 +522,7 @@ test_instrumentation_events_on_one_host(Config) -> escalus_client:stop(Config1, Eve), instrument_helper:wait_and_assert(mod_global_distrib_incoming_closed, #{}, - fun(#{count := 1, host := H}) -> H =:= Host end). + fun(#{count := 1, host := undefined}) -> true end). test_muc_conversation_history(Config0) -> AliceSpec = escalus_fresh:create_fresh_user(Config0, alice), @@ -671,8 +671,8 @@ test_component_disconnect(Config) -> escalus:send(User, escalus_stanza:chat_to(Addr, <<"Hi!">>)), Error = escalus:wait_for_stanza(User, 5000), escalus:assert(is_error, [<<"cancel">>, <<"service-unavailable">>], Error), - instrument_helper:assert_one(mod_global_distrib_outgoing_closed, #{}, - fun(#{count := 1, host := <<"reg1">>}) -> true end) + instrument_helper:assert(mod_global_distrib_outgoing_closed, #{}, + fun(#{count := 1, host := <<"reg1">>}) -> true end) end, AliceStory = fun(User) -> diff --git a/big_tests/tests/privacy_SUITE.erl b/big_tests/tests/privacy_SUITE.erl index 9a21e99b85d..a1aa5d5b587 100644 --- a/big_tests/tests/privacy_SUITE.erl +++ b/big_tests/tests/privacy_SUITE.erl @@ -17,17 +17,16 @@ -module(privacy_SUITE). -compile([export_all, nowarn_export_all]). --include_lib("exml/include/exml.hrl"). --include_lib("escalus/include/escalus.hrl"). --include_lib("common_test/include/ct.hrl"). -include_lib("escalus/include/escalus_xmlns.hrl"). -define(SLEEP_TIME, 50). -import(privacy_helper, [assert_privacy_get_event/1, + assert_privacy_get_event/2, assert_privacy_set_event/2, - assert_privacy_check_packet_event/2, - assert_privacy_push_item_event/2]). + assert_privacy_check_packet_event/3, + assert_privacy_push_item_event/2, + assert_privacy_push_item_event/3]). %%-------------------------------------------------------------------- %% Suite configuration @@ -195,10 +194,11 @@ get_all_lists_with_active(Config) -> privacy_helper:set_and_activate(Alice, {<<"deny_client">>, Bob}), + TS = instrument_helper:timestamp(), escalus:send(Alice, escalus_stanza:privacy_get_all()), escalus:assert(is_privacy_result_with_active, [<<"deny_client">>], escalus:wait_for_stanza(Alice)), - assert_privacy_get_event(Alice) + assert_privacy_get_event(Alice, TS) end). @@ -209,10 +209,11 @@ get_all_lists_with_default(Config) -> privacy_helper:set_list(Alice, {<<"allow_client">>, Bob}), privacy_helper:set_default_list(Alice, <<"allow_client">>), + TS = instrument_helper:timestamp(), escalus:send(Alice, escalus_stanza:privacy_get_all()), escalus:assert(is_privacy_result_with_default, escalus:wait_for_stanza(Alice)), - assert_privacy_get_event(Alice) + assert_privacy_get_event(Alice, TS) end). @@ -243,13 +244,14 @@ get_existing_list(Config) -> privacy_helper:set_list(Alice, {<<"deny_client">>, Bob}), + TS = instrument_helper:timestamp(), escalus:send(Alice, escalus_stanza:privacy_get_lists([<<"deny_client">>])), Response = escalus:wait_for_stanza(Alice), <<"deny_client">> = exml_query:path(Response, [{element, <<"query">>}, {element, <<"list">>}, {attr, <<"name">>}]), - assert_privacy_get_event(Alice) + assert_privacy_get_event(Alice, TS) end). @@ -391,7 +393,11 @@ remove_list(Config) -> privacy_helper:send_set_list(Alice, {<<"deny_client">>, Bob}), %% These are the pushed notification and iq result. - escalus_client:wait_for_stanzas(Alice, 2), + escalus:assert_many([ + fun privacy_helper:is_privacy_list_push/1, + is_iq_result + ], escalus_client:wait_for_stanzas(Alice, 2)), + assert_privacy_push_item_event(Alice, 1), %% Request list deletion by sending an empty list. RemoveRequest = escalus_stanza:privacy_set_list( @@ -399,11 +405,12 @@ remove_list(Config) -> escalus_client:send(Alice, RemoveRequest), %% These too are the pushed notification and iq result. + TS = instrument_helper:timestamp(), escalus:assert_many([ fun privacy_helper:is_privacy_list_push/1, is_iq_result ], escalus_client:wait_for_stanzas(Alice, 2)), - assert_privacy_push_item_event(Alice, 1), + assert_privacy_push_item_event(Alice, 1, TS), escalus_client:send(Alice, escalus_stanza:privacy_get_lists([<<"someList">>])), @@ -432,10 +439,11 @@ block_jid_message(Config) -> %% Blocking only applies to incoming messages, so Alice can still send %% Bob a message %% and Bob gets nothing + TS = instrument_helper:timestamp(), escalus_client:send(Alice, escalus_stanza:chat_to(Bob, <<"Hi, Bobbb!">>)), escalus_assert:is_chat_message(<<"Hi, Bobbb!">>, escalus_client:wait_for_stanza(Bob)), - assert_privacy_check_packet_event(Alice, #{dir => out}), - assert_privacy_check_packet_event(Bob, #{dir => in}) + assert_privacy_check_packet_event(Alice, #{dir => out}, TS), + assert_privacy_check_packet_event(Bob, #{dir => in}, TS) end). diff --git a/big_tests/tests/privacy_helper.erl b/big_tests/tests/privacy_helper.erl index cefe0689fcc..77ebba9f7c8 100644 --- a/big_tests/tests/privacy_helper.erl +++ b/big_tests/tests/privacy_helper.erl @@ -5,7 +5,6 @@ -include_lib("exml/include/exml.hrl"). -include_lib("escalus/include/escalus.hrl"). -include_lib("escalus/include/escalus_xmlns.hrl"). --include_lib("common_test/include/ct.hrl"). gets_error(Who, Type) -> gets_error(Who, <<"cancel">>, Type). @@ -29,31 +28,36 @@ send_set_list(Client, List) -> %% Sets the list on server. set_list(Client, {ListName, Target}) -> + TS = instrument_helper:timestamp(), Stanza = send_set_list(Client, {ListName, Target}), - verify_set_list_response(Client), + verify_set_list_response(Client, TS), verify_list(Client, ListName, Stanza); set_list(Client, ListName) -> + TS = instrument_helper:timestamp(), Stanza = send_set_list(Client, ListName), - verify_set_list_response(Client), + verify_set_list_response(Client, TS), verify_list(Client, ListName, Stanza). set_list(Client, ListName, NewItems) -> + TS = instrument_helper:timestamp(), PrivacyList = escalus_stanza:privacy_list(ListName, NewItems), Stanza = escalus_stanza:privacy_set_list(PrivacyList), escalus:send(Client, Stanza), - verify_set_list_response(Client), + verify_set_list_response(Client, TS), verify_list(Client, ListName, Stanza). -verify_set_list_response(Client) -> +verify_set_list_response(Client, TS) -> Responses = escalus:wait_for_stanzas(Client, 2), escalus:assert_many([is_iq_result, is_privacy_set], Responses), - assert_privacy_set_event(Client, #{}). + assert_privacy_set_event(Client, #{}, TS). verify_list(Client, ListName, Stanza) -> + TS = instrument_helper:timestamp(), GetStanza = escalus_stanza:privacy_get_lists([ListName]), escalus:send(Client, GetStanza), GetResultStanza = escalus:wait_for_stanza(Client), - escalus:assert(fun does_result_match_request/3, [Stanza, GetStanza], GetResultStanza). + escalus:assert(fun does_result_match_request/3, [Stanza, GetStanza], GetResultStanza), + assert_privacy_get_event(Client, TS). does_result_match_request(SetRequest, GetRequest, Result) -> escalus_pred:is_iq_result(GetRequest, Result) andalso @@ -90,15 +94,17 @@ attr_match(Name, Value, Props) -> %% Make the list the active one. activate_list(Client, ListName) -> + TS = instrument_helper:timestamp(), escalus:send(Client, escalus_stanza:privacy_activate(ListName)), escalus:assert(is_iq_result, escalus:wait_for_stanza(Client)), - assert_privacy_set_event(Client, #{active_count => 1}). + assert_privacy_set_event(Client, #{active_count => 1}, TS). %% Make the list the default one. set_default_list(Client, ListName) -> + TS = instrument_helper:timestamp(), escalus:send(Client, escalus_stanza:privacy_set_default(ListName)), escalus:assert(is_iq_result, escalus:wait_for_stanza(Client)), - assert_privacy_set_event(Client, #{default_count => 1}). + assert_privacy_set_event(Client, #{default_count => 1}, TS). %% Is this iq a notification about a privacy list being changed? is_privacy_list_push(Iq) -> @@ -255,36 +261,58 @@ does_user_process_crash(From, To, Type, Children, Message) -> escalus:wait_for_stanza(To)). send_and_check_blocked_message(Sender, Recipient) -> + TS = instrument_helper:timestamp(), escalus_client:send(Sender, escalus_stanza:chat_to(Recipient, <<"Hi, blocker!">>)), timer:sleep(100), escalus_assert:has_no_stanzas(Recipient), privacy_helper:gets_error(Sender, <<"service-unavailable">>), - assert_privacy_check_packet_event(Sender, #{dir => out}), - assert_privacy_check_packet_event(Recipient, #{dir => in, denied_count => 1}). + assert_privacy_check_packet_event(Sender, #{dir => out}, TS), + assert_privacy_check_packet_event(Recipient, #{dir => in, denied_count => 1}, TS). -%% Intrumentation events +%% Instrumentation events assert_privacy_get_event(Client) -> - ClientJid = jid:from_binary(escalus_utils:get_jid(Client)), - instrument_helper:assert_one( - mod_privacy_get, #{host_type => domain_helper:host_type()}, - fun(M) -> M =:= #{count => 1, jid => ClientJid} end). + assert_event(mod_privacy_get, measurements(Client)). + +assert_privacy_get_event(Client, TS) -> + assert_event(mod_privacy_get, measurements(Client), TS). assert_privacy_set_event(Client, ExtraM) -> - ClientJid = jid:from_binary(escalus_utils:get_jid(Client)), - instrument_helper:assert_one( - mod_privacy_set, #{host_type => domain_helper:host_type()}, - fun(M) -> M =:= maps:merge(#{jid => ClientJid, count => 1}, ExtraM) end). + assert_event(mod_privacy_set, measurements(Client, ExtraM)). + +assert_privacy_set_event(Client, ExtraM, TS) -> + assert_event(mod_privacy_set, measurements(Client, ExtraM), TS). assert_privacy_check_packet_event(Client, ExtraM) -> - ClientJid = jid:from_binary(escalus_utils:get_jid(Client)), - instrument_helper:assert_one( - mod_privacy_check_packet, #{host_type => domain_helper:host_type()}, - fun(M) -> M =:= maps:merge(#{jid => ClientJid, count => 1}, ExtraM) end). + assert_event(mod_privacy_check_packet, measurements(Client, ExtraM)). + +assert_privacy_check_packet_event(Client, ExtraM, TS) -> + assert_event(mod_privacy_check_packet, measurements(Client, ExtraM), TS). assert_privacy_push_item_event(Client, ExpCount) -> + assert_event(mod_privacy_push_item, push_item_measurements(Client, ExpCount)). + +assert_privacy_push_item_event(Client, ExpCount, TS) -> + assert_event(mod_privacy_push_item, push_item_measurements(Client, ExpCount), TS). + +measurements(Client, ExtraM) -> + maps:merge(measurements(Client), ExtraM). + +measurements(Client) -> + ClientJid = jid:from_binary(escalus_utils:get_jid(Client)), + #{jid => ClientJid, count => 1}. + +push_item_measurements(Client, ExpCount) -> User = escalus_utils:get_username(Client), Server = escalus_utils:get_server(Client), - instrument_helper:assert_one( - mod_privacy_push_item, #{host_type => domain_helper:host_type()}, - fun(M) -> M =:= #{user => User, server => Server, count => ExpCount} end). + #{user => User, server => Server, count => ExpCount}. + +assert_event(Name, Measurements) -> + instrument_helper:assert_one(Name, labels(), fun(M) -> M =:= Measurements end). + +assert_event(Name, Measurements, TS) -> + instrument_helper:assert(Name, labels(), fun(M) -> M =:= Measurements end, + #{expected_count => 1, timestamp => TS}). + +labels() -> + #{host_type => domain_helper:host_type()}. diff --git a/big_tests/tests/roster_helper.erl b/big_tests/tests/roster_helper.erl index e82341bc026..092544b641e 100644 --- a/big_tests/tests/roster_helper.erl +++ b/big_tests/tests/roster_helper.erl @@ -13,11 +13,11 @@ set_versioning(Versioning, VersionStore, Config) -> %% Instrumentation events -assert_roster_event(Client, Event) -> - ClientJid = jid:from_binary(escalus_utils:get_jid(Client)), +assert_roster_event(ClientOrJid, Event) -> + ClientJid = jid:from_binary(escalus_utils:get_jid(ClientOrJid)), instrument_helper:assert_one( Event, #{host_type => host_type()}, - fun(#{count := 1, jid := Jid}) -> jid:are_bare_equal(ClientJid, Jid) end). + fun(#{count := 1, jid := Jid}) -> ClientJid =:= Jid end). assert_subscription_event(FromClient, ToClient, CheckF) -> FromClientJid = jid:from_binary(escalus_utils:get_short_jid(FromClient)), diff --git a/src/roster/mod_roster.erl b/src/roster/mod_roster.erl index 4660b2eaae8..cf862ebead7 100644 --- a/src/roster/mod_roster.erl +++ b/src/roster/mod_roster.erl @@ -506,10 +506,11 @@ broadcast_item(#jid{luser = LUser, lserver = LServer}, ContactJid, Subscription) lists:foreach(fun({_, Pid}) -> mongoose_c2s:cast(Pid, ?MODULE, Item) end, UserPids). push_item_without_version(HostType, JID, Resource, From, Item) -> + TargetJID = jid:replace_resource(JID, Resource), mongoose_instrument:execute(mod_roster_push, #{host_type => HostType}, - #{count => 1, jid => From}), + #{count => 1, jid => TargetJID}), mongoose_hooks:roster_push(HostType, From, Item), - push_item_final(jid:replace_resource(JID, Resource), From, Item, not_found). + push_item_final(TargetJID, From, Item, not_found). push_item_version(JID, From, Item, RosterVersion) -> lists:foreach(fun(Resource) ->