From e767f01e0a5f9fa5334ffddedfb4667b7715f707 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 20 Mar 2024 13:57:12 -0300 Subject: [PATCH] fix(message_validation): take `enable` into account --- .../src/emqx_message_validation_registry.erl | 6 ++-- ...emqx_message_validation_http_api_SUITE.erl | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/apps/emqx_message_validation/src/emqx_message_validation_registry.erl b/apps/emqx_message_validation/src/emqx_message_validation_registry.erl index 125429565..6a8e4a376 100644 --- a/apps/emqx_message_validation/src/emqx_message_validation_registry.erl +++ b/apps/emqx_message_validation/src/emqx_message_validation_registry.erl @@ -153,24 +153,26 @@ do_reindex_positions(Validations) -> do_insert(Pos, Validation) -> #{ + enable := Enabled, name := Name, topics := Topics } = Validation, maybe_create_metrics(Name), do_insert_into_tab(Name, Validation, Pos), - update_topic_index(Name, Pos, Topics), + Enabled andalso update_topic_index(Name, Pos, Topics), ok. do_update(OldValidation, Pos, NewValidation) -> #{topics := OldTopics} = OldValidation, #{ + enable := Enabled, name := Name, topics := NewTopics } = NewValidation, maybe_create_metrics(Name), do_insert_into_tab(Name, NewValidation, Pos), delete_topic_index(Name, OldTopics), - update_topic_index(Name, Pos, NewTopics), + Enabled andalso update_topic_index(Name, Pos, NewTopics), ok. do_delete(Validation) -> diff --git a/apps/emqx_message_validation/test/emqx_message_validation_http_api_SUITE.erl b/apps/emqx_message_validation/test/emqx_message_validation_http_api_SUITE.erl index 57c097005..d042ee817 100644 --- a/apps/emqx_message_validation/test/emqx_message_validation_http_api_SUITE.erl +++ b/apps/emqx_message_validation/test/emqx_message_validation_http_api_SUITE.erl @@ -508,6 +508,42 @@ t_reorder(_Config) -> ok. +t_enable_disable_via_update(_Config) -> + Topic = <<"t">>, + + Name1 = <<"foo">>, + AlwaysFailCheck = sql_check(<<"select * where false">>), + Validation1 = validation(Name1, [AlwaysFailCheck], #{<<"topics">> => Topic}), + + {201, _} = insert(Validation1#{<<"enable">> => false}), + ?assertIndexOrder([], Topic), + + C = connect(<<"c1">>), + {ok, _, [_]} = emqtt:subscribe(C, Topic), + + ok = publish(C, Topic, #{}), + ?assertReceive({publish, _}), + + {200, _} = update(Validation1#{<<"enable">> => true}), + ?assertIndexOrder([Name1], Topic), + + ok = publish(C, Topic, #{}), + ?assertNotReceive({publish, _}), + + {200, _} = update(Validation1#{<<"enable">> => false}), + ?assertIndexOrder([], Topic), + + ok = publish(C, Topic, #{}), + ?assertReceive({publish, _}), + + %% Test index after delete; ensure it's in the index before + {200, _} = update(Validation1#{<<"enable">> => true}), + ?assertIndexOrder([Name1], Topic), + {204, _} = delete(Name1), + ?assertIndexOrder([], Topic), + + ok. + %% Check the `all_pass' strategy t_all_pass(_Config) -> Name1 = <<"foo">>,