| % 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. |