You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ei...@apache.org on 2016/12/13 14:17:27 UTC
[1/4] couch commit: updated refs/heads/master to 1df631a
Repository: couchdb-couch
Updated Branches:
refs/heads/master b83f1a77e -> 1df631aeb
Add tests for filter by filter function
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/87b01e84
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/87b01e84
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/87b01e84
Branch: refs/heads/master
Commit: 87b01e84e7e9d884a0f020a11fe530035be17614
Parents: 3eeda46
Author: Eric Avdey <ei...@eiri.ca>
Authored: Fri Nov 11 20:50:37 2016 -0400
Committer: Eric Avdey <ei...@eiri.ca>
Committed: Tue Dec 13 10:05:59 2016 -0400
----------------------------------------------------------------------
test/couch_changes_tests.erl | 68 +++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/87b01e84/test/couch_changes_tests.erl
----------------------------------------------------------------------
diff --git a/test/couch_changes_tests.erl b/test/couch_changes_tests.erl
index fa64e9e..3c0e5f6 100644
--- a/test/couch_changes_tests.erl
+++ b/test/couch_changes_tests.erl
@@ -66,6 +66,7 @@ changes_test_() ->
filter_by_design(),
continuous_feed(),
%%filter_by_custom_function()
+ filter_by_filter_function(),
filter_by_view()
]
}
@@ -131,6 +132,19 @@ filter_by_custom_function() ->
}
}.
+filter_by_filter_function() ->
+ {
+ "Filter by filters",
+ {
+ foreach,
+ fun setup/0, fun teardown/1,
+ [
+ fun should_filter_by_doc_attribute/1,
+ fun should_filter_by_user_ctx/1
+ ]
+ }
+ }.
+
filter_by_view() ->
{
"Filter _view",
@@ -590,6 +604,60 @@ should_receive_heartbeats(_) ->
?assert(Heartbeats3 > Heartbeats2)
end)}.
+should_filter_by_doc_attribute({DbName, _}) ->
+ ?_test(
+ begin
+ DDocId = <<"_design/app">>,
+ DDoc = couch_doc:from_json_obj({[
+ {<<"_id">>, DDocId},
+ {<<"language">>, <<"javascript">>},
+ {<<"filters">>, {[
+ {<<"valid">>, <<"function(doc, req) {"
+ " if (doc._id == 'doc3') {"
+ " return true; "
+ "} }">>}
+ ]}}
+ ]}),
+ ChArgs = #changes_args{filter = "app/valid"},
+ Req = {json_req, null},
+ ok = update_ddoc(DbName, DDoc),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
+ ?assertEqual(1, length(Rows)),
+ [#row{seq = Seq, id = Id}] = Rows,
+ ?assertEqual(<<"doc3">>, Id),
+ ?assertEqual(6, Seq),
+ ?assertEqual(UpSeq, LastSeq)
+ end).
+
+should_filter_by_user_ctx({DbName, _}) ->
+ ?_test(
+ begin
+ DDocId = <<"_design/app">>,
+ DDoc = couch_doc:from_json_obj({[
+ {<<"_id">>, DDocId},
+ {<<"language">>, <<"javascript">>},
+ {<<"filters">>, {[
+ {<<"valid">>, <<"function(doc, req) {"
+ " if (req.userCtx.name == doc._id) {"
+ " return true; "
+ "} }">>}
+ ]}}
+ ]}),
+ ChArgs = #changes_args{filter = "app/valid"},
+ UserCtx = #user_ctx{name = <<"doc3">>, roles = []},
+ DbRec = #db{name = DbName, user_ctx = UserCtx},
+ Req = {json_req, {[{
+ <<"userCtx">>, couch_util:json_user_ctx(DbRec)
+ }]}},
+ ok = update_ddoc(DbName, DDoc),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
+ ?assertEqual(1, length(Rows)),
+ [#row{seq = Seq, id = Id}] = Rows,
+ ?assertEqual(<<"doc3">>, Id),
+ ?assertEqual(6, Seq),
+ ?assertEqual(UpSeq, LastSeq)
+ end).
+
should_filter_by_view({DbName, _}) ->
?_test(
begin
[2/4] couch commit: updated refs/heads/master to 1df631a
Posted by ei...@apache.org.
Reduce duplicated code, rename vars consistently
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/3eeda465
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/3eeda465
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/3eeda465
Branch: refs/heads/master
Commit: 3eeda46552cd3798ed1430200537944b896572e6
Parents: 8adf7d9
Author: Eric Avdey <ei...@eiri.ca>
Authored: Fri Nov 11 20:38:50 2016 -0400
Committer: Eric Avdey <ei...@eiri.ca>
Committed: Tue Dec 13 10:05:59 2016 -0400
----------------------------------------------------------------------
test/couch_changes_tests.erl | 153 ++++++++++++--------------------------
1 file changed, 46 insertions(+), 107 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/3eeda465/test/couch_changes_tests.erl
----------------------------------------------------------------------
diff --git a/test/couch_changes_tests.erl b/test/couch_changes_tests.erl
index 65766e2..fa64e9e 100644
--- a/test/couch_changes_tests.erl
+++ b/test/couch_changes_tests.erl
@@ -161,18 +161,12 @@ continuous_feed() ->
should_filter_by_specific_doc_ids({DbName, _}) ->
?_test(
begin
- ChangesArgs = #changes_args{
+ ChArgs = #changes_args{
filter = "_doc_ids"
},
DocIds = [<<"doc3">>, <<"doc4">>, <<"doc9999">>],
Req = {json_req, {[{<<"doc_ids">>, DocIds}]}},
- Consumer = spawn_consumer(DbName, ChangesArgs, Req),
-
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(2, length(Rows)),
[#row{seq = Seq1, id = Id1}, #row{seq = Seq2, id = Id2}] = Rows,
@@ -186,18 +180,13 @@ should_filter_by_specific_doc_ids({DbName, _}) ->
should_filter_by_specific_doc_ids_descending({DbName, _}) ->
?_test(
begin
- ChangesArgs = #changes_args{
+ ChArgs = #changes_args{
filter = "_doc_ids",
dir = rev
},
DocIds = [<<"doc3">>, <<"doc4">>, <<"doc9999">>],
Req = {json_req, {[{<<"doc_ids">>, DocIds}]}},
- Consumer = spawn_consumer(DbName, ChangesArgs, Req),
-
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, _} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(2, length(Rows)),
[#row{seq = Seq1, id = Id1}, #row{seq = Seq2, id = Id2}] = Rows,
@@ -211,19 +200,13 @@ should_filter_by_specific_doc_ids_descending({DbName, _}) ->
should_filter_by_specific_doc_ids_with_since({DbName, _}) ->
?_test(
begin
- ChangesArgs = #changes_args{
+ ChArgs = #changes_args{
filter = "_doc_ids",
since = 5
},
DocIds = [<<"doc3">>, <<"doc4">>, <<"doc9999">>],
Req = {json_req, {[{<<"doc_ids">>, DocIds}]}},
- Consumer = spawn_consumer(DbName, ChangesArgs, Req),
-
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
[#row{seq = Seq1, id = Id1}] = Rows,
@@ -235,19 +218,13 @@ should_filter_by_specific_doc_ids_with_since({DbName, _}) ->
should_filter_by_specific_doc_ids_no_result({DbName, _}) ->
?_test(
begin
- ChangesArgs = #changes_args{
+ ChArgs = #changes_args{
filter = "_doc_ids",
since = 6
},
DocIds = [<<"doc3">>, <<"doc4">>, <<"doc9999">>],
Req = {json_req, {[{<<"doc_ids">>, DocIds}]}},
- Consumer = spawn_consumer(DbName, ChangesArgs, Req),
-
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(0, length(Rows)),
?assertEqual(UpSeq, LastSeq)
@@ -264,17 +241,13 @@ should_handle_deleted_docs({DbName, Revs}) ->
{<<"_deleted">>, true},
{<<"_rev">>, Rev3_2}]}),
- ChangesArgs = #changes_args{
+ ChArgs = #changes_args{
filter = "_doc_ids",
since = 9
},
DocIds = [<<"doc3">>, <<"doc4">>, <<"doc9999">>],
Req = {json_req, {[{<<"doc_ids">>, DocIds}]}},
- Consumer = spawn_consumer(DbName, ChangesArgs, Req),
-
- {Rows, LastSeq} = wait_finished(Consumer),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, _} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
?assertMatch(
@@ -376,12 +349,7 @@ should_select_basic({DbName, _}) ->
ChArgs = #changes_args{filter = "_selector"},
Selector = {[{<<"_id">>, <<"doc3">>}]},
Req = {json_req, {[{<<"selector">>, Selector}]}},
- Consumer = spawn_consumer(DbName, ChArgs, Req),
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
[#row{seq = Seq, id = Id}] = Rows,
?assertEqual(<<"doc3">>, Id),
@@ -396,12 +364,7 @@ should_select_with_since({DbName, _}) ->
GteDoc2 = {[{<<"$gte">>, <<"doc1">>}]},
Selector = {[{<<"_id">>, GteDoc2}]},
Req = {json_req, {[{<<"selector">>, Selector}]}},
- Consumer = spawn_consumer(DbName, ChArgs, Req),
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
[#row{seq = Seq, id = Id}] = Rows,
?assertEqual(<<"doc8">>, Id),
@@ -415,12 +378,7 @@ should_select_when_no_result({DbName, _}) ->
ChArgs = #changes_args{filter = "_selector"},
Selector = {[{<<"_id">>, <<"nopers">>}]},
Req = {json_req, {[{<<"selector">>, Selector}]}},
- Consumer = spawn_consumer(DbName, ChArgs, Req),
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(0, length(Rows)),
?assertEqual(UpSeq, LastSeq)
end).
@@ -438,10 +396,7 @@ should_select_with_deleted_docs({DbName, Revs}) ->
ChArgs = #changes_args{filter = "_selector"},
Selector = {[{<<"_id">>, <<"doc3">>}]},
Req = {json_req, {[{<<"selector">>, Selector}]}},
- Consumer = spawn_consumer(DbName, ChArgs, Req),
- {Rows, LastSeq} = wait_finished(Consumer),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, _} = run_changes_query(DbName, ChArgs, Req),
?assertMatch(
[#row{seq = LastSeq, id = <<"doc3">>, deleted = true}],
Rows
@@ -510,12 +465,7 @@ should_select_with_empty_fields({DbName, _}) ->
Selector = {[{<<"_id">>, <<"doc3">>}]},
Req = {json_req, {[{<<"selector">>, Selector},
{<<"fields">>, []}]}},
- Consumer = spawn_consumer(DbName, ChArgs, Req),
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
[#row{seq = Seq, id = Id, doc = Doc}] = Rows,
?assertEqual(<<"doc3">>, Id),
@@ -531,12 +481,7 @@ should_select_with_fields({DbName, _}) ->
Selector = {[{<<"_id">>, <<"doc3">>}]},
Req = {json_req, {[{<<"selector">>, Selector},
{<<"fields">>, [<<"_id">>, <<"nope">>]}]}},
- Consumer = spawn_consumer(DbName, ChArgs, Req),
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
[#row{seq = Seq, id = Id, doc = Doc}] = Rows,
?assertEqual(<<"doc3">>, Id),
@@ -549,32 +494,26 @@ should_select_with_fields({DbName, _}) ->
should_emit_only_design_documents({DbName, Revs}) ->
?_test(
begin
- ChangesArgs = #changes_args{
+ ChArgs = #changes_args{
filter = "_design"
},
- Consumer = spawn_consumer(DbName, ChangesArgs, {json_req, null}),
-
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
+ Req = {json_req, null},
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
?assertEqual(UpSeq, LastSeq),
?assertEqual([#row{seq = 8, id = <<"_design/foo">>}], Rows),
- stop_consumer(Consumer),
- {ok, Db2} = couch_db:open_int(DbName, [?ADMIN_CTX]),
- {ok, _} = save_doc(Db2, {[{<<"_id">>, <<"_design/foo">>},
+ {ok, Db} = couch_db:open_int(DbName, [?ADMIN_CTX]),
+ {ok, _} = save_doc(Db, {[{<<"_id">>, <<"_design/foo">>},
{<<"_rev">>, element(8, Revs)},
{<<"_deleted">>, true}]}),
- Consumer2 = spawn_consumer(DbName, ChangesArgs, {json_req, null}),
+ couch_db:close(Db),
+ {Rows2, LastSeq2, _} = run_changes_query(DbName, ChArgs, Req),
- {Rows2, LastSeq2} = wait_finished(Consumer2),
UpSeq2 = UpSeq + 1,
- couch_db:close(Db2),
?assertEqual(1, length(Rows2)),
?assertEqual(UpSeq2, LastSeq2),
@@ -654,7 +593,6 @@ should_receive_heartbeats(_) ->
should_filter_by_view({DbName, _}) ->
?_test(
begin
- {ok, Db0} = couch_db:open_int(DbName, [?ADMIN_CTX]),
DDocId = <<"_design/app">>,
DDoc = couch_doc:from_json_obj({[
{<<"_id">>, DDocId},
@@ -668,21 +606,14 @@ should_filter_by_view({DbName, _}) ->
]}}
]}}
]}),
- {ok, _} = couch_db:update_doc(Db0, DDoc, []),
- couch_db:close(Db0),
- %%
- ChangesArgs = #changes_args{filter = "_view"},
- Opts = {json_req, {[{
+ ChArgs = #changes_args{filter = "_view"},
+ Req = {json_req, {[{
<<"query">>, {[
{<<"view">>, <<"app/valid">>}
]}
}]}},
- Consumer = spawn_consumer(DbName, ChangesArgs, Opts),
- {Rows, LastSeq} = wait_finished(Consumer),
- {ok, Db} = couch_db:open_int(DbName, []),
- UpSeq = couch_db:get_update_seq(Db),
- couch_db:close(Db),
- stop_consumer(Consumer),
+ ok = update_ddoc(DbName, DDoc),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
?assertEqual(1, length(Rows)),
[#row{seq = Seq, id = Id}] = Rows,
?assertEqual(<<"doc3">>, Id),
@@ -693,7 +624,6 @@ should_filter_by_view({DbName, _}) ->
should_filter_by_fast_view({DbName, _}) ->
?_test(
begin
- {ok, Db0} = couch_db:open_int(DbName, [?ADMIN_CTX]),
DDocId = <<"_design/app">>,
DDoc = couch_doc:from_json_obj({[
{<<"_id">>, DDocId},
@@ -708,31 +638,40 @@ should_filter_by_fast_view({DbName, _}) ->
]}}
]}}
]}),
- {ok, _} = couch_db:update_doc(Db0, DDoc, []),
- couch_db:close(Db0),
- %%
- ChangesArgs = #changes_args{filter = "_view"},
- Opts = {json_req, {[{
+ ChArgs = #changes_args{filter = "_view"},
+ Req = {json_req, {[{
<<"query">>, {[
{<<"view">>, <<"app/valid">>}
]}
}]}},
- Consumer = spawn_consumer(DbName, ChangesArgs, Opts),
- {Rows, LastSeq} = wait_finished(Consumer),
+ ok = update_ddoc(DbName, DDoc),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
{ok, Db} = couch_db:open_int(DbName, []),
- DbUpSeq = couch_db:get_update_seq(Db),
{ok, ViewInfo} = couch_mrview:get_view_info(Db, DDoc, <<"valid">>),
{update_seq, ViewUpSeq} = lists:keyfind(update_seq, 1, ViewInfo),
couch_db:close(Db),
- stop_consumer(Consumer),
?assertEqual(1, length(Rows)),
[#row{seq = Seq, id = Id}] = Rows,
?assertEqual(<<"doc3">>, Id),
?assertEqual(6, Seq),
?assertEqual(LastSeq, Seq),
- ?assertEqual(DbUpSeq, ViewUpSeq)
+ ?assertEqual(UpSeq, ViewUpSeq)
end).
+update_ddoc(DbName, DDoc) ->
+ {ok, Db} = couch_db:open_int(DbName, [?ADMIN_CTX]),
+ {ok, _} = couch_db:update_doc(Db, DDoc, []),
+ couch_db:close(Db).
+
+run_changes_query(DbName, ChangesArgs, Opts) ->
+ Consumer = spawn_consumer(DbName, ChangesArgs, Opts),
+ {Rows, LastSeq} = wait_finished(Consumer),
+ {ok, Db} = couch_db:open_int(DbName, []),
+ UpSeq = couch_db:get_update_seq(Db),
+ couch_db:close(Db),
+ stop_consumer(Consumer),
+ {Rows, LastSeq, UpSeq}.
+
save_doc(Db, Json) ->
Doc = couch_doc:from_json_obj(Json),
{ok, Rev} = couch_db:update_doc(Db, Doc, []),
[4/4] couch commit: updated refs/heads/master to 1df631a
Posted by ei...@apache.org.
Merge remote branch 'cloudant:add-filter-changes-test'
This closes #213
Signed-off-by: Eric Avdey <ei...@eiri.ca>
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/1df631ae
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/1df631ae
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/1df631ae
Branch: refs/heads/master
Commit: 1df631aeb741daaa1813bf6bf2f4cbf0b84af4a2
Parents: b83f1a7 87b01e8
Author: Eric Avdey <ei...@eiri.ca>
Authored: Tue Dec 13 10:07:48 2016 -0400
Committer: Eric Avdey <ei...@eiri.ca>
Committed: Tue Dec 13 10:07:48 2016 -0400
----------------------------------------------------------------------
test/couch_changes_tests.erl | 223 ++++++++++++++++++++------------------
1 file changed, 115 insertions(+), 108 deletions(-)
----------------------------------------------------------------------
[3/4] couch commit: updated refs/heads/master to 1df631a
Posted by ei...@apache.org.
Prevent consumer from hiding error messages
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/8adf7d97
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/8adf7d97
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/8adf7d97
Branch: refs/heads/master
Commit: 8adf7d973ae6d336ccb081b087fe65884eb34d7d
Parents: b83f1a7
Author: Eric Avdey <ei...@eiri.ca>
Authored: Fri Nov 11 18:53:23 2016 -0400
Committer: Eric Avdey <ei...@eiri.ca>
Committed: Tue Dec 13 10:05:59 2016 -0400
----------------------------------------------------------------------
test/couch_changes_tests.erl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/8adf7d97/test/couch_changes_tests.erl
----------------------------------------------------------------------
diff --git a/test/couch_changes_tests.erl b/test/couch_changes_tests.erl
index e7a42ce..65766e2 100644
--- a/test/couch_changes_tests.erl
+++ b/test/couch_changes_tests.erl
@@ -863,7 +863,7 @@ spawn_consumer(DbName, ChangesArgs0, Req) ->
FeedFun({Callback, []})
catch
throw:{stop, _} -> ok;
- _:Error -> Error
+ _:Error -> exit(Error)
after
couch_db:close(Db)
end