From c2870b3322a2e98d0650527026e420eeb3e301d0 Mon Sep 17 00:00:00 2001 From: EMQ-YangM Date: Wed, 5 Jan 2022 01:57:18 -0800 Subject: [PATCH] test(rule_engint_metrics): add test for 'FOREACH' --- .../test/emqx_rule_engine_SUITE.erl | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl index 0637d06f9..34d19f083 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl @@ -127,7 +127,8 @@ groups() -> t_sqlparse_new_map ]}, {rule_metrics, [], - [t_metrics + [t_metrics, + t_metrics1 ]}, {events, [], [t_events @@ -1368,6 +1369,53 @@ t_metrics(_Config) -> emqtt:stop(Client), emqx_rule_registry:remove_rule(TopicRule). +message() -> + <<"{\"date\": \"2020-04-24\", + \"sensors\": [ + {\"name\": \"a\", \"idx \":0}, + {\"name\": \"b\", \"idx \":1}, + {\"name\": \"c\", \"idx \":2} + ]}">>. + +t_metrics1(_Config) -> + ok = emqx_rule_engine:load_providers(), + TopicRule = create_simple_repub_rule( + <<"t2">>, + "FOREACH payload.sensors " + "DO clientid,item.name as name, item.idx as idx " + "INCASE item.idx >= 1 " + "FROM \"t1\" "), + #rule{id = RuleId} = TopicRule, + ?assertEqual(0, emqx_rule_metrics:get_rules_matched(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_passed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_failed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), + + {ok, Client} = emqtt:start_link([{username, <<"emqx">>}]), + {ok, _} = emqtt:connect(Client), + ct:sleep(200), + + + emqtt:publish(Client, <<"t1">>, message(), 0), + ct:sleep(200), + ?assertEqual(1, emqx_rule_metrics:get_rules_matched(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_passed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_failed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)), + + emqtt:publish(Client, <<"t1">>, <<"{\"msg1\":\"hello\"}">>, 0), + ct:sleep(200), + ?assertEqual(2, emqx_rule_metrics:get_rules_matched(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_passed(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_failed(RuleId)), + ?assertEqual(0, emqx_rule_metrics:get_rules_exception(RuleId)), + ?assertEqual(1, emqx_rule_metrics:get_rules_no_result(RuleId)), + + emqtt:stop(Client), + emqx_rule_registry:remove_rule(TopicRule). + t_sqlselect_multi_actoins_1(Config) -> %% We create 2 actions in the same rule: %% The first will fail and we need to make sure the