summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoan Touzet <wohali@users.noreply.github.com>2019-02-05 11:27:37 -0500
committerGitHub <noreply@github.com>2019-02-05 11:27:37 -0500
commit04a18101c551bf94e22b12f82b616e53ebf92e66 (patch)
tree482702264899baa0b31d0e22ecd1d7bbdefda095
parent957f2789644713889c8ad28e3056de0a39c38476 (diff)
parent20448c654a0f7c82e8defffe7a850d69378e2f33 (diff)
downloadcouchdb-jenkins-fix.tar.gz
Merge branch 'master' into jenkins-fixjenkins-fix
-rw-r--r--Makefile13
-rw-r--r--rebar.config.script3
-rw-r--r--rel/reltool.config2
-rw-r--r--src/couch/src/couch_doc.erl21
-rw-r--r--src/couch/test/couch_db_doc_tests.erl21
-rw-r--r--src/couch/test/couch_doc_json_tests.erl22
-rw-r--r--src/mango/src/mango_native_proc.erl17
7 files changed, 61 insertions, 38 deletions
diff --git a/Makefile b/Makefile
index 10bca5d70..76e77a8e4 100644
--- a/Makefile
+++ b/Makefile
@@ -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, [])).