diff options
Diffstat (limited to 'src/couch_pse_tests/src/cpse_test_fold_changes.erl')
-rw-r--r-- | src/couch_pse_tests/src/cpse_test_fold_changes.erl | 79 |
1 files changed, 38 insertions, 41 deletions
diff --git a/src/couch_pse_tests/src/cpse_test_fold_changes.erl b/src/couch_pse_tests/src/cpse_test_fold_changes.erl index 436396276..91f7c63e9 100644 --- a/src/couch_pse_tests/src/cpse_test_fold_changes.erl +++ b/src/couch_pse_tests/src/cpse_test_fold_changes.erl @@ -14,37 +14,34 @@ -compile(export_all). -compile(nowarn_export_all). - -include_lib("eunit/include/eunit.hrl"). -include_lib("couch/include/couch_db.hrl"). - -define(NUM_DOCS, 25). - setup_each() -> {ok, Db} = cpse_util:create_db(), Db. - teardown_each(Db) -> ok = couch_server:delete(couch_db:name(Db), []). - cpse_empty_changes(Db) -> ?assertEqual(0, couch_db_engine:count_changes_since(Db, 0)), - ?assertEqual({ok, []}, - couch_db_engine:fold_changes(Db, 0, fun fold_fun/2, [], [])). - + ?assertEqual( + {ok, []}, + couch_db_engine:fold_changes(Db, 0, fun fold_fun/2, [], []) + ). cpse_single_change(Db1) -> Actions = [{create, {<<"a">>, {[]}}}], {ok, Db2} = cpse_util:apply_actions(Db1, Actions), ?assertEqual(1, couch_db_engine:count_changes_since(Db2, 0)), - ?assertEqual({ok, [{<<"a">>, 1}]}, - couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], [])). - + ?assertEqual( + {ok, [{<<"a">>, 1}]}, + couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []) + ). cpse_two_changes(Db1) -> Actions = [ @@ -55,10 +52,9 @@ cpse_two_changes(Db1) -> ?assertEqual(2, couch_db_engine:count_changes_since(Db2, 0)), {ok, Changes} = - couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), + couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), ?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes)). - cpse_two_changes_batch(Db1) -> Actions = [ {batch, [ @@ -70,10 +66,9 @@ cpse_two_changes_batch(Db1) -> ?assertEqual(2, couch_db_engine:count_changes_since(Db2, 0)), {ok, Changes} = - couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), + couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), ?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes)). - cpse_two_changes_batch_sorted(Db1) -> Actions = [ {batch, [ @@ -85,10 +80,9 @@ cpse_two_changes_batch_sorted(Db1) -> ?assertEqual(2, couch_db_engine:count_changes_since(Db2, 0)), {ok, Changes} = - couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), + couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), ?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes)). - cpse_update_one(Db1) -> Actions = [ {create, {<<"a">>, {[]}}}, @@ -97,9 +91,10 @@ cpse_update_one(Db1) -> {ok, Db2} = cpse_util:apply_actions(Db1, Actions), ?assertEqual(1, couch_db_engine:count_changes_since(Db2, 0)), - ?assertEqual({ok, [{<<"a">>, 2}]}, - couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], [])). - + ?assertEqual( + {ok, [{<<"a">>, 2}]}, + couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []) + ). cpse_update_first_of_two(Db1) -> Actions = [ @@ -111,10 +106,9 @@ cpse_update_first_of_two(Db1) -> ?assertEqual(2, couch_db_engine:count_changes_since(Db2, 0)), {ok, Changes} = - couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), + couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), ?assertEqual([{<<"b">>, 2}, {<<"a">>, 3}], lists:reverse(Changes)). - cpse_update_second_of_two(Db1) -> Actions = [ {create, {<<"a">>, {[]}}}, @@ -125,14 +119,18 @@ cpse_update_second_of_two(Db1) -> ?assertEqual(2, couch_db_engine:count_changes_since(Db2, 0)), {ok, Changes} = - couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), + couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []), ?assertEqual([{<<"a">>, 1}, {<<"b">>, 3}], lists:reverse(Changes)). - cpse_check_mutation_ordering(Db1) -> - Actions = shuffle(lists:map(fun(Seq) -> - {create, {docid(Seq), {[]}}} - end, lists:seq(1, ?NUM_DOCS))), + Actions = shuffle( + lists:map( + fun(Seq) -> + {create, {docid(Seq), {[]}}} + end, + lists:seq(1, ?NUM_DOCS) + ) + ), DocIdOrder = [DocId || {_, {DocId, _}} <- Actions], DocSeqs = lists:zip(DocIdOrder, lists:seq(1, ?NUM_DOCS)), @@ -141,45 +139,44 @@ cpse_check_mutation_ordering(Db1) -> % First lets see that we can get the correct % suffix/prefix starting at every update sequence - lists:foreach(fun(Seq) -> - {ok, Suffix} = + lists:foreach( + fun(Seq) -> + {ok, Suffix} = couch_db_engine:fold_changes(Db2, Seq, fun fold_fun/2, [], []), - ?assertEqual(lists:nthtail(Seq, DocSeqs), lists:reverse(Suffix)), + ?assertEqual(lists:nthtail(Seq, DocSeqs), lists:reverse(Suffix)), - {ok, Prefix} = couch_db_engine:fold_changes( - Db2, Seq, fun fold_fun/2, [], [{dir, rev}]), - ?assertEqual(lists:sublist(DocSeqs, Seq + 1), Prefix) - end, lists:seq(0, ?NUM_DOCS)), + {ok, Prefix} = couch_db_engine:fold_changes( + Db2, Seq, fun fold_fun/2, [], [{dir, rev}] + ), + ?assertEqual(lists:sublist(DocSeqs, Seq + 1), Prefix) + end, + lists:seq(0, ?NUM_DOCS) + ), ok = do_mutation_ordering(Db2, ?NUM_DOCS + 1, DocSeqs, []). - do_mutation_ordering(Db, _Seq, [], FinalDocSeqs) -> {ok, RevOrder} = couch_db_engine:fold_changes(Db, 0, fun fold_fun/2, [], []), ?assertEqual(FinalDocSeqs, lists:reverse(RevOrder)), ok; - do_mutation_ordering(Db, Seq, [{DocId, _OldSeq} | Rest], DocSeqAcc) -> Actions = [{update, {DocId, {[]}}}], {ok, NewDb} = cpse_util:apply_actions(Db, Actions), NewAcc = DocSeqAcc ++ [{DocId, Seq}], Expected = Rest ++ NewAcc, {ok, RevOrder} = - couch_db_engine:fold_changes(NewDb, 0, fun fold_fun/2, [], []), + couch_db_engine:fold_changes(NewDb, 0, fun fold_fun/2, [], []), ?assertEqual(Expected, lists:reverse(RevOrder)), do_mutation_ordering(NewDb, Seq + 1, Rest, NewAcc). - shuffle(List) -> Paired = [{couch_rand:uniform(), I} || I <- List], Sorted = lists:sort(Paired), [I || {_, I} <- Sorted]. - -fold_fun(#full_doc_info{id=Id, update_seq=Seq}, Acc) -> +fold_fun(#full_doc_info{id = Id, update_seq = Seq}, Acc) -> {ok, [{Id, Seq} | Acc]}. - docid(I) -> Str = io_lib:format("~4..0b", [I]), iolist_to_binary(Str). |