]> git.kaiwu.me - njs.git/commitdiff
Tests: honor injected engines in QuickJS lifetime tests master
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 11 Nov 2026 00:48:58 +0000 (16:48 -0800)
committerDmitry Volyntsev <xeioexception@gmail.com>
Wed, 11 Nov 2026 21:33:45 +0000 (13:33 -0800)
Hardcoded QuickJS directives run these tests in the default njs pass
and conflict with CI engine injection.  Probe the selected engine and
skip the QuickJS-specific checks when njs is active.

Check both HTTP and stream engines for the GC test.  Use an isolated
probe module for the redirect test so probing does not change the
source and destination visit counters.

nginx/t/js_context_reuse_redirect.t
nginx/t/js_fetch_object_lifetime.t
nginx/t/js_qjs_gc_mark.t

index 56f5e3c9f53f4e99abad4c6ddc55def4e145ac83..3c9906564ce24ee2b1ba34af93f5089e52e5a52b 100644 (file)
@@ -37,7 +37,6 @@ events {
 http {
     %%TEST_GLOBALS_HTTP%%
 
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_engine qjs;
     js_context_reuse 4;
     js_context_reuse_max_size 64m;
 
     js_context_reuse 4;
     js_context_reuse_max_size 64m;
 
@@ -45,6 +44,12 @@ http {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         listen       127.0.0.1:8080;
         server_name  localhost;
 
+        location = /engine {
+            js_context_reuse 0;
+            js_import test from engine.js;
+            js_content test.engine;
+        }
+
         location = /source {
             js_import handler from source.js;
             js_content handler.content;
         location = /source {
             js_import handler from source.js;
             js_content handler.content;
@@ -59,6 +64,14 @@ http {
 
 EOF
 
 
 EOF
 
+$t->write_file('engine.js', <<'EOF');
+    function engine(r) {
+        r.return(200, njs.engine);
+    }
+
+    export default {engine};
+EOF
+
 $t->write_file('source.js', <<'EOF');
     let visits = 0;
 
 $t->write_file('source.js', <<'EOF');
     let visits = 0;
 
@@ -89,7 +102,10 @@ $t->write_file('destination.js', <<'EOF');
 
 EOF
 
 
 EOF
 
-$t->try_run('no njs available')->plan(4);
+$t->try_run('no njs available');
+plan(skip_all => 'QuickJS-specific context reuse tests')
+    if http_get('/engine') =~ /njs$/m;
+$t->plan(4);
 
 ###############################################################################
 
 
 ###############################################################################
 
index c1d4fb226532c054c60199a6a4dc79a689783627..65d6e62ea2444d3057bb1687ca06726792409c20 100644 (file)
@@ -36,13 +36,16 @@ events {
 http {
     %%TEST_GLOBALS_HTTP%%
 
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_engine qjs;
     js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
     js_import test.js;
 
     server {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
+        location /engine {
+            js_content test.engine;
+        }
+
         location /reuse {
             js_context_reuse 1;
             js_content test.reuse;
         location /reuse {
             js_context_reuse 1;
             js_content test.reuse;
@@ -67,6 +70,10 @@ my $p0 = port(8080);
 $t->write_file('test.js', <<EOF);
     var retained;
 
 $t->write_file('test.js', <<EOF);
     var retained;
 
+    function engine(r) {
+        r.return(200, njs.engine);
+    }
+
     async function reuse(r) {
         var result = 'ok';
 
     async function reuse(r) {
         var result = 'ok';
 
@@ -131,10 +138,13 @@ $t->write_file('test.js', <<EOF);
         r.return(200, 'ok');
     }
 
         r.return(200, 'ok');
     }
 
-    export default {reuse, no_reuse};
+    export default {reuse, no_reuse, engine};
 EOF
 
 EOF
 
-$t->try_run('no QuickJS support')->plan(11);
+$t->try_run('no njs available');
+plan(skip_all => 'QuickJS-specific lifetime tests')
+    if http_get('/engine') =~ /njs$/m;
+$t->plan(11);
 
 ###############################################################################
 
 
 ###############################################################################
 
index c1af9af3f1935375b2152dd68734000645f02b0e..a97ef980d784510667902d974111cd7c69fc8e87 100644 (file)
@@ -36,7 +36,6 @@ events {
 http {
     %%TEST_GLOBALS_HTTP%%
 
 http {
     %%TEST_GLOBALS_HTTP%%
 
-    js_engine qjs;
     js_context_reuse 0;
     js_import test.js;
 
     js_context_reuse 0;
     js_import test.js;
 
@@ -44,6 +43,10 @@ http {
         listen       127.0.0.1:8080;
         server_name  localhost;
 
         listen       127.0.0.1:8080;
         server_name  localhost;
 
+        location /engine {
+            js_content test.engine;
+        }
+
         location /cycle {
             js_content test.http_cycle;
         }
         location /cycle {
             js_content test.http_cycle;
         }
@@ -65,7 +68,6 @@ http {
 stream {
     %%TEST_GLOBALS_STREAM%%
 
 stream {
     %%TEST_GLOBALS_STREAM%%
 
-    js_engine qjs;
     js_context_reuse 0;
     js_import test.js;
 
     js_context_reuse 0;
     js_import test.js;
 
@@ -74,11 +76,25 @@ stream {
         js_preread  test.stream_cycle;
         return      OK;
     }
         js_preread  test.stream_cycle;
         return      OK;
     }
+
+    server {
+        listen  127.0.0.1:8082;
+        js_set  $engine test.engine_name;
+        return  $engine;
+    }
 }
 
 EOF
 
 $t->write_file('test.js', <<'EOF');
 }
 
 EOF
 
 $t->write_file('test.js', <<'EOF');
+    function engine(r) {
+        r.return(200, njs.engine);
+    }
+
+    function engine_name() {
+        return njs.engine;
+    }
+
     function http_cycle(r) {
         r.args.request = r;
         r.return(200, 'ok');
     function http_cycle(r) {
         r.args.request = r;
         r.return(200, 'ok');
@@ -107,11 +123,16 @@ $t->write_file('test.js', <<'EOF');
         });
     }
 
         });
     }
 
-    export default {http_cycle, request_body_cycle, response_body_cycle,
+    export default {engine, engine_name, http_cycle,
+                    request_body_cycle, response_body_cycle,
                     stream_cycle};
 EOF
 
                     stream_cycle};
 EOF
 
-$t->try_run('no QuickJS support')->plan(4);
+$t->try_run('no njs available');
+plan(skip_all => 'QuickJS-specific GC tests')
+    if http_get('/engine') =~ /njs$/m
+       || stream('127.0.0.1:' . port(8082))->read() =~ /njs$/;
+$t->plan(4);
 
 ###############################################################################
 
 
 ###############################################################################