test: move test case with rule_engine dep from emqx to emqx_rule_engine
This commit is contained in:
parent
3898950017
commit
7bcd553786
|
@ -46,8 +46,7 @@
|
||||||
{meck, "0.9.2"},
|
{meck, "0.9.2"},
|
||||||
{proper, "1.4.0"},
|
{proper, "1.4.0"},
|
||||||
{bbmustache, "1.10.0"},
|
{bbmustache, "1.10.0"},
|
||||||
{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.0"}}},
|
{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.10.0"}}}
|
||||||
{emqx_rule_engine, {path, "../emqx_rule_engine"}}
|
|
||||||
]},
|
]},
|
||||||
{extra_src_dirs, [
|
{extra_src_dirs, [
|
||||||
{"test", [recursive]},
|
{"test", [recursive]},
|
||||||
|
@ -59,8 +58,7 @@
|
||||||
{meck, "0.9.2"},
|
{meck, "0.9.2"},
|
||||||
{proper, "1.4.0"},
|
{proper, "1.4.0"},
|
||||||
{bbmustache, "1.10.0"},
|
{bbmustache, "1.10.0"},
|
||||||
{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.9.7"}}},
|
{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.9.7"}}}
|
||||||
{emqx_rule_engine, {path, "../emqx_rule_engine"}}
|
|
||||||
]},
|
]},
|
||||||
{extra_src_dirs, [{"test", [recursive]}]}
|
{extra_src_dirs, [{"test", [recursive]}]}
|
||||||
]}
|
]}
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
-compile(nowarn_export_all).
|
-compile(nowarn_export_all).
|
||||||
|
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
-include_lib("snabbkaffe/include/test_macros.hrl").
|
|
||||||
|
|
||||||
-include_lib("common_test/include/ct.hrl").
|
-include_lib("common_test/include/ct.hrl").
|
||||||
-define(CLIENT, [
|
-define(CLIENT, [
|
||||||
|
@ -30,12 +29,11 @@
|
||||||
{password, <<"pass">>}
|
{password, <<"pass">>}
|
||||||
]).
|
]).
|
||||||
|
|
||||||
all() ->
|
all() -> [t_trace_clientid, t_trace_topic, t_trace_ip_address, t_trace_clientid_utf8].
|
||||||
[t_trace_clientid, t_trace_topic, t_trace_ip_address, t_trace_clientid_utf8, t_trace_rule_id].
|
|
||||||
|
|
||||||
init_per_suite(Config) ->
|
init_per_suite(Config) ->
|
||||||
Apps = emqx_cth_suite:start(
|
Apps = emqx_cth_suite:start(
|
||||||
[emqx, emqx_rule_engine],
|
[emqx],
|
||||||
#{work_dir => emqx_cth_suite:work_dir(Config)}
|
#{work_dir => emqx_cth_suite:work_dir(Config)}
|
||||||
),
|
),
|
||||||
[{apps, Apps} | Config].
|
[{apps, Apps} | Config].
|
||||||
|
@ -207,79 +205,6 @@ t_trace_topic(_Config) ->
|
||||||
?assertEqual([], emqx_trace_handler:running()),
|
?assertEqual([], emqx_trace_handler:running()),
|
||||||
emqtt:disconnect(T).
|
emqtt:disconnect(T).
|
||||||
|
|
||||||
create_rule(Name, SQL) ->
|
|
||||||
Rule = emqx_rule_engine_SUITE:make_simple_rule(Name, SQL),
|
|
||||||
{ok, _} = emqx_rule_engine:create_rule(Rule).
|
|
||||||
|
|
||||||
t_trace_rule_id(_Config) ->
|
|
||||||
%% Start MQTT Client
|
|
||||||
{ok, T} = emqtt:start_link(?CLIENT),
|
|
||||||
emqtt:connect(T),
|
|
||||||
%% Create rules
|
|
||||||
create_rule(
|
|
||||||
<<"test_rule_id_1">>,
|
|
||||||
<<"select 1 as rule_number from \"rule_1_topic\"">>
|
|
||||||
),
|
|
||||||
create_rule(
|
|
||||||
<<"test_rule_id_2">>,
|
|
||||||
<<"select 2 as rule_number from \"rule_2_topic\"">>
|
|
||||||
),
|
|
||||||
%% Start tracing
|
|
||||||
ok = emqx_trace_handler:install(
|
|
||||||
"CLI-RULE-1", ruleid, <<"test_rule_id_1">>, all, "tmp/rule_trace_1.log"
|
|
||||||
),
|
|
||||||
ok = emqx_trace_handler:install(
|
|
||||||
"CLI-RULE-2", ruleid, <<"test_rule_id_2">>, all, "tmp/rule_trace_2.log"
|
|
||||||
),
|
|
||||||
emqx_trace:check(),
|
|
||||||
ok = filesync("CLI-RULE-1", ruleid),
|
|
||||||
ok = filesync("CLI-RULE-2", ruleid),
|
|
||||||
|
|
||||||
%% Verify the tracing file exits
|
|
||||||
?assert(filelib:is_regular("tmp/rule_trace_1.log")),
|
|
||||||
?assert(filelib:is_regular("tmp/rule_trace_2.log")),
|
|
||||||
|
|
||||||
%% Get current traces
|
|
||||||
?assertMatch(
|
|
||||||
[
|
|
||||||
#{
|
|
||||||
type := ruleid,
|
|
||||||
filter := <<"test_rule_id_1">>,
|
|
||||||
level := debug,
|
|
||||||
dst := "tmp/rule_trace_1.log",
|
|
||||||
name := <<"CLI-RULE-1">>
|
|
||||||
},
|
|
||||||
#{
|
|
||||||
type := ruleid,
|
|
||||||
filter := <<"test_rule_id_2">>,
|
|
||||||
name := <<"CLI-RULE-2">>,
|
|
||||||
level := debug,
|
|
||||||
dst := "tmp/rule_trace_2.log"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
emqx_trace_handler:running()
|
|
||||||
),
|
|
||||||
|
|
||||||
%% Trigger rule
|
|
||||||
emqtt:publish(T, <<"rule_1_topic">>, <<"my_traced_message">>),
|
|
||||||
?retry(
|
|
||||||
100,
|
|
||||||
5,
|
|
||||||
begin
|
|
||||||
ok = filesync("CLI-RULE-1", ruleid),
|
|
||||||
{ok, Bin} = file:read_file("tmp/rule_trace_1.log"),
|
|
||||||
?assertNotEqual(nomatch, binary:match(Bin, [<<"my_traced_message">>]))
|
|
||||||
end
|
|
||||||
),
|
|
||||||
ok = filesync("CLI-RULE-2", ruleid),
|
|
||||||
?assert(filelib:file_size("tmp/rule_trace_2.log") =:= 0),
|
|
||||||
|
|
||||||
%% Stop tracing
|
|
||||||
ok = emqx_trace_handler:uninstall(ruleid, <<"CLI-RULE-1">>),
|
|
||||||
ok = emqx_trace_handler:uninstall(ruleid, <<"CLI-RULE-2">>),
|
|
||||||
?assertEqual([], emqx_trace_handler:running()),
|
|
||||||
emqtt:disconnect(T).
|
|
||||||
|
|
||||||
t_trace_ip_address(_Config) ->
|
t_trace_ip_address(_Config) ->
|
||||||
{ok, T} = emqtt:start_link(?CLIENT),
|
{ok, T} = emqtt:start_link(?CLIENT),
|
||||||
emqtt:connect(T),
|
emqtt:connect(T),
|
||||||
|
@ -347,11 +272,11 @@ t_trace_ip_address(_Config) ->
|
||||||
|
|
||||||
filesync(Name, Type) ->
|
filesync(Name, Type) ->
|
||||||
ct:sleep(50),
|
ct:sleep(50),
|
||||||
filesync(Name, Type, 5).
|
filesync(Name, Type, 3).
|
||||||
|
|
||||||
%% sometime the handler process is not started yet.
|
%% sometime the handler process is not started yet.
|
||||||
filesync(Name, Type, 0) ->
|
filesync(_Name, _Type, 0) ->
|
||||||
ct:fail("Handler process not started ~p ~p", [Name, Type]);
|
ok;
|
||||||
filesync(Name0, Type, Retry) ->
|
filesync(Name0, Type, Retry) ->
|
||||||
Name =
|
Name =
|
||||||
case is_binary(Name0) of
|
case is_binary(Name0) of
|
||||||
|
|
|
@ -43,7 +43,8 @@ all() ->
|
||||||
{group, metrics},
|
{group, metrics},
|
||||||
{group, metrics_simple},
|
{group, metrics_simple},
|
||||||
{group, metrics_fail},
|
{group, metrics_fail},
|
||||||
{group, metrics_fail_simple}
|
{group, metrics_fail_simple},
|
||||||
|
{group, tracing}
|
||||||
].
|
].
|
||||||
|
|
||||||
suite() ->
|
suite() ->
|
||||||
|
@ -142,6 +143,9 @@ groups() ->
|
||||||
{metrics_fail_simple, [], [
|
{metrics_fail_simple, [], [
|
||||||
t_rule_metrics_sync_fail,
|
t_rule_metrics_sync_fail,
|
||||||
t_rule_metrics_async_fail
|
t_rule_metrics_async_fail
|
||||||
|
]},
|
||||||
|
{tracing, [], [
|
||||||
|
t_trace_rule_id
|
||||||
]}
|
]}
|
||||||
].
|
].
|
||||||
|
|
||||||
|
@ -154,13 +158,13 @@ init_per_suite(Config) ->
|
||||||
emqx_rule_funcs_demo:module_info(),
|
emqx_rule_funcs_demo:module_info(),
|
||||||
application:load(emqx_conf),
|
application:load(emqx_conf),
|
||||||
ok = emqx_common_test_helpers:start_apps(
|
ok = emqx_common_test_helpers:start_apps(
|
||||||
[emqx_conf, emqx_rule_engine, emqx_auth, emqx_bridge],
|
[emqx, emqx_conf, emqx_rule_engine, emqx_auth, emqx_bridge],
|
||||||
fun set_special_configs/1
|
fun set_special_configs/1
|
||||||
),
|
),
|
||||||
Config.
|
Config.
|
||||||
|
|
||||||
end_per_suite(_Config) ->
|
end_per_suite(_Config) ->
|
||||||
emqx_common_test_helpers:stop_apps([emqx_conf, emqx_rule_engine]),
|
emqx_common_test_helpers:stop_apps([emqx, emqx_conf, emqx_rule_engine, emqx_auth, emqx_bridge]),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
set_special_configs(emqx_auth) ->
|
set_special_configs(emqx_auth) ->
|
||||||
|
@ -3632,6 +3636,111 @@ create_bridge(Type, Name, Config) ->
|
||||||
{ok, _Bridge} = emqx_bridge:create(Type, Name, Config),
|
{ok, _Bridge} = emqx_bridge:create(Type, Name, Config),
|
||||||
emqx_bridge_resource:bridge_id(Type, Name).
|
emqx_bridge_resource:bridge_id(Type, Name).
|
||||||
|
|
||||||
|
create_rule(Name, SQL) ->
|
||||||
|
Rule = emqx_rule_engine_SUITE:make_simple_rule(Name, SQL),
|
||||||
|
{ok, _} = emqx_rule_engine:create_rule(Rule).
|
||||||
|
|
||||||
|
emqtt_client_config() ->
|
||||||
|
[
|
||||||
|
{host, "localhost"},
|
||||||
|
{clientid, <<"client">>},
|
||||||
|
{username, <<"testuser">>},
|
||||||
|
{password, <<"pass">>}
|
||||||
|
].
|
||||||
|
|
||||||
|
filesync(Name, Type) ->
|
||||||
|
ct:sleep(50),
|
||||||
|
filesync(Name, Type, 5).
|
||||||
|
|
||||||
|
%% sometime the handler process is not started yet.
|
||||||
|
filesync(Name, Type, 0) ->
|
||||||
|
ct:fail("Handler process not started ~p ~p", [Name, Type]);
|
||||||
|
filesync(Name0, Type, Retry) ->
|
||||||
|
Name =
|
||||||
|
case is_binary(Name0) of
|
||||||
|
true -> Name0;
|
||||||
|
false -> list_to_binary(Name0)
|
||||||
|
end,
|
||||||
|
try
|
||||||
|
Handler = binary_to_atom(<<"trace_", (atom_to_binary(Type))/binary, "_", Name/binary>>),
|
||||||
|
ok = logger_disk_log_h:filesync(Handler)
|
||||||
|
catch
|
||||||
|
E:R ->
|
||||||
|
ct:pal("Filesync error:~p ~p~n", [{Name, Type, Retry}, {E, R}]),
|
||||||
|
ct:sleep(100),
|
||||||
|
filesync(Name, Type, Retry - 1)
|
||||||
|
end.
|
||||||
|
|
||||||
|
t_trace_rule_id(_Config) ->
|
||||||
|
%% Start MQTT Client
|
||||||
|
emqx_trace_SUITE:reload(),
|
||||||
|
{ok, T} = emqtt:start_link(emqtt_client_config()),
|
||||||
|
emqtt:connect(T),
|
||||||
|
%% Create rules
|
||||||
|
create_rule(
|
||||||
|
<<"test_rule_id_1">>,
|
||||||
|
<<"select 1 as rule_number from \"rule_1_topic\"">>
|
||||||
|
),
|
||||||
|
create_rule(
|
||||||
|
<<"test_rule_id_2">>,
|
||||||
|
<<"select 2 as rule_number from \"rule_2_topic\"">>
|
||||||
|
),
|
||||||
|
%% Start tracing
|
||||||
|
ok = emqx_trace_handler:install(
|
||||||
|
"CLI-RULE-1", ruleid, <<"test_rule_id_1">>, all, "tmp/rule_trace_1.log"
|
||||||
|
),
|
||||||
|
ok = emqx_trace_handler:install(
|
||||||
|
"CLI-RULE-2", ruleid, <<"test_rule_id_2">>, all, "tmp/rule_trace_2.log"
|
||||||
|
),
|
||||||
|
emqx_trace:check(),
|
||||||
|
ok = filesync("CLI-RULE-1", ruleid),
|
||||||
|
ok = filesync("CLI-RULE-2", ruleid),
|
||||||
|
|
||||||
|
%% Verify the tracing file exits
|
||||||
|
?assert(filelib:is_regular("tmp/rule_trace_1.log")),
|
||||||
|
?assert(filelib:is_regular("tmp/rule_trace_2.log")),
|
||||||
|
|
||||||
|
%% Get current traces
|
||||||
|
?assertMatch(
|
||||||
|
[
|
||||||
|
#{
|
||||||
|
type := ruleid,
|
||||||
|
filter := <<"test_rule_id_1">>,
|
||||||
|
level := debug,
|
||||||
|
dst := "tmp/rule_trace_1.log",
|
||||||
|
name := <<"CLI-RULE-1">>
|
||||||
|
},
|
||||||
|
#{
|
||||||
|
type := ruleid,
|
||||||
|
filter := <<"test_rule_id_2">>,
|
||||||
|
name := <<"CLI-RULE-2">>,
|
||||||
|
level := debug,
|
||||||
|
dst := "tmp/rule_trace_2.log"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
emqx_trace_handler:running()
|
||||||
|
),
|
||||||
|
|
||||||
|
%% Trigger rule
|
||||||
|
emqtt:publish(T, <<"rule_1_topic">>, <<"my_traced_message">>),
|
||||||
|
?retry(
|
||||||
|
100,
|
||||||
|
5,
|
||||||
|
begin
|
||||||
|
ok = filesync("CLI-RULE-1", ruleid),
|
||||||
|
{ok, Bin} = file:read_file("tmp/rule_trace_1.log"),
|
||||||
|
?assertNotEqual(nomatch, binary:match(Bin, [<<"my_traced_message">>]))
|
||||||
|
end
|
||||||
|
),
|
||||||
|
ok = filesync("CLI-RULE-2", ruleid),
|
||||||
|
?assert(filelib:file_size("tmp/rule_trace_2.log") =:= 0),
|
||||||
|
|
||||||
|
%% Stop tracing
|
||||||
|
ok = emqx_trace_handler:uninstall(ruleid, <<"CLI-RULE-1">>),
|
||||||
|
ok = emqx_trace_handler:uninstall(ruleid, <<"CLI-RULE-2">>),
|
||||||
|
?assertEqual([], emqx_trace_handler:running()),
|
||||||
|
emqtt:disconnect(T).
|
||||||
|
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
%% Internal helpers
|
%% Internal helpers
|
||||||
%%------------------------------------------------------------------------------
|
%%------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue