diff --git a/src/emqx_logger.erl b/src/emqx_logger.erl index 0cca94e21..cc167591e 100644 --- a/src/emqx_logger.erl +++ b/src/emqx_logger.erl @@ -43,6 +43,7 @@ , set_primary_log_level/1 , set_log_handler_level/2 , set_log_level/1 + , set_all_log_handlers_level/1 ]). -export([ get_primary_log_level/0 diff --git a/test/emqx_SUITE.erl b/test/emqx_SUITE.erl index 1ea78a446..b612b100b 100644 --- a/test/emqx_SUITE.erl +++ b/test/emqx_SUITE.erl @@ -45,7 +45,6 @@ t_stop_start(_) -> false = emqx:is_running(node()). t_get_env(_) -> - emqx:start(), ?assertEqual(undefined, emqx:get_env(undefined_key)), ?assertEqual(default_value, emqx:get_env(undefined_key, default_value)), application:set_env(emqx, undefined_key, hello), @@ -54,6 +53,7 @@ t_get_env(_) -> application:unset_env(emqx, undefined_key). t_emqx_pubsub_api(_) -> + emqx:start(), true = emqx:is_running(node()), {ok, C} = emqtt:start_link([{host, "localhost"}, {clientid, "myclient"}]), {ok, _} = emqtt:connect(C), diff --git a/test/emqx_logger_SUITE.erl b/test/emqx_logger_SUITE.erl index 0327204cb..5f3b6414f 100644 --- a/test/emqx_logger_SUITE.erl +++ b/test/emqx_logger_SUITE.erl @@ -22,6 +22,20 @@ -include_lib("eunit/include/eunit.hrl"). -define(LOGGER, emqx_logger). +-define(a, "a"). + +-define(PARSE_TRANS_TEST_CODE, + "-module(mytest).\n" + "-logger_header(\"[MyTest]\").\n" + "-export([run/0]).\n" + "-compile({parse_transform, logger_header}).\n" + "run() -> '$logger_header'()."). + +-define(PARSE_TRANS_TEST_CODE2, + "-module(mytest).\n" + "-export([run/0]).\n" + "-compile({parse_transform, logger_header}).\n" + "run() -> '$logger_header'()."). all() -> emqx_ct:all(?MODULE). @@ -82,8 +96,39 @@ t_set_log_level(_) -> ?assertMatch({error, _Error}, ?LOGGER:set_log_level(for_test)), ?assertEqual(ok, ?LOGGER:set_log_level(debug)). -% t_parse_transform(_) -> -% error('TODO'). +t_set_all_log_handlers_level(_) -> + ?assertMatch({error, _Error}, ?LOGGER:set_all_log_handlers_level(for_test)). + +t_parse_transform(_) -> + {ok, Toks, _EndLine} = erl_scan:string(?PARSE_TRANS_TEST_CODE), + FormToks = split_toks_at_dot(Toks), + Forms = [case erl_parse:parse_form(Ts) of + {ok, Form} -> + Form; + {error, Reason} -> + erlang:error({parse_form_error, Ts, Reason}) + end + || Ts <- FormToks], + %ct:log("=====: ~p", [Forms]), + AST1 = emqx_logger:parse_transform(Forms, []), + %ct:log("=====: ~p", [AST1]), + ?assertNotEqual(false, lists:keyfind('$logger_header', 3, AST1)). + +t_parse_transform_empty_header(_) -> + {ok, Toks, _EndLine} = erl_scan:string(?PARSE_TRANS_TEST_CODE2), + FormToks = split_toks_at_dot(Toks), + Forms = [case erl_parse:parse_form(Ts) of + {ok, Form} -> + Form; + {error, Reason} -> + erlang:error({parse_form_error, Ts, Reason}) + end + || Ts <- FormToks], + %ct:log("=====: ~p", [Forms]), + AST2 = emqx_logger:parse_transform(Forms++[{eof, 15}], []), + %ct:log("=====: ~p", [AST2]), + ?assertNotEqual(false, lists:keyfind('$logger_header', 3, AST2)). + t_set_metadata_peername(_) -> ?assertEqual(ok, ?LOGGER:set_metadata_peername("for_test")). @@ -91,3 +136,13 @@ t_set_metadata_peername(_) -> t_set_metadata_clientid(_) -> ?assertEqual(ok, ?LOGGER:set_metadata_clientid(<<>>)), ?assertEqual(ok, ?LOGGER:set_metadata_clientid("for_test")). + + +split_toks_at_dot(AllToks) -> + case lists:splitwith(fun is_no_dot/1, AllToks) of + {Toks, [{dot,_}=Dot]} -> [Toks ++ [Dot]]; + {Toks, [{dot,_}=Dot | Tl]} -> [Toks ++ [Dot] | split_toks_at_dot(Tl)] + end. + +is_no_dot({dot,_}) -> false; +is_no_dot(_) -> true.