diff options
author | jiangph <jiangph@cn.ibm.com> | 2018-11-14 21:35:19 +0800 |
---|---|---|
committer | jiangph <jiangph@cn.ibm.com> | 2018-11-16 07:02:20 +0800 |
commit | 6da9b71ecc05e958f08c8aed59137d3765bbd22c (patch) | |
tree | 15487c86f7fdce4d3da204cc29366e1b54622f43 | |
parent | 269224b8d3ddddc2199643a0500076f4250c7d75 (diff) | |
download | couchdb-6da9b71ecc05e958f08c8aed59137d3765bbd22c.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.erl | 8 | ||||
-rw-r--r-- | src/chttpd/test/chttpd_purge_tests.erl | 22 |
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). |