summaryrefslogtreecommitdiff
path: root/src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl')
-rw-r--r--src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl
new file mode 100644
index 000000000..73d644f71
--- /dev/null
+++ b/src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl
@@ -0,0 +1,107 @@
+% 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_open_test).
+
+-export([
+ dbname/1,
+ ddocid/1,
+ recover/1,
+ insert/2
+]).
+
+-include_lib("couch/include/couch_db.hrl").
+-include_lib("eunit/include/eunit.hrl").
+-include("ddoc_cache_test.hrl").
+
+
+%% behaviour callbacks
+dbname(DbName) ->
+ DbName.
+
+
+ddocid(_) ->
+ no_ddocid.
+
+
+recover({deleted, _DbName}) ->
+ erlang:error(database_does_not_exist);
+recover(DbName) ->
+ ddoc_cache_entry_validation_funs:recover(DbName).
+
+
+insert(_, _) ->
+ ok.
+
+
+start_couch() ->
+ Ctx = ddoc_cache_tutil:start_couch(),
+ meck:new(ddoc_cache_entry_validation_funs, [passthrough]),
+ meck:expect(ddoc_cache_entry_validation_funs, recover,
+ ['_'], meck:passthrough()),
+ Ctx.
+
+
+stop_couch(Ctx) ->
+ meck:unload(),
+ ddoc_cache_tutil:stop_couch(Ctx).
+
+
+check_open_error_test_() ->
+ {
+ setup,
+ fun start_couch/0,
+ fun stop_couch/1,
+ ddoc_cache_tutil:with([
+ {"should_return_database_does_not_exist",
+ fun should_return_database_does_not_exist/1},
+ {"should_not_call_recover_when_database_does_not_exist",
+ fun should_not_call_recover_when_database_does_not_exist/1},
+ {"should_call_recover_when_needed",
+ fun should_call_recover_when_needed/1},
+ {"should_call_recover_when_needed",
+ fun should_not_crash_lru_process/1}
+ ])
+ }.
+
+
+should_return_database_does_not_exist({DbName, _}) ->
+ ?assertError(
+ database_does_not_exist,
+ ddoc_cache_lru:open({?MODULE, {deleted, DbName}})).
+
+
+should_not_call_recover_when_database_does_not_exist({DbName, _}) ->
+ meck:reset(ddoc_cache_entry_validation_funs),
+ ?assertError(
+ database_does_not_exist,
+ ddoc_cache_lru:open({?MODULE, {deleted, DbName}})),
+ ?assertError(
+ timeout,
+ meck:wait(1, ddoc_cache_entry_validation_funs, recover, '_', 100)).
+
+
+should_call_recover_when_needed({DbName, _}) ->
+ meck:reset(ddoc_cache_entry_validation_funs),
+ ddoc_cache_lru:open({?MODULE, DbName}),
+ ?assertEqual(
+ ok,
+ meck:wait(1, ddoc_cache_entry_validation_funs, recover, '_', 500)).
+
+
+should_not_crash_lru_process({DbName, _}) ->
+ LRUPid = whereis(ddoc_cache_lru),
+ ?assert(is_process_alive(LRUPid)),
+ ?assertError(
+ database_does_not_exist,
+ ddoc_cache_lru:open({?MODULE, {deleted, DbName}})),
+ ?assert(is_process_alive(LRUPid)).