annotate stream_js_fetch.t @ 1786:cadf15e2e2b3

Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
author Dmitry Volyntsev <xeioex@nginx.com>
date Thu, 25 Aug 2022 16:53:08 -0700
parents 2c08bfffe112
children 564f74bf6e4d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
2
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
3 # (C) Dmitry Volyntsev
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
5
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
6 # Tests for stream njs module, fetch method.
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
7
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
8 ###############################################################################
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
9
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
10 use warnings;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
11 use strict;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
12
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
13 use Test::More;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
14
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
16
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
17 use lib 'lib';
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
19 use Test::Nginx::Stream qw/ stream /;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
20
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
21 ###############################################################################
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
22
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
25
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http stream/)
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
28
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
30
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
31 daemon off;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
32
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
33 events {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
34 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
35
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
36 http {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
38
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
39 js_import test.js;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
40
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
41 server {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
42 listen 127.0.0.1:8080;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
43 server_name localhost;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
44
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
45 location /njs {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
46 js_content test.njs;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
47 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
48 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
49
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
50 server {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
51 listen 127.0.0.1:8080;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
52 server_name aaa;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
53
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
54 location /validate {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
55 js_content test.validate;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
56 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
57 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
58 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
59
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
60 stream {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
61 %%TEST_GLOBALS_STREAM%%
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
62
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
63 js_import test.js;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
64
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
65 server {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
66 listen 127.0.0.1:8081;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
67 js_preread test.preread_verify;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
68 proxy_pass 127.0.0.1:8090;
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
69 }
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
70
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
71 server {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
72 listen 127.0.0.1:8082;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
73 js_filter test.filter_verify;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
74 proxy_pass 127.0.0.1:8091;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
75 }
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
76 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
77
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
78 EOF
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
79
1641
6b6a496ac984 Tests: fixed stream_js_fetch.t with parallel tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1640
diff changeset
80 my $p = port(8080);
6b6a496ac984 Tests: fixed stream_js_fetch.t with parallel tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1640
diff changeset
81
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
82 $t->write_file('test.js', <<EOF);
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
83 function test_njs(r) {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
84 r.return(200, njs.version);
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
85 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
86
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
87 function validate(r) {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
88 r.return((r.requestText == 'QZ') ? 200 : 403);
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
89 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
90
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
91 function preread_verify(s) {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
92 var collect = Buffer.from([]);
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
93
1784
898598722ad4 Tests: improved stream fetch test with async callbacks.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1641
diff changeset
94 s.on('upstream', async function (data, flags) {
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
95 collect = Buffer.concat([collect, data]);
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
96
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
97 if (collect.length >= 4 && collect.readUInt16BE(0) == 0xabcd) {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
98 s.off('upstream');
1784
898598722ad4 Tests: improved stream fetch test with async callbacks.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1641
diff changeset
99
898598722ad4 Tests: improved stream fetch test with async callbacks.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1641
diff changeset
100 let reply = await ngx.fetch('http://127.0.0.1:$p/validate',
898598722ad4 Tests: improved stream fetch test with async callbacks.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1641
diff changeset
101 {body: collect.slice(2,4),
898598722ad4 Tests: improved stream fetch test with async callbacks.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1641
diff changeset
102 headers: {Host:'aaa'}});
898598722ad4 Tests: improved stream fetch test with async callbacks.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1641
diff changeset
103
898598722ad4 Tests: improved stream fetch test with async callbacks.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1641
diff changeset
104 (reply.status == 200) ? s.done(): s.deny();
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
105
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
106 } else if (collect.length) {
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
107 s.deny();
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
108 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
109 });
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
110 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
111
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
112 function filter_verify(s) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
113 var collect = Buffer.from([]);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
114
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
115 s.on('upstream', async function (data, flags) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
116 collect = Buffer.concat([collect, data]);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
117
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
118 if (collect.length >= 4 && collect.readUInt16BE(0) == 0xabcd) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
119 s.off('upstream');
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
120
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
121 let reply = await ngx.fetch('http://127.0.0.1:$p/validate',
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
122 {body: collect.slice(2,4),
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
123 headers: {Host:'aaa'}});
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
124
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
125 if (reply.status == 200) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
126 s.send(collect.slice(4), flags);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
127
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
128 } else {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
129 s.send("__CLOSE__", flags);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
130 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
131 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
132 });
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
133 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
134
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
135 export default {njs: test_njs, validate, preread_verify, filter_verify};
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
136 EOF
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
137
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
138 $t->try_run('no stream njs available')->plan(7);
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
139
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
140 $t->run_daemon(\&stream_daemon, port(8090), port(8091));
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
141 $t->waitforsocket('127.0.0.1:' . port(8090));
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
142 $t->waitforsocket('127.0.0.1:' . port(8091));
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
143
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
144 ###############################################################################
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
145
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
146 local $TODO = 'not yet'
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
147 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.5.1';
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
148
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
149 is(stream('127.0.0.1:' . port(8081))->io('###'), '', 'preread not enough');
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
150 is(stream('127.0.0.1:' . port(8081))->io("\xAB\xCDQZ##"), "\xAB\xCDQZ##",
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
151 'preread validated');
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
152 is(stream('127.0.0.1:' . port(8081))->io("\xAC\xCDQZ##"), '',
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
153 'preread invalid magic');
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
154 is(stream('127.0.0.1:' . port(8081))->io("\xAB\xCDQQ##"), '',
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
155 'preread validation failed');
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
156
1786
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
157 TODO: {
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
158 todo_skip 'leaves coredump', 3 unless $ENV{TEST_NGINX_UNSAFE}
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
159 or http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.7.7';
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
160
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
161 my $s = stream('127.0.0.1:' . port(8082));
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
162 is($s->io("\xAB\xCDQZ##", read => 1), '##', 'filter validated');
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
163 is($s->io("@@", read => 1), '@@', 'filter off');
cadf15e2e2b3 Tests: adjusted stream_js_fetch.t TODO for njs 0.7.6 and older.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1785
diff changeset
164
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
165 is(stream('127.0.0.1:' . port(8082))->io("\xAB\xCDQQ##"), '',
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
166 'filter validation failed');
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
167
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
168 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
169
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
170 ###############################################################################
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
171
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
172 sub stream_daemon {
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
173 my (@ports) = @_;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
174 my (@socks, @clients);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
175
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
176 for my $port (@ports) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
177 my $server = IO::Socket::INET->new(
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
178 Proto => 'tcp',
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
179 LocalAddr => "127.0.0.1:$port",
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
180 Listen => 5,
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
181 Reuse => 1
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
182 )
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
183 or die "Can't create listening socket: $!\n";
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
184 push @socks, $server;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
185 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
186
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
187 my $sel = IO::Select->new(@socks);
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
188
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
189 local $SIG{PIPE} = 'IGNORE';
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
190
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
191 while (my @ready = $sel->can_read) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
192 foreach my $fh (@ready) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
193 if (grep $_ == $fh, @socks) {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
194 my $new = $fh->accept;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
195 $new->autoflush(1);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
196 $sel->add($new);
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
197
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
198 } elsif (stream_handle_client($fh)
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
199 || $fh->sockport() == port(8090))
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
200 {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
201 $sel->remove($fh);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
202 $fh->close;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
203 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
204 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
205 }
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
206 }
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
207
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
208 sub stream_handle_client {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
209 my ($client) = @_;
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
210
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
211 log2c("(new connection $client)");
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
212
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
213 $client->sysread(my $buffer, 65536) or return 1;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
214
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
215 log2i("$client $buffer");
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
216
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
217 if ($buffer eq "__CLOSE__") {
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
218 return 1;
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
219 }
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
220
1785
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
221 log2o("$client $buffer");
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
222
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
223 $client->syswrite($buffer);
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
224
2c08bfffe112 Tests: added stream js test for s.send() in async context.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 1784
diff changeset
225 return 0;
1640
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
226 }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
227
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
228 sub log2i { Test::Nginx::log_core('|| <<', @_); }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
229 sub log2o { Test::Nginx::log_core('|| >>', @_); }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
230 sub log2c { Test::Nginx::log_core('||', @_); }
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
231
67adc5fd0548 Tests: added js tests for ngx.fetch() method.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
diff changeset
232 ###############################################################################