| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- -module(emqx_rule_engine_api_SUITE).
- -compile(nowarn_export_all).
- -compile(export_all).
- -include_lib("eunit/include/eunit.hrl").
- -include_lib("common_test/include/ct.hrl").
- -define(CONF_DEFAULT, <<"rule_engine {rules {}}">>).
- all() ->
- emqx_common_test_helpers:all(?MODULE).
- init_per_suite(Config) ->
- application:load(emqx_conf),
- ok = emqx_common_test_helpers:load_config(emqx_rule_engine_schema, ?CONF_DEFAULT),
- ok = emqx_common_test_helpers:start_apps([emqx_conf, emqx_rule_engine]),
- Config.
- end_per_suite(_Config) ->
- emqx_common_test_helpers:stop_apps([emqx_conf, emqx_rule_engine]),
- ok.
- init_per_testcase(_, Config) ->
- Config.
- end_per_testcase(_, _Config) ->
- ok.
- t_crud_rule_api(_Config) ->
- RuleID = <<"my_rule">>,
- Params0 = #{
- <<"description">> => <<"A simple rule">>,
- <<"enable">> => true,
- <<"id">> => RuleID,
- <<"actions">> => [#{<<"function">> => <<"console">>}],
- <<"sql">> => <<"SELECT * from \"t/1\"">>,
- <<"name">> => <<"test_rule">>
- },
- {201, Rule} = emqx_rule_engine_api:'/rules'(post, #{body => Params0}),
- %% if we post again with the same params, it return with 400 "rule id already exists"
- ?assertMatch(
- {400, #{code := _, message := _Message}},
- emqx_rule_engine_api:'/rules'(post, #{body => Params0})
- ),
- ?assertEqual(RuleID, maps:get(id, Rule)),
- {200, #{data := Rules}} = emqx_rule_engine_api:'/rules'(get, #{query_string => #{}}),
- ct:pal("RList : ~p", [Rules]),
- ?assert(length(Rules) > 0),
- {200, Rule0} = emqx_rule_engine_api:'/rules/:id/reset_metrics'(put, #{
- bindings => #{id => RuleID}
- }),
- ?assertEqual(<<"Reset Success">>, Rule0),
- {200, Rule1} = emqx_rule_engine_api:'/rules/:id'(get, #{bindings => #{id => RuleID}}),
- ct:pal("RShow : ~p", [Rule1]),
- ?assertEqual(Rule, Rule1),
- {200, Rule2} = emqx_rule_engine_api:'/rules/:id'(put, #{
- bindings => #{id => RuleID},
- body => Params0#{<<"sql">> => <<"select * from \"t/b\"">>}
- }),
- {200, Rule3} = emqx_rule_engine_api:'/rules/:id'(get, #{bindings => #{id => RuleID}}),
- %ct:pal("RShow : ~p", [Rule3]),
- ?assertEqual(Rule3, Rule2),
- ?assertEqual(<<"select * from \"t/b\"">>, maps:get(sql, Rule3)),
- ?assertMatch(
- {204},
- emqx_rule_engine_api:'/rules/:id'(
- delete,
- #{bindings => #{id => RuleID}}
- )
- ),
- %ct:pal("Show After Deleted: ~p", [NotFound]),
- ?assertMatch(
- {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.
- t_list_rule_api(_Config) ->
- AddIds =
- lists:map(
- fun(Seq0) ->
- Seq = integer_to_binary(Seq0),
- Params = #{
- <<"description">> => <<"A simple rule">>,
- <<"enable">> => true,
- <<"actions">> => [#{<<"function">> => <<"console">>}],
- <<"sql">> => <<"SELECT * from \"t/1\"">>,
- <<"name">> => <<"test_rule", Seq/binary>>
- },
- {201, #{id := Id}} = emqx_rule_engine_api:'/rules'(post, #{body => Params}),
- Id
- end,
- lists:seq(1, 20)
- ),
- {200, #{data := Rules, meta := #{count := Count}}} =
- emqx_rule_engine_api:'/rules'(get, #{query_string => #{}}),
- ?assertEqual(20, length(AddIds)),
- ?assertEqual(20, length(Rules)),
- ?assertEqual(20, Count),
- [RuleID | _] = AddIds,
- UpdateParams = #{
- <<"description">> => <<"中文的描述也能搜索"/utf8>>,
- <<"enable">> => false,
- <<"actions">> => [#{<<"function">> => <<"console">>}],
- <<"sql">> => <<"SELECT * from \"t/1/+\"">>,
- <<"name">> => <<"test_rule_update1">>
- },
- {200, _Rule2} = emqx_rule_engine_api:'/rules/:id'(put, #{
- bindings => #{id => RuleID},
- body => UpdateParams
- }),
- QueryStr1 = #{query_string => #{<<"enable">> => false}},
- {200, Result1 = #{meta := #{count := Count1}}} = emqx_rule_engine_api:'/rules'(get, QueryStr1),
- ?assertEqual(1, Count1),
- QueryStr2 = #{query_string => #{<<"like_description">> => <<"也能"/utf8>>}},
- {200, Result2} = emqx_rule_engine_api:'/rules'(get, QueryStr2),
- ?assertEqual(Result1, Result2),
- QueryStr3 = #{query_string => #{<<"from">> => <<"t/1">>}},
- {200, #{meta := #{count := Count3}}} = emqx_rule_engine_api:'/rules'(get, QueryStr3),
- ?assertEqual(19, Count3),
- QueryStr4 = #{query_string => #{<<"like_from">> => <<"t/1/+">>}},
- {200, Result4} = emqx_rule_engine_api:'/rules'(get, QueryStr4),
- ?assertEqual(Result1, Result4),
- QueryStr5 = #{query_string => #{<<"match_from">> => <<"t/+/+">>}},
- {200, Result5} = emqx_rule_engine_api:'/rules'(get, QueryStr5),
- ?assertEqual(Result1, Result5),
- QueryStr6 = #{query_string => #{<<"like_id">> => RuleID}},
- {200, Result6} = emqx_rule_engine_api:'/rules'(get, QueryStr6),
- ?assertEqual(Result1, Result6),
- %% clean up
- lists:foreach(
- fun(Id) ->
- ?assertMatch(
- {204},
- emqx_rule_engine_api:'/rules/:id'(
- delete,
- #{bindings => #{id => Id}}
- )
- )
- end,
- AddIds
- ),
- 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/#\"">>
- }
- }.
|