summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Vatamaniuc <vatamane@apache.org>2020-03-21 19:31:28 -0400
committerNick Vatamaniuc <nickva@users.noreply.github.com>2020-03-21 19:47:04 -0400
commita008c6d0b5da269d519bd2a6ef3aa6e9aa22abc2 (patch)
tree94f7dd64c9caf997afaca020c63439bad45b7c8c
parente520294c7ee3f55c3e8cc7d528ff37a5a93c800f (diff)
downloadcouchdb-a008c6d0b5da269d519bd2a6ef3aa6e9aa22abc2.tar.gz
Add a fabric doc fold test when db is re-created
Check that on a transaction restarts `database_does_not_exist` error is thrown properly if database was re-created. Also we forgot to properly unload the mocked erlfdb module in `tx_too_old_mock_erlfdb/0` so we make sure to do that, otherwise it has a chance of messing up subsequent tests.
-rw-r--r--src/fabric/test/fabric2_doc_fold_tests.erl33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/fabric/test/fabric2_doc_fold_tests.erl b/src/fabric/test/fabric2_doc_fold_tests.erl
index 7c95dd372..0695b450b 100644
--- a/src/fabric/test/fabric2_doc_fold_tests.erl
+++ b/src/fabric/test/fabric2_doc_fold_tests.erl
@@ -43,7 +43,8 @@ doc_fold_test_() ->
?TDEF_FE(fold_docs_with_limit),
?TDEF_FE(fold_docs_with_skip),
?TDEF_FE(fold_docs_with_skip_and_limit),
- ?TDEF_FE(fold_docs_tx_too_old)
+ ?TDEF_FE(fold_docs_tx_too_old),
+ ?TDEF_FE(fold_docs_db_recreated)
]
}
}
@@ -69,12 +70,14 @@ setup() ->
{ok, Rev} = fabric2_db:update_doc(Db, Doc, []),
{DocId, {[{rev, couch_doc:rev_to_str(Rev)}]}}
end, lists:seq(1, ?DOC_COUNT)),
+ meck:new(erlfdb, [passthrough]),
fabric2_test_util:tx_too_old_mock_erlfdb(),
{Db, lists:sort(DocIdRevs)}.
cleanup({Db, _DocIdRevs}) ->
fabric2_test_util:tx_too_old_reset_errors(),
+ meck:unload(),
ok = fabric2_db:delete(fabric2_db:name(Db), []).
@@ -216,6 +219,34 @@ fold_docs_tx_too_old({Db, _DocIdRevs}) ->
?assertEqual({ok, Expected}, FoldDocsFun()).
+fold_docs_db_recreated({Db, _DocIdRevs}) ->
+ DbName = fabric2_db:name(Db),
+
+ RecreateDb = fun() ->
+ ok = fabric2_db:delete(DbName, []),
+ {ok, _} = fabric2_db:create(DbName, [])
+ end,
+
+ FoldFun = fun
+ ({meta, _}, Acc) ->
+ {ok, Acc};
+ ({row, Row}, Acc) ->
+ fabric2_test_util:tx_too_old_raise_in_user_fun(),
+ % After meta and one row emitted, recreate the db
+ case length(Acc) =:= 1 of
+ true -> RecreateDb();
+ false -> ok
+ end,
+ {ok, [Row | Acc]};
+ (complete, Acc) ->
+ {ok, Acc}
+ end,
+ % Blow up in user fun after emitting two rows
+ fabric2_test_util:tx_too_old_setup_errors({2, 1}, 0),
+ ?assertError(database_does_not_exist, fabric2_db:fold_docs(Db, FoldFun,
+ [], [{restart_tx, true}])).
+
+
check_all_combos(Db, StartKey, EndKey, Rows) ->
Opts1 = make_opts(fwd, StartKey, EndKey, true),
{ok, {?DOC_COUNT, Rows1}} =