Mercurial > hg > nginx-tests
annotate js_promise.t @ 1677:f13ead27f89c
Tests: improved stop() to send TERM after QUIT.
It is possible that graceful stop as initiated by SIGQUIT will take
very long time, such as when waiting for proxy_timeout in mail proxy
(defaults to 24h). To make sure in such cases nginx is stopped after
some reasonable time, we now send SIGTERM after waiting for 90 seconds.
Note that win32 version previously used "-s stop", which is equivalent
to SIGTERM rather than SIGQUIT. This seems accidental error during
introduction of initial win32 support in tests (ce2e23daa1da), so
it is changed to follow the same logic.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 19 May 2021 04:32:55 +0300 |
parents | 54f867e69cb5 |
children | 18ac4d9e5a2a |
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 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
37 js_include test.js; |
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 { |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
44 js_content test_njs; |
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 { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
48 js_content promise; |
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 { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
52 js_content promise_throw; |
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 { |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
56 js_content promise_pure; |
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 { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
60 js_content timeout; |
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 { |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
64 js_content sub_token; |
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 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
187 EOF |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
188 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
189 $t->try_run('no njs available')->plan(4); |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
190 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
191 ############################################################################### |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
192 |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
193 like(http_get('/promise'), qr/{"token": "b"}/, "Promise"); |
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
194 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
|
195 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
|
196 |
1628
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
197 TODO: { |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
198 local $TODO = 'not yet' |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
199 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
|
200 |
54f867e69cb5
Tests: added js promise test with standalone promises.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
1614
diff
changeset
|
201 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
|
202 } |
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 $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
|
205 |
1537
beb549bce15f
Tests: added njs Promise tests.
Alexander Borisov <alexander.borisov@nginx.com>
parents:
diff
changeset
|
206 ############################################################################### |