Przeglądaj źródła

test(rule_engine_metrics): add more test

EMQ-YangM 4 lat temu
rodzic
commit
2074dd63f9
1 zmienionych plików z 57 dodań i 34 usunięć
  1. 57 34
      apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl

+ 57 - 34
apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl

@@ -1336,36 +1336,41 @@ t_metrics(_Config) ->
     ok = emqx_rule_engine:load_providers(),
     TopicRule = create_simple_repub_rule(
                     <<"t2">>,
-                    "SELECT payload.msg as msg "
+                    "SELECT payload.msg as msg, payload.idx as idx "
                     "FROM \"t1\" "
-                    "WHERE msg= 'hello' "),
+                    "WHERE msg = 'hello' and idx + 1 > 2 "),
     #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">>, <<"{\"msg\":\"hello\"}">>, 0),
-    ct:sleep(200),
-    ?assertEqual(1, emqx_rule_metrics:get_rules_matched(RuleId)),
-    ?assertEqual(1, emqx_rule_metrics:get_rules_passed(RuleId)),
+    PublishMoreTimes = fun(SomeMessage, Times) ->
+        [begin
+            emqtt:publish(Client, <<"t1">>, SomeMessage, 0),
+            ct:sleep(200)
+         end || _ <- lists:seq(1, Times)] end,
+    PublishMoreTimes(<<"{\"msg\":\"hello\", \"idx\":5}">>, 10),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_matched(RuleId)),
+    ?assertEqual(10, 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)),
+    PublishMoreTimes(<<"{\"msg\":\"hello\", \"idx\":0}">>, 10),
+    ?assertEqual(20, emqx_rule_metrics:get_rules_matched(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
+    ?assertEqual(10, 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)),
-
+    ?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
+    PublishMoreTimes(<<"{\"msg\":\"hello\", \"idx\":\"somevalue\"}">>, 10),
+    ?assertEqual(30, emqx_rule_metrics:get_rules_matched(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
+    ?assertEqual(20, emqx_rule_metrics:get_rules_failed(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_exception(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
     emqtt:stop(Client),
     emqx_rule_registry:remove_rule(TopicRule).
 
@@ -1374,7 +1379,7 @@ t_metrics1(_Config) ->
     TopicRule = create_simple_repub_rule(
                     <<"t2">>,
                 "FOREACH payload.sensors "
-                "DO clientid,item.name as name, item.idx as idx "
+                "DO clientid,item.name as name, item.idx + 1 as idx "
                 "INCASE item.idx >= 1 "
                 "FROM \"t1\" "),
     #rule{id = RuleId} = TopicRule,
@@ -1382,33 +1387,51 @@ t_metrics1(_Config) ->
     ?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)),
-    
+    ?assertEqual(0, emqx_rule_metrics:get_rules_no_result(RuleId)),   
     {ok, Client} = emqtt:start_link([{username, <<"emqx">>}]),
     {ok, _} = emqtt:connect(Client),
     ct:sleep(200),
-
+    PublishMoreTimes = fun(SomeMessage, Times) ->
+        [begin
+            emqtt:publish(Client, <<"t1">>, SomeMessage, 0),
+            ct:sleep(200)
+         end || _ <- lists:seq(1, Times)] end,
     Message =  <<"{\"date\": \"2020-04-24\",
                    \"sensors\": [
-                       {\"name\": \"a\", \"idx \":0},
-                       {\"name\": \"b\", \"idx \":1},
-                       {\"name\": \"c\", \"idx \":2}
+                       {\"name\": \"a\", \"idx\":0},
+                       {\"name\": \"b\", \"idx\":1},
+                       {\"name\": \"c\", \"idx\":2}
                    ]}">>,
-    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)),
+    PublishMoreTimes(Message, 10),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_matched(RuleId)),
+    ?assertEqual(10, 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)),
+    Message1 =  <<"{\"date\": \"2020-04-24\",
+                   \"sensors\": [
+                       {\"name\": \"a\", \"idx\":0},
+                       {\"name\": \"b\", \"idx\":0},
+                       {\"name\": \"c\", \"idx\":0}
+                   ]}">>,
+    PublishMoreTimes(Message1, 10),
+    ?assertEqual(20, emqx_rule_metrics:get_rules_matched(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
+    ?assertEqual(10, 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)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
+    Message2 =  <<"{\"date\": \"2020-04-24\",
+                   \"sensors\": [
+                       {\"name\": \"a\", \"idx\":0},
+                       {\"name\": \"b\", \"idx\":1},
+                       {\"name\": \"c\", \"idx\":\"some string\"}
+                   ]}">>,
+    PublishMoreTimes(Message2, 10),
+    ?assertEqual(30, emqx_rule_metrics:get_rules_matched(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_passed(RuleId)),
+    ?assertEqual(20, emqx_rule_metrics:get_rules_failed(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_exception(RuleId)),
+    ?assertEqual(10, emqx_rule_metrics:get_rules_no_result(RuleId)),
 
     emqtt:stop(Client),
     emqx_rule_registry:remove_rule(TopicRule).