summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2018-05-23 15:31:08 -0500
committerjiangph <jiangph@cn.ibm.com>2018-08-21 23:31:09 +0800
commite0c7ad386803dea20573201f4e6468bdae8294e1 (patch)
tree7edb822ce2189c22f0ad1692275220a24043cdda
parent776349cd5054c319e8775cee5da1f7836818dcc5 (diff)
downloadcouchdb-COUCHDB-3326-clustered-purge-pr3-refactor-pse-tests.tar.gz
Enhance PSE tests with setup/teardown functionsCOUCHDB-3326-clustered-purge-pr3-refactor-pse-tests
-rw-r--r--src/couch_pse_tests/src/cpse_gather.erl95
-rw-r--r--src/couch_pse_tests/src/cpse_test_attachments.erl15
-rw-r--r--src/couch_pse_tests/src/cpse_test_compaction.erl26
-rw-r--r--src/couch_pse_tests/src/cpse_test_fold_changes.erl54
-rw-r--r--src/couch_pse_tests/src/cpse_test_fold_docs.erl90
-rw-r--r--src/couch_pse_tests/src/cpse_test_get_set_props.erl28
-rw-r--r--src/couch_pse_tests/src/cpse_test_open_close_delete.erl34
-rw-r--r--src/couch_pse_tests/src/cpse_test_purge_docs.erl23
-rw-r--r--src/couch_pse_tests/src/cpse_test_read_write_docs.erl49
-rw-r--r--src/couch_pse_tests/src/cpse_test_ref_counting.erl19
-rw-r--r--src/couch_pse_tests/src/cpse_util.erl52
11 files changed, 290 insertions, 195 deletions
diff --git a/src/couch_pse_tests/src/cpse_gather.erl b/src/couch_pse_tests/src/cpse_gather.erl
new file mode 100644
index 000000000..7804d419e
--- /dev/null
+++ b/src/couch_pse_tests/src/cpse_gather.erl
@@ -0,0 +1,95 @@
+% 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.
+
+-module(cpse_gather).
+
+
+-export([
+ module/1
+]).
+
+
+module(ModName) ->
+ Exports = ModName:module_info(exports),
+
+ SetupMod = get_setup_all(ModName, Exports),
+ TeardownMod = get_teardown_all(ModName, Exports),
+ SetupTest = get_fun(ModName, setup_each, 0, Exports),
+ TeardownTest = get_fun(ModName, teardown_each, 1, Exports),
+
+ RevTests = lists:foldl(fun({Fun, Arity}, Acc) ->
+ case {atom_to_list(Fun), Arity} of
+ {[$c, $p, $s, $e, $_ | _], Arity} when Arity == 0; Arity == 1 ->
+ TestFun = make_test_fun(ModName, Fun, Arity),
+ [TestFun | Acc];
+ _ ->
+ Acc
+ end
+ end, [], Exports),
+ Tests = lists:reverse(RevTests),
+
+ {
+ setup,
+ spawn,
+ SetupMod,
+ TeardownMod,
+ [
+ {
+ foreach,
+ SetupTest,
+ TeardownTest,
+ Tests
+ }
+ ]
+ }.
+
+
+get_setup_all(ModName, Exports) ->
+ case lists:member({setup_all, 0}, Exports) of
+ true -> fun ModName:setup_all/0;
+ false -> fun cpse_util:setup_all/0
+ end.
+
+
+get_teardown_all(ModName, Exports) ->
+ case lists:member({teardown_all, 1}, Exports) of
+ true -> fun ModName:teardown_all/1;
+ false -> fun cpse_util:teardown_all/1
+ end.
+
+
+get_fun(ModName, FunName, Arity, Exports) ->
+ case lists:member({FunName, Arity}, Exports) of
+ true -> fun ModName:FunName/Arity;
+ false when Arity == 0 -> fun() -> ok end;
+ false when Arity == 1 -> fun(_) -> ok end
+ end.
+
+
+make_test_fun(Module, Fun, Arity) ->
+ Name = atom_to_list(Fun),
+ case Arity of
+ 0 ->
+ fun(_) ->
+ {timeout, 60, {Name, fun() ->
+ process_flag(trap_exit, true),
+ Module:Fun()
+ end}}
+ end;
+ 1 ->
+ fun(Arg) ->
+ {timeout, 60, {Name, fun() ->
+ process_flag(trap_exit, true),
+ Module:Fun(Arg)
+ end}}
+ end
+ end.
diff --git a/src/couch_pse_tests/src/cpse_test_attachments.erl b/src/couch_pse_tests/src/cpse_test_attachments.erl
index 7372ba40f..61ada38c4 100644
--- a/src/couch_pse_tests/src/cpse_test_attachments.erl
+++ b/src/couch_pse_tests/src/cpse_test_attachments.erl
@@ -18,9 +18,16 @@
-include_lib("couch/include/couch_db.hrl").
-cet_write_attachment() ->
- {ok, Db1} = cpse_util:create_db(),
+setup_each() ->
+ {ok, Db} = cpse_util:create_db(),
+ Db.
+
+teardown_each(Db) ->
+ ok = couch_server:delete(couch_db:name(Db), []).
+
+
+cpse_write_attachment(Db1) ->
AttBin = crypto:strong_rand_bytes(32768),
try
@@ -72,9 +79,7 @@ cet_write_attachment() ->
% attachments streams when restarting (for instance if
% we ever have something that stores attachemnts in
% an external object store)
-cet_inactive_stream() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_inactive_stream(Db1) ->
AttBin = crypto:strong_rand_bytes(32768),
try
diff --git a/src/couch_pse_tests/src/cpse_test_compaction.erl b/src/couch_pse_tests/src/cpse_test_compaction.erl
index 122febaeb..11bf106d2 100644
--- a/src/couch_pse_tests/src/cpse_test_compaction.erl
+++ b/src/couch_pse_tests/src/cpse_test_compaction.erl
@@ -18,8 +18,16 @@
-include_lib("couch/include/couch_db.hrl").
-cet_compact_empty() ->
- {ok, Db1} = cpse_util:create_db(),
+setup_each() ->
+ {ok, Db} = cpse_util:create_db(),
+ Db.
+
+
+teardown_each(Db) ->
+ ok = couch_server:delete(couch_db:name(Db), []).
+
+
+cpse_compact_empty(Db1) ->
Term1 = cpse_util:db_as_term(Db1),
cpse_util:compact(Db1),
@@ -31,8 +39,7 @@ cet_compact_empty() ->
?assertEqual(nodiff, Diff).
-cet_compact_doc() ->
- {ok, Db1} = cpse_util:create_db(),
+cpse_compact_doc(Db1) ->
Actions = [{create, {<<"foo">>, {[]}}}],
{ok, Db2} = cpse_util:apply_actions(Db1, Actions),
Term1 = cpse_util:db_as_term(Db2),
@@ -46,8 +53,7 @@ cet_compact_doc() ->
?assertEqual(nodiff, Diff).
-cet_compact_local_doc() ->
- {ok, Db1} = cpse_util:create_db(),
+cpse_compact_local_doc(Db1) ->
Actions = [{create, {<<"_local/foo">>, {[]}}}],
{ok, Db2} = cpse_util:apply_actions(Db1, Actions),
Term1 = cpse_util:db_as_term(Db2),
@@ -61,9 +67,7 @@ cet_compact_local_doc() ->
?assertEqual(nodiff, Diff).
-cet_compact_with_everything() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_compact_with_everything(Db1) ->
% Add a whole bunch of docs
DocActions = lists:map(fun(Seq) ->
{create, {docid(Seq), {[{<<"int">>, Seq}]}}}
@@ -150,9 +154,7 @@ cet_compact_with_everything() ->
?assertEqual(nodiff, Diff).
-cet_recompact_updates() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_recompact_updates(Db1) ->
Actions1 = lists:map(fun(Seq) ->
{create, {docid(Seq), {[{<<"int">>, Seq}]}}}
end, lists:seq(1, 1000)),
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 64ae34d66..8ee74f041 100644
--- a/src/couch_pse_tests/src/cpse_test_fold_changes.erl
+++ b/src/couch_pse_tests/src/cpse_test_fold_changes.erl
@@ -21,15 +21,22 @@
-define(NUM_DOCS, 25).
-cet_empty_changes() ->
+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, [], [])).
-cet_single_change() ->
- {ok, Db1} = cpse_util:create_db(),
+cpse_single_change(Db1) ->
Actions = [{create, {<<"a">>, {[]}}}],
{ok, Db2} = cpse_util:apply_actions(Db1, Actions),
@@ -38,8 +45,7 @@ cet_single_change() ->
couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], [])).
-cet_two_changes() ->
- {ok, Db1} = cpse_util:create_db(),
+cpse_two_changes(Db1) ->
Actions = [
{create, {<<"a">>, {[]}}},
{create, {<<"b">>, {[]}}}
@@ -52,38 +58,37 @@ cet_two_changes() ->
?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes)).
-cet_two_changes_batch() ->
- {ok, Db1} = cpse_util:create_db(),
- Actions1 = [
+cpse_two_changes_batch(Db1) ->
+ Actions = [
{batch, [
{create, {<<"a">>, {[]}}},
{create, {<<"b">>, {[]}}}
]}
],
- {ok, Db2} = cpse_util:apply_actions(Db1, Actions1),
+ {ok, Db2} = cpse_util:apply_actions(Db1, Actions),
?assertEqual(2, couch_db_engine:count_changes_since(Db2, 0)),
- {ok, Changes1} =
+ {ok, Changes} =
couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []),
- ?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes1)),
+ ?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes)).
- {ok, Db3} = cpse_util:create_db(),
- Actions2 = [
+
+cpse_two_changes_batch_sorted(Db1) ->
+ Actions = [
{batch, [
{create, {<<"b">>, {[]}}},
{create, {<<"a">>, {[]}}}
]}
],
- {ok, Db4} = cpse_util:apply_actions(Db3, Actions2),
+ {ok, Db2} = cpse_util:apply_actions(Db1, Actions),
- ?assertEqual(2, couch_db_engine:count_changes_since(Db4, 0)),
- {ok, Changes2} =
- couch_db_engine:fold_changes(Db4, 0, fun fold_fun/2, [], []),
- ?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes2)).
+ ?assertEqual(2, couch_db_engine:count_changes_since(Db2, 0)),
+ {ok, Changes} =
+ couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], []),
+ ?assertEqual([{<<"a">>, 1}, {<<"b">>, 2}], lists:reverse(Changes)).
-cet_update_one() ->
- {ok, Db1} = cpse_util:create_db(),
+cpse_update_one(Db1) ->
Actions = [
{create, {<<"a">>, {[]}}},
{update, {<<"a">>, {[]}}}
@@ -95,8 +100,7 @@ cet_update_one() ->
couch_db_engine:fold_changes(Db2, 0, fun fold_fun/2, [], [])).
-cet_update_first_of_two() ->
- {ok, Db1} = cpse_util:create_db(),
+cpse_update_first_of_two(Db1) ->
Actions = [
{create, {<<"a">>, {[]}}},
{create, {<<"b">>, {[]}}},
@@ -110,8 +114,7 @@ cet_update_first_of_two() ->
?assertEqual([{<<"b">>, 2}, {<<"a">>, 3}], lists:reverse(Changes)).
-cet_update_second_of_two() ->
- {ok, Db1} = cpse_util:create_db(),
+cpse_update_second_of_two(Db1) ->
Actions = [
{create, {<<"a">>, {[]}}},
{create, {<<"b">>, {[]}}},
@@ -125,7 +128,7 @@ cet_update_second_of_two() ->
?assertEqual([{<<"a">>, 1}, {<<"b">>, 3}], lists:reverse(Changes)).
-cet_check_mutation_ordering() ->
+cpse_check_mutation_ordering(Db1) ->
Actions = shuffle(lists:map(fun(Seq) ->
{create, {docid(Seq), {[]}}}
end, lists:seq(1, ?NUM_DOCS))),
@@ -133,7 +136,6 @@ cet_check_mutation_ordering() ->
DocIdOrder = [DocId || {_, {DocId, _}} <- Actions],
DocSeqs = lists:zip(DocIdOrder, lists:seq(1, ?NUM_DOCS)),
- {ok, Db1} = cpse_util:create_db(),
{ok, Db2} = cpse_util:apply_actions(Db1, Actions),
% First lets see that we can get the correct
diff --git a/src/couch_pse_tests/src/cpse_test_fold_docs.erl b/src/couch_pse_tests/src/cpse_test_fold_docs.erl
index d9345fed4..09fbd26d0 100644
--- a/src/couch_pse_tests/src/cpse_test_fold_docs.erl
+++ b/src/couch_pse_tests/src/cpse_test_fold_docs.erl
@@ -21,59 +21,67 @@
-define(NUM_DOCS, 100).
-cet_fold_all() ->
- fold_all(fold_docs, fun docid/1).
+setup_each() ->
+ cpse_util:dbname().
-cet_fold_all_local() ->
- fold_all(fold_local_docs, fun local_docid/1).
+teardown_each(DbName) ->
+ ok = couch_server:delete(DbName, []).
-cet_fold_start_key() ->
- fold_start_key(fold_docs, fun docid/1).
+cpse_fold_all(DbName) ->
+ fold_all(DbName, fold_docs, fun docid/1).
-cet_fold_start_key_local() ->
- fold_start_key(fold_local_docs, fun local_docid/1).
+cpse_fold_all_local(DbName) ->
+ fold_all(DbName, fold_local_docs, fun local_docid/1).
-cet_fold_end_key() ->
- fold_end_key(fold_docs, fun docid/1).
+cpse_fold_start_key(DbName) ->
+ fold_start_key(DbName, fold_docs, fun docid/1).
-cet_fold_end_key_local() ->
- fold_end_key(fold_local_docs, fun local_docid/1).
+cpse_fold_start_key_local(DbName) ->
+ fold_start_key(DbName, fold_local_docs, fun local_docid/1).
-cet_fold_end_key_gt() ->
- fold_end_key_gt(fold_docs, fun docid/1).
+cpse_fold_end_key(DbName) ->
+ fold_end_key(DbName, fold_docs, fun docid/1).
-cet_fold_end_key_gt_local() ->
- fold_end_key_gt(fold_local_docs, fun local_docid/1).
+cpse_fold_end_key_local(DbName) ->
+ fold_end_key(DbName, fold_local_docs, fun local_docid/1).
-cet_fold_range() ->
- fold_range(fold_docs, fun docid/1).
+cpse_fold_end_key_gt(DbName) ->
+ fold_end_key_gt(DbName, fold_docs, fun docid/1).
-cet_fold_range_local() ->
- fold_range(fold_local_docs, fun local_docid/1).
+cpse_fold_end_key_gt_local(DbName) ->
+ fold_end_key_gt(DbName, fold_local_docs, fun local_docid/1).
-cet_fold_stop() ->
- fold_user_fun_stop(fold_docs, fun docid/1).
+cpse_fold_range(DbName) ->
+ fold_range(DbName, fold_docs, fun docid/1).
-cet_fold_stop_local() ->
- fold_user_fun_stop(fold_local_docs, fun local_docid/1).
+cpse_fold_range_local(DbName) ->
+ fold_range(DbName, fold_local_docs, fun local_docid/1).
+
+
+cpse_fold_stop(DbName) ->
+ fold_user_fun_stop(DbName, fold_docs, fun docid/1).
+
+
+cpse_fold_stop_local(DbName) ->
+ fold_user_fun_stop(DbName, fold_local_docs, fun local_docid/1).
% This is a loose test but we have to have this until
% I figure out what to do about the total_rows/offset
% meta data included in _all_docs
-cet_fold_include_reductions() ->
- {ok, Db} = init_st(fun docid/1),
+cpse_fold_include_reductions(DbName) ->
+ {ok, Db} = init_db(DbName, fun docid/1),
FoldFun = fun(_, _, nil) -> {ok, nil} end,
Opts = [include_reductions],
{ok, Count, nil} = couch_db_engine:fold_docs(Db, FoldFun, nil, Opts),
@@ -81,9 +89,9 @@ cet_fold_include_reductions() ->
?assert(Count >= 0).
-fold_all(FoldFun, DocIdFun) ->
+fold_all(DbName, FoldFun, DocIdFun) ->
DocIds = [DocIdFun(I) || I <- lists:seq(1, ?NUM_DOCS)],
- {ok, Db} = init_st(DocIdFun),
+ {ok, Db} = init_db(DbName, DocIdFun),
{ok, DocIdAccFwd} = couch_db_engine:FoldFun(Db, fun fold_fun/2, [], []),
?assertEqual(?NUM_DOCS, length(DocIdAccFwd)),
@@ -95,8 +103,8 @@ fold_all(FoldFun, DocIdFun) ->
?assertEqual(DocIds, DocIdAccRev).
-fold_start_key(FoldFun, DocIdFun) ->
- {ok, Db} = init_st(DocIdFun),
+fold_start_key(DbName, FoldFun, DocIdFun) ->
+ {ok, Db} = init_db(DbName, DocIdFun),
StartKeyNum = ?NUM_DOCS div 4,
StartKey = DocIdFun(StartKeyNum),
@@ -141,8 +149,8 @@ fold_start_key(FoldFun, DocIdFun) ->
?assertEqual(DocIdsRev, DocIdAccRev).
-fold_end_key(FoldFun, DocIdFun) ->
- {ok, Db} = init_st(DocIdFun),
+fold_end_key(DbName, FoldFun, DocIdFun) ->
+ {ok, Db} = init_db(DbName, DocIdFun),
EndKeyNum = ?NUM_DOCS div 4,
EndKey = DocIdFun(EndKeyNum),
@@ -189,8 +197,8 @@ fold_end_key(FoldFun, DocIdFun) ->
?assertEqual(DocIdsRev, DocIdAccRev).
-fold_end_key_gt(FoldFun, DocIdFun) ->
- {ok, Db} = init_st(DocIdFun),
+fold_end_key_gt(DbName, FoldFun, DocIdFun) ->
+ {ok, Db} = init_db(DbName, DocIdFun),
EndKeyNum = ?NUM_DOCS div 4,
EndKey = DocIdFun(EndKeyNum),
@@ -237,8 +245,8 @@ fold_end_key_gt(FoldFun, DocIdFun) ->
?assertEqual(DocIdsRev, DocIdAccRev).
-fold_range(FoldFun, DocIdFun) ->
- {ok, Db} = init_st(DocIdFun),
+fold_range(DbName, FoldFun, DocIdFun) ->
+ {ok, Db} = init_db(DbName, DocIdFun),
StartKeyNum = ?NUM_DOCS div 4,
EndKeyNum = StartKeyNum * 3,
@@ -300,8 +308,8 @@ fold_range(FoldFun, DocIdFun) ->
?assertEqual(DocIdsRev, DocIdAccRev).
-fold_user_fun_stop(FoldFun, DocIdFun) ->
- {ok, Db} = init_st(DocIdFun),
+fold_user_fun_stop(DbName, FoldFun, DocIdFun) ->
+ {ok, Db} = init_db(DbName, DocIdFun),
StartKeyNum = ?NUM_DOCS div 4,
StartKey = DocIdFun(StartKeyNum),
@@ -352,12 +360,12 @@ fold_user_fun_stop(FoldFun, DocIdFun) ->
?assertEqual(FiveDocIdsRev, FiveDocIdAccRev).
-init_st(DocIdFun) ->
- {ok, Db1} = cpse_util:create_db(),
+init_db(DbName, DocIdFun) ->
+ {ok, Db1} = cpse_util:create_db(DbName),
Actions = lists:map(fun(Id) ->
{create, {DocIdFun(Id), {[{<<"int">>, Id}]}}}
end, lists:seq(1, ?NUM_DOCS)),
- cpse_util:apply_batch(Db1, Actions).
+ cpse_util:apply_actions(Db1, [{batch, Actions}]).
fold_fun(Doc, Acc) ->
diff --git a/src/couch_pse_tests/src/cpse_test_get_set_props.erl b/src/couch_pse_tests/src/cpse_test_get_set_props.erl
index e11f76031..97f164bf8 100644
--- a/src/couch_pse_tests/src/cpse_test_get_set_props.erl
+++ b/src/couch_pse_tests/src/cpse_test_get_set_props.erl
@@ -17,9 +17,17 @@
-include_lib("eunit/include/eunit.hrl").
-cet_default_props() ->
+setup_each() ->
+ cpse_util:dbname().
+
+
+teardown_each(DbName) ->
+ ok = couch_server:delete(DbName, []).
+
+
+cpse_default_props(DbName) ->
{ok, {_App, Engine, _Extension}} = application:get_env(couch, test_engine),
- {ok, Db} = cpse_util:create_db(),
+ {ok, Db} = cpse_util:create_db(DbName),
Node = node(),
?assertEqual(Engine, couch_db_engine:get_engine(Db)),
@@ -47,10 +55,10 @@ cet_default_props() ->
]}).
-cet_admin_only_security() ->
+cpse_admin_only_security(DbName) ->
Config = [{"couchdb", "default_security", "admin_only"}],
{ok, Db1} = cpse_util:with_config(Config, fun() ->
- cpse_util:create_db()
+ cpse_util:create_db(DbName)
end),
?assertEqual(?ADMIN_ONLY_SEC_PROPS, couch_db:get_security(Db1)),
@@ -61,17 +69,17 @@ cet_admin_only_security() ->
?assertEqual(?ADMIN_ONLY_SEC_PROPS, couch_db:get_security(Db2)).
-cet_set_security() ->
+cpse_set_security(DbName) ->
SecProps = {[{<<"foo">>, <<"bar">>}]},
- check_prop_set(get_security, set_security, {[]}, SecProps).
+ check_prop_set(DbName, get_security, set_security, {[]}, SecProps).
-cet_set_revs_limit() ->
- check_prop_set(get_revs_limit, set_revs_limit, 1000, 50).
+cpse_set_revs_limit(DbName) ->
+ check_prop_set(DbName, get_revs_limit, set_revs_limit, 1000, 50).
-check_prop_set(GetFun, SetFun, Default, Value) ->
- {ok, Db0} = cpse_util:create_db(),
+check_prop_set(DbName, GetFun, SetFun, Default, Value) ->
+ {ok, Db0} = cpse_util:create_db(DbName),
?assertEqual(Default, couch_db:GetFun(Db0)),
?assertMatch(ok, couch_db:SetFun(Db0, Value)),
diff --git a/src/couch_pse_tests/src/cpse_test_open_close_delete.erl b/src/couch_pse_tests/src/cpse_test_open_close_delete.erl
index 86fa339a4..c19d0ee4c 100644
--- a/src/couch_pse_tests/src/cpse_test_open_close_delete.erl
+++ b/src/couch_pse_tests/src/cpse_test_open_close_delete.erl
@@ -17,53 +17,53 @@
-include_lib("eunit/include/eunit.hrl").
-cet_open_non_existent() ->
+setup_each() ->
+ cpse_util:dbname().
+
+
+teardown_each(DbName) ->
+ case couch_server:exists(DbName) of
+ true -> ok = couch_server:delete(DbName, []);
+ false -> ok
+ end.
+
+
+cpse_open_non_existent(DbName) ->
% Try twice to check that a failed open doesn't create
% the database for some reason.
- DbName = cpse_util:dbname(),
?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)).
-cet_open_create() ->
- DbName = cpse_util:dbname(),
-
+cpse_open_create(DbName) ->
?assertEqual(false, couch_server:exists(DbName)),
?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
?assertMatch({ok, _}, cpse_util:create_db(DbName)),
?assertEqual(true, couch_server:exists(DbName)).
-cet_open_when_exists() ->
- DbName = cpse_util:dbname(),
-
+cpse_open_when_exists(DbName) ->
?assertEqual(false, couch_server:exists(DbName)),
?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
?assertMatch({ok, _}, cpse_util:create_db(DbName)),
?assertEqual(file_exists, cpse_util:create_db(DbName)).
-cet_terminate() ->
- DbName = cpse_util:dbname(),
-
+cpse_terminate(DbName) ->
?assertEqual(false, couch_server:exists(DbName)),
?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
?assertEqual(ok, cycle_db(DbName, create_db)),
?assertEqual(true, couch_server:exists(DbName)).
-cet_rapid_recycle() ->
- DbName = cpse_util:dbname(),
-
+cpse_rapid_recycle(DbName) ->
?assertEqual(ok, cycle_db(DbName, create_db)),
lists:foreach(fun(_) ->
?assertEqual(ok, cycle_db(DbName, open_db))
end, lists:seq(1, 100)).
-cet_delete() ->
- DbName = cpse_util:dbname(),
-
+cpse_delete(DbName) ->
?assertEqual(false, couch_server:exists(DbName)),
?assertMatch(ok, cycle_db(DbName, create_db)),
?assertEqual(true, couch_server:exists(DbName)),
diff --git a/src/couch_pse_tests/src/cpse_test_purge_docs.erl b/src/couch_pse_tests/src/cpse_test_purge_docs.erl
index 19303c233..435226899 100644
--- a/src/couch_pse_tests/src/cpse_test_purge_docs.erl
+++ b/src/couch_pse_tests/src/cpse_test_purge_docs.erl
@@ -18,9 +18,16 @@
-include_lib("couch/include/couch_db.hrl").
-cet_purge_simple() ->
- {ok, Db1} = cpse_util:create_db(),
+setup_each() ->
+ {ok, Db} = cpse_util:create_db(),
+ Db.
+
+teardown_each(Db) ->
+ ok = couch_server:delete(couch_db:name(Db), []).
+
+
+cpse_purge_simple(Db1) ->
Actions1 = [
{create, {<<"foo">>, {[{<<"vsn">>, 1}]}}}
],
@@ -48,9 +55,7 @@ cet_purge_simple() ->
?assertEqual([{<<"foo">>, [Rev]}], couch_db_engine:get_last_purged(Db3)).
-cet_purge_conflicts() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_purge_conflicts(Db1) ->
Actions1 = [
{create, {<<"foo">>, {[{<<"vsn">>, 1}]}}},
{conflict, {<<"foo">>, {[{<<"vsn">>, 2}]}}}
@@ -94,9 +99,7 @@ cet_purge_conflicts() ->
?assertEqual([{<<"foo">>, [Rev2]}], couch_db_engine:get_last_purged(Db4)).
-cet_add_delete_purge() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_add_delete_purge(Db1) ->
Actions1 = [
{create, {<<"foo">>, {[{<<"vsn">>, 1}]}}},
{delete, {<<"foo">>, {[{<<"vsn">>, 2}]}}}
@@ -126,9 +129,7 @@ cet_add_delete_purge() ->
?assertEqual([{<<"foo">>, [Rev]}], couch_db_engine:get_last_purged(Db3)).
-cet_add_two_purge_one() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_add_two_purge_one(Db1) ->
Actions1 = [
{create, {<<"foo">>, {[{<<"vsn">>, 1}]}}},
{create, {<<"bar">>, {[]}}}
diff --git a/src/couch_pse_tests/src/cpse_test_read_write_docs.erl b/src/couch_pse_tests/src/cpse_test_read_write_docs.erl
index 907f5d92d..84bf9f323 100644
--- a/src/couch_pse_tests/src/cpse_test_read_write_docs.erl
+++ b/src/couch_pse_tests/src/cpse_test_read_write_docs.erl
@@ -18,9 +18,16 @@
-include_lib("couch/include/couch_db.hrl").
-cet_read_empty_docs() ->
+setup_each() ->
{ok, Db} = cpse_util:create_db(),
+ Db.
+
+teardown_each(Db) ->
+ ok = couch_server:delete(couch_db:name(Db), []).
+
+
+cpse_read_docs_from_empty_db(Db) ->
?assertEqual([not_found], couch_db_engine:open_docs(Db, [<<"foo">>])),
?assertEqual(
[not_found, not_found],
@@ -28,9 +35,7 @@ cet_read_empty_docs() ->
).
-cet_read_empty_local_docs() ->
- {ok, Db} = cpse_util:create_db(),
-
+cpse_read_empty_local_docs(Db) ->
{LocalA, LocalB} = {<<"_local/a">>, <<"_local/b">>},
?assertEqual([not_found], couch_db_engine:open_local_docs(Db, [LocalA])),
?assertEqual(
@@ -39,9 +44,7 @@ cet_read_empty_local_docs() ->
).
-cet_write_one_doc() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_write_one_doc(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -82,9 +85,7 @@ cet_write_one_doc() ->
?assertEqual({[{<<"vsn">>, 1}]}, Body1).
-cet_write_two_docs() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_write_two_docs(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -107,9 +108,7 @@ cet_write_two_docs() ->
?assertEqual(false, lists:member(not_found, Resps)).
-cet_write_three_doc_batch() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_write_three_doc_batch(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -135,9 +134,7 @@ cet_write_three_doc_batch() ->
?assertEqual(false, lists:member(not_found, Resps)).
-cet_update_doc() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_update_doc(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -179,9 +176,7 @@ cet_update_doc() ->
?assertEqual({[{<<"vsn">>, 2}]}, Body1).
-cet_delete_doc() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_delete_doc(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -222,9 +217,7 @@ cet_delete_doc() ->
?assertEqual({[]}, Body1).
-cet_write_local_doc() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_write_local_doc(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -247,9 +240,7 @@ cet_write_local_doc() ->
?assertEqual({[{<<"yay">>, false}]}, Doc#doc.body).
-cet_write_mixed_batch() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_write_mixed_batch(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -277,9 +268,7 @@ cet_write_mixed_batch() ->
[#doc{}] = couch_db_engine:open_local_docs(Db3, [<<"_local/foo">>]).
-cet_update_local_doc() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_update_local_doc(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
@@ -303,9 +292,7 @@ cet_update_local_doc() ->
?assertEqual({[{<<"stuff">>, null}]}, Doc#doc.body).
-cet_delete_local_doc() ->
- {ok, Db1} = cpse_util:create_db(),
-
+cpse_delete_local_doc(Db1) ->
?assertEqual(0, couch_db_engine:get_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_del_doc_count(Db1)),
?assertEqual(0, couch_db_engine:get_update_seq(Db1)),
diff --git a/src/couch_pse_tests/src/cpse_test_ref_counting.erl b/src/couch_pse_tests/src/cpse_test_ref_counting.erl
index 552904940..2a0e4c202 100644
--- a/src/couch_pse_tests/src/cpse_test_ref_counting.erl
+++ b/src/couch_pse_tests/src/cpse_test_ref_counting.erl
@@ -21,21 +21,27 @@
-define(NUM_CLIENTS, 1000).
-cet_empty_monitors() ->
+setup_each() ->
{ok, Db} = cpse_util:create_db(),
+ {Db, self()}.
+
+
+teardown_each({Db, _}) ->
+ ok = couch_server:delete(couch_db:name(Db), []).
+
+
+cpse_empty_monitors({Db, Pid}) ->
Pids = couch_db_engine:monitored_by(Db),
?assert(is_list(Pids)),
Expected = [
- self(),
+ Pid,
couch_db:get_pid(Db),
whereis(couch_stats_process_tracker)
],
?assertEqual([], Pids -- Expected).
-cet_incref_decref() ->
- {ok, Db} = cpse_util:create_db(),
-
+cpse_incref_decref({Db, _}) ->
{Pid, _} = Client = start_client(Db),
wait_client(Client),
@@ -48,8 +54,7 @@ cet_incref_decref() ->
?assert(not lists:member(Pid, Pids2)).
-cet_incref_decref_many() ->
- {ok, Db} = cpse_util:create_db(),
+cpse_incref_decref_many({Db, _}) ->
Clients = lists:map(fun(_) ->
start_client(Db)
end, lists:seq(1, ?NUM_CLIENTS)),
diff --git a/src/couch_pse_tests/src/cpse_util.erl b/src/couch_pse_tests/src/cpse_util.erl
index 122ba425c..ff119519d 100644
--- a/src/couch_pse_tests/src/cpse_util.erl
+++ b/src/couch_pse_tests/src/cpse_util.erl
@@ -14,6 +14,7 @@
-compile(export_all).
+-include_lib("eunit/include/eunit.hrl").
-include_lib("couch/include/couch_db.hrl").
@@ -43,45 +44,26 @@ create_tests(EngineApp, Extension) ->
create_tests(EngineApp, EngineModule, Extension) ->
TestEngine = {EngineApp, EngineModule, Extension},
application:set_env(couch, test_engine, TestEngine),
- Tests = lists:map(fun(TestMod) ->
- {atom_to_list(TestMod), gather(TestMod)}
- end, ?TEST_MODULES),
- Setup = fun() ->
- Ctx = test_util:start_couch(),
- EngineModStr = atom_to_list(EngineModule),
- config:set("couchdb_engines", Extension, EngineModStr, false),
- config:set("log", "include_sasl", "false", false),
- Ctx
- end,
- {
- setup,
- Setup,
- fun test_util:stop_couch/1,
- fun(_) -> Tests end
- }.
+ lists:map(fun(TestMod) ->
+ {atom_to_list(TestMod), cpse_gather:module(TestMod)}
+ end, ?TEST_MODULES).
-gather(Module) ->
- Exports = Module:module_info(exports),
- Tests = lists:foldl(fun({Fun, Arity}, Acc) ->
- case {atom_to_list(Fun), Arity} of
- {[$c, $e, $t, $_ | _], 0} ->
- TestFun = make_test_fun(Module, Fun),
- [{timeout, 60, {spawn, TestFun}} | Acc];
- _ ->
- Acc
- end
- end, [], Exports),
- lists:reverse(Tests).
+setup_all() ->
+ setup_all([]).
-make_test_fun(Module, Fun) ->
- Name = lists:flatten(io_lib:format("~s:~s", [Module, Fun])),
- Wrapper = fun() ->
- process_flag(trap_exit, true),
- Module:Fun()
- end,
- {Name, Wrapper}.
+setup_all(ExtraApps) ->
+ Ctx = test_util:start_couch(ExtraApps),
+ {ok, {_, EngineMod, Extension}} = application:get_env(couch, test_engine),
+ EngineModStr = atom_to_list(EngineMod),
+ config:set("couchdb_engines", Extension, EngineModStr, false),
+ config:set("log", "include_sasl", "false", false),
+ Ctx.
+
+
+teardown_all(Ctx) ->
+ test_util:stop_couch(Ctx).
rootdir() ->