1: -module(mam_send_message_SUITE). 2: 3: %% API 4: -export([all/0, 5: groups/0, 6: init_per_suite/1, 7: end_per_suite/1, 8: init_per_group/2, 9: end_per_group/2, 10: init_per_testcase/2, 11: end_per_testcase/2]). 12: 13: -export([mam_muc_send_message/1, 14: mam_pm_send_message/1]). 15: 16: -import(mam_helper, 17: [stanza_archive_request/2, 18: wait_archive_respond/1, 19: assert_respond_size/2, 20: respond_messages/1, 21: parse_forwarded_message/1]). 22: 23: -import(distributed_helper, [mim/0, 24: require_rpc_nodes/1, 25: subhost_pattern/1, 26: rpc/4]). 27: -import(domain_helper, [host_type/0]). 28: -import(config_parser_helper, [mod_config/2]). 29: 30: -include_lib("common_test/include/ct.hrl"). 31: 32: all() -> 33: [{group, send_message}]. 34: 35: groups() -> 36: [ 37: {send_message, [], [mam_pm_send_message, 38: mam_muc_send_message]} 39: ]. 40: 41: %%%=================================================================== 42: %%% Overall setup/teardown 43: %%%=================================================================== 44: init_per_suite(Config) -> 45: escalus:init_per_suite(Config). 46: 47: end_per_suite(Config) -> 48: escalus_fresh:clean(), 49: escalus:end_per_suite(Config). 50: 51: %%%=================================================================== 52: %%% Group specific setup/teardown 53: %%%=================================================================== 54: init_per_group(Group, Config) -> 55: case mongoose_helper:is_rdbms_enabled(host_type()) of 56: true -> 57: load_custom_module(), 58: Config2 = dynamic_modules:save_modules(host_type(), Config), 59: dynamic_modules:ensure_modules(host_type(), group_to_modules(Group)), 60: [{props, mam_helper:mam06_props()}|Config2]; 61: false -> 62: {skip, require_rdbms} 63: end. 64: 65: end_per_group(_Groupname, Config) -> 66: case mongoose_helper:is_rdbms_enabled(host_type()) of 67: true -> 68: dynamic_modules:restore_modules(Config); 69: false -> 70: ok 71: end, 72: ok. 73: 74: group_to_modules(send_message) -> 75: MH = subhost_pattern(muc_light_helper:muc_host_pattern()), 76: [{mod_mam_meta, mam_helper:config_opts(#{pm => #{}, 77: muc => #{host => MH}, 78: send_message => mam_send_message_example})}, 79: {mod_muc_light, mod_config(mod_muc_light, 80: #{backend => mongoose_helper:mnesia_or_rdbms_backend()})}, 81: {mam_send_message_example, []}]. 82: 83: load_custom_module() -> 84: mam_send_message_example:module_info(), 85: {Mod, Code, File} = code:get_object_code(mam_send_message_example), 86: rpc(mim(), code, load_binary, [Mod, File, Code]). 87: 88: %%%=================================================================== 89: %%% Testcase specific setup/teardown 90: %%%=================================================================== 91: 92: init_per_testcase(TestCase, Config) -> 93: escalus:init_per_testcase(TestCase, Config). 94: 95: end_per_testcase(TestCase, Config) -> 96: escalus:end_per_testcase(TestCase, Config). 97: 98: %%%=================================================================== 99: %%% Test Cases 100: %%%=================================================================== 101: 102: mam_pm_send_message(Config) -> 103: P = ?config(props, Config), 104: F = fun(Alice, Bob) -> 105: escalus:send(Alice, escalus_stanza:chat_to(Bob, <<"OH, HAI!">>)), 106: escalus:wait_for_stanza(Bob), 107: mam_helper:wait_for_archive_size(Alice, 1), 108: mam_helper:wait_for_archive_size(Bob, 1), 109: escalus:send(Alice, stanza_archive_request(P, <<"q1">>)), 110: Res = wait_archive_respond(Alice), 111: assert_respond_size(1, Res), 112: [Msg] = respond_messages(Res), 113: verify_has_some_hash(Msg) 114: end, 115: escalus:fresh_story(Config, [{alice, 1}, {bob, 1}], F). 116: 117: mam_muc_send_message(Config0) -> 118: F = fun(Config, Alice) -> 119: P = ?config(props, Config), 120: Room = muc_helper:fresh_room_name(), 121: MucHost = muc_light_helper:muc_host(), 122: muc_light_helper:create_room(Room, MucHost, alice, 123: [], Config, muc_light_helper:ver(1)), 124: escalus_assert:has_no_stanzas(Alice), 125: RoomAddr = <<Room/binary, "@", MucHost/binary>>, 126: escalus:send(Alice, escalus_stanza:groupchat_to(RoomAddr, <<"text">>)), 127: M = escalus:wait_for_stanza(Alice), 128: escalus:assert(is_message, M), 129: escalus_assert:has_no_stanzas(Alice), 130: mam_helper:wait_for_room_archive_size(MucHost, Room, 1), 131: escalus:send(Alice, escalus_stanza:to(stanza_archive_request(P, <<"q1">>), RoomAddr)), 132: [Msg] = respond_messages(assert_respond_size(1, wait_archive_respond(Alice))), 133: verify_has_some_hash(Msg) 134: end, 135: escalus:fresh_story_with_config(Config0, [{alice, 1}], F). 136: 137: verify_has_some_hash(Msg) -> 138: Hash = exml_query:path(Msg, [{element, <<"result">>}, 139: {element, <<"some_hash">>}, 140: {attr, <<"value">>}]), 141: binary_to_integer(Hash). %% is integer