diff options
author | Joan Touzet <wohali@users.noreply.github.com> | 2019-02-05 11:27:37 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-05 11:27:37 -0500 |
commit | 04a18101c551bf94e22b12f82b616e53ebf92e66 (patch) | |
tree | 482702264899baa0b31d0e22ecd1d7bbdefda095 | |
parent | 957f2789644713889c8ad28e3056de0a39c38476 (diff) | |
parent | 20448c654a0f7c82e8defffe7a850d69378e2f33 (diff) | |
download | couchdb-jenkins-fix.tar.gz |
Merge branch 'master' into jenkins-fixjenkins-fix
-rw-r--r-- | Makefile | 13 | ||||
-rw-r--r-- | rebar.config.script | 3 | ||||
-rw-r--r-- | rel/reltool.config | 2 | ||||
-rw-r--r-- | src/couch/src/couch_doc.erl | 21 | ||||
-rw-r--r-- | src/couch/test/couch_db_doc_tests.erl | 21 | ||||
-rw-r--r-- | src/couch/test/couch_doc_json_tests.erl | 22 | ||||
-rw-r--r-- | src/mango/src/mango_native_proc.erl | 17 |
7 files changed, 61 insertions, 38 deletions
@@ -76,7 +76,6 @@ COMPILE_OPTS=$(shell echo "\ apps=$(apps) \ " | sed -e 's/[a-z_]\{1,\}= / /g') EUNIT_OPTS=$(shell echo "\ - apps=$(apps) \ skip_deps=$(skip_deps) \ suites=$(suites) \ tests=$(tests) \ @@ -154,13 +153,21 @@ check: all .PHONY: eunit # target: eunit - Run EUnit tests, use EUNIT_OPTS to provide custom options + +ifdef apps +subdirs = $(apps) +else +subdirs=$(shell ls src) +endif + eunit: export BUILDDIR = $(shell pwd) eunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config eunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(shell pwd)/bin/couchjs $(shell pwd)/share/server/main.js eunit: couch @$(REBAR) setup_eunit 2> /dev/null - @$(REBAR) -r eunit $(EUNIT_OPTS) - + @for dir in $(subdirs); do \ + $(REBAR) -r eunit $(EUNIT_OPTS) apps=$$dir; \ + done setup-eunit: export BUILDDIR = $(shell pwd) setup-eunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config diff --git a/rebar.config.script b/rebar.config.script index 571ce25e2..2a534e0dd 100644 --- a/rebar.config.script +++ b/rebar.config.script @@ -90,7 +90,8 @@ DepDescs = [ {ets_lru, "ets-lru", {tag, "1.0.0"}}, {khash, "khash", {tag, "1.0.1"}}, {snappy, "snappy", {tag, "CouchDB-1.0.2"}}, -{ioq, "ioq", {tag, "1.0.1"}}, +{ioq, "ioq", {tag, "2.0.0"}}, +{hqueue, "hqueue", {tag, "1.0.0"}}, %% Non-Erlang deps {docs, {url, "https://github.com/apache/couchdb-documentation"}, diff --git a/rel/reltool.config b/rel/reltool.config index 858e935b2..ba1afc271 100644 --- a/rel/reltool.config +++ b/rel/reltool.config @@ -46,6 +46,7 @@ fabric, folsom, global_changes, + hqueue, hyper, ibrowse, ioq, @@ -100,6 +101,7 @@ {app, fabric, [{incl_cond, include}]}, {app, folsom, [{incl_cond, include}]}, {app, global_changes, [{incl_cond, include}]}, + {app, hqueue, [{incl_cond, include}]}, {app, hyper, [{incl_cond, include}]}, {app, ibrowse, [{incl_cond, include}]}, {app, ioq, [{incl_cond, include}]}, diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl index e5ad9e9f1..4a49372c7 100644 --- a/src/couch/src/couch_doc.erl +++ b/src/couch/src/couch_doc.erl @@ -179,12 +179,12 @@ parse_rev(Rev) when is_list(Rev) -> SplitRev = lists:splitwith(fun($-) -> false; (_) -> true end, Rev), case SplitRev of {Pos, [$- | RevId]} -> - IntPos = try list_to_integer(Pos) of - Val -> Val + try + IntPos = list_to_integer(Pos), + {IntPos, parse_revid(RevId)} catch error:badarg -> throw({bad_request, <<"Invalid rev format">>}) - end, - {IntPos, parse_revid(RevId)}; + end; _Else -> throw({bad_request, <<"Invalid rev format">>}) end; parse_rev(_BadRev) -> @@ -275,9 +275,16 @@ transfer_fields([{<<"_revisions">>, {Props}} | Rest], Doc, DbName) -> true -> ok end, - [throw({doc_validation, "RevId isn't a string"}) || - RevId <- RevIds, not is_binary(RevId)], - RevIds2 = [parse_revid(RevId) || RevId <- RevIds], + RevIds2 = lists:map(fun(RevId) -> + try + parse_revid(RevId) + catch + error:function_clause -> + throw({doc_validation, "RevId isn't a string"}); + error:badarg -> + throw({doc_validation, "RevId isn't a valid hexadecimal"}) + end + end, RevIds), transfer_fields(Rest, Doc#doc{revs={Start, RevIds2}}, DbName); transfer_fields([{<<"_deleted">>, B} | Rest], Doc, DbName) when is_boolean(B) -> diff --git a/src/couch/test/couch_db_doc_tests.erl b/src/couch/test/couch_db_doc_tests.erl index aa9c6fd71..cdcf81d15 100644 --- a/src/couch/test/couch_db_doc_tests.erl +++ b/src/couch/test/couch_db_doc_tests.erl @@ -42,7 +42,8 @@ couch_db_doc_test_() -> foreach, fun setup/0, fun teardown/1, [ - fun should_truncate_number_of_revisions/1 + fun should_truncate_number_of_revisions/1, + fun should_raise_bad_request_on_invalid_rev/1 ] } } @@ -59,6 +60,24 @@ should_truncate_number_of_revisions(DbName) -> ?_assertEqual(5, length(Revs)). +should_raise_bad_request_on_invalid_rev(DbName) -> + DocId = <<"foo">>, + InvalidRev1 = <<"foo">>, + InvalidRev2 = <<"a-foo">>, + InvalidRev3 = <<"1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">>, + Expect = {bad_request, <<"Invalid rev format">>}, + Db = open_db(DbName), + create_doc(Db, DocId), + [ + {InvalidRev1, + ?_assertThrow(Expect, add_revisions(Db, DocId, InvalidRev1, 1))}, + {InvalidRev2, + ?_assertThrow(Expect, add_revisions(Db, DocId, InvalidRev2, 1))}, + {InvalidRev3, + ?_assertThrow(Expect, add_revisions(Db, DocId, InvalidRev3, 1))} + ]. + + open_db(DbName) -> {ok, Db} = couch_db:open_int(DbName, [?ADMIN_CTX]), Db. diff --git a/src/couch/test/couch_doc_json_tests.erl b/src/couch/test/couch_doc_json_tests.erl index cc5dc3222..51f228900 100644 --- a/src/couch/test/couch_doc_json_tests.erl +++ b/src/couch/test/couch_doc_json_tests.erl @@ -270,6 +270,12 @@ from_json_error_cases() -> "Revision ids must be strings." }, { + {[{<<"_revisions">>, {[{<<"start">>, 0}, + {<<"ids">>, [<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">>]}]}}]}, + {doc_validation, "RevId isn't a valid hexadecimal"}, + "Revision ids must be a valid hex." + }, + { {[{<<"_something">>, 5}]}, {doc_validation, <<"Bad special document member: _something">>}, "Underscore prefix fields are reserved." @@ -288,18 +294,14 @@ from_json_error_cases() -> lists:map(fun ({Fun, Expect, Msg}) when is_function(Fun, 0) -> - Error = (catch couch_doc:from_json_obj_validate(Fun())), - {Msg, ?_assertMatch(Expect, Error)}; + {Msg, + ?_assertThrow(Expect, couch_doc:from_json_obj_validate(Fun()))}; ({EJson, Expect, Msg}) -> - Error = (catch couch_doc:from_json_obj_validate(EJson)), - {Msg, ?_assertMatch(Expect, Error)}; + {Msg, + ?_assertThrow(Expect, couch_doc:from_json_obj_validate(EJson))}; ({EJson, Msg}) -> - try - couch_doc:from_json_obj_validate(EJson), - {"Conversion failed to raise an exception", ?_assert(false)} - catch - _:_ -> {Msg, ?_assert(true)} - end + {Msg, + ?_assertThrow(_, couch_doc:from_json_obj_validate(EJson))} end, Cases). from_json_with_dbname_error_cases() -> diff --git a/src/mango/src/mango_native_proc.erl b/src/mango/src/mango_native_proc.erl index 4c536f871..ab161469a 100644 --- a/src/mango/src/mango_native_proc.erl +++ b/src/mango/src/mango_native_proc.erl @@ -367,22 +367,7 @@ validate_index_info(IndexInfo) -> -include_lib("eunit/include/eunit.hrl"). handle_garbage_collect_cast_test() -> - Pid = self(), - {_, TracerRef} = spawn_monitor(fun() -> - erlang:trace(Pid, true, [garbage_collection]), - receive {trace, Pid, gc_start, _} -> - erlang:trace(Pid, false, [garbage_collection]), - exit(gc_start) - end - end), - erlang:yield(), - ?assertEqual({noreply, []}, handle_cast(garbage_collect, [])), - receive - {'DOWN', TracerRef, _, _, Msg} -> ?assertEqual(gc_start, Msg) - after 1000 -> - erlang:error({assertion_failed, [{module, ?MODULE}, {line, ?LINE}, - {expected, gc_start}, {reason, timeout}]}) - end. + ?assertEqual({noreply, []}, handle_cast(garbage_collect, [])). handle_stop_cast_test() -> ?assertEqual({stop, normal, []}, handle_cast(stop, [])). |