fix: do not crash when showing rule unsing the cmd interface

Before the change the command line command

    $ bin/emqx ctl rules show rule_0hyd

would crash if the rule had bridge actions. This has now been fixed by
adding a handler for printing  bridge actions.

Fixes:
https://emqx.atlassian.net/browse/EMQX-12548
This commit is contained in:
Kjell Winblad 2024-06-18 15:17:25 +02:00
parent 3f7723b2dc
commit a4f855108c
2 changed files with 31 additions and 1 deletions

View File

@ -95,6 +95,12 @@ format_action(BridgeChannelId) when is_binary(BridgeChannelId) ->
io_lib:format("- Name: ~s\n"
" Type: data-bridge\n"
,[BridgeChannelId]
);
format_action({bridge_v2, ActionType, ActionName}) ->
io_lib:format("- Name: ~p\n"
" Action Type: ~p\n"
" Type: data-bridge\n"
,[ActionName, ActionType]
).
left_pad(Str) ->

View File

@ -44,7 +44,8 @@ all() ->
{group, metrics_simple},
{group, metrics_fail},
{group, metrics_fail_simple},
{group, tracing}
{group, tracing},
{group, command_line}
].
suite() ->
@ -147,6 +148,9 @@ groups() ->
]},
{tracing, [], [
t_trace_rule_id
]},
{command_line, [], [
t_command_line_list_print_rule
]}
].
@ -596,6 +600,26 @@ t_get_rule_ids_by_action(_) ->
?assertEqual([], emqx_rule_engine:get_rule_ids_by_action(<<"mysql:not_exists">>)),
ok = delete_rules_by_ids([<<"t_get_rule_ids_by_action">>]).
%% Check that command line interface don't crash when listing and showing rules
t_command_line_list_print_rule(_) ->
ID = <<"t_command_line">>,
Rule1 = #{
id => ID,
sql => <<"SELECT * FROM \"t\"">>,
actions => [
#{function => console, args => #{}},
#{function => republish, args => #{}},
<<"mqtt:my_mqtt_bridge">>,
<<"mysql:foo">>
],
description => ID,
created_at => erlang:system_time(millisecond)
},
ok = create_rules([Rule1]),
ok = emqx_rule_engine_cli:cmd(["list"]),
ok = emqx_rule_engine_cli:cmd(["show", binary_to_list(ID)]),
ok = delete_rules_by_ids([ID]).
t_ensure_action_removed(_) ->
Id = <<"t_ensure_action_removed">>,
GetSelectedData = <<"emqx_rule_sqltester:get_selected_data">>,