blob: b1a185bdc14bd9bfd7f2fb688b1a65b4decd0e0f [file] [log] [blame]
% 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.
-module(ddoc_cache_coverage_test).
-include_lib("couch/include/couch_db.hrl").
-include_lib("eunit/include/eunit.hrl").
-include("ddoc_cache_test.hrl").
coverage_test_() ->
{
setup,
fun ddoc_cache_tutil:start_couch/0,
fun ddoc_cache_tutil:stop_couch/1,
[
fun restart_lru/0,
fun stop_on_evictor_death/0
]
}.
restart_lru() ->
send_bad_messages(ddoc_cache_lru),
?assertEqual(ok, ddoc_cache_lru:terminate(bang, {st, a, b, c})),
?assertEqual({ok, foo}, ddoc_cache_lru:code_change(1, foo, [])).
stop_on_evictor_death() ->
meck:new(ddoc_cache_ev, [passthrough]),
try
Lru = whereis(ddoc_cache_lru),
State = sys:get_state(Lru),
Evictor = element(4, State),
Ref = erlang:monitor(process, Lru),
exit(Evictor, shutdown),
receive
{'DOWN', Ref, _, _, Reason} ->
?assertEqual(shutdown, Reason)
end,
meck:wait(ddoc_cache_ev, event, [lru_init, '_'], 1000),
?assert(whereis(ddoc_cache_lru) /= Lru)
after
meck:unload()
end.
send_bad_messages(Name) ->
wait_for_restart(Name, fun() ->
?assertEqual({invalid_call, foo}, gen_server:call(Name, foo))
end),
wait_for_restart(Name, fun() ->
gen_server:cast(Name, foo)
end),
wait_for_restart(Name, fun() ->
whereis(Name) ! foo
end).
wait_for_restart(Server, Fun) ->
Ref = erlang:monitor(process, whereis(Server)),
Fun(),
receive
{'DOWN', Ref, _, _, _} ->
ok
end,
?assert(is_pid(test_util:wait_process(Server))).