1: -module(mod_mam_meta_SUITE). 2: -compile([export_all, nowarn_export_all]). 3: 4: -include_lib("common_test/include/ct.hrl"). 5: -include_lib("eunit/include/eunit.hrl"). 6: 7: all() -> [ 8: overrides_general_options, 9: sets_rdbms_as_default_backend, 10: handles_only_pm, 11: handles_only_muc, 12: disables_sync_writer_on_async_writer, 13: disables_sync_muc_writer_on_async_writer, 14: produces_valid_configurations, 15: handles_riak_config, 16: handles_cassandra_config, 17: example_muc_only_no_pref_good_performance, 18: example_pm_only_good_performance 19: ]. 20: 21: %% Tests 22: 23: init_per_testcase(_, Config) -> Config. 24: 25: end_per_testcase(_CaseName, Config) -> Config. 26: 27: overrides_general_options(_Config) -> 28: Deps = deps([{backend, rdbms}, {pm, [{backend, cassandra}]}, {muc, []}]), 29: 30: ?assert(lists:keymember(mod_mam_cassandra_arch, 1, Deps)), 31: ?assert(lists:keymember(mod_mam_muc_rdbms_arch, 1, Deps)), 32: ?assertNot(lists:keymember(mod_mam_rdbms_arch, 1, Deps)). 33: 34: 35: sets_rdbms_as_default_backend(_Config) -> 36: Deps = deps([{pm, []}]), 37: ?assert(lists:keymember(mod_mam_rdbms_arch, 1, Deps)). 38: 39: 40: handles_only_pm(_Config) -> 41: Deps = deps([{pm, []}]), 42: ?assert(lists:keymember(mod_mam, 1, Deps)), 43: ?assertNot(lists:keymember(mod_mam_muc, 1, Deps)). 44: 45: 46: handles_only_muc(_Config) -> 47: Deps = deps([{muc, []}]), 48: ?assertNot(lists:keymember(mod_mam, 1, Deps)), 49: ?assert(lists:keymember(mod_mam_muc, 1, Deps)). 50: 51: 52: disables_sync_writer_on_async_writer(_Config) -> 53: Deps = deps([{pm, [async_writer]}]), 54: {_, Args, _} = lists:keyfind(mod_mam_rdbms_arch, 1, Deps), 55: ?assert(lists:member(no_writer, Args)). 56: 57: 58: disables_sync_muc_writer_on_async_writer(_Config) -> 59: Deps = deps([{muc, [async_writer]}]), 60: {_, Args, _} = lists:keyfind(mod_mam_muc_rdbms_arch, 1, Deps), 61: ?assert(lists:member(no_writer, Args)). 62: 63: 64: produces_valid_configurations(_Config) -> 65: Deps = deps([ 66: {backend, rdbms}, 67: cache_users, 68: 69: {pm, [{user_prefs_store, rdbms}, archive_groupchats, {async_writer, false}]}, 70: {muc, [ 71: {host, <<"host">>}, 72: {rdbms_message_format, simple}, 73: {user_prefs_store, mnesia} 74: ]} 75: ]), 76: 77: ExpandedSimpleOpts = [{db_jid_format, mam_jid_rfc}, {db_message_format, mam_message_xml}], 78: 79: check_has_args(mod_mam, [{archive_groupchats, true}], Deps), 80: check_has_args(mod_mam_muc, [{host, <<"host">>}], Deps), 81: check_has_args(mod_mam_rdbms_arch, [pm], Deps), 82: check_has_args(mod_mam_muc_rdbms_arch, [no_writer | ExpandedSimpleOpts], Deps), 83: check_has_args(mod_mam_rdbms_user, [pm, muc], Deps), 84: check_has_args(mod_mam_cache_user, [pm, muc], Deps), 85: check_has_args(mod_mam_mnesia_prefs, [muc], Deps), 86: check_has_args(mod_mam_rdbms_prefs, [pm], Deps), 87: check_has_args(mod_mam_muc_rdbms_async_pool_writer, [], Deps), 88: 89: check_has_no_args(mod_mam_rdbms_arch, [muc, no_writer | ExpandedSimpleOpts], Deps), 90: check_has_no_args(mod_mam_mnesia_prefs, [pm], Deps), 91: check_has_no_args(mod_mam_rdbms_prefs, [muc], Deps), 92: ?assertNot(lists:keymember(mod_mam_rdbms_async_pool_writer, 1, Deps)). 93: 94: 95: handles_riak_config(_Config) -> 96: Deps = deps([ 97: {backend, riak}, 98: {db_message_format, some_format}, 99: {pm, [{user_prefs_store, mnesia}]}, 100: {muc, []} 101: ]), 102: 103: ?assert(lists:keymember(mod_mam, 1, Deps)), 104: ?assert(lists:keymember(mod_mam_muc, 1, Deps)), 105: check_has_args(mod_mam_riak_timed_arch_yz, [pm, muc], Deps), 106: check_has_args(mod_mam_riak_timed_arch_yz, [{db_message_format, some_format}], Deps), 107: check_has_args(mod_mam_mnesia_prefs, [pm], Deps), 108: check_has_no_args(mod_mam_mnesia_prefs, [muc], Deps). 109: 110: 111: handles_cassandra_config(_Config) -> 112: Deps = deps([ 113: {backend, cassandra}, 114: simple, 115: {pm, [{user_prefs_store, cassandra}, {db_message_format, some_format}]}, 116: {muc, [{user_prefs_store, mnesia}, {pool_name, some_poolname}]} 117: ]), 118: 119: check_has_args(mod_mam_mnesia_prefs, [muc], Deps), 120: check_has_args(mod_mam_cassandra_prefs, [pm], Deps), 121: check_has_args(mod_mam_cassandra_arch, [{db_message_format, some_format}, {simple, true}], Deps), 122: check_has_args(mod_mam_muc_cassandra_arch, [{pool_name, some_poolname}, {simple, true}], Deps), 123: check_has_no_args(mod_mam_cassandra_arch, [{pool_name, some_poolname}], Deps), 124: check_has_no_args(mod_mam_muc_cassandra_arch, [{db_message_format, some_format}], Deps). 125: 126: 127: example_muc_only_no_pref_good_performance(_Config) -> 128: Deps = deps([ 129: cache_users, 130: async_writer, 131: {muc, [{host, "muc.@HOST@"}]} 132: ]), 133: 134: check_equal_deps([ 135: {mod_mam_rdbms_user, [muc, pm]}, 136: {mod_mam_cache_user, [muc]}, 137: %% 'muc' argument is ignored by the module 138: {mod_mam_muc_rdbms_arch, [muc, no_writer]}, 139: %% 'muc' argument is ignored by the module 140: {mod_mam_muc_rdbms_async_pool_writer, [muc]}, 141: {mod_mam_muc, [{host, "muc.@HOST@"}]} 142: ], Deps). 143: 144: 145: example_pm_only_good_performance(_Config) -> 146: Deps = deps([ 147: {pm, []}, 148: cache_users, 149: async_writer, 150: {user_prefs_store, mnesia} 151: ]), 152: 153: check_equal_deps([ 154: {mod_mam_rdbms_user, [pm]}, 155: {mod_mam_cache_user, [pm]}, 156: {mod_mam_mnesia_prefs, [pm]}, 157: {mod_mam_rdbms_arch, [pm, no_writer]}, 158: {mod_mam_rdbms_async_pool_writer, [pm]}, 159: {mod_mam, []} 160: ], Deps). 161: 162: %% Helpers 163: 164: check_equal_deps(A, B) -> 165: ?assertEqual(sort_deps(A), sort_deps(B)). 166: 167: 168: sort_deps(Deps) -> 169: lists:map( 170: fun 171: ({Mod, ArgsOrHardness}) -> {Mod, lists:sort(ArgsOrHardness)}; 172: ({Mod, Args, _Hardness}) -> {Mod, lists:sort(Args)} 173: end, 174: lists:keysort(1, Deps)). 175: 176: 177: check_has_no_args(Mod, Args, Deps) -> 178: {_, ActualArgs, _} = lists:keyfind(Mod, 1, Deps), 179: ?assertEqual([], ordsets:intersection( 180: ordsets:from_list(Args), ordsets:from_list(ActualArgs))). 181: 182: check_has_args(Mod, Args, Deps) -> 183: {_, ActualArgs, _} = lists:keyfind(Mod, 1, Deps), 184: ?assert(ordsets:is_subset( 185: ordsets:from_list(Args), ordsets:from_list(ActualArgs))). 186: 187: deps(Args) -> 188: mod_mam_meta:deps(<<"host">>, Args).