diff options
author | Nick Vatamaniuc <vatamane@gmail.com> | 2022-08-18 21:28:13 -0400 |
---|---|---|
committer | Nick Vatamaniuc <nickva@users.noreply.github.com> | 2022-08-19 13:18:59 -0400 |
commit | ca46fa61c728004ead41f768bfc85eb30861360e (patch) | |
tree | 908f13b1d11e3630e7040975c041b9c09281fa33 | |
parent | 9a6875f6b2e1b83bd4128f72fc4c4d01d14dfc7c (diff) | |
download | couchdb-ca46fa61c728004ead41f768bfc85eb30861360e.tar.gz |
Update couch_replicator_many_leaves_tests
Use comon setup and teardown function and the TDEF_FE macros.
Also, remove quite a bit of foreachx and remote boilerplate which is not needed
any longer.
Most of the changes however consisted in update all the db operations to use
fabric instead of couch. Luckily, most of those have fabric equivalents, and
fabric calls are even shorter as they don't need open, re-open and close
operations.
-rw-r--r-- | src/couch_replicator/test/eunit/couch_replicator_many_leaves_tests.erl | 190 |
1 files changed, 67 insertions, 123 deletions
diff --git a/src/couch_replicator/test/eunit/couch_replicator_many_leaves_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_many_leaves_tests.erl index cdc90e2ea..aa5752650 100644 --- a/src/couch_replicator/test/eunit/couch_replicator_many_leaves_tests.erl +++ b/src/couch_replicator/test/eunit/couch_replicator_many_leaves_tests.erl @@ -14,11 +14,7 @@ -include_lib("couch/include/couch_eunit.hrl"). -include_lib("couch/include/couch_db.hrl"). - --import(couch_replicator_test_helper, [ - db_url/1, - replicate/1 -]). +-include("couch_replicator_test.hrl"). -define(DOCS_CONFLICTS, [ {<<"doc1">>, 10}, @@ -32,35 +28,15 @@ -define(i2l(I), integer_to_list(I)). -define(io2b(Io), iolist_to_binary(Io)). -setup_db() -> - DbName = ?tempdb(), - {ok, Db} = couch_db:create(DbName, [?ADMIN_CTX]), - ok = couch_db:close(Db), - DbName. - -teardown_db(DbName) -> - ok = couch_server:delete(DbName, [?ADMIN_CTX]). - -setup() -> - Ctx = test_util:start_couch([couch_replicator]), - Source = setup_db(), - Target = setup_db(), - {Ctx, {Source, Target}}. - -teardown({Ctx, {Source, Target}}) -> - teardown_db(Source), - teardown_db(Target), - ok = test_util:stop_couch(Ctx). - docs_with_many_leaves_test_() -> { "Replicate documents with many leaves", { foreach, - fun setup/0, - fun teardown/1, + fun couch_replicator_test_helper:test_setup/0, + fun couch_replicator_test_helper:test_teardown/1, [ - fun should_populate_replicate_compact/1 + ?TDEF_FE(should_populate_replicate_compact, ?TIMEOUT_EUNIT) ] } }. @@ -70,72 +46,40 @@ docs_with_many_leaves_test_winning_revs_only_test_() -> "Replicate winning revs only for documents with many leaves", { foreach, - fun setup/0, - fun teardown/1, + fun couch_replicator_test_helper:test_setup/0, + fun couch_replicator_test_helper:test_teardown/1, [ - fun should_replicate_winning_revs_only/1 + ?TDEF_FE(should_replicate_winning_revs_only, ?TIMEOUT_EUNIT) ] } }. should_populate_replicate_compact({_Ctx, {Source, Target}}) -> - {inorder, [ - should_populate_source(Source), - should_replicate(Source, Target), - should_verify_target(Source, Target, all_revs), - should_add_attachments_to_source(Source), - should_replicate(Source, Target), - should_verify_target(Source, Target, all_revs) - ]}. + populate_db(Source), + replicate(Source, Target, []), + verify_target(Source, Target, ?DOCS_CONFLICTS, all_revs), + add_attachments(Source, ?NUM_ATTS, ?DOCS_CONFLICTS), + replicate(Source, Target, []), + verify_target(Source, Target, ?DOCS_CONFLICTS, all_revs). should_replicate_winning_revs_only({_Ctx, {Source, Target}}) -> - {inorder, [ - should_populate_source(Source), - should_replicate(Source, Target, [{<<"winning_revs_only">>, true}]), - should_verify_target(Source, Target, winning_revs), - should_add_attachments_to_source(Source), - should_replicate(Source, Target, [{<<"winning_revs_only">>, true}]), - should_verify_target(Source, Target, winning_revs) - ]}. - -should_populate_source(Source) -> - {timeout, ?TIMEOUT_EUNIT, ?_test(populate_db(Source))}. - -should_replicate(Source, Target) -> - should_replicate(Source, Target, []). - -should_replicate(Source, Target, Options) -> - {timeout, ?TIMEOUT_EUNIT, - ?_test(begin - RepObj = { - [ - {<<"source">>, db_url(Source)}, - {<<"target">>, db_url(Target)} - ] ++ Options - }, - replicate(RepObj) - end)}. - -should_verify_target(Source, Target, Mode) -> - {timeout, ?TIMEOUT_EUNIT, - ?_test(begin - {ok, SourceDb} = couch_db:open_int(Source, []), - {ok, TargetDb} = couch_db:open_int(Target, []), - verify_target(SourceDb, TargetDb, ?DOCS_CONFLICTS, Mode), - ok = couch_db:close(SourceDb), - ok = couch_db:close(TargetDb) - end)}. - -should_add_attachments_to_source(Source) -> - {timeout, ?TIMEOUT_EUNIT, - ?_test(begin - {ok, SourceDb} = couch_db:open_int(Source, [?ADMIN_CTX]), - add_attachments(SourceDb, ?NUM_ATTS, ?DOCS_CONFLICTS), - ok = couch_db:close(SourceDb) - end)}. + populate_db(Source), + replicate(Source, Target, [{<<"winning_revs_only">>, true}]), + verify_target(Source, Target, ?DOCS_CONFLICTS, winning_revs), + add_attachments(Source, ?NUM_ATTS, ?DOCS_CONFLICTS), + replicate(Source, Target, [{<<"winning_revs_only">>, true}]), + verify_target(Source, Target, ?DOCS_CONFLICTS, winning_revs). + +replicate(Source, Target, Options) -> + RepObj = { + [ + {<<"source">>, db_url(Source)}, + {<<"target">>, db_url(Target)} + ] ++ Options + }, + couch_replicator_test_helper:replicate(RepObj). populate_db(DbName) -> - {ok, Db} = couch_db:open_int(DbName, [?ADMIN_CTX]), lists:foreach( fun({DocId, NumConflicts}) -> Value = <<"0">>, @@ -143,22 +87,20 @@ populate_db(DbName) -> id = DocId, body = {[{<<"value">>, Value}]} }, - {ok, {Pos, Rev}} = couch_db:update_doc(Db, Doc, [?ADMIN_CTX]), + {ok, {Pos, Rev}} = fabric:update_doc(DbName, Doc, [?ADMIN_CTX]), % Update first initial doc rev twice to ensure it's always a winner - {ok, Db2} = couch_db:reopen(Db), Doc1 = Doc#doc{revs = {Pos, [Rev]}}, - {ok, _} = couch_db:update_doc(Db2, Doc1, [?ADMIN_CTX]), - {ok, _} = add_doc_siblings(Db, DocId, NumConflicts) + {ok, _} = fabric:update_doc(DbName, Doc1, [?ADMIN_CTX]), + {ok, _} = add_doc_siblings(DbName, DocId, NumConflicts) end, ?DOCS_CONFLICTS - ), - couch_db:close(Db). + ). add_doc_siblings(Db, DocId, NumLeaves) when NumLeaves > 0 -> add_doc_siblings(Db, DocId, NumLeaves, [], []). add_doc_siblings(Db, _DocId, 0, AccDocs, AccRevs) -> - {ok, []} = couch_db:update_docs(Db, AccDocs, [], ?REPLICATED_CHANGES), + {ok, []} = fabric:update_docs(Db, AccDocs, [?REPLICATED_CHANGES, ?ADMIN_CTX]), {ok, AccRevs}; add_doc_siblings(Db, DocId, NumLeaves, AccDocs, AccRevs) -> Value = ?l2b(?i2l(NumLeaves)), @@ -179,18 +121,8 @@ add_doc_siblings(Db, DocId, NumLeaves, AccDocs, AccRevs) -> verify_target(_SourceDb, _TargetDb, [], _Mode) -> ok; verify_target(SourceDb, TargetDb, [{DocId, NumConflicts} | Rest], all_revs) -> - {ok, SourceLookups} = couch_db:open_doc_revs( - SourceDb, - DocId, - all, - [conflicts, deleted_conflicts] - ), - {ok, TargetLookups} = couch_db:open_doc_revs( - TargetDb, - DocId, - all, - [conflicts, deleted_conflicts] - ), + SourceLookups = open_revs_conflicts(SourceDb, DocId), + TargetLookups = open_revs_conflicts(TargetDb, DocId), SourceDocs = [Doc || {ok, Doc} <- SourceLookups], TargetDocs = [Doc || {ok, Doc} <- TargetLookups], Total = NumConflicts + 1, @@ -205,14 +137,13 @@ verify_target(SourceDb, TargetDb, [{DocId, NumConflicts} | Rest], all_revs) -> ), verify_target(SourceDb, TargetDb, Rest, all_revs); verify_target(SourceDb, TargetDb, [{DocId, _NumConflicts} | Rest], winning_revs) -> - {ok, SourceWinner} = couch_db:open_doc(SourceDb, DocId), - {ok, TargetWinner} = couch_db:open_doc(TargetDb, DocId), + SourceWinner = open_doc(SourceDb, DocId), + TargetWinner = open_doc(TargetDb, DocId), SourceWinnerJson = couch_doc:to_json_obj(SourceWinner, [attachments]), TargetWinnerJson = couch_doc:to_json_obj(TargetWinner, [attachments]), % Source winner is the same as the target winner ?assertEqual(SourceWinnerJson, TargetWinnerJson), - Opts = [conflicts, deleted_conflicts], - {ok, TargetAll} = couch_db:open_doc_revs(TargetDb, DocId, all, Opts), + TargetAll = open_revs_conflicts(TargetDb, DocId), % There is only one version on the target ?assert(length(TargetAll) == 1), verify_target(SourceDb, TargetDb, Rest, winning_revs). @@ -220,7 +151,7 @@ verify_target(SourceDb, TargetDb, [{DocId, _NumConflicts} | Rest], winning_revs) add_attachments(_SourceDb, _NumAtts, []) -> ok; add_attachments(SourceDb, NumAtts, [{DocId, NumConflicts} | Rest]) -> - {ok, SourceLookups} = couch_db:open_doc_revs(SourceDb, DocId, all, []), + SourceLookups = open_revs(SourceDb, DocId, []), SourceDocs = [Doc || {ok, Doc} <- SourceLookups], Total = NumConflicts + 1, ?assertEqual(Total, length(SourceDocs)), @@ -228,20 +159,7 @@ add_attachments(SourceDb, NumAtts, [{DocId, NumConflicts} | Rest]) -> fun(#doc{atts = Atts, revs = {Pos, [Rev | _]}} = Doc, Acc) -> NewAtts = lists:foldl( fun(I, AttAcc) -> - AttData = crypto:strong_rand_bytes(100), - NewAtt = couch_att:new([ - {name, - ?io2b([ - "att_", - ?i2l(I), - "_", - couch_doc:rev_to_str({Pos, Rev}) - ])}, - {type, <<"application/foobar">>}, - {att_len, byte_size(AttData)}, - {data, AttData} - ]), - [NewAtt | AttAcc] + [make_att(I, Pos, Rev, 100) | AttAcc] end, [], lists:seq(1, NumAtts) @@ -251,7 +169,33 @@ add_attachments(SourceDb, NumAtts, [{DocId, NumConflicts} | Rest]) -> [], SourceDocs ), - {ok, UpdateResults} = couch_db:update_docs(SourceDb, NewDocs, []), + {ok, UpdateResults} = fabric:update_docs(SourceDb, NewDocs, [?ADMIN_CTX]), NewRevs = [R || {ok, R} <- UpdateResults], ?assertEqual(length(NewDocs), length(NewRevs)), add_attachments(SourceDb, NumAtts, Rest). + +make_att(Id, Pos, Rev, Size) -> + AttData = crypto:strong_rand_bytes(Size), + RevStr = couch_doc:rev_to_str({Pos, Rev}), + couch_att:new([ + {name, ?io2b(["att_", ?i2l(Id), "_", RevStr])}, + {type, <<"application/foobar">>}, + {att_len, byte_size(AttData)}, + {data, AttData} + ]). + +db_url(DbName) -> + couch_replicator_test_helper:cluster_db_url(DbName). + +open_revs_conflicts(DbName, Id) -> + Opts = [conflicts, deleted_conflicts], + {ok, Lookups} = fabric:open_revs(DbName, Id, all, Opts), + Lookups. + +open_revs(DbName, Id, Opts) -> + {ok, Lookups} = fabric:open_revs(DbName, Id, all, Opts), + Lookups. + +open_doc(DbName, Id) -> + {ok, Doc} = fabric:open_doc(DbName, Id, [?ADMIN_CTX]), + Doc. |