Skip to content

Commit f82a1aa

Browse files
authored
Merge pull request #2797 from esl/get-rid-of-conf-reload-in-tests
This PR replaces some of the places in big_tests where config templating and application restart was needed to test some things. Now only relevant parts of MongooseIM are reconfigured and restarted when needed.
2 parents c6b0e04 + 209b421 commit f82a1aa

File tree

4 files changed

+85
-68
lines changed

4 files changed

+85
-68
lines changed

big_tests/tests/connect_SUITE.erl

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -128,45 +128,38 @@ suite() ->
128128

129129
init_per_suite(Config) ->
130130
Config0 = escalus:init_per_suite([{escalus_user_db, {module, escalus_ejabberd, []}} | Config]),
131-
Config1 = ejabberd_node_utils:init(Config0),
132-
ejabberd_node_utils:backup_config_file(Config1),
131+
C2SPort = ct:get_config({hosts, mim, c2s_port}),
132+
[{_, ejabberd_c2s, _} = C2SListener] = mongoose_helper:get_listener_opts(mim(), C2SPort),
133+
Config1 = [{c2s_listener, C2SListener} | Config0],
133134
assert_cert_file_exists(),
134135
escalus:create_users(Config1, escalus:get_users([?SECURE_USER, alice])).
135136

136137
end_per_suite(Config) ->
137138
escalus_fresh:clean(),
138139
escalus:delete_users(Config, escalus:get_users([?SECURE_USER, alice])),
139-
restore_ejabberd_node(Config),
140+
restore_c2s_listener(Config),
140141
escalus:end_per_suite(Config).
141142

142143
init_per_group(c2s_noproc, Config) ->
143-
config_ejabberd_node_tls(Config,
144-
fun mk_value_for_starttls_config_pattern/0),
145-
ejabberd_node_utils:restart_application(mongooseim),
144+
config_ejabberd_node_c2s(Config, [starttls]),
146145
Config;
147146
init_per_group(session_replacement, Config) ->
148-
config_ejabberd_node_tls(Config,
149-
fun mk_value_for_starttls_config_pattern/0),
150-
ejabberd_node_utils:restart_application(mongooseim),
147+
config_ejabberd_node_c2s(Config, [starttls]),
151148
lager_ct_backend:start(),
152149
Config;
153150
init_per_group(starttls, Config) ->
154-
config_ejabberd_node_tls(Config,
155-
fun mk_value_for_starttls_required_config_pattern/0),
156-
ejabberd_node_utils:restart_application(mongooseim),
151+
config_ejabberd_node_c2s(Config, [starttls_required]),
157152
Config;
158153
init_per_group(tls, Config) ->
159-
config_ejabberd_node_tls(Config, fun mk_value_for_tls_config_pattern/0),
160-
ejabberd_node_utils:restart_application(mongooseim),
154+
config_ejabberd_node_c2s(Config, [tls]),
161155
Users = proplists:get_value(escalus_users, Config, []),
162156
JoeSpec = lists:keydelete(starttls, 1, proplists:get_value(?SECURE_USER, Users)),
163157
JoeSpec2 = {?SECURE_USER, lists:keystore(ssl, 1, JoeSpec, {ssl, true})},
164158
NewUsers = lists:keystore(?SECURE_USER, 1, Users, JoeSpec2),
165159
Config2 = lists:keystore(escalus_users, 1, Config, {escalus_users, NewUsers}),
166160
[{c2s_port, ct:get_config({hosts, mim, c2s_port})} | Config2];
167161
init_per_group(feature_order, Config) ->
168-
config_ejabberd_node_tls(Config, fun mk_value_for_compression_config_pattern/0),
169-
ejabberd_node_utils:restart_application(mongooseim),
162+
config_ejabberd_node_c2s(Config, [starttls_required, {zlib, 10000}]),
170163
Config;
171164
init_per_group(just_tls,Config)->
172165
[{tls_module, just_tls} | Config];
@@ -175,9 +168,7 @@ init_per_group(fast_tls,Config)->
175168
init_per_group(session_replacement, Config) ->
176169
Config;
177170
init_per_group(proxy_protocol, Config) ->
178-
%% Use 'tls_config' to add the listener option for the proxy protocol
179-
ejabberd_node_utils:modify_config_file([{tls_config, "{proxy_protocol, true},"}], Config),
180-
ejabberd_node_utils:restart_application(mongooseim),
171+
config_ejabberd_node_c2s(Config, [{proxy_protocol, true}]),
181172
Config;
182173
init_per_group(_, Config) ->
183174
Config.
@@ -331,7 +322,6 @@ clients_can_connect_with_advertised_ciphers(Config) ->
331322
?assert(length(ciphers_working_with_ssl_clients(Config)) > 0).
332323

333324
'clients_can_connect_with_ECDHE-RSA-AES256-GCM-SHA384'(Config) ->
334-
335325
?assert(lists:member("ECDHE-RSA-AES256-GCM-SHA384",
336326
ciphers_working_with_ssl_clients(Config))).
337327

@@ -763,31 +753,29 @@ openssl_client_can_use_cipher(Cipher, Port) ->
763753
{done, ReturnCode, _Result} = erlsh:oneliner(Cmd),
764754
0 == ReturnCode.
765755

766-
restore_ejabberd_node(Config) ->
767-
ejabberd_node_utils:restore_config_file(Config),
768-
ejabberd_node_utils:restart_application(mongooseim).
756+
restore_c2s_listener(Config) ->
757+
{_, _, Opts} = C2SListener = ?config(c2s_listener, Config),
758+
mongoose_helper:restart_listener_with_opts(mim(), C2SListener, Opts).
769759

770760
assert_cert_file_exists() ->
771761
ejabberd_node_utils:file_exists(?CERT_FILE) orelse
772762
ct:fail("cert file ~s not exists", [?CERT_FILE]).
773763

774-
config_ejabberd_node_tls(Config, Fun) ->
775-
TLSModConf = "{tls_module," ++ atom_to_list(?config(tls_module, Config)) ++ "},",
776-
ejabberd_node_utils:modify_config_file([Fun(), {tls_module, TLSModConf}], Config).
777-
778-
mk_value_for_starttls_config_pattern() ->
779-
{tls_config, "{certfile, \"" ++ ?CERT_FILE ++ "\"}, starttls,"}.
780-
781-
mk_value_for_tls_config_pattern() ->
782-
{tls_config, "{certfile, \"" ++ ?CERT_FILE ++ "\"}, tls,"}.
783-
784-
mk_value_for_compression_config_pattern() ->
785-
{tls_config, "{certfile, \"" ++ ?CERT_FILE ++ "\"}, " ++
786-
"starttls_required, {zlib, 10000},"}.
787-
788-
mk_value_for_starttls_required_config_pattern() ->
789-
{tls_config, "{certfile, \"" ++ ?CERT_FILE ++ "\"}, " ++
790-
"starttls_required, {dhfile, \"" ++ ?DH_FILE ++ "\"},"}.
764+
config_ejabberd_node_c2s(Config, ExtraC2SOpts) ->
765+
Opts = ExtraC2SOpts ++ common_c2s_opts(Config),
766+
C2SListener = ?config(c2s_listener, Config),
767+
mongoose_helper:restart_listener_with_opts(mim(), C2SListener, Opts).
768+
769+
common_c2s_opts(Config) ->
770+
TLSModule = ?config(tls_module, Config),
771+
[{tls_module, TLSModule},
772+
{certfile, ?CERT_FILE},
773+
%starttls,
774+
%{zlib, 10000},
775+
{access, c2s},
776+
{shaper, c2s_shaper},
777+
{max_stanza_size, 65536},
778+
{dhfile, "priv/ssl/fake_dh_server.pem"}].
791779

792780
set_secure_connection_protocol(UserSpec, Version) ->
793781
[{ssl_opts, [{versions, [Version]}]} | UserSpec].

big_tests/tests/login_SUITE.erl

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -112,16 +112,19 @@ suite() ->
112112
%%--------------------------------------------------------------------
113113

114114
init_per_suite(Config) ->
115-
Config1 = mongoose_helper:backup_auth_config(Config),
115+
Config0 = mongoose_helper:backup_auth_config(Config),
116+
Config1 = mongoose_helper:backup_sasl_mechanisms_config(Config0),
116117
mongoose_helper:set_store_password(scram),
117118
escalus:init_per_suite(Config1).
118119

119120
end_per_suite(Config) ->
120121
escalus_fresh:clean(),
121122
mongoose_helper:restore_auth_config(Config),
123+
mongoose_helper:restore_sasl_mechanisms_config(Config),
122124
escalus:end_per_suite(Config).
123125

124-
init_per_group(login_digest, Config) ->
126+
init_per_group(login_digest, ConfigIn) ->
127+
Config = mongoose_helper:backup_sasl_mechanisms_config(ConfigIn),
125128
mongoose_helper:set_store_password(plain),
126129
case mongoose_helper:supports_sasl_module(cyrsasl_digest) of
127130
false ->
@@ -162,15 +165,15 @@ init_per_group(_GroupName, Config) ->
162165
escalus:create_users(Config, escalus:get_users([alice, bob])).
163166

164167
end_per_group(login_digest, Config) ->
165-
restore_config(Config),
166168
mongoose_helper:set_store_password(scram),
169+
mongoose_helper:restore_sasl_mechanisms_config(Config),
167170
escalus:delete_users(Config, escalus:get_users([alice, bob]));
168171
end_per_group(GroupName, Config) when
169172
GroupName == login_scram; GroupName == login_specific_scram ->
170173
mongoose_helper:set_store_password(scram),
171174
escalus:delete_users(Config, escalus:get_users([alice, bob, neustradamus]));
172175
end_per_group(login_scram_tls, Config) ->
173-
restore_config(Config),
176+
restore_c2s(Config),
174177
delete_tls_users(Config);
175178
end_per_group(_GroupName, Config) ->
176179
escalus:delete_users(Config, escalus:get_users([alice, bob])).
@@ -387,23 +390,17 @@ message_zlib_limit(Config) ->
387390
%%--------------------------------------------------------------------
388391

389392
config_ejabberd_node_tls(Config) ->
390-
Config1 = ejabberd_node_utils:init(Config),
391-
ejabberd_node_utils:backup_config_file(Config1),
392-
ejabberd_node_utils:modify_config_file([{tls_config, "{certfile, \"" ++ ?CERT_FILE ++ "\"}, tls,"}], Config1),
393-
ejabberd_node_utils:restart_application(mongooseim),
394-
Config1.
393+
C2SPort = ct:get_config({hosts, mim, c2s_port}),
394+
[{_, ejabberd_c2s, Opts} = C2SListener] = mongoose_helper:get_listener_opts(mim(), C2SPort),
395+
%% replace starttls with tls
396+
NewOpts = [tls | Opts -- [starttls]],
397+
mongoose_helper:restart_listener_with_opts(mim(), C2SListener, NewOpts),
398+
[{c2s_listener, C2SListener} | Config].
395399

396400
configure_digest(Config) ->
397-
Config1 = ejabberd_node_utils:init(Config),
398-
ejabberd_node_utils:backup_config_file(Config1),
399-
ejabberd_node_utils:modify_config_file([{sasl_mechanisms, "{sasl_mechanisms, [cyrsasl_digest]}."}], Config1),
400-
ejabberd_node_utils:restart_application(mongooseim),
401+
mongoose_helper:set_sasl_mechanisms(sasl_mechanisms, [cyrsasl_digest]),
401402
mongoose_helper:set_store_password(plain),
402-
Config1.
403-
404-
restore_config(Config) ->
405-
ejabberd_node_utils:restore_config_file(Config),
406-
ejabberd_node_utils:restart_application(mongooseim).
403+
Config.
407404

408405
create_tls_users(Config) ->
409406
Config1 = escalus:create_users(Config, escalus:get_users([alice, neustradamus])),
@@ -502,3 +499,8 @@ are_sasl_scram_modules_supported() ->
502499
cyrsasl_scram_sha384, cyrsasl_scram_sha512],
503500
IsSupported = [mongoose_helper:supports_sasl_module(Module) || Module <- ScramModules],
504501
[true, true, true, true, true] == IsSupported.
502+
503+
restore_c2s(Config) ->
504+
{_, _, Opts} = C2SListener = proplists:get_value(c2s_listener, Config),
505+
mongoose_helper:restart_listener_with_opts(mim(), C2SListener, Opts).
506+

big_tests/tests/mongoose_helper.erl

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@
3434
-export([wait_for_pid_to_die/1]).
3535
-export([supports_sasl_module/1]).
3636
-export([backup_auth_config/1, restore_auth_config/1]).
37+
-export([backup_sasl_mechanisms_config/1, restore_sasl_mechanisms_config/1]).
38+
-export([set_sasl_mechanisms/2]).
3739
-export([set_store_password/1]).
40+
-export([get_listener_opts/2]).
41+
-export([restart_listener_with_opts/3]).
3842

3943
-import(distributed_helper, [mim/0, rpc/4]).
4044

@@ -413,11 +417,30 @@ backup_auth_config(Config) ->
413417
AuthOpts = rpc(mim(), ejabberd_config, get_local_option, [{auth_opts, XMPPDomain}]),
414418
[{auth_opts, AuthOpts} | Config].
415419

420+
backup_sasl_mechanisms_config(Config) ->
421+
XMPPDomain = escalus_ejabberd:unify_str_arg(ct:get_config({hosts, mim, domain})),
422+
GlobalSASLMechanisms = rpc(mim(), ejabberd_config, get_local_option, [sasl_mechanisms]),
423+
HostSASLMechanisms = rpc(mim(), ejabberd_config, get_local_option, [{sasl_mechanisms, XMPPDomain}]),
424+
[{global_sasl_mechanisms, GlobalSASLMechanisms},
425+
{host_sasl_mechanisms, HostSASLMechanisms} | Config].
426+
427+
416428
restore_auth_config(Config) ->
417429
XMPPDomain = escalus_ejabberd:unify_str_arg(ct:get_config({hosts, mim, domain})),
418430
AuthOpts = proplists:get_value(auth_opts, Config),
419431
rpc(mim(), ejabberd_config, add_local_option, [{auth_opts, XMPPDomain}, AuthOpts]).
420432

433+
restore_sasl_mechanisms_config(Config) ->
434+
XMPPDomain = escalus_ejabberd:unify_str_arg(ct:get_config({hosts, mim, domain})),
435+
GlobalSASLMechanisms = proplists:get_value(global_sasl_mechanisms, Config),
436+
HostSASLMechanisms = proplists:get_value(host_sasl_mechanisms, Config),
437+
rpc(mim(), ejabberd_config, add_local_option, [sasl_mechanisms, GlobalSASLMechanisms]),
438+
rpc(mim(), ejabberd_config, add_local_option, [{sasl_mechanisms, XMPPDomain}, HostSASLMechanisms]).
439+
440+
set_sasl_mechanisms(GlobalOrHostSASLMechanisms, Mechanisms) ->
441+
rpc(mim(), ejabberd_config, add_local_option, [GlobalOrHostSASLMechanisms, Mechanisms]).
442+
443+
421444
set_store_password(Type) ->
422445
XMPPDomain = escalus_ejabberd:unify_str_arg(
423446
ct:get_config({hosts, mim, domain})),
@@ -430,3 +453,13 @@ build_new_auth_opts(scram, AuthOpts) ->
430453
lists:keystore(password_format, 1, NewAuthOpts0, {scram_iterations, 64});
431454
build_new_auth_opts(Type, AuthOpts) ->
432455
lists:keystore(password_format, 1, AuthOpts, {password_format, Type}).
456+
457+
get_listener_opts(#{} = Spec, Port) ->
458+
Listeners = rpc(Spec, ejabberd_config, get_local_option, [listen]),
459+
[Item || {{ListenerPort, _, _}, _, _} = Item <- Listeners, ListenerPort =:= Port].
460+
461+
restart_listener_with_opts(Spec, Listener, NewOpts) ->
462+
{PortIPProto, Module, _Opts} = Listener,
463+
rpc(Spec, ejabberd_listener, stop_listener, [PortIPProto, Module]),
464+
rpc(Spec, ejabberd_listener, start_listener, [PortIPProto, Module, NewOpts]).
465+

big_tests/tests/s2s_helper.erl

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ init_s2s(Config) ->
2828
Node1S2SCertfile = rpc(mim(), ejabberd_config, get_local_option, [s2s_certfile]),
2929
Node1S2SUseStartTLS = rpc(mim(), ejabberd_config, get_local_option, [s2s_use_starttls]),
3030
Node1S2SPort = ct:get_config({hosts, mim, incoming_s2s_port}),
31-
[Node1S2SListener] = get_listener_opts(mim(), Node1S2SPort),
31+
[Node1S2SListener] = mongoose_helper:get_listener_opts(mim(), Node1S2SPort),
3232

3333
Node2S2SCertfile = rpc(fed(), ejabberd_config, get_local_option, [s2s_certfile]),
3434
Node2S2SUseStartTLS = rpc(fed(), ejabberd_config, get_local_option, [s2s_use_starttls]),
3535
Node2S2SPort = ct:get_config({hosts, fed, incoming_s2s_port}),
36-
[Node2S2SListener] = get_listener_opts(fed(), Node2S2SPort),
36+
[Node2S2SListener] = mongoose_helper:get_listener_opts(fed(), Node2S2SPort),
3737
S2S = #s2s_opts{node1_s2s_certfile = Node1S2SCertfile,
3838
node1_s2s_use_starttls = Node1S2SUseStartTLS,
3939
node1_s2s_listener = Node1S2SListener,
@@ -132,12 +132,6 @@ restart_s2s(#{} = Spec, S2SListener) ->
132132
[rpc(Spec, erlang, exit, [Pid, kill]) ||
133133
{_, Pid, _, _} <- ChildrenIn],
134134

135-
{PortIPProto, ejabberd_s2s_in, Opts} = S2SListener,
135+
{_PortIPProto, ejabberd_s2s_in, Opts} = S2SListener,
136+
mongoose_helper:restart_listener_with_opts(Spec, S2SListener, Opts).
136137

137-
rpc(Spec, ejabberd_listener, stop_listener, [PortIPProto, ejabberd_s2s_in]),
138-
rpc(Spec, ejabberd_listener, start_listener, [PortIPProto, ejabberd_s2s_in, Opts]).
139-
140-
get_listener_opts(#{} = Spec, Port) ->
141-
Listeners = rpc(Spec, ejabberd_config, get_local_option, [listen]),
142-
143-
[Item || {{ListenerPort, _, _}, _, _} = Item <- Listeners, ListenerPort =:= Port].

0 commit comments

Comments
 (0)