summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiahuili <Jiahui.Li@ibm.com>2021-10-07 08:36:56 -0500
committerNick Vatamaniuc <nickva@users.noreply.github.com>2021-10-12 14:56:00 -0400
commit79f64a7897d72217780a0708ec657fcd6ef99b26 (patch)
tree25c4efc0559394f6f1f2789fd65af15cbbc82238
parentbf84c5dacf8609ad349379daf75eba361d7e85bc (diff)
downloadcouchdb-79f64a7897d72217780a0708ec657fcd6ef99b26.tar.gz
Return empty list from fabric:inactive_index_files/1 when database doesn't exist
-rw-r--r--src/fabric/src/fabric.erl10
-rw-r--r--src/fabric/test/eunit/fabric_tests.erl60
2 files changed, 67 insertions, 3 deletions
diff --git a/src/fabric/src/fabric.erl b/src/fabric/src/fabric.erl
index 638603437..372f89215 100644
--- a/src/fabric/src/fabric.erl
+++ b/src/fabric/src/fabric.erl
@@ -504,9 +504,13 @@ cleanup_index_files() ->
%% @doc clean up index files for a specific db
-spec cleanup_index_files(dbname()) -> ok.
cleanup_index_files(DbName) ->
- lists:foreach(fun(File) ->
- file:delete(File)
- end, inactive_index_files(DbName)).
+ try lists:foreach(
+ fun(File) ->
+ file:delete(File)
+ end, inactive_index_files(DbName))
+ catch
+ error:database_does_not_exist -> ok
+ end.
%% @doc inactive index files for a specific db
-spec inactive_index_files(dbname()) -> ok.
diff --git a/src/fabric/test/eunit/fabric_tests.erl b/src/fabric/test/eunit/fabric_tests.erl
new file mode 100644
index 000000000..53995933b
--- /dev/null
+++ b/src/fabric/test/eunit/fabric_tests.erl
@@ -0,0 +1,60 @@
+% 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(fabric_tests).
+
+
+-include_lib("couch/include/couch_eunit.hrl").
+
+
+cleanup_index_files_test_() ->
+ {
+ setup,
+ fun setup/0,
+ fun teardown/1,
+ fun(Ctx) -> [
+ t_cleanup_index_files(),
+ t_cleanup_index_files_with_existing_db(Ctx),
+ t_cleanup_index_files_with_deleted_db(Ctx)
+ ] end
+ }.
+
+
+setup() ->
+ Ctx = test_util:start_couch([fabric]),
+ % TempDb is deleted in the test "t_cleanup_index_files_with_deleted_db".
+ TempDb = ?tempdb(),
+ fabric:create_db(TempDb),
+ {Ctx, TempDb}.
+
+
+teardown({Ctx, _TempDb}) ->
+ test_util:stop_couch(Ctx).
+
+
+t_cleanup_index_files() ->
+ ?_assert(
+ lists:all(fun(Res) -> Res =:= ok end, fabric:cleanup_index_files())).
+
+
+t_cleanup_index_files_with_existing_db({_Ctx, TempDb}) ->
+ ?_assertEqual(ok, fabric:cleanup_index_files(TempDb)).
+
+
+t_cleanup_index_files_with_deleted_db({_Ctx, TempDb}) ->
+ ?_test(
+ begin
+ fabric:delete_db(TempDb, []),
+ ?assertError(database_does_not_exist,
+ fabric:inactive_index_files(TempDb)),
+ ?assertEqual(ok, fabric:cleanup_index_files(TempDb))
+ end).