summaryrefslogtreecommitdiff
path: root/src/fabric/test/fabric2_db_crud_tests.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/fabric/test/fabric2_db_crud_tests.erl')
-rw-r--r--src/fabric/test/fabric2_db_crud_tests.erl49
1 files changed, 46 insertions, 3 deletions
diff --git a/src/fabric/test/fabric2_db_crud_tests.erl b/src/fabric/test/fabric2_db_crud_tests.erl
index 849d090bc..b1e15aa2e 100644
--- a/src/fabric/test/fabric2_db_crud_tests.erl
+++ b/src/fabric/test/fabric2_db_crud_tests.erl
@@ -13,6 +13,7 @@
-module(fabric2_db_crud_tests).
+-include_lib("fabric/include/fabric2.hrl").
-include_lib("couch/include/couch_eunit.hrl").
-include_lib("eunit/include/eunit.hrl").
-include("fabric2_test.hrl").
@@ -61,6 +62,25 @@ crud_test_() ->
}.
+scheduled_db_remove_error_test_() ->
+ {
+ "Test scheduled database remove operations",
+ {
+ setup,
+ fun setup_all/0,
+ fun teardown_all/1,
+ {
+ foreach,
+ fun setup/0,
+ fun cleanup/1,
+ [
+ ?TDEF_FE(scheduled_remove_deleted_dbs_with_error)
+ ]
+ }
+ }
+ }.
+
+
setup_all() ->
meck:new(config, [passthrough]),
meck:expect(config, get_integer, fun
@@ -75,7 +95,9 @@ setup_all() ->
teardown_all(Ctx) ->
- meck:unload(),
+ meck:unload(erlfdb),
+ meck:unload(config),
+ meck:unload(fabric2_db_expiration),
test_util:stop_couch(Ctx).
@@ -229,7 +251,7 @@ scheduled_remove_deleted_db(_) ->
?assertEqual(ok, fabric2_db:delete(DbName, [])),
?assertEqual(false, ets:member(fabric2_server, DbName)),
- meck:wait(fabric2_db_expiration, cleanup, '_', 5000),
+ meck:wait(fabric2_db_expiration, process_expirations, '_', 5000),
{ok, Infos} = fabric2_db:list_deleted_dbs_info(),
DeletedDbs = [proplists:get_value(db_name, Info) || Info <- Infos],
@@ -241,7 +263,7 @@ scheduled_remove_deleted_dbs(_) ->
ok = config:set("couchdb", "db_expiration_batch", "2", false),
ok = config:set("couchdb", "enable_database_recovery", "true", false),
DbNameList = [create_and_delete_db() || _I <- lists:seq(1, 5)],
- meck:wait(fabric2_db_expiration, cleanup, '_', 5000),
+ meck:wait(fabric2_db_expiration, process_expirations, '_', 5000),
{ok, Infos} = fabric2_db:list_deleted_dbs_info(),
DeletedDbs = [proplists:get_value(db_name, Info) || Info <- Infos],
@@ -250,6 +272,27 @@ scheduled_remove_deleted_dbs(_) ->
end, DbNameList).
+scheduled_remove_deleted_dbs_with_error(_) ->
+ meck:expect(fabric2_db_expiration, process_expirations, fun(_, _) ->
+ throw(process_expirations_error)
+ end),
+
+ {Pid, Ref} = spawn_monitor(fun() ->
+ fabric2_db_expiration:cleanup(true)
+ end),
+ receive
+ {'DOWN', Ref, process, Pid, Error} ->
+ ?assertMatch({job_error, process_expirations_error, _}, Error)
+ end,
+ JobType = <<"db_expiration">>,
+ JobId = <<"db_expiration_job">>,
+ FQJobId = <<JobId/binary, "-", 1:16/integer>>,
+
+ ?assertMatch({ok, _}, couch_jobs:get_job_data(undefined, JobType, FQJobId)),
+ {ok, JobState} = couch_jobs:get_job_state(undefined, JobType, FQJobId),
+ ?assert(lists:member(JobState, [pending, running])).
+
+
old_db_handle(_) ->
% db hard deleted
DbName1 = ?tempdb(),