1: -module(auth_external_SUITE). 2: 3: -compile([export_all, nowarn_export_all]). 4: 5: -include_lib("common_test/include/ct.hrl"). 6: 7: -define(HOST_TYPE, <<"test host type">>). 8: 9: all() -> 10: [{group, no_cache}]. 11: 12: groups() -> 13: [{no_cache, [], all_tests()}]. 14: 15: all_tests() -> 16: [try_register_ok, 17: remove_user_ok, 18: set_password_ok, 19: does_user_exist, 20: get_password_returns_false_if_no_cache, 21: get_password_s_returns_empty_bin_if_no_cache, 22: supported_sasl_mechanisms 23: ]. 24: 25: init_per_suite(C) -> 26: {ok, _} = application:ensure_all_started(jid), 27: C. 28: 29: end_per_suite(C) -> 30: C. 31: 32: init_per_group(_G, Config) -> 33: set_opts(Config), 34: ejabberd_auth_external:start(host_type()), 35: Config. 36: 37: end_per_group(_G, Config) -> 38: ejabberd_auth_external:stop(host_type()), 39: unset_opts(), 40: Config. 41: 42: try_register_ok(_C) -> 43: {U, P} = given_user_registered(), 44: true = ejabberd_auth_external:check_password(host_type(), U, domain(), P). 45: 46: remove_user_ok(_C) -> 47: {U, P} = given_user_registered(), 48: ok = ejabberd_auth_external:remove_user(host_type(), U, domain()), 49: false = ejabberd_auth_external:check_password(host_type(), U, domain(), P). 50: 51: set_password_ok(_C) -> 52: {U, P} = given_user_registered(), 53: NewP = random_binary(7), 54: ok = ejabberd_auth_external:set_password(host_type(), U, domain(), NewP), 55: false = ejabberd_auth_external:check_password(host_type(), U, domain(), P), 56: true = ejabberd_auth_external:check_password(host_type(), U, domain(), NewP). 57: 58: does_user_exist(_C) -> 59: {U, _P} = given_user_registered(), 60: true = ejabberd_auth_external:does_user_exist(host_type(), U, domain()). 61: 62: get_password_returns_false_if_no_cache(_C) -> 63: false = ejabberd_auth_external:get_password(host_type(), random_binary(8), domain()). 64: 65: get_password_s_returns_empty_bin_if_no_cache(_C) -> 66: <<"">> = ejabberd_auth_external:get_password_s(host_type(), random_binary(8), domain()). 67: 68: supported_sasl_mechanisms(_C) -> 69: Modules = [cyrsasl_plain, cyrsasl_digest, cyrsasl_external, 70: cyrsasl_scram_sha1, cyrsasl_scram_sha224, cyrsasl_scram_sha256, 71: cyrsasl_scram_sha384, cyrsasl_scram_sha512], 72: [true, false, false, false, false, false, false, false] = 73: [ejabberd_auth_external:supports_sasl_module(domain(), Mod) || Mod <- Modules]. 74: 75: given_user_registered() -> 76: {U, P} = UP = gen_user(), 77: ok = ejabberd_auth_external:try_register(host_type(), U, domain(), P), 78: UP. 79: 80: set_opts(Config) -> 81: DataDir = ?config(data_dir, Config), 82: mongoose_config:set_opts(#{{auth, ?HOST_TYPE} => 83: #{external => #{program => DataDir ++ "sample_external_auth.py", 84: instances => 1}}}). 85: 86: unset_opts() -> 87: mongoose_config:erase_opts(). 88: 89: gen_user() -> 90: U = random_binary(5), 91: P = random_binary(6), 92: {U, P}. 93: 94: random_binary(S) -> 95: base16:encode(crypto:strong_rand_bytes(S)). 96: 97: domain() -> 98: <<"mim1.esl.com">>. 99: 100: host_type() -> 101: ?HOST_TYPE.