feat: add emqx_cover

This commit is contained in:
Zaiming (Stone) Shi 2022-11-29 14:25:25 +01:00
parent 93a93aee05
commit 55485f25b2
2 changed files with 124 additions and 13 deletions

View File

@ -2,12 +2,14 @@
%% Unless you know what you are doing, DO NOT edit manually!! %% Unless you know what you are doing, DO NOT edit manually!!
{VSN, {VSN,
[{"4.4.11", [{"4.4.11",
[{load_module,emqx_relup,brutal_purge,soft_purge,[]}, [{add_module,emqx_cover},
{load_module,emqx_relup,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]},
{load_module,emqx_channel,brutal_purge,soft_purge,[]}]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}]},
{"4.4.10", {"4.4.10",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]},
@ -23,7 +25,8 @@
{load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
{"4.4.9", {"4.4.9",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -46,7 +49,8 @@
{load_module,emqx_router,brutal_purge,soft_purge,[]}, {load_module,emqx_router,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
{"4.4.8", {"4.4.8",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -70,7 +74,8 @@
{load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]},
{load_module,emqx_message,brutal_purge,soft_purge,[]}]}, {load_module,emqx_message,brutal_purge,soft_purge,[]}]},
{"4.4.7", {"4.4.7",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -94,7 +99,8 @@
{load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
{"4.4.6", {"4.4.6",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -118,7 +124,8 @@
{load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx,brutal_purge,soft_purge,[]}]}, {load_module,emqx,brutal_purge,soft_purge,[]}]},
{"4.4.5", {"4.4.5",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -144,7 +151,8 @@
{load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx_session,brutal_purge,soft_purge,[]}]}, {load_module,emqx_session,brutal_purge,soft_purge,[]}]},
{"4.4.4", {"4.4.4",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -177,7 +185,8 @@
{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, {load_module,emqx_metrics,brutal_purge,soft_purge,[]},
{load_module,emqx_session,brutal_purge,soft_purge,[]}]}, {load_module,emqx_session,brutal_purge,soft_purge,[]}]},
{"4.4.3", {"4.4.3",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -217,7 +226,8 @@
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_relup}]}, {load_module,emqx_relup}]},
{"4.4.2", {"4.4.2",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -258,7 +268,8 @@
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_relup}]}, {load_module,emqx_relup}]},
{"4.4.1", {"4.4.1",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -304,7 +315,8 @@
{load_module,emqx_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_connection,brutal_purge,soft_purge,[]},
{add_module,emqx_relup}]}, {add_module,emqx_relup}]},
{"4.4.0", {"4.4.0",
[{add_module,emqx_ocsp_cache}, [{add_module,emqx_cover},
{add_module,emqx_ocsp_cache},
{add_module,emqx_crl_cache}, {add_module,emqx_crl_cache},
{add_module,emqx_const_v1}, {add_module,emqx_const_v1},
{add_module,emqx_secret}, {add_module,emqx_secret},
@ -356,7 +368,8 @@
[{load_module,emqx_relup,brutal_purge,soft_purge,[]}, [{load_module,emqx_relup,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]},
{load_module,emqx_channel,brutal_purge,soft_purge,[]}]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover}]},
{"4.4.10", {"4.4.10",
[{load_module,emqx_listeners,brutal_purge,soft_purge,[]}, [{load_module,emqx_listeners,brutal_purge,soft_purge,[]},
{load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]},
@ -370,6 +383,7 @@
{load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]},
{load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.9", {"4.4.9",
@ -391,6 +405,7 @@
{load_module,emqx_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_connection,brutal_purge,soft_purge,[]},
{load_module,emqx_router,brutal_purge,soft_purge,[]}, {load_module,emqx_router,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.8", {"4.4.8",
@ -413,6 +428,7 @@
{load_module,emqx_shared_sub,brutal_purge,soft_purge,[]}, {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
{load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]},
{load_module,emqx_message,brutal_purge,soft_purge,[]}, {load_module,emqx_message,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.7", {"4.4.7",
@ -435,6 +451,7 @@
{load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_plugins,brutal_purge,soft_purge,[]},
{load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.6", {"4.4.6",
@ -457,6 +474,7 @@
{load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_plugins,brutal_purge,soft_purge,[]},
{load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.5", {"4.4.5",
@ -481,6 +499,7 @@
{load_module,emqx_channel,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx_shared_sub,brutal_purge,soft_purge,[]}, {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
{load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.4", {"4.4.4",
@ -512,6 +531,7 @@
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_plugins,brutal_purge,soft_purge,[]},
{load_module,emqx_metrics,brutal_purge,soft_purge,[]}, {load_module,emqx_metrics,brutal_purge,soft_purge,[]},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.3", {"4.4.3",
@ -549,6 +569,7 @@
{load_module,emqx_access_control,brutal_purge,soft_purge,[]}, {load_module,emqx_access_control,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_relup}, {load_module,emqx_relup},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.2", {"4.4.2",
@ -587,6 +608,7 @@
{load_module,emqx_hooks,brutal_purge,soft_purge,[]}, {load_module,emqx_hooks,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_relup}, {load_module,emqx_relup},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.1", {"4.4.1",
@ -630,6 +652,7 @@
{load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_misc,brutal_purge,soft_purge,[]},
{load_module,emqx_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_connection,brutal_purge,soft_purge,[]},
{delete_module,emqx_relup}, {delete_module,emqx_relup},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{"4.4.0", {"4.4.0",
@ -674,6 +697,7 @@
{load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]},
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}, {load_module,emqx_limiter,brutal_purge,soft_purge,[]},
{delete_module,emqx_relup}, {delete_module,emqx_relup},
{delete_module,emqx_cover},
{delete_module,emqx_crl_cache}, {delete_module,emqx_crl_cache},
{delete_module,emqx_ocsp_cache}]}, {delete_module,emqx_ocsp_cache}]},
{<<".*">>,[]}]}. {<<".*">>,[]}]}.

87
src/emqx_cover.erl Normal file
View File

@ -0,0 +1,87 @@
%%--------------------------------------------------------------------
%% Copyright (c) 2022 EMQ Technologies Co., Ltd. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%--------------------------------------------------------------------
%% @doc This module is NOT used in production.
%% It is used to collect coverage data when running blackbox test
-module(emqx_cover).
-export([start/0,
start/1,
export_and_stop/1
]).
start() ->
start(#{}).
start(Opts) ->
ok = maybe_set_secret(),
case cover:start() of
{ok, _Pid} ->
ok;
{error, {already_started, _Pid}} ->
ok;
Other ->
throw(Other)
end,
ok = cover_compile(Opts).
export_and_stop(Path) ->
ok = cover:export(Path),
_ = cover:stop(),
ok.
maybe_set_secret() ->
case os:getenv("EMQX_DEBUG_SECRET_FILE") of
false ->
ok;
"" ->
ok;
File ->
ok = emqx:set_debug_secret(File)
end.
cover_compile(_Opts) ->
%% TODO better filter based on Opts,
%% e.g. we may want to see coverage info for ehttpc
Filter = fun is_emqx_module/1,
Modules = find_modules(Filter),
Results = cover:compile_beam(Modules),
Errors = lists:filter(fun({ok, _}) -> false;
(_) -> true
end, Results),
case Errors of
[] ->
ok;
_ ->
io:format(user, "failed_to_cover_compile:~n~p~n", [Errors]),
throw(failed_to_cover_compile)
end.
find_modules(Filter) ->
All = code:all_loaded(),
F = fun({M, _BeamPath}) -> Filter(M) end,
lists:filter(F, All).
is_emqx_module(?MODULE) ->
%% do not cover-compile self
false;
is_emqx_module(Module) ->
case erlang:atom_to_binary(Module, utf8) of
<<"emqx", _/binary>> ->
true;
_ ->
false
end.