summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shorin <kxepal@apache.org>2014-06-10 23:55:32 +0400
committerAlexander Shorin <kxepal@apache.org>2014-06-17 01:42:10 +0400
commite03415b8f6a329af1ce520ea9a7e5432a1bb6567 (patch)
treec0cb8dd5f919f225ead9e2999a99db22b9fcc3fc
parentfafbee9c90b901569c9ba609d8574e15a1a93d10 (diff)
downloadcouchdb-e03415b8f6a329af1ce520ea9a7e5432a1bb6567.tar.gz
Port 250-upgrade-legacy-view-files.t etap test suite to eunit
-rw-r--r--license.skip2
-rw-r--r--test/couchdb/Makefile.am4
-rw-r--r--test/couchdb/couchdb_views_tests.erl69
-rw-r--r--test/couchdb/fixtures/3b835456c235b1827e012e25666152f3.view (renamed from test/etap/fixtures/3b835456c235b1827e012e25666152f3.view)bin4192 -> 4192 bytes
-rw-r--r--test/couchdb/fixtures/test.couch (renamed from test/etap/fixtures/test.couch)bin16482 -> 16482 bytes
-rw-r--r--test/etap/250-upgrade-legacy-view-files.t168
-rw-r--r--test/etap/Makefile.am11
7 files changed, 75 insertions, 179 deletions
diff --git a/license.skip b/license.skip
index 8b3c00cb1..f09c6d64f 100644
--- a/license.skip
+++ b/license.skip
@@ -171,8 +171,10 @@
^test/couchdb/Makefile
^test/couchdb/Makefile.in
^test/couchdb/fixtures/logo.png
+^test/couchdb/fixtures/3b835456c235b1827e012e25666152f3.view
^test/couchdb/fixtures/Makefile
^test/couchdb/fixtures/Makefile.in
+^test/couchdb/fixtures/test.couch
^test/couchdb/fixtures/.deps/test_cfg_register-test_cfg_register.Po
^test/couchdb/fixtures/test_cfg_register
^test/couchdb/fixtures/test_cfg_register.o
diff --git a/test/couchdb/Makefile.am b/test/couchdb/Makefile.am
index dcb8fa48d..b51bdb1dd 100644
--- a/test/couchdb/Makefile.am
+++ b/test/couchdb/Makefile.am
@@ -67,7 +67,9 @@ fixture_files = \
fixtures/os_daemon_can_reboot.sh \
fixtures/os_daemon_die_on_boot.sh \
fixtures/os_daemon_die_quickly.sh \
- fixtures/logo.png
+ fixtures/logo.png \
+ fixtures/3b835456c235b1827e012e25666152f3.view \
+ fixtures/test.couch
EXTRA_DIST = \
run.in \
diff --git a/test/couchdb/couchdb_views_tests.erl b/test/couchdb/couchdb_views_tests.erl
index 57d5a1428..6d81f32a5 100644
--- a/test/couchdb/couchdb_views_tests.erl
+++ b/test/couchdb/couchdb_views_tests.erl
@@ -14,6 +14,7 @@
-include("couch_eunit.hrl").
-include_lib("couchdb/couch_db.hrl").
+-include_lib("couch_mrview/include/couch_mrview.hrl").
-define(ADMIN_USER, {user_ctx, #user_ctx{roles=[<<"_admin">>]}}).
-define(DELAY, 100).
@@ -131,6 +132,68 @@ should_not_remember_docs_in_index_after_backup_restore_test() ->
stop(whereis(couch_server_sup)).
+should_upgrade_legacy_view_files_test() ->
+ start(),
+
+ ok = couch_config:set("query_server_config", "commit_freq", "0", false),
+
+ DbName = <<"test">>,
+ DbFileName = "test.couch",
+ DbFilePath = filename:join([?FIXTURESDIR, DbFileName]),
+ OldViewName = "3b835456c235b1827e012e25666152f3.view",
+ FixtureViewFilePath = filename:join([?FIXTURESDIR, OldViewName]),
+ NewViewName = "a1c5929f912aca32f13446122cc6ce50.view",
+
+ DbDir = couch_config:get("couchdb", "database_dir"),
+ ViewDir = couch_config:get("couchdb", "view_index_dir"),
+ OldViewFilePath = filename:join([ViewDir, ".test_design", OldViewName]),
+ NewViewFilePath = filename:join([ViewDir, ".test_design", "mrview",
+ NewViewName]),
+
+ % cleanup
+ Files = [
+ filename:join([DbDir, DbFileName]),
+ OldViewFilePath,
+ NewViewFilePath
+ ],
+ lists:foreach(fun(File) -> file:delete(File) end, Files),
+
+ % copy old db file into db dir
+ {ok, _} = file:copy(DbFilePath, filename:join([DbDir, DbFileName])),
+
+ % copy old view file into view dir
+ ok = filelib:ensure_dir(filename:join([ViewDir, ".test_design"])),
+ {ok, _} = file:copy(FixtureViewFilePath, OldViewFilePath),
+
+ % ensure old header
+ OldHeader = read_header(OldViewFilePath),
+ ?assertMatch(#index_header{}, OldHeader),
+
+ % query view for expected results
+ Rows0 = query_view(DbName, "test", "test"),
+ ?assertEqual(2, length(Rows0)),
+
+ % ensure old file gone
+ ?assertNot(filelib:is_regular(OldViewFilePath)),
+
+ % add doc to trigger update
+ DocUrl = db_url(DbName) ++ "/boo",
+ {ok, _, _, _} = test_request:put(
+ DocUrl, [{"Content-Type", "application/json"}], <<"{\"a\":3}">>),
+
+ % query view for expected results
+ Rows1 = query_view(DbName, "test", "test"),
+ ?assertEqual(3, length(Rows1)),
+
+ % ensure new header
+ timer:sleep(2000), % have to wait for awhile to upgrade the index
+ NewHeader = read_header(NewViewFilePath),
+ ?assertMatch(#mrheader{}, NewHeader),
+
+ teardown(DbName),
+ stop(whereis(couch_server_sup)).
+
+
should_have_two_indexes_alive_before_deletion({DbName, _}) ->
view_cleanup(DbName),
?_assertEqual(2, count_index_files(DbName)).
@@ -598,3 +661,9 @@ writer_loop_2(DbName, Parent, Error) ->
Parent ! {ok, Ref},
writer_loop(DbName, Parent)
end.
+
+read_header(File) ->
+ {ok, Fd} = couch_file:open(File),
+ {ok, {_Sig, Header}} = couch_file:read_header(Fd),
+ couch_file:close(Fd),
+ Header.
diff --git a/test/etap/fixtures/3b835456c235b1827e012e25666152f3.view b/test/couchdb/fixtures/3b835456c235b1827e012e25666152f3.view
index 9c67648be..9c67648be 100644
--- a/test/etap/fixtures/3b835456c235b1827e012e25666152f3.view
+++ b/test/couchdb/fixtures/3b835456c235b1827e012e25666152f3.view
Binary files differ
diff --git a/test/etap/fixtures/test.couch b/test/couchdb/fixtures/test.couch
index 32c79af32..32c79af32 100644
--- a/test/etap/fixtures/test.couch
+++ b/test/couchdb/fixtures/test.couch
Binary files differ
diff --git a/test/etap/250-upgrade-legacy-view-files.t b/test/etap/250-upgrade-legacy-view-files.t
deleted file mode 100644
index e720b1c44..000000000
--- a/test/etap/250-upgrade-legacy-view-files.t
+++ /dev/null
@@ -1,168 +0,0 @@
-#!/usr/bin/env escript
-%% -*- erlang -*-
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
-main(_) ->
- test_util:init_code_path(),
-
- etap:plan(8),
- case (catch test()) of
- ok ->
- etap:end_tests();
- Other ->
- etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
- etap:bail(Other)
- end,
- ok.
-
-
-test() ->
- couch_server_sup:start_link(test_util:config_files()),
-
- % commit sofort
- ok = couch_config:set("query_server_config", "commit_freq", "0"),
-
- test_upgrade(),
-
- couch_server_sup:stop(),
- ok.
-
-fixture_path() ->
- test_util:source_file("test/etap/fixtures").
-
-old_db() ->
- fixture_path() ++ "/" ++ old_db_name().
-
-old_db_name() ->
- "test.couch".
-
-old_view() ->
- fixture_path() ++ "/" ++ old_view_name().
-
-old_view_name() ->
- "3b835456c235b1827e012e25666152f3.view".
-
-new_view_name() ->
- "a1c5929f912aca32f13446122cc6ce50.view".
-
-couch_url() ->
- "http://" ++ addr() ++ ":" ++ port().
-
-addr() ->
- couch_config:get("httpd", "bind_address", "127.0.0.1").
-
-port() ->
- integer_to_list(mochiweb_socket_server:get(couch_httpd, port)).
-
-
-% <= 1.2.x
--record(index_header,
- {seq=0,
- purge_seq=0,
- id_btree_state=nil,
- view_states=nil
- }).
-
-% >= 1.3.x
--record(mrheader, {
- seq=0,
- purge_seq=0,
- id_btree_state=nil,
- view_states=nil
-}).
-
-ensure_header(File, MatchFun, Msg) ->
- {ok, Fd} = couch_file:open(File),
- {ok, {_Sig, Header}} = couch_file:read_header(Fd),
- couch_file:close(Fd),
- etap:fun_is(MatchFun, Header, "ensure " ++ Msg ++ " header for file: " ++ File).
-
-file_exists(File) ->
- % open without creating
- case file:open(File, [read, raw]) of
- {ok, Fd_Read} ->
- file:close(Fd_Read),
- true;
- _Error ->
- false
- end.
-
-cleanup() ->
- DbDir = couch_config:get("couchdb", "database_dir"),
- Files = [
- DbDir ++ "/test.couch",
- DbDir ++ "/.test_design/" ++ old_view_name(),
- DbDir ++ "/.test_design/mrview/" ++ new_view_name()
- ],
- lists:foreach(fun(File) -> file:delete(File) end, Files),
- etap:ok(true, "cleanup").
-
-test_upgrade() ->
-
- cleanup(),
-
- % copy old db file into db dir
- DbDir = couch_config:get("couchdb", "database_dir"),
- DbTarget = DbDir ++ "/" ++ old_db_name(),
- filelib:ensure_dir(DbDir),
- OldDbName = old_db(),
- {ok, _} = file:copy(OldDbName, DbTarget),
-
- % copy old view file into view dir
- ViewDir = couch_config:get("couchdb", "view_index_dir"),
- ViewTarget = ViewDir ++ "/.test_design/" ++ old_view_name(),
- filelib:ensure_dir(ViewTarget),
- OldViewName = old_view(),
- {ok, _} = file:copy(OldViewName, ViewTarget),
-
- % ensure old header
- ensure_header(ViewTarget, fun(#index_header{}) -> true; (_) -> false end, "old"),
-
- % query view
- ViewUrl = couch_url() ++ "/test/_design/test/_view/test",
- {ok, Code, _Headers, Body} = test_util:request(ViewUrl, [], get),
-
- % expect results
- etap:is(Code, 200, "valid view result http status code"),
- ExpectBody = <<"{\"total_rows\":2,\"offset\":0,\"rows\":[\r\n{\"id\":\"193f2f9c596ddc7ad326f7da470009ec\",\"key\":1,\"value\":null},\r\n{\"id\":\"193f2f9c596ddc7ad326f7da470012b6\",\"key\":2,\"value\":null}\r\n]}\n">>,
- etap:is(Body, ExpectBody, "valid view result"),
-
- % ensure old file gone.
- etap:is(file_exists(ViewTarget), false, "ensure old file is gone"),
-
- % ensure new header
- NewViewFile = ViewDir ++ "/.test_design/mrview/" ++ new_view_name(),
-
- % add doc(s)
- test_util:request(
- couch_url() ++ "/test/boo",
- [{"Content-Type", "application/json"}],
- put,
- <<"{\"a\":3}">>),
-
- % query again
- {ok, Code2, _Headers2, Body2} = test_util:request(ViewUrl, [], get),
-
- % expect results
- etap:is(Code2, 200, "valid view result http status code"),
- ExpectBody2 = <<"{\"total_rows\":3,\"offset\":0,\"rows\":[\r\n{\"id\":\"193f2f9c596ddc7ad326f7da470009ec\",\"key\":1,\"value\":null},\r\n{\"id\":\"193f2f9c596ddc7ad326f7da470012b6\",\"key\":2,\"value\":null},\r\n{\"id\":\"boo\",\"key\":3,\"value\":null}\r\n]}\n">>,
- etap:is(Body2, ExpectBody2, "valid view result after doc add"),
-
- % ensure no rebuild
- % TBD no idea how to actually test this.
-
- % ensure new header.
- timer:sleep(2000),
- ensure_header(NewViewFile, fun(#mrheader{}) -> true; (_) -> false end, "new"),
-
- ok.
diff --git a/test/etap/Makefile.am b/test/etap/Makefile.am
index 743f90f08..4d6e19def 100644
--- a/test/etap/Makefile.am
+++ b/test/etap/Makefile.am
@@ -27,14 +27,5 @@ CLEANFILES = run *.beam
DISTCLEANFILES = temp.*
-fixture_files = \
- fixtures/3b835456c235b1827e012e25666152f3.view \
- fixtures/test.couch
-
-tap_files = \
- 250-upgrade-legacy-view-files.t
-
EXTRA_DIST = \
- run.tpl \
- $(fixture_files) \
- $(tap_files)
+ run.tpl