Mercurial > hg > nginx-tests
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, |