Mercurial > hg > nginx-tests
changeset 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 | 9fc3b428b18a |
children | f2fe58b4b59f |
files | js_async.t stream_js.t |
diffstat | 2 files changed, 71 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/js_async.t Thu Oct 07 20:29:02 2021 +0300 +++ b/js_async.t Mon Oct 11 14:34:54 2021 +0000 @@ -37,6 +37,7 @@ js_set $test_async set_timeout; js_set $context_var context_var; + js_set $test_set_rv_var set_rv_var; js_include test.js; @@ -44,6 +45,10 @@ listen 127.0.0.1:8080; server_name localhost; + location /njs { + js_content test_njs; + } + location /async_var { return 200 $test_async; } @@ -71,12 +76,24 @@ sendfile_max_chunk 5; js_content limit_rate; } + + location /async_content { + js_content async_content; + } + + location /set_rv_var { + return 200 $test_set_rv_var; + } } } EOF $t->write_file('test.js', <<EOF); + function test_njs(r) { + r.return(200, njs.version); + } + function set_timeout(r) { var timerId = setTimeout(timeout_cb_r, 5, r, 0); clearTimeout(timerId); @@ -159,9 +176,27 @@ setTimeout(limit_rate_cb, 1000, r); } + function pr(x) { + return new Promise(resolve => {resolve(x)}).then(v => v).then(v => v); + } + + async function async_content(r) { + const a1 = await pr('A'); + const a2 = await pr('B'); + + r.return(200, `retval: \${a1 + a2}`); + } + + async function set_rv_var(r) { + const a1 = await pr(10); + const a2 = await pr(20); + + r.setReturnValue(`retval: \${a1 + a2}`); + } + EOF -$t->try_run('no njs available')->plan(7); +$t->try_run('no njs available')->plan(9); ############################################################################### @@ -171,6 +206,15 @@ like(http_get('/shared_ctx?a=xxx'), qr/H: xxx/, 'shared context'); like(http_get('/limit_rate'), qr/A{50}/, 'limit_rate'); +TODO: { +local $TODO = 'not yet' + unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.7.0'; + +like(http_get('/async_content'), qr/retval: AB/, 'async content'); +like(http_get('/set_rv_var'), qr/retval: 30/, 'set return value variable'); + +} + http_get('/async_var'); $t->stop();
--- a/stream_js.t Thu Oct 07 20:29:02 2021 +0300 +++ b/stream_js.t Mon Oct 11 14:34:54 2021 +0000 @@ -67,6 +67,7 @@ js_set $js_unk js_unk; js_set $js_req_line js_req_line; js_set $js_sess_unk js_sess_unk; + js_set $js_async js_async; js_include test.js; @@ -184,6 +185,11 @@ js_filter js_filter_except; proxy_pass 127.0.0.1:8090; } + + server { + listen 127.0.0.1:8100; + return $js_async; + } } EOF @@ -356,10 +362,21 @@ s.on('unknown', function() {}); } + function pr(x) { + return new Promise(resolve => {resolve(x)}).then(v => v).then(v => v); + } + + async function js_async(s) { + const a1 = await pr(10); + const a2 = await pr(20); + + s.setReturnValue(`retval: \${a1 + a2}`); + } + EOF $t->run_daemon(\&stream_daemon, port(8090)); -$t->try_run('no stream njs available')->plan(22); +$t->try_run('no stream njs available')->plan(23); $t->waitforsocket('127.0.0.1:' . port(8090)); ############################################################################### @@ -392,6 +409,14 @@ stream('127.0.0.1:' . port(8098))->io('x'); stream('127.0.0.1:' . port(8099))->io('x'); +TODO: { +local $TODO = 'not yet' + unless get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.7.0'; + +is(stream('127.0.0.1:' . port(8100))->read(), 'retval: 30', 'js_async'); + +} + $t->stop(); ok(index($t->read_file('error.log'), 'SEE-THIS') > 0, 'stream js log');