diff options
Diffstat (limited to 'src/couch/test/eunit/couchdb_db_tests.erl')
-rw-r--r-- | src/couch/test/eunit/couchdb_db_tests.erl | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/couch/test/eunit/couchdb_db_tests.erl b/src/couch/test/eunit/couchdb_db_tests.erl new file mode 100644 index 000000000..734bafb9f --- /dev/null +++ b/src/couch/test/eunit/couchdb_db_tests.erl @@ -0,0 +1,91 @@ +% 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(couchdb_db_tests). + +-include_lib("couch/include/couch_eunit.hrl"). +-include_lib("couch/include/couch_db.hrl"). +-include_lib("mem3/include/mem3.hrl"). + +setup() -> + DbName = ?b2l(?tempdb()), + fabric:create_db(DbName), + DbName. + + +teardown(DbName) -> + (catch fabric:delete_db(DbName)), + ok. + + +clustered_db_test_() -> + { + "Checking clustered db API", + { + setup, + fun() -> test_util:start_couch([ddoc_cache, mem3]) end, + fun test_util:stop/1, + [ + { + "DB deletion", + { + foreach, + fun setup/0, fun teardown/1, + [ + fun should_close_deleted_db/1, + fun should_kill_caller_from_load_validation_funs_for_deleted_db/1 + ] + } + } + ] + } + }. + + +should_close_deleted_db(DbName) -> + ?_test(begin + [#shard{name = ShardName} | _] = mem3:shards(DbName), + {ok, Db} = couch_db:open(ShardName, []), + + MonitorRef = couch_db:monitor(Db), + fabric:delete_db(DbName), + receive + {'DOWN', MonitorRef, _Type, _Pid, _Info} -> + ok + after 2000 -> + throw(timeout_error) + end, + test_util:wait(fun() -> + case ets:lookup(couch_dbs, DbName) of + [] -> ok; + _ -> wait + end + end), + ?assertEqual([], ets:lookup(couch_dbs, DbName)) + end). + + +should_kill_caller_from_load_validation_funs_for_deleted_db(DbName) -> + ?_test(begin + [#shard{name = ShardName} | _] = mem3:shards(DbName), + {ok, Db} = couch_db:open(ShardName, []), + + MonitorRef = couch_db:monitor(Db), + fabric:delete_db(DbName), + receive + {'DOWN', MonitorRef, _Type, _Pid, _Info} -> + ok + after 2000 -> + throw(timeout_error) + end, + ?assertError(database_does_not_exist, couch_db:load_validation_funs(Db)) + end). |