Parcourir la source

fix(message transformation): forbid empty topic filter list

Fixes https://emqx.atlassian.net/browse/EMQX-12646
Thales Macedo Garitezi il y a 1 an
Parent
commit
e99fee68c0

+ 2 - 0
apps/emqx_message_transformation/src/emqx_message_transformation_schema.erl

@@ -231,6 +231,8 @@ do_validate_unique_names([#{<<"name">> := Name} | _Rest], Acc) when is_map_key(N
 do_validate_unique_names([#{<<"name">> := Name} | Rest], Acc) ->
 do_validate_unique_names([#{<<"name">> := Name} | Rest], Acc) ->
     do_validate_unique_names(Rest, Acc#{Name => true}).
     do_validate_unique_names(Rest, Acc#{Name => true}).
 
 
+validate_unique_topics([]) ->
+    {error, <<"at least one topic filter must be defined">>};
 validate_unique_topics(Topics) ->
 validate_unique_topics(Topics) ->
     Grouped = maps:groups_from_list(
     Grouped = maps:groups_from_list(
         fun(T) -> T end,
         fun(T) -> T end,

+ 13 - 0
apps/emqx_message_transformation/test/emqx_message_transformation_tests.erl

@@ -87,6 +87,19 @@ schema_test_() ->
                     )
                     )
                 ])
                 ])
             )},
             )},
+        {"topics must be non-empty",
+            ?_assertThrow(
+                {_Schema, [
+                    #{
+                        reason := <<"at least one topic filter must be defined", _/binary>>,
+                        value := [],
+                        kind := validation_error
+                    }
+                ]},
+                parse_and_check([
+                    transformation(<<"foo">>, [dummy_operation()], #{<<"topics">> => []})
+                ])
+            )},
         {"names are unique",
         {"names are unique",
             ?_assertThrow(
             ?_assertThrow(
                 {_Schema, [
                 {_Schema, [