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