Mercurial > hg > nginx-tests
annotate js_promise.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 | f89770df737a |
rev | line source |
---|---|
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
2 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
3 # (C) Nginx, Inc. |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
4 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
5 # Promise tests for http njs module. |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
6 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
7 ############################################################################### |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
8 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
9 use warnings; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
10 use strict; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
11 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
12 use Test::More; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
13 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
14 BEGIN { use FindBin; chdir($FindBin::Bin); } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
15 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
16 use lib 'lib'; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
17 use Test::Nginx; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
18 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
19 ############################################################################### |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
20 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
21 select STDERR; $| = 1; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
22 select STDOUT; $| = 1; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
23 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
24 my $t = Test::Nginx->new()->has(qw/http/) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
25 ->write_file_expand('nginx.conf', <<'EOF'); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
26 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
27 %%TEST_GLOBALS%% |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
28 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
29 daemon off; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
30 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
31 events { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
32 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
33 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
34 http { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
35 %%TEST_GLOBALS_HTTP%% |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
36 |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
37 js_import test.js; |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
38 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
39 server { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
40 listen 127.0.0.1:8080; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
41 server_name localhost; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
42 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
43 location /njs { |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
44 js_content test.njs; |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
45 } |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
46 |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
47 location /promise { |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
48 js_content test.promise; |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
49 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
50 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
51 location /promise_throw { |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
52 js_content test.promise_throw; |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
53 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
54 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
55 location /promise_pure { |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
56 js_content test.promise_pure; |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
57 } |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
58 |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
59 location /timeout { |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
60 js_content test.timeout; |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
61 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
62 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
63 location /sub_token { |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
64 js_content test.sub_token; |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
65 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
66 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
67 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
68 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
69 EOF |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
70 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
71 $t->write_file('test.js', <<EOF); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
72 var global_token = ''; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
73 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
74 function test_njs(r) { |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
75 r.return(200, njs.version); |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
76 } |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
77 |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
78 function promise(r) { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
79 promisified_subrequest(r, '/sub_token', 'code=200&token=a') |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
80 .then(reply => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
81 var data = JSON.parse(reply.responseBody); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
82 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
83 if (data['token'] !== "a") { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
84 throw new Error('token is not "a"'); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
85 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
86 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
87 return data['token']; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
88 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
89 .then(token => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
90 promisified_subrequest(r, '/sub_token', 'code=200&token=b') |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
91 .then(reply => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
92 var data = JSON.parse(reply.responseBody); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
93 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
94 r.return(200, '{"token": "' + data['token'] + '"}'); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
95 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
96 .catch(() => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
97 throw new Error("failed promise() test"); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
98 }); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
99 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
100 .catch(() => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
101 r.return(500); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
102 }); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
103 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
104 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
105 function promise_throw(r) { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
106 promisified_subrequest(r, '/sub_token', 'code=200&token=x') |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
107 .then(reply => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
108 var data = JSON.parse(reply.responseBody); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
109 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
110 if (data['token'] !== "a") { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
111 throw data['token']; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
112 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
113 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
114 return data['token']; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
115 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
116 .then(() => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
117 r.return(500); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
118 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
119 .catch(token => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
120 r.return(200, '{"token": "' + token + '"}'); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
121 }); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
122 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
123 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
124 function promise_pure(r) { |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
125 var count = 0; |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
126 |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
127 Promise.resolve(true) |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
128 .then(() => count++) |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
129 .then(() => not_exist_ref) |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
130 .finally(() => count++) |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
131 .catch(() => { |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
132 r.return((count != 2) ? 500 : 200); |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
133 }); |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
134 } |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
135 |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
136 function timeout(r) { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
137 promisified_subrequest(r, '/sub_token', 'code=200&token=R') |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
138 .then(reply => JSON.parse(reply.responseBody)) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
139 .then(data => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
140 setTimeout(timeout_cb, 50, r, '/sub_token', 'code=200&token=T'); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
141 return data; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
142 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
143 .then(data => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
144 setTimeout(timeout_cb, 1, r, '/sub_token', 'code=200&token=' |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
145 + data['token']); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
146 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
147 .catch(() => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
148 r.return(500); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
149 }); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
150 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
151 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
152 function timeout_cb(r, url, args) { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
153 promisified_subrequest(r, url, args) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
154 .then(reply => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
155 if (global_token == '') { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
156 var data = JSON.parse(reply.responseBody); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
157 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
158 global_token = data['token']; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
159 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
160 r.return(200, '{"token": "' + data['token'] + '"}'); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
161 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
162 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
163 .catch(() => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
164 r.return(500); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
165 }); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
166 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
167 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
168 function promisified_subrequest(r, uri, args) { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
169 return new Promise((resolve, reject) => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
170 r.subrequest(uri, args, (reply) => { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
171 if (reply.status < 400) { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
172 resolve(reply); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
173 } else { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
174 reject(reply); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
175 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
176 }); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
177 }) |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
178 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
179 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
180 function sub_token(r) { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
181 var code = r.variables.arg_code; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
182 var token = r.variables.arg_token; |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
183 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
184 r.return(parseInt(code), '{"token": "'+ token +'"}'); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
185 } |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
186 |
1751
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
187 export default {njs:test_njs, promise, promise_throw, promise_pure, |
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
188 timeout, sub_token}; |
18ac4d9e5a2a
Tests: rewriting njs tests without deprecated "js_include".
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1628
diff
changeset
|
189 |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
190 EOF |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
191 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
192 $t->try_run('no njs available')->plan(4); |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
193 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
194 ############################################################################### |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
195 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
196 like(http_get('/promise'), qr/{"token": "b"}/, "Promise"); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
197 like(http_get('/promise_throw'), qr/{"token": "x"}/, "Promise throw and catch"); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
198 like(http_get('/timeout'), qr/{"token": "R"}/, "Promise with timeout"); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
199 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
200 TODO: { |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
201 local $TODO = 'not yet' |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
202 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.5.0'; |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
203 |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
204 like(http_get('/promise_pure'), qr/200 OK/, "events handling"); |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
205 } |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
206 |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
207 $t->todo_alerts() unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.5.0'; |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
208 |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
209 ############################################################################### |