1% Licensed under the Apache License, Version 2.0 (the "License"); you may not
2% use this file except in compliance with the License. You may obtain a copy of
3% the License at
4%
5%   http://www.apache.org/licenses/LICENSE-2.0
6%
7% Unless required by applicable law or agreed to in writing, software
8% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10% License for the specific language governing permissions and limitations under
11% the License.
12
13-module(cpse_test_open_close_delete).
14-compile(export_all).
15-compile(nowarn_export_all).
16
17
18-include_lib("eunit/include/eunit.hrl").
19
20
21setup_each() ->
22    cpse_util:dbname().
23
24
25teardown_each(DbName) ->
26    case couch_server:exists(DbName) of
27        true -> ok = couch_server:delete(DbName, []);
28        false -> ok
29    end.
30
31
32cpse_open_non_existent(DbName) ->
33    % Try twice to check that a failed open doesn't create
34    % the database for some reason.
35    ?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
36    ?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)).
37
38
39cpse_open_create(DbName) ->
40    ?assertEqual(false, couch_server:exists(DbName)),
41    ?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
42    ?assertMatch({ok, _}, cpse_util:create_db(DbName)),
43    ?assertEqual(true, couch_server:exists(DbName)).
44
45
46cpse_open_when_exists(DbName) ->
47    ?assertEqual(false, couch_server:exists(DbName)),
48    ?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
49    ?assertMatch({ok, _}, cpse_util:create_db(DbName)),
50    ?assertEqual(file_exists, cpse_util:create_db(DbName)).
51
52
53cpse_terminate(DbName) ->
54    ?assertEqual(false, couch_server:exists(DbName)),
55    ?assertEqual({not_found, no_db_file}, cpse_util:open_db(DbName)),
56    ?assertEqual(ok, cycle_db(DbName, create_db)),
57    ?assertEqual(true, couch_server:exists(DbName)).
58
59
60cpse_rapid_recycle(DbName) ->
61    ?assertEqual(ok, cycle_db(DbName, create_db)),
62    lists:foreach(fun(_) ->
63        ?assertEqual(ok, cycle_db(DbName, open_db))
64    end, lists:seq(1, 100)).
65
66
67cpse_delete(DbName) ->
68    ?assertEqual(false, couch_server:exists(DbName)),
69    ?assertMatch(ok, cycle_db(DbName, create_db)),
70    ?assertEqual(true, couch_server:exists(DbName)),
71    ?assertEqual(ok, couch_server:delete(DbName, [])),
72    ?assertEqual(false, couch_server:exists(DbName)).
73
74
75cycle_db(DbName, Type) ->
76    {ok, Db} = cpse_util:Type(DbName),
77    cpse_util:shutdown_db(Db).
78