From 698b1b6df67e0b44629aae5f93cedd8983714c99 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Thu, 11 Aug 2022 16:45:03 +0800 Subject: [PATCH 1/2] fix: different default plugins start between ee and ce --- src/emqx_plugins.erl | 50 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/src/emqx_plugins.erl b/src/emqx_plugins.erl index 4088988c2..1c8849745 100644 --- a/src/emqx_plugins.erl +++ b/src/emqx_plugins.erl @@ -217,22 +217,50 @@ load_plugin_conf(AppName, PluginDir) -> ensure_file(File) -> case filelib:is_file(File) of false -> - DefaultPlugins = [ {emqx_management, true} - , {emqx_dashboard, true} - , {emqx_modules, true} - , {emqx_recon, true} - , {emqx_retainer, true} - , {emqx_telemetry, true} - , {emqx_rule_engine, true} - , {emqx_bridge_mqtt, false} - , {emqx_eviction_agent, true} - , {emqx_node_rebalance, true} - ], + DefaultPlugins = default_plugins(), write_loaded(DefaultPlugins); true -> ok end. +-ifndef(EMQX_ENTERPRISE). +%% default plugins see rebar.config.erl +default_plugins() -> + [ + {emqx_management, true}, + {emqx_dashboard, true}, + %% emqx_modules is not a plugin, but a normal application starting when boots. + {emqx_modules, false}, + {emqx_retainer, true}, + {emqx_recon, true}, + {emqx_telemetry, true}, + {emqx_rule_engine, true}, + {emqx_bridge_mqtt, false}, + {emqx_eviction_agent, true}, + {emqx_node_rebalance, true} + ]. + +-else. + +default_plugins() -> + [ + {emqx_management, true}, + {emqx_dashboard, true}, + %% enterprise version of emqx_modules is a plugin + {emqx_modules, true}, + %% retainer is managed by emqx_modules. + %% default is true in data/load_modules. **NOT HERE** + {emqx_retainer, false}, + {emqx_recon, true}, + {emqx_telemetry, true}, + {emqx_rule_engine, true}, + {emqx_bridge_mqtt, false}, + {emqx_eviction_agent, true}, + {emqx_node_rebalance, true} + ]. + +-endif. + with_loaded_file(File, SuccFun) -> case read_loaded(File) of {ok, Names0} -> From e6a98524b5755050f72f42e70d696b50edbb8360 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Thu, 11 Aug 2022 23:20:41 +0800 Subject: [PATCH 2/2] chore: improve retainer ct init between ce and ee --- .../test/emqx_retainer_SUITE.erl | 6 +-- .../test/emqx_retainer_cli_SUITE.erl | 5 +- .../test/emqx_retainer_ct_helper.erl | 46 ++++++++++++++++++ .../test/mqtt_protocol_v5_SUITE.erl | 7 +-- test/emqx_plugins_SUITE.erl | 47 ++++++++++++++----- 5 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 apps/emqx_retainer/test/emqx_retainer_ct_helper.erl diff --git a/apps/emqx_retainer/test/emqx_retainer_SUITE.erl b/apps/emqx_retainer/test/emqx_retainer_SUITE.erl index 6f29eaedf..0e38548bf 100644 --- a/apps/emqx_retainer/test/emqx_retainer_SUITE.erl +++ b/apps/emqx_retainer/test/emqx_retainer_SUITE.erl @@ -31,11 +31,12 @@ all() -> emqx_ct:all(?MODULE). %%-------------------------------------------------------------------- init_per_suite(Config) -> - emqx_ct_helpers:start_apps([emqx_retainer]), + emqx_retainer_ct_helper:ensure_start(), Config. end_per_suite(_Config) -> - emqx_ct_helpers:stop_apps([emqx_retainer]). + emqx_retainer_ct_helper:ensure_stop(), + ok. init_per_testcase(TestCase, Config) -> emqx_retainer:clean(<<"#">>), @@ -207,4 +208,3 @@ receive_messages(Count, Msgs) -> after 2000 -> Msgs end. - diff --git a/apps/emqx_retainer/test/emqx_retainer_cli_SUITE.erl b/apps/emqx_retainer/test/emqx_retainer_cli_SUITE.erl index 452a4f3d9..995e3508c 100644 --- a/apps/emqx_retainer/test/emqx_retainer_cli_SUITE.erl +++ b/apps/emqx_retainer/test/emqx_retainer_cli_SUITE.erl @@ -24,11 +24,12 @@ all() -> emqx_ct:all(?MODULE). init_per_suite(Config) -> - emqx_ct_helpers:start_apps([emqx_retainer]), + emqx_retainer_ct_helper:ensure_start(), Config. end_per_suite(_Config) -> - emqx_ct_helpers:stop_apps([emqx_retainer]). + emqx_retainer_ct_helper:ensure_stop(), + ok. init_per_testcase(_TestCase, Config) -> Config. diff --git a/apps/emqx_retainer/test/emqx_retainer_ct_helper.erl b/apps/emqx_retainer/test/emqx_retainer_ct_helper.erl new file mode 100644 index 000000000..fd12a4e01 --- /dev/null +++ b/apps/emqx_retainer/test/emqx_retainer_ct_helper.erl @@ -0,0 +1,46 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2020-2022 EMQ Technologies Co., Ltd. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%%-------------------------------------------------------------------- +-module(emqx_retainer_ct_helper). + + +%% API +-export([ensure_start/0, ensure_stop/0]). +-ifdef(EMQX_ENTERPRISE). +ensure_start() -> + application:stop(emqx_modules), + init_conf(), + emqx_ct_helpers:start_apps([emqx_retainer]), + ok. + +-else. + +ensure_start() -> + init_conf(), + emqx_ct_helpers:start_apps([emqx_retainer]), + ok. + +-endif. + +ensure_stop() -> + emqx_ct_helpers:stop_apps([emqx_retainer]). + + +init_conf() -> + application:set_env(emqx_retainer, expiry_interval, 0), + application:set_env(emqx_retainer, max_payload_size, 1024000), + application:set_env(emqx_retainer, max_retained_messages, 0), + application:set_env(emqx_retainer, storage_type, ram), + ok. diff --git a/apps/emqx_retainer/test/mqtt_protocol_v5_SUITE.erl b/apps/emqx_retainer/test/mqtt_protocol_v5_SUITE.erl index ef0b111e9..17a31e04b 100644 --- a/apps/emqx_retainer/test/mqtt_protocol_v5_SUITE.erl +++ b/apps/emqx_retainer/test/mqtt_protocol_v5_SUITE.erl @@ -27,12 +27,13 @@ init_per_suite(Config) -> %% Meck emqtt ok = meck:new(emqtt, [non_strict, passthrough, no_history, no_link]), %% Start Apps - emqx_ct_helpers:start_apps([emqx_retainer]), + emqx_retainer_ct_helper:ensure_start(), Config. end_per_suite(_Config) -> ok = meck:unload(emqtt), - emqx_ct_helpers:stop_apps([emqx_retainer]). + emqx_retainer_ct_helper:ensure_stop(). + %%-------------------------------------------------------------------- %% Helpers @@ -107,7 +108,7 @@ t_publish_message_expiry_interval(_) -> Msgs = receive_messages(4), ?assertEqual(2, length(Msgs)), %% [MQTT-3.3.2-5] - L = lists:map(fun(Msg) -> MessageExpiryInterval = maps:get('Message-Expiry-Interval', maps:get(properties, Msg)), MessageExpiryInterval < 10 end, Msgs), + L = lists:map(fun(Msg) -> MessageExpiryInterval = maps:get('Message-Expiry-Interval', maps:get(properties, Msg)), MessageExpiryInterval < 10 end, Msgs), ?assertEqual(2, length(L)), %% [MQTT-3.3.2-6] ok = emqtt:disconnect(Client1), diff --git a/test/emqx_plugins_SUITE.erl b/test/emqx_plugins_SUITE.erl index b95030889..aa548d766 100644 --- a/test/emqx_plugins_SUITE.erl +++ b/test/emqx_plugins_SUITE.erl @@ -89,6 +89,38 @@ t_load(_) -> ?assertEqual(ignore, emqx_plugins:load()), ?assertEqual(ignore, emqx_plugins:unload()). +-ifndef(EMQX_ENTERPRISE). +default_plugins() -> + [ + {emqx_bridge_mqtt, false}, + {emqx_dashboard, true}, + {emqx_eviction_agent, true}, + {emqx_management, true}, + {emqx_modules, false}, + {emqx_node_rebalance, true}, + {emqx_recon, true}, + {emqx_retainer, true}, + {emqx_rule_engine, true}, + {emqx_telemetry, true} + ]. + +-else. + +default_plugins() -> + [ + {emqx_bridge_mqtt, false}, + {emqx_dashboard, true}, + {emqx_eviction_agent, true}, + {emqx_management, true}, + {emqx_modules, true}, + {emqx_node_rebalance, true}, + {emqx_recon, true}, + {emqx_retainer, false}, + {emqx_rule_engine, true}, + {emqx_telemetry, true} + ]. + +-endif. t_ensure_default_loaded_plugins_file(Config) -> %% this will trigger it to write the default plugins to the %% inexistent file; but it won't truly load them in this test @@ -96,19 +128,8 @@ t_ensure_default_loaded_plugins_file(Config) -> TmpFilepath = ?config(tmp_filepath, Config), ok = emqx_plugins:load(), {ok, Contents} = file:consult(TmpFilepath), - ?assertEqual( - [ {emqx_bridge_mqtt, false} - , {emqx_dashboard, true} - , {emqx_eviction_agent, true} - , {emqx_management, true} - , {emqx_modules, true} - , {emqx_node_rebalance, true} - , {emqx_recon, true} - , {emqx_retainer, true} - , {emqx_rule_engine, true} - , {emqx_telemetry, true} - ], - lists:sort(Contents)), + DefaultPlugins = default_plugins(), + ?assertEqual(DefaultPlugins, lists:sort(Contents)), ok. t_init_config(_) ->