changeset 1554:cae83c98654a

Tests: added detached subrequest js tests.
author Dmitry Volyntsev <xeioex@nginx.com>
date Mon, 02 Mar 2020 21:10:59 +0300
parents 01867708af95
children 809d67d48d21
files js_subrequests.t
diffstat 1 files changed, 46 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/js_subrequests.t
+++ b/js_subrequests.t
@@ -45,7 +45,8 @@ http {
 
     js_include test.js;
 
-    js_set $async_var async_var;
+    js_set $async_var       async_var;
+    js_set $subrequest_var  subrequest_var;
 
     server {
         listen       127.0.0.1:8080;
@@ -108,6 +109,10 @@ http {
             js_content sr_in_variable_handler;
         }
 
+        location /sr_detached_in_variable_handler {
+            return 200 $subrequest_var;
+        }
+
         location /sr_error_page {
             set $_ $async_var;
             error_page 404 /return;
@@ -236,6 +241,10 @@ http {
             js_content body;
         }
 
+        location /detached {
+            js_content detached;
+        }
+
         location /delayed {
             js_content delayed;
         }
@@ -322,7 +331,14 @@ EOF
 
     function delayed(r) {
         setTimeout(r => r.return(200), 100, r);
-     }
+    }
+
+    function detached(r) {
+        var method = r.variables.request_method;
+        r.log(`DETACHED: \${method} args: \${r.variables.args}`);
+
+        r.return(200);
+    }
 
     function sr_in_variable_handler(r) {
     }
@@ -335,6 +351,14 @@ EOF
         return "";
     }
 
+    function subrequest_var(r) {
+        r.subrequest('/p/detached',  {detached:true});
+        r.subrequest('/p/detached',  {detached:true, args:'a=yyy',
+                                      method:'POST'});
+
+        return "subrequest_var";
+    }
+
     function sr_file(r) {
         r.subrequest('/file/t', body_fwd_cb);
     }
@@ -461,7 +485,7 @@ EOF
 
 $t->write_file('t', '["SEE-THIS"]');
 
-$t->try_run('no njs available')->plan(29);
+$t->try_run('no njs available')->plan(31);
 $t->run_daemon(\&http_daemon);
 
 ###############################################################################
@@ -502,9 +526,11 @@ is(get_json('/sr_out_of_order'),
 	'{"status":200,"uri":"/p/delayed"}]',
 	'sr_multi');
 
+my $ver = http_get('/njs');
+
 TODO: {
 local $TODO = 'not yet'
-	unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.3.8';
+	unless $ver =~ /^([.0-9]+)$/m && $1 ge '0.3.8';
 
 is(get_json('/sr_pr'), '{"h":"xxx"}', 'sr_promise');
 is(get_json('/sr_options_args_pr'), '{"h":"xxx"}', 'sr_options_args_pr');
@@ -516,6 +542,14 @@ is(get_json('/sr_unavail_pr'), '[{"statu
 
 }
 
+TODO: {
+local $TODO = 'not yet'
+	unless $ver =~ /^([.0-9]+)$/m && $1 ge '0.3.9';
+
+like(http_get('/sr_detached_in_variable_handler'), qr/subrequest_var/,
+     'sr_detached_in_variable_handler');
+}
+
 http_get('/sr_broken');
 http_get('/sr_in_sr');
 http_get('/sr_in_variable_handler');
@@ -546,6 +580,14 @@ ok(index($t->read_file('error.log'),
 		'js subrequest: failed to get the parent context') > 0,
 	'zero parent ctx');
 
+TODO: {
+local $TODO = 'not yet'
+	unless $ver =~ /^([.0-9]+)$/m && $1 ge '0.3.9';
+
+ok(index($t->read_file('error.log'), 'DETACHED') > 0,
+	'detached subrequest');
+}
+
 ###############################################################################
 
 sub recode {