annotate js_async.t @ 1752:ba6e24e38f03

Tests: improved stop_daemons() to send signal again. As was observed, it's possible that a signal to complete a uwsgi daemon can be ignored while it is starting up, which results in tests hang due to eternal waiting on child processes termination. Notably, it is seen when running tests with a high number of prove jobs on a low-profile VM against nginx with broken modules and/or configuration. To reproduce: $ TEST_NGINX_GLOBALS=ERROR prove -j16 uwsgi*.t Inspecting uwsgi under ktrace on FreeBSD confirms that a SIGTERM signal is ignored at the very beginning of uwsgi startup. It is then replaced with a default action after listen(), thus waiting until uwsgi is ready to accept new TCP connections doesn't completely solve the hang window. The fix is to retry sending a signal some time after waitpid(WNOHANG) continuously demonstrated no progress with reaping a signaled process. It is modelled after f13ead27f89c that improved stop() for nginx.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 29 Dec 2021 22:29:23 +0300
parents 18ac4d9e5a2a
children 520fb74cce4c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
2
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
3 # (C) Dmitry Volyntsev
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
5
1375
f168fc46c7a4 Tests: renamed JavaScript to njs.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1304
diff changeset
6 # Async tests for http njs module.
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
7
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
8 ###############################################################################
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
9
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
10 use warnings;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
11 use strict;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
12
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
13 use Test::More;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
14
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
16
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
17 use lib 'lib';
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
19
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
20 ###############################################################################
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
21
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
24
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http rewrite/)
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
27
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
29
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
30 daemon off;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
31
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
32 events {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
33 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
34
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
35 http {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
37
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
38 js_set $test_async test.set_timeout;
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
39 js_set $context_var test.context_var;
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
40 js_set $test_set_rv_var test.set_rv_var;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
41
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
42 js_import test.js;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
43
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
44 server {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
45 listen 127.0.0.1:8080;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
46 server_name localhost;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
47
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
48 location /njs {
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
49 js_content test.njs;
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
50 }
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
51
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
52 location /async_var {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
53 return 200 $test_async;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
54 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
55
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
56 location /shared_ctx {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
57 add_header H $context_var;
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
58 js_content test.shared_ctx;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
59 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
60
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
61 location /set_timeout {
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
62 js_content test.set_timeout;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
63 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
64
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
65 location /set_timeout_many {
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
66 js_content test.set_timeout_many;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
67 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
68
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
69 location /set_timeout_data {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
70 postpone_output 0;
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
71 js_content test.set_timeout_data;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
72 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
73
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
74 location /limit_rate {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
75 postpone_output 0;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
76 sendfile_max_chunk 5;
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
77 js_content test.limit_rate;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
78 }
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
79
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
80 location /async_content {
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
81 js_content test.async_content;
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
82 }
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
83
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
84 location /set_rv_var {
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
85 return 200 $test_set_rv_var;
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
86 }
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
87 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
88 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
89
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
90 EOF
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
91
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
92 $t->write_file('test.js', <<EOF);
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
93 function test_njs(r) {
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
94 r.return(200, njs.version);
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
95 }
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
96
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
97 function set_timeout(r) {
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
98 var timerId = setTimeout(timeout_cb_r, 5, r, 0);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
99 clearTimeout(timerId);
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
100 setTimeout(timeout_cb_r, 5, r, 0)
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
101 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
102
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
103 function set_timeout_data(r) {
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
104 setTimeout(timeout_cb_data, 5, r, 0);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
105 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
106
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
107 function set_timeout_many(r) {
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
108 for (var i = 0; i < 5; i++) {
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
109 setTimeout(timeout_cb_empty, 5, r, i);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
110 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
111
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
112 setTimeout(timeout_cb_reply, 10, r);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
113 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
114
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
115 function timeout_cb_r(r, cnt) {
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
116 if (cnt == 10) {
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
117 r.status = 200;
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
118 r.headersOut['Content-Type'] = 'foo';
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
119 r.sendHeader();
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
120 r.finish();
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
121
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
122 } else {
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
123 setTimeout(timeout_cb_r, 5, r, ++cnt);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
124 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
125 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
126
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
127 function timeout_cb_empty(r, arg) {
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
128 r.log("timeout_cb_empty" + arg);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
129 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
130
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
131 function timeout_cb_reply(r) {
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
132 r.status = 200;
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
133 r.headersOut['Content-Type'] = 'reply';
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
134 r.sendHeader();
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
135 r.finish();
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
136 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
137
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
138 function timeout_cb_data(r, counter) {
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
139 if (counter == 0) {
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
140 r.log("timeout_cb_data: init");
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
141 r.status = 200;
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
142 r.sendHeader();
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
143 setTimeout(timeout_cb_data, 5, r, ++counter);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
144
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
145 } else if (counter == 10) {
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
146 r.log("timeout_cb_data: finish");
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
147 r.finish();
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
148
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
149 } else {
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
150 r.send("" + counter);
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
151 setTimeout(timeout_cb_data, 5, r, ++counter);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
152 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
153 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
154
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
155 var js_;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
156 function context_var() {
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
157 return js_;
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
158 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
159
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
160 function shared_ctx(r) {
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
161 js_ = r.variables.arg_a;
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
162
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
163 r.status = 200;
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
164 r.sendHeader();
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
165 r.finish();
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
166 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
167
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
168 function limit_rate_cb(r) {
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
169 r.finish();
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
170 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
171
1436
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
172 function limit_rate(r) {
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
173 r.status = 200;
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
174 r.sendHeader();
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
175 r.send("AAAAA".repeat(10))
9d8b100a6ce3 Tests: get rid of deprecated njs API in 0.2.2.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1375
diff changeset
176 setTimeout(limit_rate_cb, 1000, r);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
177 }
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
178
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
179 function pr(x) {
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
180 return new Promise(resolve => {resolve(x)}).then(v => v).then(v => v);
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
181 }
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
182
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
183 async function async_content(r) {
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
184 const a1 = await pr('A');
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
185 const a2 = await pr('B');
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
186
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
187 r.return(200, `retval: \${a1 + a2}`);
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
188 }
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
189
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
190 async function set_rv_var(r) {
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
191 const a1 = await pr(10);
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
192 const a2 = await pr(20);
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
193
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
194 r.setReturnValue(`retval: \${a1 + a2}`);
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
195 }
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
196
1751
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
197 export default {njs:test_njs, set_timeout, set_timeout_data,
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
198 set_timeout_many, context_var, shared_ctx, limit_rate,
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
199 async_content, set_rv_var};
18ac4d9e5a2a Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1738
diff changeset
200
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
201 EOF
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
202
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
203 $t->try_run('no njs available')->plan(9);
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
204
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
205 ###############################################################################
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
206
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
207 like(http_get('/set_timeout'), qr/Content-Type: foo/, 'setTimeout');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
208 like(http_get('/set_timeout_many'), qr/Content-Type: reply/, 'setTimeout many');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
209 like(http_get('/set_timeout_data'), qr/123456789/, 'setTimeout data');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
210 like(http_get('/shared_ctx?a=xxx'), qr/H: xxx/, 'shared context');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
211 like(http_get('/limit_rate'), qr/A{50}/, 'limit_rate');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
212
1738
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
213 TODO: {
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
214 local $TODO = 'not yet'
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
215 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.7.0';
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
216
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
217 like(http_get('/async_content'), qr/retval: AB/, 'async content');
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
218 like(http_get('/set_rv_var'), qr/retval: 30/, 'set return value variable');
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
219
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
220 }
9e0347f4df11 Tests: added js tests for async functions.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1436
diff changeset
221
1304
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
222 http_get('/async_var');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
223
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
224 $t->stop();
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
225
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
226 ok(index($t->read_file('error.log'), 'pending events') > 0,
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
227 'pending js events');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
228 ok(index($t->read_file('error.log'), 'async operation inside') > 0,
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
229 'async op in var handler');
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
230
25de201c8a0d Tests: added njs async tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
231 ###############################################################################