From f2e54c9a6e1b1030755726d828d041cb3e27fe87 Mon Sep 17 00:00:00 2001 From: William Yang Date: Thu, 25 May 2023 17:26:51 +0200 Subject: [PATCH 1/2] test: use meck in olp tests avoid flaky test results by using mecks. --- apps/emqx/test/emqx_olp_SUITE.erl | 46 ++++++++----------------------- 1 file changed, 12 insertions(+), 34 deletions(-) diff --git a/apps/emqx/test/emqx_olp_SUITE.erl b/apps/emqx/test/emqx_olp_SUITE.erl index 87393686e..3f66bc461 100644 --- a/apps/emqx/test/emqx_olp_SUITE.erl +++ b/apps/emqx/test/emqx_olp_SUITE.erl @@ -19,8 +19,6 @@ -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"). -include_lib("common_test/include/ct.hrl"). -include_lib("lc/include/lc.hrl"). @@ -61,61 +59,41 @@ t_disable_enable(_Config) -> ok = emqx_olp:disable(), ?assert(not is_process_alive(Old)), {ok, Pid} = emqx_olp:enable(), - timer:sleep(1000), ?assert(is_process_alive(Pid)). %% Test that overload detection works t_is_overloaded(_Config) -> - P = burst_runq(), - timer:sleep(3000), + meck:new(load_ctl, [passthrough]), + meck:expect(load_ctl, is_overloaded, fun() -> true end), ?assert(emqx_olp:is_overloaded()), - exit(P, kill), - timer:sleep(3000), - ?assert(not emqx_olp:is_overloaded()). + meck:expect(load_ctl, is_overloaded, fun() -> false end), + ?assert(not emqx_olp:is_overloaded()), + meck:unload(load_ctl). %% Test that new conn is rejected when olp is enabled t_overloaded_conn(_Config) -> process_flag(trap_exit, true), ?assert(erlang:is_process_alive(load_ctl:whereis_runq_flagman())), emqx_config:put([overload_protection, enable], true), - P = burst_runq(), - timer:sleep(1000), + meck:new(load_ctl, [passthrough]), + meck:expect(load_ctl, is_overloaded, fun() -> true end), ?assert(emqx_olp:is_overloaded()), true = emqx:is_running(node()), {ok, C} = emqtt:start_link([{host, "localhost"}, {clientid, "myclient"}]), ?assertNotMatch({ok, _Pid}, emqtt:connect(C)), - exit(P, kill). + meck:unload(load_ctl). %% Test that new conn is rejected when olp is enabled t_overload_cooldown_conn(Config) -> t_overloaded_conn(Config), - timer:sleep(1000), + meck:new(load_ctl, [passthrough]), + meck:expect(load_ctl, is_overloaded, fun() -> false end), ?assert(not emqx_olp:is_overloaded()), true = emqx:is_running(node()), {ok, C} = emqtt:start_link([{host, "localhost"}, {clientid, "myclient"}]), ?assertMatch({ok, _Pid}, emqtt:connect(C)), - emqtt:stop(C). - --spec burst_runq() -> ParentToKill :: pid(). -burst_runq() -> - NProc = erlang:system_info(schedulers_online), - spawn(?MODULE, worker_parent, [NProc * 1000, {?MODULE, busy_loop, []}]). - -%% internal helpers -worker_parent(N, {M, F, A}) -> - lists:foreach( - fun(_) -> - proc_lib:spawn_link(fun() -> apply(M, F, A) end) - end, - lists:seq(1, N) - ), - receive - stop -> ok - end. - -busy_loop() -> - erlang:yield(), - busy_loop(). + emqtt:stop(C), + meck:unload(load_ctl). wait_for(_Fun, 0) -> false; From 0d6465b016c7ca53989f62e484f68b0bcbd48a11 Mon Sep 17 00:00:00 2001 From: William Yang Date: Tue, 30 May 2023 19:41:05 +0200 Subject: [PATCH 2/2] chore: bump app vsn --- apps/emqx_rule_engine/src/emqx_rule_engine.app.src | 2 +- lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.app.src b/apps/emqx_rule_engine/src/emqx_rule_engine.app.src index c6f94f5ea..7b4d1ee98 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.app.src +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.app.src @@ -2,7 +2,7 @@ {application, emqx_rule_engine, [ {description, "EMQX Rule Engine"}, % strict semver, bump manually! - {vsn, "5.0.18"}, + {vsn, "5.0.19"}, {modules, []}, {registered, [emqx_rule_engine_sup, emqx_rule_engine]}, {applications, [kernel, stdlib, rulesql, getopt, emqx_ctl]}, diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src index 4a52b2c35..4b6acf915 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src @@ -1,6 +1,6 @@ {application, emqx_ee_bridge, [ {description, "EMQX Enterprise data bridges"}, - {vsn, "0.1.14"}, + {vsn, "0.1.15"}, {registered, []}, {applications, [ kernel,