test: call logger apis directly

This commit is contained in:
Zaiming (Stone) Shi 2022-01-26 23:24:16 +01:00
parent 1718360156
commit 815c47e169
3 changed files with 28 additions and 27 deletions

1
.gitignore vendored
View File

@ -62,3 +62,4 @@ erlang_ls.config
.envrc .envrc
# elixir # elixir
mix.lock mix.lock
apps/emqx/test/emqx_static_checks_data/

View File

@ -18,8 +18,6 @@
-export([run/0, dump/1, dump/0, check_compat/1, versions_file/0]). -export([run/0, dump/1, dump/0, check_compat/1, versions_file/0]).
-include_lib("emqx/include/logger.hrl").
%% Using an undocumented API here :( %% Using an undocumented API here :(
-include_lib("dialyzer/src/dialyzer.hrl"). -include_lib("dialyzer/src/dialyzer.hrl").
@ -75,14 +73,14 @@ run() ->
Dumps = filelib:wildcard(dumps_dir() ++ "/*.bpapi"), Dumps = filelib:wildcard(dumps_dir() ++ "/*.bpapi"),
case Dumps of case Dumps of
[] -> [] ->
?ERROR("No BPAPI dumps are found in ~s, abort", [dumps_dir()]), logger:error("No BPAPI dumps are found in ~s, abort", [dumps_dir()]),
false; false;
_ -> _ ->
?NOTICE("Running API compatibility checks for ~p", [Dumps]), logger:notice("Running API compatibility checks for ~p", [Dumps]),
check_compat(Dumps) check_compat(Dumps)
end; end;
false -> false ->
?CRITICAL("Backplane API violations found on the current branch."), logger:critical("Backplane API violations found on the current branch.", []),
false false
end. end.
@ -116,12 +114,12 @@ check_api_immutability(#{release := Rel1, api := APIs1}, #{release := Rel2, api
ok; ok;
undefined -> undefined ->
setnok(), setnok(),
?ERROR("API ~p v~p was removed in release ~p without being deprecated.", logger:error("API ~p v~p was removed in release ~p without being deprecated.",
[API, Version, Rel2]); [API, Version, Rel2]);
_Val -> _Val ->
setnok(), setnok(),
?ERROR("API ~p v~p was changed between ~p and ~p. Backplane API should be immutable.", logger:error("API ~p v~p was changed between ~p and ~p. Backplane API should be immutable.",
[API, Version, Rel1, Rel2]) [API, Version, Rel1, Rel2])
end end
end, end,
APIs1), APIs1),
@ -145,7 +143,8 @@ typecheck_apis( #{release := CallerRelease, api := CallerAPIs, signatures := Cal
ok; ok;
TypeErrors -> TypeErrors ->
setnok(), setnok(),
[?ERROR("Incompatible RPC call: " [logger:error(
"Incompatible RPC call: "
"type of the parameter ~p of RPC call ~s on release ~p " "type of the parameter ~p of RPC call ~s on release ~p "
"is not a subtype of the target function ~s on release ~p.~n" "is not a subtype of the target function ~s on release ~p.~n"
"Caller type: ~s~nCallee type: ~s~n", "Caller type: ~s~nCallee type: ~s~n",
@ -211,21 +210,21 @@ dump(Opts) ->
erase(bpapi_ok). erase(bpapi_ok).
prepare(#{reldir := RelDir, plt := PLT}) -> prepare(#{reldir := RelDir, plt := PLT}) ->
?INFO("Starting xref...", []), logger:info("Starting xref...", []),
xref:start(?XREF), xref:start(?XREF),
filelib:wildcard(RelDir ++ "/*/ebin/") =:= [] andalso filelib:wildcard(RelDir ++ "/*/ebin/") =:= [] andalso
error("No applications found in the release directory. Wrong directory?"), error("No applications found in the release directory. Wrong directory?"),
xref:set_default(?XREF, [{warnings, false}]), xref:set_default(?XREF, [{warnings, false}]),
xref:add_release(?XREF, RelDir), xref:add_release(?XREF, RelDir),
%% Now to the dialyzer stuff: %% Now to the dialyzer stuff:
?INFO("Loading PLT...", []), logger:info("Loading PLT...", []),
dialyzer_plt:from_file(PLT). dialyzer_plt:from_file(PLT).
find_remote_calls(_Opts) -> find_remote_calls(_Opts) ->
Query = "XC | (A - [" ?IGNORED_APPS "]:App - [" ?IGNORED_MODULES "]:Mod - [" ?EXEMPTIONS "]) Query = "XC | (A - [" ?IGNORED_APPS "]:App - [" ?IGNORED_MODULES "]:Mod - [" ?EXEMPTIONS "])
|| (([" ?RPC_MODULES "] : Mod + [" ?RPC_FUNCTIONS "]) - [" ?IGNORED_RPC_CALLS "])", || (([" ?RPC_MODULES "] : Mod + [" ?RPC_FUNCTIONS "]) - [" ?IGNORED_RPC_CALLS "])",
{ok, Calls} = xref:q(?XREF, Query), {ok, Calls} = xref:q(?XREF, Query),
?INFO("Calls to RPC modules ~p", [Calls]), logger:info("Calls to RPC modules ~p", [Calls]),
{Callers, _Callees} = lists:unzip(Calls), {Callers, _Callees} = lists:unzip(Calls),
Callers. Callers.
@ -235,10 +234,9 @@ warn_nonbpapi_rpcs([]) ->
warn_nonbpapi_rpcs(L) -> warn_nonbpapi_rpcs(L) ->
setnok(), setnok(),
lists:foreach(fun({M, F, A}) -> lists:foreach(fun({M, F, A}) ->
?ERROR("~p:~p/~p does a remote call outside of a dedicated " logger:error("~p:~p/~p does a remote call outside of a dedicated "
"backplane API module. " "backplane API module. "
"It may break during rolling cluster upgrade", "It may break during rolling cluster upgrade", [M, F, A])
[M, F, A])
end, end,
L). L).
@ -258,7 +256,7 @@ dump_api(Term = #{api := _, signatures := _, release := Release}) ->
-spec dump_versions(api_dump()) -> ok. -spec dump_versions(api_dump()) -> ok.
dump_versions(APIs) -> dump_versions(APIs) ->
Filename = versions_file(), Filename = versions_file(),
?NOTICE("Dumping API versions to ~p", [Filename]), logger:notice("Dumping API versions to ~p", [Filename]),
ok = filelib:ensure_dir(Filename), ok = filelib:ensure_dir(Filename),
{ok, FD} = file:open(Filename, [write]), {ok, FD} = file:open(Filename, [write]),
lists:foreach(fun(API) -> lists:foreach(fun(API) ->
@ -308,8 +306,9 @@ enrich({From0, To0}, {Acc0, PLT}) ->
{Acc, PLT}; {Acc, PLT};
{{value, _}, none} -> {{value, _}, none} ->
setnok(), setnok(),
?CRITICAL("Backplane API function ~s calls a missing remote function ~s", logger:critical(
[format_call(From0), format_call(To0)]), "Backplane API function ~s calls a missing remote function ~s",
[format_call(From0), format_call(To0)]),
error(missing_target) error(missing_target)
end. end.

View File

@ -19,7 +19,6 @@
-compile(export_all). -compile(export_all).
-compile(nowarn_export_all). -compile(nowarn_export_all).
-include_lib("emqx/include/logger.hrl").
-include_lib("common_test/include/ct.hrl"). -include_lib("common_test/include/ct.hrl").
-include_lib("stdlib/include/assert.hrl"). -include_lib("stdlib/include/assert.hrl").
@ -29,8 +28,9 @@ init_per_suite(Config) ->
Config. Config.
end_per_suite(_Config) -> end_per_suite(_Config) ->
?NOTICE("If this test suite failed, and you are unsure why, read this:~n" logger:notice(
"https://github.com/emqx/emqx/blob/master/apps/emqx/src/bpapi/README.md", []). "If this test suite failed, and you are unsure why, read this:~n"
"https://github.com/emqx/emqx/blob/master/apps/emqx/src/bpapi/README.md", []).
t_run_check(_) -> t_run_check(_) ->
try try
@ -39,13 +39,14 @@ t_run_check(_) ->
{ok, NewData} = file:consult(emqx_bpapi_static_checks:versions_file()), {ok, NewData} = file:consult(emqx_bpapi_static_checks:versions_file()),
OldData =:= NewData orelse OldData =:= NewData orelse
begin begin
?CRITICAL("BPAPI versions were changed, but not committed to the repo.\n" logger:critical(
"Run 'make && make static_checks' and then add the changed " "BPAPI versions were changed, but not committed to the repo.\n"
"'bpapi.versions' files to the commit.", []), "Run 'make && make static_checks' and then add the changed "
"'bpapi.versions' files to the commit."),
error(version_mismatch) error(version_mismatch)
end end
catch catch
EC:Err:Stack -> EC:Err:Stack ->
?CRITICAL("Test suite failed: ~p:~p~nStack:~p", [EC, Err, Stack]), logger:critical("Test suite failed: ~p:~p~nStack:~p", [EC, Err, Stack]),
error(tc_failed) error(tc_failed)
end. end.