Selaa lähdekoodia

Merge pull request #7951 from zmstone/0514-fix-flaky-authn-test-case

0514 fix flaky authn test case
Zaiming (Stone) Shi 3 vuotta sitten
vanhempi
commit
1c95c417f7

+ 16 - 7
apps/emqx/src/emqx_authentication_config.erl

@@ -71,9 +71,15 @@ pre_config_update(_, UpdateReq, OldConfig) ->
     end.
 
 do_pre_config_update({create_authenticator, ChainName, Config}, OldConfig) ->
-    CertsDir = certs_dir(ChainName, Config),
-    NConfig = convert_certs(CertsDir, Config),
-    {ok, OldConfig ++ [NConfig]};
+    NewId = authenticator_id(Config),
+    case lists:filter(fun(OldConfig0) -> authenticator_id(OldConfig0) =:= NewId end, OldConfig) of
+        [] ->
+            CertsDir = certs_dir(ChainName, Config),
+            NConfig = convert_certs(CertsDir, Config),
+            {ok, OldConfig ++ [NConfig]};
+        [_] ->
+            {error, {already_exists, {authenticator, NewId}}}
+    end;
 do_pre_config_update({delete_authenticator, _ChainName, AuthenticatorID}, OldConfig) ->
     NewConfig = lists:filter(
         fun(OldConfig0) ->
@@ -257,9 +263,12 @@ clear_certs(CertsDir, Config) ->
     ok = emqx_tls_lib:delete_ssl_files(CertsDir, undefined, OldSSL).
 
 get_authenticator_config(AuthenticatorID, AuthenticatorsConfig) ->
-    case [C0 || C0 <- AuthenticatorsConfig, AuthenticatorID == authenticator_id(C0)] of
-        [C | _] -> C;
-        [] -> {error, not_found}
+    case
+        lists:filter(fun(C) -> AuthenticatorID =:= authenticator_id(C) end, AuthenticatorsConfig)
+    of
+        [C] -> C;
+        [] -> {error, not_found};
+        _ -> error({duplicated_authenticator_id, AuthenticatorsConfig})
     end.
 
 split_by_id(ID, AuthenticatorsConfig) ->
@@ -305,7 +314,7 @@ authenticator_id(#{mechanism := Mechanism}) ->
 authenticator_id(#{<<"mechanism">> := Mechanism, <<"backend">> := Backend}) ->
     <<Mechanism/binary, ":", Backend/binary>>;
 authenticator_id(#{<<"mechanism">> := Mechanism}) ->
-    Mechanism;
+    to_bin(Mechanism);
 authenticator_id(_C) ->
     throw({missing_parameter, #{name => mechanism}}).
 

+ 1 - 0
apps/emqx_authn/test/emqx_authn_api_SUITE.erl

@@ -55,6 +55,7 @@ init_per_testcase(_, Config) ->
     Config.
 
 init_per_suite(Config) ->
+    emqx_config:erase(?EMQX_AUTHENTICATION_CONFIG_ROOT_NAME_BINARY),
     _ = application:load(emqx_conf),
     ok = emqx_common_test_helpers:start_apps(
         [emqx_authn, emqx_dashboard],

+ 4 - 1
scripts/git-hook-pre-commit.sh

@@ -11,4 +11,7 @@ if [[ "${files_dirty}" == '' ]] && [[ "${files_cached}" == '' ]]; then
 fi
 files="$(echo -e "${files_dirty} \n ${files_cached}" | xargs)"
 # shellcheck disable=SC2086
-./scripts/erlfmt $OPT $files
+if ! (./scripts/erlfmt $OPT $files); then
+    echo "EXECUTE 'make fmt' to fix" >&2
+    exit 1
+fi