|
|
@@ -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 => #{}}),
|
|
|
@@ -119,12 +122,54 @@ t_crud_rule_api(_Config) ->
|
|
|
emqx_rule_engine_api:'/rules/:id'(get, #{bindings => #{id => RuleID}})
|
|
|
),
|
|
|
|
|
|
+ {400, #{
|
|
|
+ code := 'BAD_REQUEST',
|
|
|
+ message := SelectAndTransformJsonError
|
|
|
+ }} =
|
|
|
+ emqx_rule_engine_api:'/rule_test'(
|
|
|
+ post,
|
|
|
+ test_rule_params(<<"SELECT\n payload.msg\nFROM\n \"t/#\"">>, <<"{\"msg\": \"hel">>)
|
|
|
+ ),
|
|
|
+ ?assertMatch(
|
|
|
+ #{<<"select_and_transform_error">> := <<"decode_json_failed">>},
|
|
|
+ emqx_json:decode(SelectAndTransformJsonError, [return_maps])
|
|
|
+ ),
|
|
|
+ {400, #{
|
|
|
+ code := 'BAD_REQUEST',
|
|
|
+ message := SelectAndTransformBadArgError
|
|
|
+ }} =
|
|
|
+ emqx_rule_engine_api:'/rule_test'(
|
|
|
+ post,
|
|
|
+ test_rule_params(
|
|
|
+ <<"SELECT\n payload.msg > 1\nFROM\n \"t/#\"">>, <<"{\"msg\": \"hello\"}">>
|
|
|
+ )
|
|
|
+ ),
|
|
|
+ ?assertMatch(
|
|
|
+ #{<<"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,{error,{decode_json_failed,", _/binary>>
|
|
|
+ message := <<"{select_and_transform_error,badarg}">>
|
|
|
}},
|
|
|
- emqx_rule_engine_api:'/rule_test'(post, test_rule_params())
|
|
|
+ emqx_rule_engine_api:'/rule_test'(
|
|
|
+ post,
|
|
|
+ test_rule_params(
|
|
|
+ <<"SELECT\n payload.msg > 1\nFROM\n \"t/#\"">>, <<"{\"msg\": \"hello\"}">>
|
|
|
+ )
|
|
|
+ )
|
|
|
),
|
|
|
ok.
|
|
|
|
|
|
@@ -221,19 +266,18 @@ t_reset_metrics_on_disable(_Config) ->
|
|
|
?assertMatch(#{passed := 0, matched := 0}, Metrics1),
|
|
|
ok.
|
|
|
|
|
|
-test_rule_params() ->
|
|
|
+test_rule_params(Sql, Payload) ->
|
|
|
#{
|
|
|
body => #{
|
|
|
<<"context">> =>
|
|
|
#{
|
|
|
<<"clientid">> => <<"c_emqx">>,
|
|
|
<<"event_type">> => <<"message_publish">>,
|
|
|
- <<"payload">> => <<"{\"msg\": \"hel">>,
|
|
|
+ <<"payload">> => Payload,
|
|
|
<<"qos">> => 1,
|
|
|
<<"topic">> => <<"t/a">>,
|
|
|
<<"username">> => <<"u_emqx">>
|
|
|
},
|
|
|
- <<"sql">> =>
|
|
|
- <<"SELECT\n payload.msg\nFROM\n \"t/#\"">>
|
|
|
+ <<"sql">> => Sql
|
|
|
}
|
|
|
}.
|