annotate js_buffer.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 456bf219d768
children f89770df737a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
2
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
3 # (C) Dmitry Volyntsev
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
5
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
6 # Tests for http njs module, buffer properties.
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
7
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
8 ###############################################################################
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
9
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
10 use warnings;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
11 use strict;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
12
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
13 use Test::More;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
14
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
15 use Socket qw/ CRLF /;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
16
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
18
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
19 use lib 'lib';
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
21
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
22 ###############################################################################
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
23
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
24 select STDERR; $| = 1;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
25 select STDOUT; $| = 1;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
26
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
27 eval { require JSON::PP; };
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
28 plan(skip_all => "JSON::PP not installed") if $@;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
29
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
30 my $t = Test::Nginx->new()->has(qw/http rewrite proxy/)
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
31 ->write_file_expand('nginx.conf', <<'EOF');
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
32
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
33 %%TEST_GLOBALS%%
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
34
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
35 daemon off;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
36
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
37 events {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
38 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
39
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
40 http {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
41 %%TEST_GLOBALS_HTTP%%
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
42
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
43 js_import test.js;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
44
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
45 server {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
46 listen 127.0.0.1:8080;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
47 server_name localhost;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
48
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
49 location /njs {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
50 js_content test.njs;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
51 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
52
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
53 location /return {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
54 js_content test.return;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
55 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
56
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
57 location /req_body {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
58 js_content test.req_body;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
59 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
60
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
61 location /res_body {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
62 js_content test.res_body;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
63 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
64
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
65 location /res_text {
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
66 js_content test.res_text;
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
67 }
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
68
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
69 location /binary_var {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
70 js_content test.binary_var;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
71 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
72
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
73 location /p/ {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
74 proxy_pass http://127.0.0.1:8081/;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
75 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
76 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
77
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
78 server {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
79 listen 127.0.0.1:8081;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
80 server_name localhost;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
81
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
82 location /sub1 {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
83 return 200 '{"a": {"b": 1}}';
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
84 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
85 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
86 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
87
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
88 EOF
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
89
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
90 $t->write_file('test.js', <<EOF);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
91 function test_njs(r) {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
92 r.return(200, njs.version);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
93 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
94
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
95 function test_return(r) {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
96 var body = Buffer.from("body: ");
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
97 body = Buffer.concat([body, Buffer.from(r.args.text)]);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
98 r.return(200, body);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
99 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
100
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
101 function req_body(r) {
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
102 var body = r.requestBuffer;
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
103 var view = new DataView(body.buffer);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
104 view.setInt8(2, 'c'.charCodeAt(0));
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
105 r.return(200, JSON.parse(body).c.b);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
106 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
107
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
108 function type(v) {return Buffer.isBuffer(v) ? 'buffer' : (typeof v);}
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
109
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
110 function res_body(r) {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
111 r.subrequest('/p/sub1')
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
112 .then(reply => {
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
113 var body = reply.responseBuffer;
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
114 var view = new DataView(body.buffer);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
115 view.setInt8(2, 'c'.charCodeAt(0));
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
116 body = JSON.parse(body);
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
117 body.type = type(reply.responseBuffer);
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
118 r.return(200, JSON.stringify(body));
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
119 })
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
120 }
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
121
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
122 function res_text(r) {
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
123 r.subrequest('/p/sub1')
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
124 .then(reply => {
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
125 var body = JSON.parse(reply.responseText);
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
126 body.type = type(reply.responseText);
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
127 r.return(200, JSON.stringify(body));
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
128 })
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
129 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
130
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
131 function binary_var(r) {
1626
a35445ae8de7 Tests: adapted js buffer tests to renaming vars to rawVariables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1625
diff changeset
132 var test = r.rawVariables.binary_remote_addr
a35445ae8de7 Tests: adapted js buffer tests to renaming vars to rawVariables.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1625
diff changeset
133 .equals(Buffer.from([127,0,0,1]));
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
134 r.return(200, test);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
135 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
136
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
137 export default {njs: test_njs, return: test_return, req_body, res_body,
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
138 res_text, binary_var};
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
139
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
140 EOF
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
141
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
142 $t->try_run('no njs buffer')->plan(5);
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
143
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
144 ###############################################################################
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
145
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
146 TODO: {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
147 local $TODO = 'not yet'
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
148 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.5.0';
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
149
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
150 like(http_get('/return?text=FOO'), qr/200 OK.*body: FOO$/s,
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
151 'return buffer');
1627
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
152 like(http_post('/req_body'), qr/200 OK.*BAR$/s, 'request buffer');
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
153 is(get_json('/res_body'), '{"c":{"b":1},"type":"buffer"}', 'response buffer');
456bf219d768 Tests: adapted js buffer tests to renaming body properties.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1626
diff changeset
154 is(get_json('/res_text'), '{"a":{"b":1},"type":"string"}', 'response text');
1625
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
155 like(http_get('/binary_var'), qr/200 OK.*true$/s,
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
156 'binary var');
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
157
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
158 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
159
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
160 ###############################################################################
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
161
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
162 sub recode {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
163 my $json;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
164 eval { $json = JSON::PP::decode_json(shift) };
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
165
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
166 if ($@) {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
167 return "<failed to parse JSON>";
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
168 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
169
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
170 JSON::PP->new()->canonical()->encode($json);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
171 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
172
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
173 sub get_json {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
174 http_get(shift) =~ /\x0d\x0a?\x0d\x0a?(.*)/ms;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
175 recode($1);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
176 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
177
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
178 sub http_post {
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
179 my ($url, %extra) = @_;
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
180
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
181 my $p = "POST $url HTTP/1.0" . CRLF .
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
182 "Host: localhost" . CRLF .
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
183 "Content-Length: 17" . CRLF .
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
184 CRLF .
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
185 "{\"a\":{\"b\":\"BAR\"}}";
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
186
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
187 return http($p, %extra);
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
188 }
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
189
a140cab489e8 Tests: added js buffer tests.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
190 ###############################################################################