summaryrefslogtreecommitdiff
path: root/src/couch/test/eunit/couch_db_tests.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/couch/test/eunit/couch_db_tests.erl')
-rw-r--r--src/couch/test/eunit/couch_db_tests.erl171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/couch/test/eunit/couch_db_tests.erl b/src/couch/test/eunit/couch_db_tests.erl
new file mode 100644
index 000000000..d64f7c640
--- /dev/null
+++ b/src/couch/test/eunit/couch_db_tests.erl
@@ -0,0 +1,171 @@
+% 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(couch_db_tests).
+
+-include_lib("couch/include/couch_eunit.hrl").
+
+-define(TIMEOUT, 120).
+
+
+
+create_delete_db_test_()->
+ {
+ "Database create/delete tests",
+ {
+ setup,
+ fun test_util:start_couch/0, fun test_util:stop_couch/1,
+ {
+ foreach,
+ fun() -> ?tempdb() end,
+ [
+ fun should_create_db/1,
+ fun should_delete_db/1
+ ]
+ }
+ }
+ }.
+
+create_delete_multiple_dbs_test_()->
+ {
+ "Multiple database create/delete tests",
+ {
+ setup,
+ fun test_util:start_couch/0, fun test_util:stop_couch/1,
+ {
+ foreach,
+ fun() -> [?tempdb() || _ <- lists:seq(1, 6)] end,
+ [
+ fun should_create_multiple_dbs/1,
+ fun should_delete_multiple_dbs/1
+ ]
+ }
+ }
+ }.
+
+create_delete_database_continuously_test_() ->
+ {
+ "Continious database create/delete tests",
+ {
+ setup,
+ fun test_util:start_couch/0, fun test_util:stop_couch/1,
+ {
+ foreachx,
+ fun(_) -> ?tempdb() end,
+ [
+ {10, fun should_create_delete_database_continuously/2},
+ {100, fun should_create_delete_database_continuously/2}
+ ]
+ }
+ }
+ }.
+
+open_db_test_()->
+ {
+ "Database open tests",
+ {
+ setup,
+ fun test_util:start_couch/0, fun test_util:stop_couch/1,
+ {
+ foreach,
+ fun() -> ?tempdb() end,
+ [
+ fun should_create_db_if_missing/1,
+ fun should_open_db_if_exists/1
+ ]
+ }
+ }
+ }.
+
+
+should_create_db(DbName) ->
+ ?_test(begin
+ {ok, Before} = couch_server:all_databases(),
+ ?assertNot(lists:member(DbName, Before)),
+ ?assert(create_db(DbName)),
+ {ok, After} = couch_server:all_databases(),
+ ?assert(lists:member(DbName, After))
+ end).
+
+should_delete_db(DbName) ->
+ ?_test(begin
+ ?assert(create_db(DbName)),
+ {ok, Before} = couch_server:all_databases(),
+ ?assert(lists:member(DbName, Before)),
+ couch_server:delete(DbName, []),
+ {ok, After} = couch_server:all_databases(),
+ ?assertNot(lists:member(DbName, After))
+ end).
+
+should_create_multiple_dbs(DbNames) ->
+ ?_test(begin
+ gen_server:call(couch_server, {set_max_dbs_open, 3}),
+ {ok, Before} = couch_server:all_databases(),
+ [?assertNot(lists:member(DbName, Before)) || DbName <- DbNames],
+ [?assert(create_db(DbName)) || DbName <- DbNames],
+ {ok, After} = couch_server:all_databases(),
+ [?assert(lists:member(DbName, After)) || DbName <- DbNames]
+ end).
+
+should_delete_multiple_dbs(DbNames) ->
+ ?_test(begin
+ [?assert(create_db(DbName)) || DbName <- DbNames],
+ {ok, Before} = couch_server:all_databases(),
+ [?assert(lists:member(DbName, Before)) || DbName <- DbNames],
+ [?assert(delete_db(DbName)) || DbName <- DbNames],
+ {ok, After} = couch_server:all_databases(),
+ [?assertNot(lists:member(DbName, After)) || DbName <- DbNames]
+ end).
+
+should_create_delete_database_continuously(Times, DbName) ->
+ {lists:flatten(io_lib:format("~b times", [Times])),
+ {timeout, ?TIMEOUT, ?_test(begin
+ ?assert(create_db(DbName)),
+ lists:foreach(fun(_) ->
+ ?assert(delete_db(DbName)),
+ ?assert(create_db(DbName))
+ end, lists:seq(1, Times))
+ end)}}.
+
+should_create_db_if_missing(DbName) ->
+ ?_test(begin
+ {ok, Before} = couch_server:all_databases(),
+ ?assertNot(lists:member(DbName, Before)),
+ {ok, Db} = couch_db:open(DbName, [{create_if_missing, true}]),
+ ok = couch_db:close(Db),
+ {ok, After} = couch_server:all_databases(),
+ ?assert(lists:member(DbName, After))
+ end).
+
+should_open_db_if_exists(DbName) ->
+ ?_test(begin
+ ?assert(create_db(DbName)),
+ {ok, Before} = couch_server:all_databases(),
+ ?assert(lists:member(DbName, Before)),
+ {ok, Db} = couch_db:open(DbName, [{create_if_missing, true}]),
+ ok = couch_db:close(Db),
+ {ok, After} = couch_server:all_databases(),
+ ?assert(lists:member(DbName, After))
+ end).
+
+
+create_db(DbName) ->
+ create_db(DbName, []).
+
+create_db(DbName, Opts) ->
+ {ok, Db} = couch_db:create(DbName, Opts),
+ ok = couch_db:close(Db),
+ true.
+
+delete_db(DbName) ->
+ ok = couch_server:delete(DbName, []),
+ true.