summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_disk_monitor.erl13
-rw-r--r--test/src/rabbit_tests.erl24
2 files changed, 34 insertions, 3 deletions
diff --git a/src/rabbit_disk_monitor.erl b/src/rabbit_disk_monitor.erl
index 518000eb64..c65631a24c 100644
--- a/src/rabbit_disk_monitor.erl
+++ b/src/rabbit_disk_monitor.erl
@@ -40,7 +40,8 @@
min_interval,
max_interval,
timer,
- alarmed
+ alarmed,
+ enabled
}).
%%----------------------------------------------------------------------------
@@ -96,7 +97,8 @@ init([Limit]) ->
State = #state{dir = Dir,
min_interval = ?DEFAULT_MIN_DISK_CHECK_INTERVAL,
max_interval = ?DEFAULT_MAX_DISK_CHECK_INTERVAL,
- alarmed = false},
+ alarmed = false,
+ enabled = true},
case {catch get_disk_free(Dir),
vm_memory_monitor:get_total_memory()} of
{N1, N2} when is_integer(N1), is_integer(N2) ->
@@ -104,12 +106,17 @@ init([Limit]) ->
Err ->
rabbit_log:info("Disabling disk free space monitoring "
"on unsupported platform:~n~p~n", [Err]),
- {stop, unsupported_platform}
+ {ok, State#state{enabled = false}}
end.
handle_call(get_disk_free_limit, _From, State = #state{limit = Limit}) ->
{reply, Limit, State};
+handle_call({set_disk_free_limit, _}, _From, #state{enabled = false} = State) ->
+ rabbit_log:info("Cannot set disk free limit: "
+ "disabled disk free space monitoring", []),
+ {reply, ok, State};
+
handle_call({set_disk_free_limit, Limit}, _From, State) ->
{reply, ok, set_disk_limits(State, Limit)};
diff --git a/test/src/rabbit_tests.erl b/test/src/rabbit_tests.erl
index 0997478b66..e85cf98864 100644
--- a/test/src/rabbit_tests.erl
+++ b/test/src/rabbit_tests.erl
@@ -90,6 +90,13 @@ all_tests0() ->
passed = test_memory_high_watermark(),
passed = on_disk_store_tunable_parameter_validation_test:test_msg_store_parameter_validation(),
passed = credit_flow_test:test_credit_flow_settings(),
+ passed =
+ do_if_meck_enabled(
+ fun disk_monitor_test/0,
+ fun () ->
+ io:format("Skipping meck dependent tests ~n"),
+ passed
+ end),
passed.
@@ -101,6 +108,12 @@ do_if_secondary_node(Up, Down) ->
pang -> Down(SecondaryNode)
end.
+do_if_meck_enabled(Enabled, Disabled) ->
+ case code:which(meck) of
+ non_existing -> Disabled();
+ _ -> Enabled()
+ end.
+
setup_cluster() ->
do_if_secondary_node(
fun (SecondaryNode) ->
@@ -3060,3 +3073,14 @@ test_memory_high_watermark() ->
ok = control_action(set_vm_memory_high_watermark, [float_to_list(HWM)]),
passed.
+
+disk_monitor_test() ->
+ %% Issue: rabbitmq-server #91
+ %% os module could be mocked using 'unstick', however it may have undesired
+ %% side effects in following tests. Thus, we mock at rabbit_misc level
+ ok = meck:new(rabbit_misc, [passthrough]),
+ ok = meck:expect(rabbit_misc, os_cmd, fun(_) -> "\n" end),
+ ok = rabbit_sup:stop_child(rabbit_disk_monitor_sup),
+ ok = rabbit_sup:start_delayed_restartable_child(rabbit_disk_monitor, [1000]),
+ meck:unload(rabbit_misc),
+ passed.