You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2020/02/12 23:17:25 UTC

[couchdb] 09/13: fixup: db size tests

This is an automated email from the ASF dual-hosted git repository.

davisp pushed a commit to branch prototype/fdb-layer-get-dbs-info
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 052610cc700c7429bae2dd58f52ee29fd48e278b
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Mon Feb 10 12:42:50 2020 -0600

    fixup: db size tests
---
 src/fabric/test/fabric2_db_size_tests.erl | 100 ++++++++++++++++++++----------
 1 file changed, 68 insertions(+), 32 deletions(-)

diff --git a/src/fabric/test/fabric2_db_size_tests.erl b/src/fabric/test/fabric2_db_size_tests.erl
index fc95e0e..f9d514d 100644
--- a/src/fabric/test/fabric2_db_size_tests.erl
+++ b/src/fabric/test/fabric2_db_size_tests.erl
@@ -19,6 +19,24 @@
 -include("fabric2_test.hrl").
 
 
+-define(DIFF(Db, Change, Fun), begin
+        ((fun() ->
+            __Before = db_size(Db),
+            __Result = Fun(),
+            __After = db_size(Db),
+            ?debugFmt("~p - ~p == ~p ?= ~p", [
+                __After,
+                __Before,
+                __After - __Before,
+                Change
+            ]),
+            ?assertEqual(Change, __After - __Before),
+            __Result
+        end)())
+    end
+).
+
+
 db_size_test_() ->
     {
         "Test document CRUD operations",
@@ -32,6 +50,7 @@ db_size_test_() ->
                 ?TDEF(edit_doc),
                 ?TDEF(del_doc),
                 ?TDEF(conflicted_doc),
+                ?TDEF(del_winner),
                 ?TDEF(del_conflict)
             ])
         }
@@ -54,65 +73,96 @@ empty_size({Db, _}) ->
 
 
 new_doc({Db, _}) ->
-    increases(Db, fun() ->
+    % UUID doc id: 32
+    % Revision: 2 + 16
+    % Deleted: 1
+    % Body: {} = 2
+    ?DIFF(Db, 53, fun() ->
         create_doc(Db)
     end).
 
 
 edit_doc({Db, _}) ->
     DocId = fabric2_util:uuid(),
-    {ok, RevId1} = increases(Db, fun() ->
+    {ok, RevId1} = ?DIFF(Db, 53, fun() ->
         create_doc(Db, DocId)
     end),
-    {ok, RevId2} = increases(Db, fun() ->
+    % {} -> {"foo":"bar"} = 13 - 2
+    {ok, RevId2} = ?DIFF(Db, 11, fun() ->
         update_doc(Db, DocId, RevId1, {[{<<"foo">>, <<"bar">>}]})
     end),
-    decreases(Db, fun() ->
+    ?DIFF(Db, -11, fun() ->
         update_doc(Db, DocId, RevId2)
     end).
 
 
 del_doc({Db, _}) ->
     DocId = fabric2_util:uuid(),
-    {ok, RevId} = increases(Db, fun() ->
+    {ok, RevId} = ?DIFF(Db, 64, fun() ->
         create_doc(Db, DocId, {[{<<"foo">>, <<"bar">>}]})
     end),
     % The change here is -11 becuase we're going from
     % {"foo":"bar"} == 13 bytes to {} == 2 bytes.
     % I.e., 2 - 13 == -11
-    diff(Db, fun() ->
+    ?DIFF(Db, -11, fun() ->
         delete_doc(Db, DocId, RevId)
-    end, -11).
+    end).
 
 
+% need to check both new conflict is new winner
+% and that new conflict is not a winner and that
+% the sizes don't interfere which should be doable
+% with different sized bodies.
+
 conflicted_doc({Db, _}) ->
     DocId = fabric2_util:uuid(),
-    Before = db_size(Db),
-    {ok, RevId1} = increases(Db, fun() ->
+    {ok, RevId1} = ?DIFF(Db, 64, fun() ->
+        create_doc(Db, DocId, {[{<<"foo">>, <<"bar">>}]})
+    end),
+    ?DIFF(Db, 64, fun() ->
+        create_conflict(Db, DocId, RevId1, {[{<<"foo">>, <<"bar">>}]})
+    end).
+
+
+del_winner({Db, _}) ->
+    DocId = fabric2_util:uuid(),
+    {ok, RevId1} = ?DIFF(Db, 64, fun() ->
         create_doc(Db, DocId, {[{<<"foo">>, <<"bar">>}]})
     end),
-    Between = db_size(Db),
-    increases(Db, fun() ->
+    {ok, RevId2} = ?DIFF(Db, 64, fun() ->
         create_conflict(Db, DocId, RevId1, {[{<<"foo">>, <<"bar">>}]})
     end),
-    After = db_size(Db),
-    ?assertEqual(After - Between, Between - Before).
+    [_ConflictRev, WinnerRev] = lists:sort([RevId1, RevId2]),
+    ?DIFF(Db, -11, fun() ->
+        {ok, _RevId3} = delete_doc(Db, DocId, WinnerRev),
+        ?debugFmt("~n~w~n~w~n~w~n", [RevId1, RevId2, _RevId3])
+    end).
 
 
 del_conflict({Db, _}) ->
     DocId = fabric2_util:uuid(),
-    {ok, RevId1} = increases(Db, fun() ->
+    {ok, RevId1} = ?DIFF(Db, 64, fun() ->
         create_doc(Db, DocId, {[{<<"foo">>, <<"bar">>}]})
     end),
-    {ok, RevId2} = increases(Db, fun() ->
+    {ok, RevId2} = ?DIFF(Db, 64, fun() ->
         create_conflict(Db, DocId, RevId1, {[{<<"foo">>, <<"bar">>}]})
     end),
-    decreases(Db, fun() ->
-        {ok, RevId3} = delete_doc(Db, DocId, RevId2),
-        ?debugFmt("~p ~p ~p", [RevId1, RevId2, RevId3])
+    [ConflictRev, _WinnerRev] = lists:sort([RevId1, RevId2]),
+    ?DIFF(Db, -11, fun() ->
+        {ok, _RevId3} = delete_doc(Db, DocId, ConflictRev),
+        ?debugFmt("~n~w~n~w~n~w~n", [RevId1, RevId2, _RevId3])
     end).
 
 
+% replicate with attachment
+% replicate removing attachment
+% replicate reusing attachment
+% replicate adding attachment with stub
+% for each, replicate to winner vs non-winner
+% for each, replicate extending winner, vs extending conflict vs new branch
+
+
+
 create_doc(Db) ->
     create_doc(Db, fabric2_util:uuid()).
 
@@ -175,20 +225,6 @@ delete_doc(Db, DocId, {Pos, Rev}, Body) ->
     fabric2_db:update_doc(Db, Doc).
 
 
-constant(Db, Fun) -> check(Db, Fun, fun erlang:'=='/2).
-increases(Db, Fun) -> check(Db, Fun, fun erlang:'>'/2).
-decreases(Db, Fun) -> check(Db, Fun, fun erlang:'<'/2).
-diff(Db, Fun, Change) -> check(Db, Fun, fun(A, B) -> (A - B) == Change end).
-
-check(Db, Fun, Cmp) ->
-    Before = db_size(Db),
-    Result = Fun(),
-    After = db_size(Db),
-    ?debugFmt("~p :: ~p ~p", [erlang:fun_info(Cmp), After, Before]),
-    ?assert(Cmp(After, Before)),
-    Result.
-
-
 db_size(Info) when is_list(Info) ->
     {sizes, {Sizes}} = lists:keyfind(sizes, 1, Info),
     {<<"external">>, External} = lists:keyfind(<<"external">>, 1, Sizes),