comparison stream_js.t @ 1239:4a825ec85c8d

Tests: added tests for js_access, js_preread, and js_filter.
author Andrey Zelenkov <zelenkov@nginx.com>
date Tue, 14 Nov 2017 21:37:22 +0300
parents e4974af3fb12
children edf5a3c9e36a
comparison
equal deleted inserted replaced
1238:e35cc79ed4a1 1239:4a825ec85c8d
69 69
70 server { 70 server {
71 listen 127.0.0.1:%%PORT_8985_UDP%% udp; 71 listen 127.0.0.1:%%PORT_8985_UDP%% udp;
72 return $js_addr; 72 return $js_addr;
73 } 73 }
74
75 server {
76 listen 127.0.0.1:8086;
77 js_access js_access_allow;
78 return 'OK';
79 }
80
81 server {
82 listen 127.0.0.1:8087;
83 js_access js_access_deny;
84 return 'OK';
85 }
86
87 server {
88 listen 127.0.0.1:8088;
89 js_preread js_preread;
90 proxy_pass 127.0.0.1:8090;
91 }
92
93 server {
94 listen 127.0.0.1:8089;
95 js_filter js_filter;
96 proxy_pass 127.0.0.1:8090;
97 }
98
99 server {
100 listen 127.0.0.1:8091;
101 js_access js_access_step;
102 js_preread js_preread_step;
103 js_filter js_filter_step;
104 proxy_pass 127.0.0.1:8090;
105 }
74 } 106 }
75 107
76 EOF 108 EOF
77 109
78 $t->write_file('functions.js', <<EOF); 110 $t->write_file('functions.js', <<EOF);
89 } 121 }
90 122
91 function js_log(sess) { 123 function js_log(sess) {
92 sess.log("SEE-THIS"); 124 sess.log("SEE-THIS");
93 } 125 }
126
127 function js_access_allow(sess) {
128 if (sess.remoteAddress.match('127.0.0.1')) {
129 return sess.OK;
130 }
131 }
132
133 function js_access_deny(sess) {
134 if (sess.remoteAddress.match('127.0.0.1')) {
135 return sess.ABORT;
136 }
137 }
138
139 function js_preread(sess) {
140 var n = sess.buffer.indexOf('z');
141 if (n == -1) {
142 return sess.AGAIN;
143 }
144 }
145
146 function js_filter(sess) {
147 if (sess.fromUpstream) {
148 var n = sess.buffer.search('y');
149 if (n != -1) {
150 sess.buffer = 'z';
151 }
152 return;
153 }
154
155 n = sess.buffer.search('x');
156 if (n != -1) {
157 sess.buffer = 'y';
158 }
159 }
160
161 var res = '';
162 function js_access_step(sess) {
163 res += '1';
164 }
165
166 function js_preread_step(sess) {
167 res += '2';
168 }
169
170 function js_filter_step(sess) {
171 if (sess.eof) {
172 sess.buffer = res;
173 return;
174 }
175 res += '3';
176 }
94 EOF 177 EOF
95 178
96 $t->try_run('no stream njs available')->plan(7); 179 $t->run_daemon(\&stream_daemon, port(8090));
180 $t->try_run('no stream njs available')->plan(12);
181 $t->waitforsocket('127.0.0.1:' . port(8090));
97 182
98 ############################################################################### 183 ###############################################################################
99 184
100 is(stream('127.0.0.1:' . port(8080))->read(), 'addr=127.0.0.1', 185 is(stream('127.0.0.1:' . port(8080))->read(), 'addr=127.0.0.1',
101 'sess.remoteAddress'); 186 'sess.remoteAddress');
104 is(stream('127.0.0.1:' . port(8081))->read(), 'undefined', 'sess.log'); 189 is(stream('127.0.0.1:' . port(8081))->read(), 'undefined', 'sess.log');
105 is(stream('127.0.0.1:' . port(8082))->read(), 'variable=127.0.0.1', 190 is(stream('127.0.0.1:' . port(8082))->read(), 'variable=127.0.0.1',
106 'sess.variables'); 191 'sess.variables');
107 is(stream('127.0.0.1:' . port(8083))->read(), '', 'stream js unknown function'); 192 is(stream('127.0.0.1:' . port(8083))->read(), '', 'stream js unknown function');
108 is(stream('127.0.0.1:' . port(8084))->read(), 'sess_unk=undefined', 'sess.unk'); 193 is(stream('127.0.0.1:' . port(8084))->read(), 'sess_unk=undefined', 'sess.unk');
194 is(stream('127.0.0.1:' . port(8086))->read(), 'OK', 'js_access allow');
195 is(stream('127.0.0.1:' . port(8087))->read(), '', 'js_access deny');
196 is(stream('127.0.0.1:' . port(8088))->io('xyz'), 'xyz', 'js_preread');
197 is(stream('127.0.0.1:' . port(8089))->io('x'), 'z', 'js_filter');
198 is(stream('127.0.0.1:' . port(8091))->io('0'), '01233', 'handlers order');
109 199
110 $t->stop(); 200 $t->stop();
111 201
112 ok(index($t->read_file('error.log'), 'SEE-THIS') > 0, 'stream js log'); 202 ok(index($t->read_file('error.log'), 'SEE-THIS') > 0, 'stream js log');
113 203
114 ############################################################################### 204 ###############################################################################
205
206 sub stream_daemon {
207 my $server = IO::Socket::INET->new(
208 Proto => 'tcp',
209 LocalAddr => '127.0.0.1:' . port(8090),
210 Listen => 5,
211 Reuse => 1
212 )
213 or die "Can't create listening socket: $!\n";
214
215 local $SIG{PIPE} = 'IGNORE';
216
217 while (my $client = $server->accept()) {
218 $client->autoflush(1);
219
220 log2c("(new connection $client)");
221
222 $client->sysread(my $buffer, 65536) or next;
223
224 log2i("$client $buffer");
225
226 log2o("$client $buffer");
227
228 $client->syswrite($buffer);
229
230 close $client;
231 }
232 }
233
234 sub log2i { Test::Nginx::log_core('|| <<', @_); }
235 sub log2o { Test::Nginx::log_core('|| >>', @_); }
236 sub log2c { Test::Nginx::log_core('||', @_); }
237
238 ###############################################################################