From 1393ab677d875eaed94cfa343b67e74ab2b3ef72 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Fri, 29 Apr 2022 14:40:20 +0800 Subject: [PATCH 1/3] fix(test): race condition in emqx_telemetry_SUITE --- .../test/emqx_telemetry_SUITE.erl | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl index 75ced7cfd..2b1fdf7cd 100644 --- a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl +++ b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl @@ -140,9 +140,16 @@ init_per_testcase(t_exhook_info, Config) -> } }, {ok, _} = emqx_exhook_demo_svr:start(), + timer:sleep(2000), + {ok, Sock} = gen_tcp:connect("localhost", 9000, [], 3000), + _ = gen_tcp:close(Sock), ok = emqx_common_test_helpers:load_config(emqx_exhook_schema, ExhookConf), {ok, _} = application:ensure_all_started(emqx_exhook), Config; +init_per_testcase(t_cluster_uuid, Config) -> + Node = start_slave(n1), + ok = setup_slave(Node), + [{n1, Node} | Config]; init_per_testcase(_Testcase, Config) -> mock_httpc(), Config. @@ -188,6 +195,9 @@ end_per_testcase(t_exhook_info, _Config) -> emqx_exhook_demo_svr:stop(), application:stop(emqx_exhook), ok; +end_per_testcase(t_cluster_uuid, Config) -> + Node = proplists:get_value(n1, Config), + ok = stop_slave(Node); end_per_testcase(_Testcase, _Config) -> meck:unload([httpc]), ok. @@ -211,23 +221,16 @@ t_node_uuid(_) -> ?assertEqual(NodeUUID3, NodeUUID4), ?assertMatch({badrpc, nodedown}, emqx_telemetry_proto_v1:get_node_uuid('fake@node')). -t_cluster_uuid(_Config) -> +t_cluster_uuid(Config) -> + Node = proplists:get_value(n1, Config), {ok, ClusterUUID0} = emqx_telemetry:get_cluster_uuid(), {ok, ClusterUUID1} = emqx_telemetry_proto_v1:get_cluster_uuid(node()), ?assertEqual(ClusterUUID0, ClusterUUID1), {ok, NodeUUID0} = emqx_telemetry:get_node_uuid(), - - Node = start_slave(n1), - try - ok = setup_slave(Node), - {ok, ClusterUUID2} = emqx_telemetry_proto_v1:get_cluster_uuid(Node), - ?assertEqual(ClusterUUID0, ClusterUUID2), - {ok, NodeUUID1} = emqx_telemetry_proto_v1:get_node_uuid(Node), - ?assertNotEqual(NodeUUID0, NodeUUID1), - ok - after - ok = stop_slave(Node) - end, + {ok, ClusterUUID2} = emqx_telemetry_proto_v1:get_cluster_uuid(Node), + ?assertEqual(ClusterUUID0, ClusterUUID2), + {ok, NodeUUID1} = emqx_telemetry_proto_v1:get_node_uuid(Node), + ?assertNotEqual(NodeUUID0, NodeUUID1), ok. t_official_version(_) -> From bef00b461ef658dfbd36e64b8bbffd3d7c108a12 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Fri, 29 Apr 2022 15:18:53 +0800 Subject: [PATCH 2/3] chore: update .gitignore emqx_conf generated files --- apps/emqx_conf/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 apps/emqx_conf/.gitignore diff --git a/apps/emqx_conf/.gitignore b/apps/emqx_conf/.gitignore new file mode 100644 index 000000000..e16e11bbf --- /dev/null +++ b/apps/emqx_conf/.gitignore @@ -0,0 +1,3 @@ +data/ +etc/certs/ +etc/emqx.conf.all.rendered From ef0e6d7fd8f4df491f9f59c768e544e2a1606423 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Fri, 29 Apr 2022 15:12:01 +0800 Subject: [PATCH 3/3] fix(test): ensure the test node removed from the ekka cluster --- apps/emqx_exhook/test/emqx_exhook_demo_svr.erl | 12 +++++++++--- apps/emqx_modules/test/emqx_telemetry_SUITE.erl | 6 ++++-- .../test/emqx_topic_metrics_api_SUITE.erl | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/emqx_exhook/test/emqx_exhook_demo_svr.erl b/apps/emqx_exhook/test/emqx_exhook_demo_svr.erl index 9adf0384e..ea8398eeb 100644 --- a/apps/emqx_exhook/test/emqx_exhook_demo_svr.erl +++ b/apps/emqx_exhook/test/emqx_exhook_demo_svr.erl @@ -66,9 +66,14 @@ start() -> start(?NAME, ?PORT). start(Name, Port) -> - Pid = spawn(fun() -> mgr_main(Name, Port) end), + Parent = self(), + Pid = spawn(fun() -> mgr_main(Parent, Name, Port) end), register(to_atom_name(Name), Pid), - {ok, Pid}. + receive + grpc_server_started -> {ok, Pid} + after 2000 -> + error({failed_to_start_grpc_server, Port}) + end. stop() -> stop(?NAME). @@ -87,7 +92,7 @@ take() -> in({FunName, Req}) -> to_atom_name(?NAME) ! {in, FunName, Req}. -mgr_main(Name, Port) -> +mgr_main(Parent, Name, Port) -> application:ensure_all_started(grpc), Services = #{ protos => [emqx_exhook_pb], @@ -95,6 +100,7 @@ mgr_main(Name, Port) -> }, Options = [], Svr = grpc:start_server(Name, Port, Services, Options), + Parent ! grpc_server_started, mgr_loop([Svr, queue:new(), queue:new()]). mgr_loop([Svr, Q, Takes]) -> diff --git a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl index 2b1fdf7cd..233da3539 100644 --- a/apps/emqx_modules/test/emqx_telemetry_SUITE.erl +++ b/apps/emqx_modules/test/emqx_telemetry_SUITE.erl @@ -140,7 +140,6 @@ init_per_testcase(t_exhook_info, Config) -> } }, {ok, _} = emqx_exhook_demo_svr:start(), - timer:sleep(2000), {ok, Sock} = gen_tcp:connect("localhost", 9000, [], 3000), _ = gen_tcp:close(Sock), ok = emqx_common_test_helpers:load_config(emqx_exhook_schema, ExhookConf), @@ -677,7 +676,10 @@ setup_slave(Node) -> ok. stop_slave(Node) -> - slave:stop(Node). + ok = ekka:force_leave(Node), + emqx_cluster_rpc:skip_failed_commit(Node), + ok = slave:stop(Node), + ?assertEqual([node()], mria_mnesia:running_nodes()). host() -> [_, Host] = string:tokens(atom_to_list(node()), "@"), diff --git a/apps/emqx_modules/test/emqx_topic_metrics_api_SUITE.erl b/apps/emqx_modules/test/emqx_topic_metrics_api_SUITE.erl index 407a832c5..6bb6cac14 100644 --- a/apps/emqx_modules/test/emqx_topic_metrics_api_SUITE.erl +++ b/apps/emqx_modules/test/emqx_topic_metrics_api_SUITE.erl @@ -27,6 +27,8 @@ <<"topic_metrics">> => [] }). +suite() -> [{timetrap, {seconds, 30}}]. + all() -> emqx_common_test_helpers:all(?MODULE).