From f06a1f10efabe215cffc40197c6d605c8a55cb53 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Wed, 6 Dec 2023 14:07:26 +0100 Subject: [PATCH] test(emqx): switch most of testsuites to use `emqx_cth_suite` For increased robustness and isolation. --- apps/emqx/test/emqx_SUITE.erl | 9 +++--- apps/emqx/test/emqx_access_control_SUITE.erl | 12 ++++--- apps/emqx/test/emqx_alarm_SUITE.erl | 32 ++++++++----------- apps/emqx/test/emqx_authz_cache_SUITE.erl | 9 +++--- apps/emqx/test/emqx_banned_SUITE.erl | 12 +++---- apps/emqx/test/emqx_boot_SUITE.erl | 7 ++++ apps/emqx/test/emqx_bpapi_SUITE.erl | 11 +++---- .../emqx_channel_delayed_puback_SUITE.erl | 9 +++--- apps/emqx/test/emqx_client_SUITE.erl | 14 ++++---- apps/emqx/test/emqx_cm_SUITE.erl | 10 +++--- apps/emqx/test/emqx_cm_locker_SUITE.erl | 9 +++--- apps/emqx/test/emqx_cm_registry_SUITE.erl | 9 +++--- apps/emqx/test/emqx_config_SUITE.erl | 19 ++++++++--- apps/emqx/test/emqx_config_handler_SUITE.erl | 9 +++--- apps/emqx/test/emqx_connection_SUITE.erl | 10 +++--- apps/emqx/test/emqx_exclusive_sub_SUITE.erl | 18 ++++------- .../emqx/test/emqx_listeners_update_SUITE.erl | 9 +++--- 17 files changed, 100 insertions(+), 108 deletions(-) diff --git a/apps/emqx/test/emqx_SUITE.erl b/apps/emqx/test/emqx_SUITE.erl index d2e26232f..779038045 100644 --- a/apps/emqx/test/emqx_SUITE.erl +++ b/apps/emqx/test/emqx_SUITE.erl @@ -26,12 +26,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(?config(apps, Config)). t_emqx_pubsub_api(_) -> true = emqx:is_running(node()), diff --git a/apps/emqx/test/emqx_access_control_SUITE.erl b/apps/emqx/test/emqx_access_control_SUITE.erl index 8f7a1fa6c..188a46e5d 100644 --- a/apps/emqx/test/emqx_access_control_SUITE.erl +++ b/apps/emqx/test/emqx_access_control_SUITE.erl @@ -26,12 +26,14 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules([broker]), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start( + [{emqx, #{override_env => [{boot_modules, [broker]}]}}], + #{work_dir => emqx_cth_suite:work_dir(Config)} + ), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). init_per_testcase(_, Config) -> Config. diff --git a/apps/emqx/test/emqx_alarm_SUITE.erl b/apps/emqx/test/emqx_alarm_SUITE.erl index 49dd4c240..385e7ca51 100644 --- a/apps/emqx/test/emqx_alarm_SUITE.erl +++ b/apps/emqx/test/emqx_alarm_SUITE.erl @@ -19,29 +19,25 @@ -compile(export_all). -compile(nowarn_export_all). --include_lib("emqx/include/emqx.hrl"). --include_lib("emqx/include/emqx_mqtt.hrl"). -include_lib("eunit/include/eunit.hrl"). all() -> emqx_common_test_helpers:all(?MODULE). -init_per_testcase(t_size_limit, Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - {ok, _} = emqx:update_config([alarm], #{ - <<"size_limit">> => 2 - }), - Config; -init_per_testcase(_, Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - {ok, _} = emqx:update_config([alarm], #{ - <<"validity_period">> => <<"1s">> - }), - Config. +init_per_testcase(t_size_limit = TC, Config) -> + Apps = emqx_cth_suite:start( + [{emqx, "alarm.size_limit = 2"}], + #{work_dir => emqx_cth_suite:work_dir(TC, Config)} + ), + [{apps, Apps} | Config]; +init_per_testcase(TC, Config) -> + Apps = emqx_cth_suite:start( + [{emqx, "alarm.validity_period = \"1s\""}], + #{work_dir => emqx_cth_suite:work_dir(TC, Config)} + ), + [{apps, Apps} | Config]. -end_per_testcase(_, _Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_testcase(_, Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). t_alarm(_) -> ok = emqx_alarm:activate(unknown_alarm), diff --git a/apps/emqx/test/emqx_authz_cache_SUITE.erl b/apps/emqx/test/emqx_authz_cache_SUITE.erl index 09d1e1522..53e38c8f1 100644 --- a/apps/emqx/test/emqx_authz_cache_SUITE.erl +++ b/apps/emqx/test/emqx_authz_cache_SUITE.erl @@ -24,12 +24,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). %%-------------------------------------------------------------------- %% Test cases diff --git a/apps/emqx/test/emqx_banned_SUITE.erl b/apps/emqx/test/emqx_banned_SUITE.erl index 47134c666..8c86e17f6 100644 --- a/apps/emqx/test/emqx_banned_SUITE.erl +++ b/apps/emqx/test/emqx_banned_SUITE.erl @@ -26,15 +26,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:start_apps([]), - ok = ekka:start(), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - ekka:stop(), - mria:stop(), - mria_mnesia:delete_schema(), - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). t_add_delete(_) -> Banned = #banned{ diff --git a/apps/emqx/test/emqx_boot_SUITE.erl b/apps/emqx/test/emqx_boot_SUITE.erl index 006888d9c..323bc7591 100644 --- a/apps/emqx/test/emqx_boot_SUITE.erl +++ b/apps/emqx/test/emqx_boot_SUITE.erl @@ -23,6 +23,13 @@ all() -> emqx_common_test_helpers:all(?MODULE). +init_per_suite(Config) -> + ok = application:load(emqx), + Config. + +end_per_suite(_) -> + ok = application:unload(emqx). + t_is_enabled(_) -> try ok = application:set_env(emqx, boot_modules, all), diff --git a/apps/emqx/test/emqx_bpapi_SUITE.erl b/apps/emqx/test/emqx_bpapi_SUITE.erl index 5e29071a2..d9a0a1b20 100644 --- a/apps/emqx/test/emqx_bpapi_SUITE.erl +++ b/apps/emqx/test/emqx_bpapi_SUITE.erl @@ -26,16 +26,13 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:start_apps([emqx]), + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), [mnesia:dirty_write(Rec) || Rec <- fake_records()], - Config. + [{apps, Apps} | Config]. -end_per_suite(_Config) -> +end_per_suite(Config) -> meck:unload(), - [mnesia:dirty_delete({?TAB, Key}) || #?TAB{key = Key} <- fake_records()], - emqx_bpapi:announce(emqx), - emqx_common_test_helpers:stop_apps([emqx]), - ok. + emqx_cth_suite:stop(?config(apps, Config)). t_max_supported_version(_Config) -> ?assertMatch(3, emqx_bpapi:supported_version('fake-node2@localhost', api2)), diff --git a/apps/emqx/test/emqx_channel_delayed_puback_SUITE.erl b/apps/emqx/test/emqx_channel_delayed_puback_SUITE.erl index 4f2938b24..da8f5d7a5 100644 --- a/apps/emqx/test/emqx_channel_delayed_puback_SUITE.erl +++ b/apps/emqx/test/emqx_channel_delayed_puback_SUITE.erl @@ -31,12 +31,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(?config(apps, Config)). init_per_testcase(Case, Config) -> ?MODULE:Case({init, Config}). diff --git a/apps/emqx/test/emqx_client_SUITE.erl b/apps/emqx/test/emqx_client_SUITE.erl index c9923365e..7c2c18126 100644 --- a/apps/emqx/test/emqx_client_SUITE.erl +++ b/apps/emqx/test/emqx_client_SUITE.erl @@ -83,14 +83,14 @@ groups() -> ]. init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - emqx_config:put_listener_conf(ssl, default, [ssl_options, verify], verify_peer), - emqx_listeners:restart_listener('ssl:default'), - Config. + Apps = emqx_cth_suite:start( + [{emqx, "listeners.ssl.default.ssl_options.verify = verify_peer"}], + #{work_dir => emqx_cth_suite:work_dir(Config)} + ), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(?config(apps, Config)). init_per_testcase(_Case, Config) -> Config. diff --git a/apps/emqx/test/emqx_cm_SUITE.erl b/apps/emqx/test/emqx_cm_SUITE.erl index 9bfb4d5e7..7a7a989cd 100644 --- a/apps/emqx/test/emqx_cm_SUITE.erl +++ b/apps/emqx/test/emqx_cm_SUITE.erl @@ -19,7 +19,6 @@ -compile(export_all). -compile(nowarn_export_all). --include_lib("emqx/include/emqx.hrl"). -include_lib("emqx/include/emqx_cm.hrl"). -include_lib("eunit/include/eunit.hrl"). -include_lib("snabbkaffe/include/snabbkaffe.hrl"). @@ -54,12 +53,11 @@ suite() -> [{timetrap, {minutes, 2}}]. all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). %%-------------------------------------------------------------------- %% TODO: Add more test cases diff --git a/apps/emqx/test/emqx_cm_locker_SUITE.erl b/apps/emqx/test/emqx_cm_locker_SUITE.erl index 3dfb6e5ad..d79fc6ef7 100644 --- a/apps/emqx/test/emqx_cm_locker_SUITE.erl +++ b/apps/emqx/test/emqx_cm_locker_SUITE.erl @@ -24,12 +24,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). t_start_link(_) -> emqx_cm_locker:start_link(). diff --git a/apps/emqx/test/emqx_cm_registry_SUITE.erl b/apps/emqx/test/emqx_cm_registry_SUITE.erl index ee764a58f..c8c32a03d 100644 --- a/apps/emqx/test/emqx_cm_registry_SUITE.erl +++ b/apps/emqx/test/emqx_cm_registry_SUITE.erl @@ -28,12 +28,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). init_per_testcase(_TestCase, Config) -> Config. diff --git a/apps/emqx/test/emqx_config_SUITE.erl b/apps/emqx/test/emqx_config_SUITE.erl index 3de081df8..6a49507a6 100644 --- a/apps/emqx/test/emqx_config_SUITE.erl +++ b/apps/emqx/test/emqx_config_SUITE.erl @@ -25,12 +25,21 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + WorkDir = emqx_cth_suite:work_dir(Config), + Apps = emqx_cth_suite:start( + [ + {emqx, #{ + override_env => [ + {cluster_override_conf_file, filename:join(WorkDir, "cluster_override.conf")} + ] + }} + ], + #{work_dir => WorkDir} + ), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(?config(apps, Config)). init_per_testcase(TestCase, Config) -> try diff --git a/apps/emqx/test/emqx_config_handler_SUITE.erl b/apps/emqx/test/emqx_config_handler_SUITE.erl index bb91bcbe4..b4f4085fe 100644 --- a/apps/emqx/test/emqx_config_handler_SUITE.erl +++ b/apps/emqx/test/emqx_config_handler_SUITE.erl @@ -30,12 +30,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(?config(apps, Config)). init_per_testcase(_Case, Config) -> _ = file:delete(?CLUSTER_CONF), diff --git a/apps/emqx/test/emqx_connection_SUITE.erl b/apps/emqx/test/emqx_connection_SUITE.erl index 83f5bce0f..98d4e3102 100644 --- a/apps/emqx/test/emqx_connection_SUITE.erl +++ b/apps/emqx/test/emqx_connection_SUITE.erl @@ -57,10 +57,10 @@ init_per_suite(Config) -> ok = meck:expect(emqx_alarm, deactivate, fun(_) -> ok end), ok = meck:expect(emqx_alarm, deactivate, fun(_, _) -> ok end), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> +end_per_suite(Config) -> ok = meck:unload(emqx_transport), catch meck:unload(emqx_channel), ok = meck:unload(emqx_cm), @@ -68,8 +68,8 @@ end_per_suite(_Config) -> ok = meck:unload(emqx_metrics), ok = meck:unload(emqx_hooks), ok = meck:unload(emqx_alarm), - emqx_common_test_helpers:stop_apps([]), - ok. + + emqx_cth_suite:stop(proplists:get_value(apps, Config)). init_per_testcase(TestCase, Config) when TestCase =/= t_ws_pingreq_before_connected diff --git a/apps/emqx/test/emqx_exclusive_sub_SUITE.erl b/apps/emqx/test/emqx_exclusive_sub_SUITE.erl index 1caf4cc9b..a122c55e8 100644 --- a/apps/emqx/test/emqx_exclusive_sub_SUITE.erl +++ b/apps/emqx/test/emqx_exclusive_sub_SUITE.erl @@ -34,20 +34,14 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - ok = ekka:start(), - OldConf = emqx:get_config([zones], #{}), - emqx_config:put_zone_conf(default, [mqtt, exclusive_subscription], true), - timer:sleep(50), - [{old_conf, OldConf} | Config]. + Apps = emqx_cth_suite:start( + [{emqx, "mqtt.exclusive_subscription = true"}], + #{work_dir => emqx_cth_suite:work_dir(Config)} + ), + [{apps, Apps} | Config]. end_per_suite(Config) -> - emqx_config:put([zones], proplists:get_value(old_conf, Config)), - ekka:stop(), - mria:stop(), - mria_mnesia:delete_schema(), - emqx_common_test_helpers:stop_apps([]). + emqx_cth_suite:stop(proplists:get_value(apps, Config)). end_per_testcase(_TestCase, _Config) -> emqx_exclusive_subscription:clear(). diff --git a/apps/emqx/test/emqx_listeners_update_SUITE.erl b/apps/emqx/test/emqx_listeners_update_SUITE.erl index c1fdff2e2..8ae9775a5 100644 --- a/apps/emqx/test/emqx_listeners_update_SUITE.erl +++ b/apps/emqx/test/emqx_listeners_update_SUITE.erl @@ -30,12 +30,11 @@ all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Config) -> - emqx_common_test_helpers:boot_modules(all), - emqx_common_test_helpers:start_apps([]), - Config. + Apps = emqx_cth_suite:start([emqx], #{work_dir => emqx_cth_suite:work_dir(Config)}), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - emqx_common_test_helpers:stop_apps([]). +end_per_suite(Config) -> + emqx_cth_suite:stop(proplists:get_value(apps, Config)). init_per_testcase(_TestCase, Config) -> Init = emqx:get_raw_config(?LISTENERS),