From 685b06eeed08eacb60f9921874d2f82a361de267 Mon Sep 17 00:00:00 2001 From: EMQ-YangM Date: Thu, 5 May 2022 17:27:23 +0800 Subject: [PATCH] fix: avoid 'rule_test' api crash --- .../src/emqx_rule_engine_api.erl | 4 ++- .../test/emqx_rule_engine_api_SUITE.erl | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl index 32b098311..7b843eb52 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine_api.erl @@ -278,7 +278,9 @@ replace_sql_clrf(#{<<"sql">> := SQL} = Params) -> {error, {parse_error, Reason}} -> {400, #{code => 'BAD_REQUEST', message => err_msg(Reason)}}; {error, nomatch} -> - {412, #{code => 'NOT_MATCH', message => <<"SQL Not Match">>}} + {412, #{code => 'NOT_MATCH', message => <<"SQL Not Match">>}}; + {error, Reason} -> + {400, #{code => 'BAD_REQUEST', message => err_msg(Reason)}} end ). diff --git a/apps/emqx_rule_engine/test/emqx_rule_engine_api_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_engine_api_SUITE.erl index 79a83ebaa..d562b0188 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_engine_api_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_engine_api_SUITE.erl @@ -80,4 +80,29 @@ t_crud_rule_api(_Config) -> {404, #{code := _, message := _Message}}, emqx_rule_engine_api:'/rules/:id'(get, #{bindings => #{id => RuleID}}) ), + + ?assertMatch( + {400, #{ + code := 'BAD_REQUEST', + message := <<"{select_and_transform_error,{error,{decode_json_failed,", _/binary>> + }}, + emqx_rule_engine_api:'/rule_test'(post, test_rule_params()) + ), ok. + +test_rule_params() -> + #{ + body => #{ + <<"context">> => + #{ + <<"clientid">> => <<"c_emqx">>, + <<"event_type">> => <<"message_publish">>, + <<"payload">> => <<"{\"msg\": \"hel">>, + <<"qos">> => 1, + <<"topic">> => <<"t/a">>, + <<"username">> => <<"u_emqx">> + }, + <<"sql">> => + <<"SELECT\n payload.msg\nFROM\n \"t/#\"">> + } + }.