diff --git a/apps/ejabberd/src/ejabberd_sm.erl b/apps/ejabberd/src/ejabberd_sm.erl index 00b7830620a..6084cda5022 100644 --- a/apps/ejabberd/src/ejabberd_sm.erl +++ b/apps/ejabberd/src/ejabberd_sm.erl @@ -789,7 +789,7 @@ route_message(From, To, Acc, Packet) -> %% positive fun({Prio, Pid}) when Prio == Priority -> %% we will lose message if PID is not alive - Pid ! {route, From, To, mongoose_acc:strip(Acc)}; + Pid ! {route, From, To, mongoose_acc:strip(Acc, Packet)}; %% Ignore other priority: ({_Prio, _Pid}) -> ok diff --git a/test.disabled/ejabberd_tests/default.spec b/test.disabled/ejabberd_tests/default.spec index 3cb302c80db..60d44a75747 100644 --- a/test.disabled/ejabberd_tests/default.spec +++ b/test.disabled/ejabberd_tests/default.spec @@ -11,6 +11,7 @@ %% do not remove below SUITE if testing mongoose {suites, "tests", mongoose_sanity_checks_SUITE}. +{suites, "tests", acc_e2e_SUITE}. {suites, "tests", adhoc_SUITE}. {suites, "tests", amp_big_SUITE}. {suites, "tests", anonymous_SUITE}. diff --git a/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE.erl b/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE.erl index 27c1f2614cc..e4d0b4080f6 100644 --- a/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE.erl +++ b/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE.erl @@ -36,12 +36,13 @@ all() -> groups() -> [ - {message, [parallel], message_test_cases()} + {message, [], message_test_cases()} ]. message_test_cases() -> [ - one_message + one_message, + message_altered_by_filter_local_packet_hook ]. suite() -> @@ -74,15 +75,22 @@ init_per_group(_GroupName, Config) -> escalus:create_users(Config, escalus:get_users([alice, bob])). end_per_group(message, Config) -> - remove_handler(c2s_preprocessing_hook, test_preprocess, 50), + remove_handler(c2s_preprocessing_hook, test_save_acc, 50), remove_handler(filter_local_packet, test_check_acc, 50), + remove_handler(user_receive_packet, test_check_final_acc, 50), escalus:delete_users(Config, escalus:get_users([alice, bob])); end_per_group(_GroupName, Config) -> escalus:delete_users(Config, escalus:get_users([alice, bob])). +init_per_testcase(message_altered_by_filter_local_packet_hook = CN, Config) -> + add_handler(filter_local_packet, alter_message, 60), + escalus:init_per_testcase(CN, Config); init_per_testcase(CaseName, Config) -> escalus:init_per_testcase(CaseName, Config). +end_per_testcase(message_altered_by_filter_local_packet_hook = CN, Config) -> + remove_handler(filter_local_packet, alter_message, 60), + escalus:end_per_testcase(CN, Config); end_per_testcase(CaseName, Config) -> escalus:end_per_testcase(CaseName, Config). @@ -102,6 +110,19 @@ one_message(Config) -> ok end). +message_altered_by_filter_local_packet_hook(Config) -> + escalus:fresh_story( + Config, [{alice, 1}, {bob, 1}], + fun(Alice, Bob) -> + M = escalus_stanza:chat_to(escalus_client:short_jid(Bob), <<"hi">>), + escalus:send(Alice, M), + R = escalus_client:wait_for_stanza(Bob), + % filter_local_packet alters packet to be delivered + % and mongoose_acc:strip must respect it + escalus:assert(is_chat_message, [<<"bye">>], R), + ok + end). + acc_test_helper_code(Config) -> Dir = proplists:get_value(data_dir, Config), F = filename:join(Dir, "acc_test_helper.erl"), diff --git a/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE_data/acc_test_helper.erl b/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE_data/acc_test_helper.erl index ac38b4eee43..ac6901d2f7d 100644 --- a/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE_data/acc_test_helper.erl +++ b/test.disabled/ejabberd_tests/tests/acc_e2e_SUITE_data/acc_test_helper.erl @@ -1,7 +1,7 @@ -module(acc_test_helper). --compile(export_all). -author("bartek"). +-compile(export_all). test_save_acc(#{type := <<"chat">>} = Acc, _State) -> Rand = rand:uniform(), @@ -46,3 +46,10 @@ check_acc(Acc, stripped) -> undefined = mongoose_acc:get(should_be_stripped, Acc, undefined), check_acc(Acc). +alter_message({From, To, Acc, Packet}) -> + % Not using #xmlel as it causes some strange error in dynamic compilation + {xmlel, PName, PAttrs, PCh} = Packet, + NewBody = {xmlel, <<"body">>, [], [{xmlcdata, <<"bye">> }]}, + PCh2 = lists:keyreplace(<<"body">>, 2, PCh, NewBody), + {From, To, Acc, {xmlel, PName, PAttrs, PCh2}}. +