1: -module(tr_util_SUITE). 2: -compile([export_all, nowarn_export_all]). 3: 4: -import(distributed_helper, [rpc/4, mim/0]). 5: 6: -include_lib("eunit/include/eunit.hrl"). 7: 8: all() -> 9: [c2s_hooks, c2s_elements]. 10: 11: suite() -> 12: escalus:suite(). 13: 14: init_per_suite(Config) -> 15: rpc(mim(), tr, start, []), 16: escalus:init_per_suite(Config). 17: 18: end_per_suite(Config) -> 19: escalus_fresh:clean(), 20: escalus:end_per_suite(Config), 21: rpc(mim(), tr, stop, []). 22: 23: init_per_testcase(CaseName, Config) -> 24: escalus:init_per_testcase(CaseName, Config). 25: 26: end_per_testcase(_CaseName, _Config) -> 27: rpc(mim(), tr, stop_tracing, []), 28: rpc(mim(), tr, clean, []). 29: 30: %% Test Cases 31: 32: c2s_hooks(Config) -> 33: rpc(mim(), tr, trace, [[mongoose_c2s_hooks, gen_hook]]), 34: [] = rpc(mim(), tr_util, c2s_hooks, []), % nothing collected yet 35: escalus:fresh_story(Config, [{alice, 1}], fun c2s_hooks_story/1). 36: 37: c2s_hooks_story(Alice) -> 38: C2SHooks = rpc(mim(), tr_util, c2s_hooks, []), 39: AliceJid = escalus_utils:get_jid(Alice), 40: 41: %% Get c2s hooks, and check the first few 42: ?assertMatch([{AliceJid, user_send_packet, #{mongoose_acc := true}}, 43: {AliceJid, user_send_iq, #{mongoose_acc := true}}, 44: {AliceJid, user_open_session, #{mongoose_acc := true}} | _], C2SHooks), 45: 46: %% Get generic hook statistics, and check one hook 47: HookStat = rpc(mim(), tr, call_stat, [fun tr_util:tr_to_hook_name_and_tag/1]), 48: HT = domain_helper:host_type(), 49: ?assertMatch(#{{user_open_session, HT} := {1, _, _}}, HookStat). 50: 51: c2s_elements(Config) -> 52: rpc(mim(), tr, trace, [[mongoose_c2s_hooks]]), 53: [] = rpc(mim(), tr_util, c2s_elements, []), % nothing collected yet 54: escalus:fresh_story(Config, [{alice, 1}, {bob, 1}], fun c2s_elements_story/2). 55: 56: c2s_elements_story(Alice, Bob) -> 57: escalus_client:send(Alice, escalus_stanza:chat_to(Bob, <<"Hello">>)), 58: escalus:wait_for_stanza(Bob), 59: AliceBareJid = escalus_utils:get_short_jid(Alice), 60: BobBareJid = escalus_utils:get_short_jid(Bob), 61: AliceJid = escalus_utils:get_jid(Alice), 62: BobJid = escalus_utils:get_jid(Bob), 63: 64: %% Get elements exchanged between bare JIDs 65: [Sent, Recv] = rpc(mim(), tr_util, c2s_elements_between_jids, [[AliceBareJid, BobBareJid]]), 66: ?assertMatch(#{name := <<"message">>, type := <<"chat">>, 67: jid := AliceJid, from_jid := AliceJid, to_jid := BobJid}, Sent), 68: ?assertMatch(#{name := <<"message">>, type := <<"chat">>, 69: jid := BobJid, from_jid := AliceJid, to_jid := BobJid}, Recv), 70: 71: %% Get elements exchanged between full JIDs 72: ?assertEqual([Sent, Recv], 73: rpc(mim(), tr_util, c2s_elements_between_jids, [[AliceJid, BobJid]])), 74: 75: %% Get all elements 76: AllElements = rpc(mim(), tr_util, c2s_elements, []), 77: ?assert(lists:member(Sent, AllElements)), 78: ?assert(lists:member(Recv, AllElements)).