comparison js_async.t @ 1738:9e0347f4df11

Tests: added js tests for async functions.
author Dmitry Volyntsev <xeioex@nginx.com>
date Mon, 11 Oct 2021 14:34:54 +0000
parents 9d8b100a6ce3
children 18ac4d9e5a2a
comparison
equal deleted inserted replaced
1737:9fc3b428b18a 1738:9e0347f4df11
35 http { 35 http {
36 %%TEST_GLOBALS_HTTP%% 36 %%TEST_GLOBALS_HTTP%%
37 37
38 js_set $test_async set_timeout; 38 js_set $test_async set_timeout;
39 js_set $context_var context_var; 39 js_set $context_var context_var;
40 js_set $test_set_rv_var set_rv_var;
40 41
41 js_include test.js; 42 js_include test.js;
42 43
43 server { 44 server {
44 listen 127.0.0.1:8080; 45 listen 127.0.0.1:8080;
45 server_name localhost; 46 server_name localhost;
47
48 location /njs {
49 js_content test_njs;
50 }
46 51
47 location /async_var { 52 location /async_var {
48 return 200 $test_async; 53 return 200 $test_async;
49 } 54 }
50 55
69 location /limit_rate { 74 location /limit_rate {
70 postpone_output 0; 75 postpone_output 0;
71 sendfile_max_chunk 5; 76 sendfile_max_chunk 5;
72 js_content limit_rate; 77 js_content limit_rate;
73 } 78 }
79
80 location /async_content {
81 js_content async_content;
82 }
83
84 location /set_rv_var {
85 return 200 $test_set_rv_var;
86 }
74 } 87 }
75 } 88 }
76 89
77 EOF 90 EOF
78 91
79 $t->write_file('test.js', <<EOF); 92 $t->write_file('test.js', <<EOF);
93 function test_njs(r) {
94 r.return(200, njs.version);
95 }
96
80 function set_timeout(r) { 97 function set_timeout(r) {
81 var timerId = setTimeout(timeout_cb_r, 5, r, 0); 98 var timerId = setTimeout(timeout_cb_r, 5, r, 0);
82 clearTimeout(timerId); 99 clearTimeout(timerId);
83 setTimeout(timeout_cb_r, 5, r, 0) 100 setTimeout(timeout_cb_r, 5, r, 0)
84 } 101 }
157 r.sendHeader(); 174 r.sendHeader();
158 r.send("AAAAA".repeat(10)) 175 r.send("AAAAA".repeat(10))
159 setTimeout(limit_rate_cb, 1000, r); 176 setTimeout(limit_rate_cb, 1000, r);
160 } 177 }
161 178
179 function pr(x) {
180 return new Promise(resolve => {resolve(x)}).then(v => v).then(v => v);
181 }
182
183 async function async_content(r) {
184 const a1 = await pr('A');
185 const a2 = await pr('B');
186
187 r.return(200, `retval: \${a1 + a2}`);
188 }
189
190 async function set_rv_var(r) {
191 const a1 = await pr(10);
192 const a2 = await pr(20);
193
194 r.setReturnValue(`retval: \${a1 + a2}`);
195 }
196
162 EOF 197 EOF
163 198
164 $t->try_run('no njs available')->plan(7); 199 $t->try_run('no njs available')->plan(9);
165 200
166 ############################################################################### 201 ###############################################################################
167 202
168 like(http_get('/set_timeout'), qr/Content-Type: foo/, 'setTimeout'); 203 like(http_get('/set_timeout'), qr/Content-Type: foo/, 'setTimeout');
169 like(http_get('/set_timeout_many'), qr/Content-Type: reply/, 'setTimeout many'); 204 like(http_get('/set_timeout_many'), qr/Content-Type: reply/, 'setTimeout many');
170 like(http_get('/set_timeout_data'), qr/123456789/, 'setTimeout data'); 205 like(http_get('/set_timeout_data'), qr/123456789/, 'setTimeout data');
171 like(http_get('/shared_ctx?a=xxx'), qr/H: xxx/, 'shared context'); 206 like(http_get('/shared_ctx?a=xxx'), qr/H: xxx/, 'shared context');
172 like(http_get('/limit_rate'), qr/A{50}/, 'limit_rate'); 207 like(http_get('/limit_rate'), qr/A{50}/, 'limit_rate');
173 208
209 TODO: {
210 local $TODO = 'not yet'
211 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.7.0';
212
213 like(http_get('/async_content'), qr/retval: AB/, 'async content');
214 like(http_get('/set_rv_var'), qr/retval: 30/, 'set return value variable');
215
216 }
217
174 http_get('/async_var'); 218 http_get('/async_var');
175 219
176 $t->stop(); 220 $t->stop();
177 221
178 ok(index($t->read_file('error.log'), 'pending events') > 0, 222 ok(index($t->read_file('error.log'), 'pending events') > 0,