This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch quickjs-another-expected-error
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit d98ad5359ad4072f86a3ae7e161067dfaa70d066
Author: Nick Vatamaniuc <[email protected]>
AuthorDate: Fri Aug 23 00:04:46 2024 -0400

    Account for another expected error in quickjs scanner
    
    This is generated by our own dispatch loop [1] as a catch-all. It emits a
    traceback so will always look different across engine. We handle it as an
    expected error so it doesn't pollute the logs with false positives.
    
    [1]
    
https://github.com/apache/couchdb/blob/d38f14f7d777b7cda79b9862ee304150ad3418ea/share/server/loop.js#L159
---
 .../src/couch_quickjs_scanner_plugin.erl           |  2 ++
 .../test/couch_quickjs_scanner_plugin_tests.erl    | 29 ++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl 
b/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl
index ee8a76bcc..005488430 100644
--- a/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl
+++ b/src/couch_quickjs/src/couch_quickjs_scanner_plugin.erl
@@ -520,6 +520,8 @@ expected_error({error, {_, <<"TypeError">>, _}}, {error, 
{_, <<"TypeError">>, _}
     true;
 expected_error({error, {_, {<<"TypeError">>, _}}}, {error, {_, 
{<<"TypeError">>, _}}}) ->
     true;
+expected_error({error, {_, {<<"unnamed_error">>, _}}}, {error, {_, 
{<<"unnamed_error">>, _}}}) ->
+    true;
 expected_error(_, _) ->
     false.
 
diff --git a/src/couch_quickjs/test/couch_quickjs_scanner_plugin_tests.erl 
b/src/couch_quickjs/test/couch_quickjs_scanner_plugin_tests.erl
index e91081f96..231b9b76c 100644
--- a/src/couch_quickjs/test/couch_quickjs_scanner_plugin_tests.erl
+++ b/src/couch_quickjs/test/couch_quickjs_scanner_plugin_tests.erl
@@ -26,6 +26,7 @@ couch_quickjs_scanner_plugin_test_() ->
             ?TDEF_FE(t_map_only, 10),
             ?TDEF_FE(t_vdu_only, 10),
             ?TDEF_FE(t_filter_only, 10),
+            ?TDEF_FE(t_filter_with_expected_error, 10),
             ?TDEF_FE(t_empty_ddoc, 10)
         ]
     }.
@@ -231,6 +232,27 @@ t_filter_only({_, DbName}) ->
             ok
     end.
 
+t_filter_with_expected_error({_, DbName}) ->
+    ok = add_doc(DbName, ?DDOC1, ddoc_filter_error(#{})),
+    meck:reset(couch_scanner_server),
+    meck:reset(?PLUGIN),
+    config:set("couch_scanner_plugins", atom_to_list(?PLUGIN), "true", false),
+    wait_exit(10000),
+    ?assertEqual(1, num_calls(start, 2)),
+    case couch_server:with_spidermonkey() of
+        true ->
+            ?assertEqual(1, num_calls(complete, 1)),
+            ?assertEqual(1, num_calls(db, ['_', DbName])),
+            ?assertEqual(1, num_calls(ddoc, ['_', DbName, '_'])),
+            ?assertEqual(0, couch_stats:sample([couchdb, query_server, 
process_error_exits])),
+            ?assertEqual(10, couch_stats:sample([couchdb, query_server, 
process_errors])),
+            ?assertEqual(0, couch_stats:sample([couchdb, query_server, 
process_exits])),
+            % start, complete and no warning as we expected the error, so 2 
total only
+            ?assertEqual(2, log_calls(warning));
+        false ->
+            ok
+    end.
+
 t_empty_ddoc({_, DbName}) ->
     ok = add_doc(DbName, ?DDOC1, #{}),
     meck:reset(couch_scanner_server),
@@ -333,6 +355,13 @@ ddoc_filter(Doc) ->
         }
     }.
 
+ddoc_filter_error(Doc) ->
+    Doc#{
+        filters => #{
+            f => <<"function(doc, req) {throw(\"foo\");}">>
+        }
+    }.
+
 ddoc_view(Doc) ->
     Doc#{
         views => #{

Reply via email to