Tests: added js subrequest test with error_page redirect.
diff --git a/js_subrequests.t b/js_subrequests.t
index 3c6ccf8..edf6d44 100644
--- a/js_subrequests.t
+++ b/js_subrequests.t
@@ -52,6 +52,10 @@
listen 127.0.0.1:8080;
server_name localhost;
+ location /njs {
+ js_content test_njs;
+ }
+
location /sr {
js_content sr;
}
@@ -109,12 +113,16 @@
return 200 $subrequest_var;
}
- location /sr_error_page {
+ location /sr_async_var {
set $_ $async_var;
error_page 404 /return;
return 404;
}
+ location /sr_error_page {
+ js_content sr_error_page;
+ }
+
location /sr_js_in_subrequest {
js_content sr_js_in_subrequest;
}
@@ -210,6 +218,12 @@
location /return {
return 200 '["$request_method"]';
}
+
+ location /error_page_404 {
+ return 404;
+
+ error_page 404 /404.html;
+ }
}
server {
@@ -255,6 +269,10 @@
$t->write_file('test.js', <<EOF);
this.Failed = {get toConvert() { return {toString(){return {};}}}};
+ function test_njs(r) {
+ r.return(200, njs.version);
+ }
+
function sr(r) {
subrequest_fn(r, ['/p/sub2'], ['uri', 'status'])
}
@@ -340,6 +358,11 @@
return "";
}
+ function sr_error_page(r) {
+ r.subrequest('/error_page_404')
+ .then(reply => {r.return(200, `reply.status:\${reply.status}`)});
+ }
+
function subrequest_var(r) {
r.subrequest('/p/detached', {detached:true});
r.subrequest('/p/detached', {detached:true, args:'a=yyy',
@@ -470,7 +493,7 @@
$t->write_file('t', '["SEE-THIS"]');
-$t->try_run('no njs available')->plan(31);
+$t->try_run('no njs available')->plan(32);
$t->run_daemon(\&http_daemon);
###############################################################################
@@ -521,10 +544,19 @@
like(http_get('/sr_detached_in_variable_handler'), qr/subrequest_var/,
'sr_detached_in_variable_handler');
+TODO: {
+todo_skip 'leaves coredump', 1 unless $ENV{TEST_NGINX_UNSAFE}
+ or http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.5.0';
+
+like(http_get('/sr_error_page'), qr/reply\.status:404/,
+ 'sr_error_page');
+
+}
+
http_get('/sr_broken');
http_get('/sr_in_sr');
http_get('/sr_in_variable_handler');
-http_get('/sr_error_page');
+http_get('/sr_async_var');
http_get('/sr_too_large');
http_get('/sr_except_not_a_func');
http_get('/sr_except_failed_to_convert_options_arg');