diff options
author | Nick Vatamaniuc <vatamane@gmail.com> | 2022-01-21 18:09:11 -0500 |
---|---|---|
committer | Nick Vatamaniuc <vatamane@gmail.com> | 2022-01-21 18:14:09 -0500 |
commit | 9057c5e9d17262c85835c86188bfee782a99700c (patch) | |
tree | 2d9dd62ed4293f47945043c77809292a14897c95 | |
parent | cca3e78ad40b01787510db10f8dd77908147b26b (diff) | |
download | couchdb-collation-view-versioning.tar.gz |
Add view 2.x and 3.2.1 upgrade testscollation-view-versioning
Ensure 2.x and 3.2.1 existing view are upgraded with the new view_info map
-rw-r--r-- | src/couch/test/eunit/couchdb_views_tests.erl | 120 | ||||
-rw-r--r-- | src/couch/test/eunit/fixtures/15a5cb17365a99cd9ddc7327c82bbd0d.view | bin | 0 -> 12388 bytes | |||
-rw-r--r-- | src/couch/test/eunit/fixtures/db321.couch | bin | 0 -> 28864 bytes |
3 files changed, 106 insertions, 14 deletions
diff --git a/src/couch/test/eunit/couchdb_views_tests.erl b/src/couch/test/eunit/couchdb_views_tests.erl index f4d51bdd0..0da3d4efb 100644 --- a/src/couch/test/eunit/couchdb_views_tests.erl +++ b/src/couch/test/eunit/couchdb_views_tests.erl @@ -38,25 +38,40 @@ setup_with_docs() -> create_design_doc(DbName, <<"_design/foo">>, <<"bar">>), DbName. -setup_legacy() -> - DbName = <<"test">>, - DbFileName = "test.couch", - OldDbFilePath = filename:join([?FIXTURESDIR, DbFileName]), +% See src/couch/test/eunit/fixtures for fixture files +% +setup_legacy_2x() -> + % see src/couch/test/eunit/fixtures folder + DbName = "test", OldViewName = "6cf2c2f766f87b618edf6630b00f8736.view", - FixtureViewFilePath = filename:join([?FIXTURESDIR, OldViewName]), NewViewName = "a1c5929f912aca32f13446122cc6ce50.view", + setup_legacy(DbName, OldViewName, NewViewName). + +setup_legacy_321() -> + DbName = "db321", + OldViewName = "15a5cb17365a99cd9ddc7327c82bbd0d.view", + % Note: we don't expect the signature to change + NewViewName = "15a5cb17365a99cd9ddc7327c82bbd0d.view", + setup_legacy(DbName, OldViewName, NewViewName). + +setup_legacy(DbName, OldViewName, NewViewName) when + is_list(DbName), is_list(OldViewName), is_list(NewViewName) +-> + DbFileName = DbName ++ ".couch", + OldDbFilePath = filename:join([?FIXTURESDIR, DbFileName]), + FixtureViewFilePath = filename:join([?FIXTURESDIR, OldViewName]), DbDir = config:get("couchdb", "database_dir"), ViewDir = config:get("couchdb", "view_index_dir"), OldViewFilePath = filename:join([ ViewDir, - ".test_design", + "." ++ DbName ++ "_design", "mrview", OldViewName ]), NewViewFilePath = filename:join([ ViewDir, - ".test_design", + "." ++ DbName ++ "_design", "mrview", NewViewName ]), @@ -76,7 +91,7 @@ setup_legacy() -> {ok, _} = file:copy(FixtureViewFilePath, OldViewFilePath), - {DbName, Files}. + {?l2b(DbName), Files}. teardown({DbName, _}) -> teardown(DbName); @@ -161,19 +176,37 @@ backup_restore_test_() -> } }. -upgrade_test_() -> +upgrade_2x_test_() -> + { + "Upgrade 2x tests", + { + setup, + fun test_util:start_couch/0, + fun test_util:stop_couch/1, + { + foreach, + fun setup_legacy_2x/0, + fun teardown_legacy/1, + [ + fun should_upgrade_legacy_2x_view_files/1 + ] + } + } + }. + +upgrade_321_test_() -> { - "Upgrade tests", + "Upgrade 321 tests", { setup, fun test_util:start_couch/0, fun test_util:stop_couch/1, { foreach, - fun setup_legacy/0, + fun setup_legacy_321/0, fun teardown_legacy/1, [ - fun should_upgrade_legacy_view_files/1 + fun should_upgrade_legacy_321_view_files/1 ] } } @@ -201,7 +234,7 @@ should_not_remember_docs_in_index_after_backup_restore(DbName) -> ?assertNot(has_doc("doc666", Rows1)) end). -should_upgrade_legacy_view_files({DbName, Files}) -> +should_upgrade_legacy_2x_view_files({DbName, Files}) -> ?_test(begin [_NewDbFilePath, OldViewFilePath, NewViewFilePath] = Files, ok = config:set("query_server_config", "commit_freq", "0", false), @@ -231,9 +264,57 @@ should_upgrade_legacy_view_files({DbName, Files}) -> % ensure new header % have to wait for awhile to upgrade the index - timer:sleep(2000), + wait_mrheader_record(NewViewFilePath, 3000), + NewHeader = read_header(NewViewFilePath), + ?assertMatch(#mrheader{}, NewHeader), + + % assert that 2.x header was upgraded with a view_info map + ViewInfo = NewHeader#mrheader.view_info, + ?assert(is_map(ViewInfo)), + Ver = tuple_to_list(couch_ejson_compare:get_collator_version()), + ?assertMatch(#{ucol_vs := [Ver]}, ViewInfo), + + NewViewStatus = hd(NewHeader#mrheader.view_states), + ?assertEqual(3, tuple_size(NewViewStatus)) + end). + +should_upgrade_legacy_321_view_files({DbName, Files}) -> + ?_test(begin + [_NewDbFilePath, OldViewFilePath, NewViewFilePath] = Files, + ok = config:set("query_server_config", "commit_freq", "0", false), + + % ensure old header + OldHeader = read_header(OldViewFilePath), + ?assertEqual(5, tuple_size(OldHeader)), + ?assertMatch(mrheader, element(1, OldHeader)), + + % query view for expected results + Rows0 = query_view(DbName, "ddoc321", "view321"), + ?assertEqual(2, length(Rows0)), + + % add 3 new documents + create_docs(DbName), + + % query view for expected results + Rows1 = query_view(DbName, "ddoc321", "view321"), + ?assertEqual(5, length(Rows1)), + + % ensure old file is still there + ?assert(filelib:is_regular(OldViewFilePath)), + + % ensure new header + + % have to wait for awhile to upgrade the index + wait_mrheader_record(NewViewFilePath, 3000), NewHeader = read_header(NewViewFilePath), ?assertMatch(#mrheader{}, NewHeader), + + % assert that 3.2.1 header was upgraded with a view_info map + ViewInfo = NewHeader#mrheader.view_info, + ?assert(is_map(ViewInfo)), + Ver = tuple_to_list(couch_ejson_compare:get_collator_version()), + ?assertMatch(#{ucol_vs := [Ver]}, ViewInfo), + NewViewStatus = hd(NewHeader#mrheader.view_states), ?assertEqual(3, tuple_size(NewViewStatus)) end). @@ -750,3 +831,14 @@ copy_tree([File | Rest], Src, Dst) -> FullDst = filename:join(Dst, File), ok = copy_tree(FullSrc, FullDst), copy_tree(Rest, Src, Dst). + +wait_mrheader_record(File, TimeoutMSec) -> + WaitFun = fun() -> + try read_header(File) of + #mrheader{} -> ok; + _Other -> wait + catch + _:_ -> wait + end + end, + test_util:wait(WaitFun, TimeoutMSec). diff --git a/src/couch/test/eunit/fixtures/15a5cb17365a99cd9ddc7327c82bbd0d.view b/src/couch/test/eunit/fixtures/15a5cb17365a99cd9ddc7327c82bbd0d.view Binary files differnew file mode 100644 index 000000000..33cbd401f --- /dev/null +++ b/src/couch/test/eunit/fixtures/15a5cb17365a99cd9ddc7327c82bbd0d.view diff --git a/src/couch/test/eunit/fixtures/db321.couch b/src/couch/test/eunit/fixtures/db321.couch Binary files differnew file mode 100644 index 000000000..7db9cac17 --- /dev/null +++ b/src/couch/test/eunit/fixtures/db321.couch |