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, [{backend, rdbms}, {pm, []}, {muc, [{host, MH}]}, 80: {send_message, mam_send_message_example}]}, 81: {mod_muc_light, [{host, subhost_pattern(muc_light_helper:muc_host_pattern())}, 82: {backend, mongoose_helper:mnesia_or_rdbms_backend()}]}, 83: {mam_send_message_example, []}]. 84: 85: load_custom_module() -> 86: mam_send_message_example:module_info(), 87: {Mod, Code, File} = code:get_object_code(mam_send_message_example), 88: rpc(mim(), code, load_binary, [Mod, File, Code]). 89: 90: %%%=================================================================== 91: %%% Testcase specific setup/teardown 92: %%%=================================================================== 93: 94: init_per_testcase(TestCase, Config) -> 95: escalus:init_per_testcase(TestCase, Config). 96: 97: end_per_testcase(TestCase, Config) -> 98: escalus:end_per_testcase(TestCase, Config). 99: 100: %%%=================================================================== 101: %%% Test Cases 102: %%%=================================================================== 103: 104: mam_pm_send_message(Config) -> 105: P = ?config(props, Config), 106: F = fun(Alice, Bob) -> 107: escalus:send(Alice, escalus_stanza:chat_to(Bob, <<"OH, HAI!">>)), 108: escalus:wait_for_stanza(Bob), 109: mam_helper:wait_for_archive_size(Alice, 1), 110: mam_helper:wait_for_archive_size(Bob, 1), 111: escalus:send(Alice, stanza_archive_request(P, <<"q1">>)), 112: Res = wait_archive_respond(Alice), 113: assert_respond_size(1, Res), 114: [Msg] = respond_messages(Res), 115: verify_has_some_hash(Msg) 116: end, 117: escalus:fresh_story(Config, [{alice, 1}, {bob, 1}], F). 118: 119: mam_muc_send_message(Config0) -> 120: F = fun(Config, Alice) -> 121: P = ?config(props, Config), 122: Room = muc_helper:fresh_room_name(), 123: MucHost = muc_light_helper:muc_host(), 124: muc_light_helper:create_room(Room, MucHost, alice, 125: [], Config, muc_light_helper:ver(1)), 126: escalus_assert:has_no_stanzas(Alice), 127: RoomAddr = <<Room/binary, "@", MucHost/binary>>, 128: escalus:send(Alice, escalus_stanza:groupchat_to(RoomAddr, <<"text">>)), 129: M = escalus:wait_for_stanza(Alice), 130: escalus:assert(is_message, M), 131: escalus_assert:has_no_stanzas(Alice), 132: mam_helper:wait_for_room_archive_size(MucHost, Room, 1), 133: escalus:send(Alice, escalus_stanza:to(stanza_archive_request(P, <<"q1">>), RoomAddr)), 134: [Msg] = respond_messages(assert_respond_size(1, wait_archive_respond(Alice))), 135: verify_has_some_hash(Msg) 136: end, 137: escalus:fresh_story_with_config(Config0, [{alice, 1}], F). 138: 139: verify_has_some_hash(Msg) -> 140: Hash = exml_query:path(Msg, [{element, <<"result">>}, 141: {element, <<"some_hash">>}, 142: {attr, <<"value">>}]), 143: binary_to_integer(Hash). %% is integer