From 2c97ee1b3f7835a77c17fb8d0df398be4caaccb7 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Mon, 5 Jun 2023 16:30:46 -0300 Subject: [PATCH] test(conf_app): fix test after common test helpers changes --- apps/emqx/test/emqx_common_test_helpers.erl | 7 +- apps/emqx_conf/test/emqx_conf_app_SUITE.erl | 87 ++++++++++++--------- 2 files changed, 56 insertions(+), 38 deletions(-) diff --git a/apps/emqx/test/emqx_common_test_helpers.erl b/apps/emqx/test/emqx_common_test_helpers.erl index afa7534d6..e4308b138 100644 --- a/apps/emqx/test/emqx_common_test_helpers.erl +++ b/apps/emqx/test/emqx_common_test_helpers.erl @@ -734,6 +734,7 @@ start_slave(Name, Opts) when is_map(Opts) -> fun() -> case SlaveMod of ct_slave -> + ct:pal("~p: node data dir: ~s", [Node, NodeDataDir]), ct_slave:start( Node, [ @@ -852,8 +853,10 @@ setup_node(Node, Opts) when is_map(Opts) -> ]), case erpc:call(Node, application, get_env, [mnesia, dir, undefined]) of undefined -> + ct:pal("~p: setting mnesia dir: ~p", [Node, MnesiaDataDir]), erpc:call(Node, application, set_env, [mnesia, dir, MnesiaDataDir]); - _ -> + PreviousMnesiaDir -> + ct:pal("~p: mnesia dir already set: ~p", [Node, PreviousMnesiaDir]), ok end, @@ -944,7 +947,7 @@ set_env_once(Var, Value) -> case os:getenv(Var) of false -> os:putenv(Var, Value); - _ -> + _OldValue -> ok end, ok. diff --git a/apps/emqx_conf/test/emqx_conf_app_SUITE.erl b/apps/emqx_conf/test/emqx_conf_app_SUITE.erl index 583405158..0cfb36154 100644 --- a/apps/emqx_conf/test/emqx_conf_app_SUITE.erl +++ b/apps/emqx_conf/test/emqx_conf_app_SUITE.erl @@ -20,14 +20,17 @@ -compile(nowarn_export_all). -include_lib("eunit/include/eunit.hrl"). +-include_lib("common_test/include/ct.hrl"). all() -> emqx_common_test_helpers:all(?MODULE). -t_copy_conf_override_on_restarts(_Config) -> +t_copy_conf_override_on_restarts(Config) -> ct:timetrap({seconds, 120}), snabbkaffe:fix_ct_logging(), - Cluster = cluster([cluster_spec({core, 1}), cluster_spec({core, 2}), cluster_spec({core, 3})]), + Cluster = cluster( + [cluster_spec({core, 1}), cluster_spec({core, 2}), cluster_spec({core, 3})], Config + ), %% 1. Start all nodes Nodes = start_cluster(Cluster), @@ -50,16 +53,19 @@ t_copy_conf_override_on_restarts(_Config) -> stop_cluster(Nodes) end. -t_copy_new_data_dir(_Config) -> +t_copy_new_data_dir(Config) -> net_kernel:start(['master1@127.0.0.1', longnames]), ct:timetrap({seconds, 120}), snabbkaffe:fix_ct_logging(), - Cluster = cluster([cluster_spec({core, 4}), cluster_spec({core, 5}), cluster_spec({core, 6})]), + Cluster = cluster( + [cluster_spec({core, 4}), cluster_spec({core, 5}), cluster_spec({core, 6})], Config + ), %% 1. Start all nodes [First | Rest] = Nodes = start_cluster(Cluster), try - File = "/configs/cluster.hocon", + NodeDataDir = erpc:call(First, emqx, data_dir, []), + File = NodeDataDir ++ "/configs/cluster.hocon", assert_config_load_done(Nodes), rpc:call(First, ?MODULE, create_data_dir, [File]), {[ok, ok, ok], []} = rpc:multicall(Nodes, application, stop, [emqx_conf]), @@ -74,16 +80,19 @@ t_copy_new_data_dir(_Config) -> stop_cluster(Nodes) end. -t_copy_deprecated_data_dir(_Config) -> +t_copy_deprecated_data_dir(Config) -> net_kernel:start(['master2@127.0.0.1', longnames]), ct:timetrap({seconds, 120}), snabbkaffe:fix_ct_logging(), - Cluster = cluster([cluster_spec({core, 7}), cluster_spec({core, 8}), cluster_spec({core, 9})]), + Cluster = cluster( + [cluster_spec({core, 7}), cluster_spec({core, 8}), cluster_spec({core, 9})], Config + ), %% 1. Start all nodes [First | Rest] = Nodes = start_cluster(Cluster), try - File = "/configs/cluster-override.conf", + NodeDataDir = erpc:call(First, emqx, data_dir, []), + File = NodeDataDir ++ "/configs/cluster-override.conf", assert_config_load_done(Nodes), rpc:call(First, ?MODULE, create_data_dir, [File]), {[ok, ok, ok], []} = rpc:multicall(Nodes, application, stop, [emqx_conf]), @@ -103,56 +112,60 @@ t_copy_deprecated_data_dir(_Config) -> %%------------------------------------------------------------------------------ create_data_dir(File) -> - Node = atom_to_list(node()), - ok = filelib:ensure_dir(Node ++ "/certs/"), - ok = filelib:ensure_dir(Node ++ "/authz/"), - ok = filelib:ensure_dir(Node ++ "/configs/"), - ok = file:write_file(Node ++ "/certs/fake-cert", list_to_binary(Node)), - ok = file:write_file(Node ++ "/authz/fake-authz", list_to_binary(Node)), + NodeDataDir = emqx:data_dir(), + ok = filelib:ensure_dir(NodeDataDir ++ "/certs/"), + ok = filelib:ensure_dir(NodeDataDir ++ "/authz/"), + ok = filelib:ensure_dir(NodeDataDir ++ "/configs/"), + ok = file:write_file(NodeDataDir ++ "/certs/fake-cert", list_to_binary(NodeDataDir)), + ok = file:write_file(NodeDataDir ++ "/authz/fake-authz", list_to_binary(NodeDataDir)), Telemetry = <<"telemetry.enable = false">>, - ok = file:write_file(Node ++ File, Telemetry). + ok = file:write_file(File, Telemetry). set_data_dir_env() -> - Node = atom_to_list(node()), + NodeDataDir = emqx:data_dir(), + NodeStr = atom_to_list(node()), %% will create certs and authz dir - ok = filelib:ensure_dir(Node ++ "/configs/"), + ok = filelib:ensure_dir(NodeDataDir ++ "/configs/"), {ok, [ConfigFile]} = application:get_env(emqx, config_files), - NewConfigFile = ConfigFile ++ "." ++ Node, + NewConfigFile = ConfigFile ++ "." ++ NodeStr, + ok = filelib:ensure_dir(NewConfigFile), {ok, _} = file:copy(ConfigFile, NewConfigFile), Bin = iolist_to_binary(io_lib:format("node.config_files = [~p]~n", [NewConfigFile])), ok = file:write_file(NewConfigFile, Bin, [append]), - DataDir = iolist_to_binary(io_lib:format("node.data_dir = ~p~n", [Node])), + DataDir = iolist_to_binary(io_lib:format("node.data_dir = ~p~n", [NodeDataDir])), ok = file:write_file(NewConfigFile, DataDir, [append]), application:set_env(emqx, config_files, [NewConfigFile]), - application:set_env(emqx, data_dir, Node), + %% application:set_env(emqx, data_dir, Node), %% We set env both cluster.hocon and cluster-override.conf, but only one will be used - application:set_env(emqx, cluster_hocon_file, Node ++ "/configs/cluster.hocon"), - application:set_env(emqx, cluster_override_conf_file, Node ++ "/configs/cluster-override.conf"), + application:set_env(emqx, cluster_hocon_file, NodeDataDir ++ "/configs/cluster.hocon"), + application:set_env( + emqx, cluster_override_conf_file, NodeDataDir ++ "/configs/cluster-override.conf" + ), ok. -assert_data_copy_done([First0 | Rest], File) -> - First = atom_to_list(First0), - {ok, FakeCertFile} = file:read_file(First ++ "/certs/fake-cert"), - {ok, FakeAuthzFile} = file:read_file(First ++ "/authz/fake-authz"), - {ok, FakeOverrideFile} = file:read_file(First ++ File), +assert_data_copy_done([_First | Rest], File) -> + FirstDataDir = filename:dirname(filename:dirname(File)), + {ok, FakeCertFile} = file:read_file(FirstDataDir ++ "/certs/fake-cert"), + {ok, FakeAuthzFile} = file:read_file(FirstDataDir ++ "/authz/fake-authz"), + {ok, FakeOverrideFile} = file:read_file(File), {ok, ExpectFake} = hocon:binary(FakeOverrideFile), lists:foreach( fun(Node0) -> - Node = atom_to_list(Node0), + NodeDataDir = erpc:call(Node0, emqx, data_dir, []), ?assertEqual( {ok, FakeCertFile}, - file:read_file(Node ++ "/certs/fake-cert"), - #{node => Node} + file:read_file(NodeDataDir ++ "/certs/fake-cert"), + #{node => Node0} ), ?assertEqual( {ok, ExpectFake}, - hocon:files([Node ++ File]), - #{node => Node} + hocon:files([File]), + #{node => Node0} ), ?assertEqual( {ok, FakeAuthzFile}, - file:read_file(Node ++ "/authz/fake-authz"), - #{node => Node} + file:read_file(NodeDataDir ++ "/authz/fake-authz"), + #{node => Node0} ) end, Rest @@ -168,7 +181,7 @@ assert_config_load_done(Nodes) -> ). stop_cluster(Nodes) -> - [emqx_common_test_helpers:stop_slave(Node) || Node <- Nodes]. + emqx_utils:pmap(fun emqx_common_test_helpers:stop_slave/1, Nodes). start_cluster(Specs) -> [emqx_common_test_helpers:start_slave(Name, Opts) || {Name, Opts} <- Specs]. @@ -183,7 +196,8 @@ start_cluster_async(Specs) -> || {Name, Opts} <- Specs ]. -cluster(Specs) -> +cluster(Specs, Config) -> + PrivDataDir = ?config(priv_dir, Config), Env = [ {emqx, init_config_load_done, false}, {emqx, boot_modules, []} @@ -193,6 +207,7 @@ cluster(Specs) -> {apps, [emqx_conf]}, {load_schema, false}, {join_to, true}, + {priv_data_dir, PrivDataDir}, {env_handler, fun (emqx) -> application:set_env(emqx, boot_modules, []),