Jelajahi Sumber

fix: the API prompt garbled characters for updating the configuration

zhongwencool 2 tahun lalu
induk
melakukan
00e8a36dbe

+ 1 - 1
apps/emqx_conf/src/emqx_conf_cli.erl

@@ -35,7 +35,7 @@
 -define(CLUSTER_CALL, cluster_call).
 -define(CONF, conf).
 -define(AUDIT_MOD, audit).
--define(UPDATE_READONLY_KEYS_PROHIBITED, "update_readonly_keys_prohibited").
+-define(UPDATE_READONLY_KEYS_PROHIBITED, <<"update_readonly_keys_prohibited">>).
 
 -dialyzer({no_match, [load/0]}).
 

+ 1 - 1
apps/emqx_conf/test/emqx_conf_cli_SUITE.erl

@@ -165,7 +165,7 @@ t_load_readonly(Config) ->
             ConfBin0 = hocon_pp:do(Base1#{KeyBin => Conf}, #{}),
             ConfFile0 = prepare_conf_file(?FUNCTION_NAME, ConfBin0, Config),
             ?assertEqual(
-                {error, "update_readonly_keys_prohibited"},
+                {error, <<"update_readonly_keys_prohibited">>},
                 emqx_conf_cli:conf(["load", ConfFile0])
             ),
             %% reload etc/emqx.conf changed readonly keys

+ 14 - 3
apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl

@@ -331,7 +331,7 @@ t_configs_key(_Config) ->
         Log
     ),
     Log1 = emqx_utils_maps:deep_put([<<"log">>, <<"console">>, <<"level">>], Log, <<"error">>),
-    ?assertEqual([], update_configs_with_binary(iolist_to_binary(hocon_pp:do(Log1, #{})))),
+    ?assertEqual(<<>>, update_configs_with_binary(iolist_to_binary(hocon_pp:do(Log1, #{})))),
     ?assertEqual(<<"error">>, read_conf([<<"log">>, <<"console">>, <<"level">>])),
     BadLog = emqx_utils_maps:deep_put([<<"log">>, <<"console">>, <<"level">>], Log, <<"erro1r">>),
     {error, Error} = update_configs_with_binary(iolist_to_binary(hocon_pp:do(BadLog, #{}))),
@@ -345,6 +345,17 @@ t_configs_key(_Config) ->
             }
     },
     ?assertEqual(ExpectError, emqx_utils_json:decode(Error, [return_maps])),
+    ReadOnlyConf = #{
+        <<"cluster">> =>
+            #{
+                <<"autoclean">> => <<"23h">>,
+                <<"autoheal">> => true,
+                <<"discovery_strategy">> => <<"manual">>
+            }
+    },
+    ReadOnlyBin = iolist_to_binary(hocon_pp:do(ReadOnlyConf, #{})),
+    {error, ReadOnlyError} = update_configs_with_binary(ReadOnlyBin),
+    ?assertEqual(<<"update_readonly_keys_prohibited">>, ReadOnlyError),
     ok.
 
 t_get_configs_in_different_accept(_Config) ->
@@ -394,7 +405,7 @@ t_create_webhook_v1_bridges_api(Config) ->
     WebHookFile = filename:join(?config(data_dir, Config), "webhook_v1.conf"),
     ?assertMatch({ok, _}, hocon:files([WebHookFile])),
     {ok, WebHookBin} = file:read_file(WebHookFile),
-    ?assertEqual([], update_configs_with_binary(WebHookBin)),
+    ?assertEqual(<<>>, update_configs_with_binary(WebHookBin)),
     Actions =
         #{
             <<"http">> =>
@@ -531,7 +542,7 @@ update_configs_with_binary(Bin) ->
     Path = emqx_mgmt_api_test_util:api_path(["configs"]),
     Auth = emqx_mgmt_api_test_util:auth_header_(),
     Headers = [{"accept", "text/plain"}, Auth],
-    case httpc:request(put, {Path, Headers, "text/plain", Bin}, [], []) of
+    case httpc:request(put, {Path, Headers, "text/plain", Bin}, [], [{body_format, binary}]) of
         {ok, {{"HTTP/1.1", Code, _}, _Headers, Body}} when
             Code >= 200 andalso Code =< 299
         ->

+ 1 - 0
changes/ee/fix-12240.en.md

@@ -0,0 +1 @@
+Modified the /file_transfer API to return the file transfer configuration in raw format rather than converting time units like "1h" to seconds, providing callers with the original configured values for consistency with other getter APIs

+ 1 - 0
changes/ee/fix-12249.en.md

@@ -0,0 +1 @@
+Fixed issue where the response message from the /configs API would be garbled when attempting to update a read-only configuration value