|
|
@@ -21,64 +21,45 @@
|
|
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
|
|
--define(WAIT(PATTERN, TIMEOUT),
|
|
|
- receive
|
|
|
- PATTERN ->
|
|
|
- ok
|
|
|
- after
|
|
|
- TIMEOUT ->
|
|
|
- error(timeout)
|
|
|
- end).
|
|
|
-
|
|
|
all() -> emqx_ct:all(?MODULE).
|
|
|
|
|
|
-init_per_suite(Config) ->
|
|
|
- application:ensure_all_started(sasl),
|
|
|
+init_per_testcase(t_api, Config) ->
|
|
|
+ emqx_ct_helpers:boot_modules(all),
|
|
|
+ emqx_ct_helpers:start_apps([],
|
|
|
+ fun(emqx) ->
|
|
|
+ application:set_env(emqx, vm_mon, [{check_interval, 1},
|
|
|
+ {process_high_watermark, 80},
|
|
|
+ {process_low_watermark, 75}]),
|
|
|
+ ok;
|
|
|
+ (_) ->
|
|
|
+ ok
|
|
|
+ end),
|
|
|
+ Config;
|
|
|
+init_per_testcase(_, Config) ->
|
|
|
+ emqx_ct_helpers:boot_modules(all),
|
|
|
+ emqx_ct_helpers:start_apps([]),
|
|
|
Config.
|
|
|
|
|
|
-end_per_suite(_Config) ->
|
|
|
- application:stop(sasl).
|
|
|
-
|
|
|
+end_per_testcase(_, _Config) ->
|
|
|
+ emqx_ct_helpers:stop_apps([]).
|
|
|
+
|
|
|
t_api(_) ->
|
|
|
- meck:new(alarm_handler, [passthrough, no_history]),
|
|
|
- Tester = self(),
|
|
|
- Ref = make_ref(),
|
|
|
- try
|
|
|
- meck:expect(alarm_handler, set_alarm,
|
|
|
- fun(What) ->
|
|
|
- Res = meck:passthrough([What]),
|
|
|
- Tester ! {Ref, set_alarm, What},
|
|
|
- Res
|
|
|
- end),
|
|
|
- meck:expect(alarm_handler, clear_alarm,
|
|
|
- fun(What) ->
|
|
|
- Res = meck:passthrough([What]),
|
|
|
- Tester ! {Ref, clear_alarm, What},
|
|
|
- Res
|
|
|
- end),
|
|
|
- gen_event:swap_handler(alarm_handler, {emqx_alarm_handler, swap}, {alarm_handler, []}),
|
|
|
- {ok, _} = emqx_vm_mon:start_link([{check_interval, 1},
|
|
|
- {process_high_watermark, 80},
|
|
|
- {process_low_watermark, 75}]),
|
|
|
- timer:sleep(emqx_vm_mon:get_check_interval() * 1000),
|
|
|
- emqx_vm_mon:set_process_high_watermark(0),
|
|
|
- emqx_vm_mon:set_process_low_watermark(60),
|
|
|
- ?assertEqual(0, emqx_vm_mon:get_process_high_watermark()),
|
|
|
- ?assertEqual(60, emqx_vm_mon:get_process_low_watermark()),
|
|
|
- ?WAIT({Ref, set_alarm, {too_many_processes, _Count}}, 2000),
|
|
|
- ?assertEqual(true, lists:keymember(too_many_processes, 1, alarm_handler:get_alarms())),
|
|
|
- emqx_vm_mon:set_process_high_watermark(80),
|
|
|
- emqx_vm_mon:set_process_low_watermark(75),
|
|
|
- ?assertEqual(80, emqx_vm_mon:get_process_high_watermark()),
|
|
|
- ?assertEqual(75, emqx_vm_mon:get_process_low_watermark()),
|
|
|
- ?WAIT({Ref, clear_alarm, too_many_processes}, 3000),
|
|
|
- ?assertEqual(false, lists:keymember(too_many_processes, 1, alarm_handler:get_alarms())),
|
|
|
- emqx_vm_mon:set_check_interval(20),
|
|
|
- ?assertEqual(20, emqx_vm_mon:get_check_interval()),
|
|
|
- ?assertEqual(ignored, gen_server:call(emqx_vm_mon, ignored)),
|
|
|
- ?assertEqual(ok, gen_server:cast(emqx_vm_mon, ignored)),
|
|
|
- ?assertEqual(ignored, emqx_vm_mon ! ignored)
|
|
|
- after
|
|
|
- meck:unload(alarm_handler)
|
|
|
- end.
|
|
|
+ ?assertEqual(1, emqx_vm_mon:get_check_interval()),
|
|
|
+ ?assertEqual(80, emqx_vm_mon:get_process_high_watermark()),
|
|
|
+ ?assertEqual(75, emqx_vm_mon:get_process_low_watermark()),
|
|
|
+ emqx_vm_mon:set_process_high_watermark(0),
|
|
|
+ emqx_vm_mon:set_process_low_watermark(60),
|
|
|
+ ?assertEqual(0, emqx_vm_mon:get_process_high_watermark()),
|
|
|
+ ?assertEqual(60, emqx_vm_mon:get_process_low_watermark()),
|
|
|
+ timer:sleep(emqx_vm_mon:get_check_interval() * 1000 * 2),
|
|
|
+ ?assert(is_existing(too_many_processes, emqx_alarm:get_alarms(activated))),
|
|
|
+ emqx_vm_mon:set_process_high_watermark(70),
|
|
|
+ timer:sleep(emqx_vm_mon:get_check_interval() * 1000 * 2),
|
|
|
+ ?assertNot(is_existing(too_many_processes, emqx_alarm:get_alarms(activated))).
|
|
|
|
|
|
+is_existing(Name, [#{name := Name} | _More]) ->
|
|
|
+ true;
|
|
|
+is_existing(Name, [_Alarm | More]) ->
|
|
|
+ is_existing(Name, More);
|
|
|
+is_existing(_Name, []) ->
|
|
|
+ false.
|