From e99fee68c098b65ca9946e784ccc97e5b86d60e3 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 5 Jul 2024 09:46:20 -0300 Subject: [PATCH] fix(message transformation): forbid empty topic filter list Fixes https://emqx.atlassian.net/browse/EMQX-12646 --- .../src/emqx_message_transformation_schema.erl | 2 ++ .../test/emqx_message_transformation_tests.erl | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/apps/emqx_message_transformation/src/emqx_message_transformation_schema.erl b/apps/emqx_message_transformation/src/emqx_message_transformation_schema.erl index 9dee9d5b0..169743e5b 100644 --- a/apps/emqx_message_transformation/src/emqx_message_transformation_schema.erl +++ b/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(Rest, Acc#{Name => true}). +validate_unique_topics([]) -> + {error, <<"at least one topic filter must be defined">>}; validate_unique_topics(Topics) -> Grouped = maps:groups_from_list( fun(T) -> T end, diff --git a/apps/emqx_message_transformation/test/emqx_message_transformation_tests.erl b/apps/emqx_message_transformation/test/emqx_message_transformation_tests.erl index 3e86e3862..545773c00 100644 --- a/apps/emqx_message_transformation/test/emqx_message_transformation_tests.erl +++ b/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", ?_assertThrow( {_Schema, [