Mercurial > hg > nginx-tests
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 ############################################################################### |