Просмотр исходного кода

feat(emqx_rule_engine): decompose error tuples

sqltester for instance returns sth like {"...sytnax error...", OrigSql}
Stefan Strigler 3 лет назад
Родитель
Сommit
6ebd3dc747

+ 2 - 0
apps/emqx_rule_engine/src/emqx_rule_engine_api.erl

@@ -425,6 +425,8 @@ param_path_id() ->
 
 err_msg({RuleError, {_E, Reason, _S}}) ->
     emqx_misc:readable_error_msg(encode_nested_error(RuleError, Reason));
+err_msg({Reason, _Details}) ->
+    emqx_misc:readable_error_msg(Reason);
 err_msg(Msg) ->
     emqx_misc:readable_error_msg(Msg).
 

+ 26 - 0
apps/emqx_rule_engine/test/emqx_rule_engine_api_SUITE.erl

@@ -40,6 +40,9 @@ end_per_suite(_Config) ->
 init_per_testcase(_, Config) ->
     Config.
 
+end_per_testcase(t_crud_rule_api, Config) ->
+    meck:unload(emqx_json),
+    end_per_testcase(common, Config);
 end_per_testcase(_, _Config) ->
     {200, #{data := Rules}} =
         emqx_rule_engine_api:'/rules'(get, #{query_string => #{}}),
@@ -145,6 +148,29 @@ t_crud_rule_api(_Config) ->
         #{<<"select_and_transform_error">> := <<"badarg">>},
         emqx_json:decode(SelectAndTransformBadArgError, [return_maps])
     ),
+    {400, #{
+        code := 'BAD_REQUEST',
+        message := BadSqlMessage
+    }} = emqx_rule_engine_api:'/rule_test'(
+        post,
+        test_rule_params(
+            <<"BAD_SQL">>, <<"{\"msg\": \"hello\"}">>
+        )
+    ),
+    ?assertMatch({match, _}, re:run(BadSqlMessage, "syntax error")),
+    meck:expect(emqx_json, safe_encode, 1, {error, foo}),
+    ?assertMatch(
+        {400, #{
+            code := 'BAD_REQUEST',
+            message := <<"{select_and_transform_error,badarg}">>
+        }},
+        emqx_rule_engine_api:'/rule_test'(
+            post,
+            test_rule_params(
+                <<"SELECT\n  payload.msg > 1\nFROM\n  \"t/#\"">>, <<"{\"msg\": \"hello\"}">>
+            )
+        )
+    ),
     ok.
 
 t_list_rule_api(_Config) ->