From 29bcdb9a4ae46a2546bc480c0df9e4e7ef47365e Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Tue, 28 Nov 2023 13:10:31 +0800 Subject: [PATCH] fix: validate error when set license's watermark to 100% --- apps/emqx_license/src/emqx_license_schema.erl | 14 ++++++++++---- .../test/emqx_license_http_api_SUITE.erl | 11 +++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/emqx_license/src/emqx_license_schema.erl b/apps/emqx_license/src/emqx_license_schema.erl index f2b91811e..e4fc5adc1 100644 --- a/apps/emqx_license/src/emqx_license_schema.erl +++ b/apps/emqx_license/src/emqx_license_schema.erl @@ -72,10 +72,16 @@ check_license_watermark(Conf) -> undefined -> true; Low -> - High = hocon_maps:get("license.connection_high_watermark", Conf), - case High =/= undefined andalso High > Low of - true -> true; - false -> {bad_license_watermark, #{high => High, low => Low}} + case hocon_maps:get("license.connection_high_watermark", Conf) of + undefined -> + {bad_license_watermark, #{high => undefined, low => Low}}; + High -> + {ok, HighFloat} = emqx_schema:to_percent(High), + {ok, LowFloat} = emqx_schema:to_percent(Low), + case HighFloat > LowFloat of + true -> true; + false -> {bad_license_watermark, #{high => High, low => Low}} + end end end. diff --git a/apps/emqx_license/test/emqx_license_http_api_SUITE.erl b/apps/emqx_license/test/emqx_license_http_api_SUITE.erl index 4ee0c8c8e..6e0f4a150 100644 --- a/apps/emqx_license/test/emqx_license_http_api_SUITE.erl +++ b/apps/emqx_license/test/emqx_license_http_api_SUITE.erl @@ -194,6 +194,17 @@ t_license_setting(_Config) -> ?assertEqual(0.5, emqx_config:get([license, connection_low_watermark])), ?assertEqual(0.55, emqx_config:get([license, connection_high_watermark])), + %% update + Low1 = <<"50%">>, + High1 = <<"100%">>, + UpdateRes1 = request(put, uri(["license", "setting"]), #{ + <<"connection_low_watermark">> => Low1, + <<"connection_high_watermark">> => High1 + }), + validate_setting(UpdateRes1, Low1, High1), + ?assertEqual(0.5, emqx_config:get([license, connection_low_watermark])), + ?assertEqual(1.0, emqx_config:get([license, connection_high_watermark])), + %% update bad setting low >= high ?assertMatch( {ok, 400, _},