diff options
Diffstat (limited to 'src/ddoc_cache/test/ddoc_cache_coverage_test.erl')
-rw-r--r-- | src/ddoc_cache/test/ddoc_cache_coverage_test.erl | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/ddoc_cache/test/ddoc_cache_coverage_test.erl b/src/ddoc_cache/test/ddoc_cache_coverage_test.erl new file mode 100644 index 000000000..b1a185bdc --- /dev/null +++ b/src/ddoc_cache/test/ddoc_cache_coverage_test.erl @@ -0,0 +1,77 @@ +% 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))). |