summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangph <jiangph@cn.ibm.com>2018-11-14 21:35:19 +0800
committerjiangph <jiangph@cn.ibm.com>2018-11-16 07:02:20 +0800
commit6da9b71ecc05e958f08c8aed59137d3765bbd22c (patch)
tree15487c86f7fdce4d3da204cc29366e1b54622f43
parent269224b8d3ddddc2199643a0500076f4250c7d75 (diff)
downloadcouchdb-timeout-_purged_infos_limit.tar.gz
Avoid badmatch when getting fabric timeouttimeout-_purged_infos_limit
- Avoid badmatch when putting set_purge_infos_limit and getting fabric timeout COUCHDB-3326
-rw-r--r--src/chttpd/src/chttpd_db.erl8
-rw-r--r--src/chttpd/test/chttpd_purge_tests.erl22
2 files changed, 26 insertions, 4 deletions
diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 9c78cf3fb..75904672b 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -688,8 +688,12 @@ db_req(#httpd{method='PUT',path_parts=[_,<<"_purged_infos_limit">>]}=Req, Db) ->
Options = [{user_ctx, Req#httpd.user_ctx}],
case chttpd:json_body(Req) of
Limit when is_integer(Limit), Limit > 0 ->
- ok = fabric:set_purge_infos_limit(Db, Limit, Options),
- send_json(Req, {[{<<"ok">>, true}]});
+ case fabric:set_purge_infos_limit(Db, Limit, Options) of
+ ok ->
+ send_json(Req, {[{<<"ok">>, true}]});
+ Error ->
+ throw(Error)
+ end;
_->
throw({bad_request, "`purge_infos_limit` must be positive integer"})
end;
diff --git a/src/chttpd/test/chttpd_purge_tests.erl b/src/chttpd/test/chttpd_purge_tests.erl
index af1bd0b1c..b3acb0668 100644
--- a/src/chttpd/test/chttpd_purge_tests.erl
+++ b/src/chttpd/test/chttpd_purge_tests.erl
@@ -75,7 +75,8 @@ purge_test_() ->
fun test_mixed_purge_request/1,
fun test_overmany_ids_or_revs_purge_request/1,
fun test_exceed_limits_on_purge_infos/1,
- fun should_error_set_purged_docs_limit_to0/1
+ fun should_error_set_purged_docs_limit_to0/1,
+ fun test_timeout_set_purged_infos_limit/1
]
}
}
@@ -350,4 +351,21 @@ should_error_set_purged_docs_limit_to0(Url) ->
{ok, Status, _, _} = test_request:put(Url ++ "/_purged_infos_limit/",
[?CONTENT_JSON, ?AUTH], "0"),
?assert(Status =:= 400)
- end). \ No newline at end of file
+ end).
+
+
+test_timeout_set_purged_infos_limit(Url) ->
+ ?_test(begin
+ meck:new(fabric, [passthrough]),
+ meck:expect(fabric, set_purge_infos_limit, fun(_, _, _) ->
+ {error, timeout} end),
+ {ok, Status, _, ResultBody} = test_request:put(Url
+ ++ "/_purged_infos_limit/", [?CONTENT_JSON, ?AUTH], "2"),
+ meck:unload(fabric),
+ ResultJson = ?JSON_DECODE(ResultBody),
+ ?assert(Status =:= 500),
+ ?assertMatch({[
+ {<<"error">>,<<"error">>},
+ {<<"reason">>,<<"timeout">>}]},
+ ResultJson)
+ end).