emqx_rule_engine_api_SUITE.erl 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. -module(emqx_rule_engine_api_SUITE).
  2. -compile(nowarn_export_all).
  3. -compile(export_all).
  4. -include_lib("eunit/include/eunit.hrl").
  5. -include_lib("common_test/include/ct.hrl").
  6. -define(CONF_DEFAULT, <<"rule_engine {rules {}}">>).
  7. all() ->
  8. emqx_common_test_helpers:all(?MODULE).
  9. init_per_suite(Config) ->
  10. application:load(emqx_conf),
  11. ok = emqx_common_test_helpers:load_config(emqx_rule_engine_schema, ?CONF_DEFAULT),
  12. ok = emqx_common_test_helpers:start_apps([emqx_conf, emqx_rule_engine]),
  13. Config.
  14. end_per_suite(_Config) ->
  15. emqx_common_test_helpers:stop_apps([emqx_conf, emqx_rule_engine]),
  16. ok.
  17. init_per_testcase(_, Config) ->
  18. Config.
  19. end_per_testcase(_, _Config) ->
  20. ok.
  21. t_crud_rule_api(_Config) ->
  22. RuleID = <<"my_rule">>,
  23. Params0 = #{
  24. <<"description">> => <<"A simple rule">>,
  25. <<"enable">> => true,
  26. <<"id">> => RuleID,
  27. <<"actions">> => [#{<<"function">> => <<"console">>}],
  28. <<"sql">> => <<"SELECT * from \"t/1\"">>,
  29. <<"name">> => <<"test_rule">>
  30. },
  31. {201, Rule} = emqx_rule_engine_api:'/rules'(post, #{body => Params0}),
  32. %% if we post again with the same params, it return with 400 "rule id already exists"
  33. ?assertMatch(
  34. {400, #{code := _, message := _Message}},
  35. emqx_rule_engine_api:'/rules'(post, #{body => Params0})
  36. ),
  37. ?assertEqual(RuleID, maps:get(id, Rule)),
  38. {200, Rules} = emqx_rule_engine_api:'/rules'(get, #{}),
  39. ct:pal("RList : ~p", [Rules]),
  40. ?assert(length(Rules) > 0),
  41. {200, Rule0} = emqx_rule_engine_api:'/rules/:id/reset_metrics'(put, #{
  42. bindings => #{id => RuleID}
  43. }),
  44. ?assertEqual(<<"Reset Success">>, Rule0),
  45. {200, Rule1} = emqx_rule_engine_api:'/rules/:id'(get, #{bindings => #{id => RuleID}}),
  46. ct:pal("RShow : ~p", [Rule1]),
  47. ?assertEqual(Rule, Rule1),
  48. {200, Rule2} = emqx_rule_engine_api:'/rules/:id'(put, #{
  49. bindings => #{id => RuleID},
  50. body => Params0#{<<"sql">> => <<"select * from \"t/b\"">>}
  51. }),
  52. {200, Rule3} = emqx_rule_engine_api:'/rules/:id'(get, #{bindings => #{id => RuleID}}),
  53. %ct:pal("RShow : ~p", [Rule3]),
  54. ?assertEqual(Rule3, Rule2),
  55. ?assertEqual(<<"select * from \"t/b\"">>, maps:get(sql, Rule3)),
  56. ?assertMatch(
  57. {204},
  58. emqx_rule_engine_api:'/rules/:id'(
  59. delete,
  60. #{bindings => #{id => RuleID}}
  61. )
  62. ),
  63. %ct:pal("Show After Deleted: ~p", [NotFound]),
  64. ?assertMatch(
  65. {404, #{code := _, message := _Message}},
  66. emqx_rule_engine_api:'/rules/:id'(get, #{bindings => #{id => RuleID}})
  67. ),
  68. ?assertMatch(
  69. {400, #{
  70. code := 'BAD_REQUEST',
  71. message := <<"{select_and_transform_error,{error,{decode_json_failed,", _/binary>>
  72. }},
  73. emqx_rule_engine_api:'/rule_test'(post, test_rule_params())
  74. ),
  75. ok.
  76. test_rule_params() ->
  77. #{
  78. body => #{
  79. <<"context">> =>
  80. #{
  81. <<"clientid">> => <<"c_emqx">>,
  82. <<"event_type">> => <<"message_publish">>,
  83. <<"payload">> => <<"{\"msg\": \"hel">>,
  84. <<"qos">> => 1,
  85. <<"topic">> => <<"t/a">>,
  86. <<"username">> => <<"u_emqx">>
  87. },
  88. <<"sql">> =>
  89. <<"SELECT\n payload.msg\nFROM\n \"t/#\"">>
  90. }
  91. }.