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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################