test(proper): spefic the nodename for checking

This commit is contained in:
JianBo He 2021-04-13 19:13:22 +08:00
parent 9ead5c8cfd
commit eb8c8021f0
1 changed files with 28 additions and 6 deletions

View File

@ -19,6 +19,8 @@
-include_lib("proper/include/proper.hrl"). -include_lib("proper/include/proper.hrl").
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
-define(NODENAME, 'test@127.0.0.1').
-define(ALL(Vars, Types, Exprs), -define(ALL(Vars, Types, Exprs),
?SETUP(fun() -> ?SETUP(fun() ->
State = do_setup(), State = do_setup(),
@ -30,8 +32,9 @@
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
prop_node() -> prop_node() ->
?ALL(Node, nodename(), ?ALL(Node0, nodename(),
begin begin
Node = punch(Node0),
?assert(emqx_rpc:cast(Node, erlang, system_time, [])), ?assert(emqx_rpc:cast(Node, erlang, system_time, [])),
case emqx_rpc:call(Node, erlang, system_time, []) of case emqx_rpc:call(Node, erlang, system_time, []) of
{badrpc, _Reason} -> true; {badrpc, _Reason} -> true;
@ -41,8 +44,9 @@ prop_node() ->
end). end).
prop_node_with_key() -> prop_node_with_key() ->
?ALL({Node, Key}, nodename_with_key(), ?ALL({Node0, Key}, nodename_with_key(),
begin begin
Node = punch(Node0),
?assert(emqx_rpc:cast(Key, Node, erlang, system_time, [])), ?assert(emqx_rpc:cast(Key, Node, erlang, system_time, [])),
case emqx_rpc:call(Key, Node, erlang, system_time, []) of case emqx_rpc:call(Key, Node, erlang, system_time, []) of
{badrpc, _Reason} -> true; {badrpc, _Reason} -> true;
@ -52,8 +56,9 @@ prop_node_with_key() ->
end). end).
prop_nodes() -> prop_nodes() ->
?ALL(Nodes, nodesname(), ?ALL(Nodes0, nodesname(),
begin begin
Nodes = punch(Nodes0),
case emqx_rpc:multicall(Nodes, erlang, system_time, []) of case emqx_rpc:multicall(Nodes, erlang, system_time, []) of
{badrpc, _Reason} -> true; {badrpc, _Reason} -> true;
{RealResults, RealBadNodes} {RealResults, RealBadNodes}
@ -65,8 +70,9 @@ prop_nodes() ->
end). end).
prop_nodes_with_key() -> prop_nodes_with_key() ->
?ALL({Nodes, Key}, nodesname_with_key(), ?ALL({Nodes0, Key}, nodesname_with_key(),
begin begin
Nodes = punch(Nodes0),
case emqx_rpc:multicall(Key, Nodes, erlang, system_time, []) of case emqx_rpc:multicall(Key, Nodes, erlang, system_time, []) of
{badrpc, _Reason} -> true; {badrpc, _Reason} -> true;
{RealResults, RealBadNodes} {RealResults, RealBadNodes}
@ -82,9 +88,10 @@ prop_nodes_with_key() ->
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
do_setup() -> do_setup() ->
{ok, _} = net_kernel:start([?NODENAME]),
ok = logger:set_primary_config(#{level => warning}),
{ok, _Apps} = application:ensure_all_started(gen_rpc), {ok, _Apps} = application:ensure_all_started(gen_rpc),
ok = application:set_env(gen_rpc, call_receive_timeout, 1), ok = application:set_env(gen_rpc, call_receive_timeout, 1),
ok = emqx_logger:set_log_level(emergency),
ok = meck:new(gen_rpc, [passthrough, no_history]), ok = meck:new(gen_rpc, [passthrough, no_history]),
ok = meck:expect(gen_rpc, multicall, ok = meck:expect(gen_rpc, multicall,
fun(Nodes, Mod, Fun, Args) -> fun(Nodes, Mod, Fun, Args) ->
@ -92,7 +99,7 @@ do_setup() ->
end). end).
do_teardown(_) -> do_teardown(_) ->
ok = emqx_logger:set_log_level(debug), ok = net_kernel:stop(),
ok = application:stop(gen_rpc), ok = application:stop(gen_rpc),
ok = meck:unload(gen_rpc). ok = meck:unload(gen_rpc).
@ -100,6 +107,7 @@ do_teardown(_) ->
%% Generator %% Generator
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
nodename() -> nodename() ->
?LET({NodePrefix, HostName}, ?LET({NodePrefix, HostName},
{node_prefix(), hostname()}, {node_prefix(), hostname()},
@ -130,3 +138,17 @@ text_like() ->
hostname() -> hostname() ->
oneof(["127.0.0.1", "localhost"]). oneof(["127.0.0.1", "localhost"]).
%%--------------------------------------------------------------------
%% Utils
%%--------------------------------------------------------------------
%% After running the props, the `node()` () is only able to return an
%% incorrect node name - `nonode@nohost`, But we want a distributed nodename
%% So, just translate the `nonode@nohost` to ?NODENAME
punch(Nodes) when is_list(Nodes) ->
lists:map(fun punch/1, Nodes);
punch('nonode@nohost') ->
node(); %% Equal to ?NODENAME
punch(GoodBoy) ->
GoodBoy.