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
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
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 ###############################################################################