1
# vim:set ft= ts=4 sw=4 et fdm=marker:
4
use Test::Nginx::Socket;
8
plan tests => blocks() * repeat_each() * 2;
10
#$ENV{LUA_PATH} = $ENV{HOME} . '/work/JSON4Lua-0.9.30/json/?.lua';
11
$ENV{TEST_NGINX_MYSQL_PORT} ||= 3306;
12
$ENV{TEST_NGINX_MEMCACHED_PORT} ||= 11211;
24
local res1, res2 = ngx.location.capture_multi{
28
ngx.say("res1.status = " .. res1.status)
29
ngx.say("res1.body = " .. res1.body)
30
ngx.say("res2.status = " .. res2.status)
31
ngx.say("res2.body = " .. res2.body)
33
content_by_lua return;
51
=== TEST 2: 4 concurrent requests
55
local res1, res2, res3, res4 = ngx.location.capture_multi{
61
ngx.say("res1.status = " .. res1.status)
62
ngx.say("res1.body = " .. res1.body)
64
ngx.say("res2.status = " .. res2.status)
65
ngx.say("res2.body = " .. res2.body)
67
ngx.say("res3.status = " .. res3.status)
68
ngx.say("res3.body = " .. res3.body)
70
ngx.say("res4.status = " .. res4.status)
71
ngx.say("res4.body = " .. res4.body)
73
content_by_lua return;
75
location ~ '^/([a-d])$' {
92
=== TEST 3: capture multi in series
96
local res1, res2 = ngx.location.capture_multi{
100
ngx.say("res1.status = " .. res1.status)
101
ngx.say("res1.body = " .. res1.body)
102
ngx.say("res2.status = " .. res2.status)
103
ngx.say("res2.body = " .. res2.body)
105
res1, res2 = ngx.location.capture_multi{
109
ngx.say("2 res1.status = " .. res1.status)
110
ngx.say("2 res1.body = " .. res1.body)
111
ngx.say("2 res2.status = " .. res2.status)
112
ngx.say("2 res2.body = " .. res2.body)
115
content_by_lua return;
137
=== TEST 4: capture multi in subrequest
141
local res1, res2 = ngx.location.capture_multi{
146
local n = ngx.var.arg_n
148
ngx.say(n .. " res1.status = " .. res1.status)
149
ngx.say(n .. " res1.body = " .. res1.body)
150
ngx.say(n .. " res2.status = " .. res2.status)
151
ngx.say(n .. " res2.body = " .. res2.body)
153
content_by_lua return;
158
res = ngx.location.capture("/foo?n=1")
159
ngx.say("top res.status = " .. res.status)
160
ngx.say("top res.body = [" .. res.body .. "]")
162
content_by_lua return;
176
top res.body = [1 res1.status = 200
184
=== TEST 5: capture multi in parallel
186
location ~ '^/(foo|bar)$' {
190
if ngx.var.tag == "foo" then
191
res1, res2 = ngx.location.capture_multi{
196
res1, res2 = ngx.location.capture_multi{
202
local n = ngx.var.arg_n
204
ngx.say(n .. " res1.status = " .. res1.status)
205
ngx.say(n .. " res1.body = " .. res1.body)
206
ngx.say(n .. " res2.status = " .. res2.status)
207
ngx.say(n .. " res2.body = " .. res2.body)
209
content_by_lua return;
214
local res1, res2 = ngx.location.capture_multi{
219
ngx.say("top res1.status = " .. res1.status)
220
ngx.say("top res1.body = [" .. res1.body .. "]")
221
ngx.say("top res2.status = " .. res2.status)
222
ngx.say("top res2.body = [" .. res2.body .. "]")
224
content_by_lua return;
227
location ~ '^/([abcd])$' {
233
top res1.status = 200
234
top res1.body = [1 res1.status = 200
239
top res2.status = 200
240
top res2.body = [2 res1.status = 200
248
=== TEST 6: memc sanity
252
local res1, res2 = ngx.location.capture_multi{
256
ngx.say("res1.status = " .. res1.status)
257
ngx.say("res1.body = " .. res1.body)
258
ngx.say("res2.status = " .. res2.status)
259
ngx.say("res2.body = " .. res2.body)
261
content_by_lua return;
263
location ~ '^/[ab]$' {
265
set $memc_value hello;
267
memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
271
--- response_body eval
282
=== TEST 7: memc muti + multi
286
local res1, res2 = ngx.location.capture_multi{
290
ngx.say("res1.status = " .. res1.status)
291
ngx.say("res1.body = [" .. res1.body .. "]")
292
ngx.say("res2.status = " .. res2.status)
293
ngx.say("res2.body = [" .. res2.body .. "]")
295
content_by_lua return;
297
location ~ '^/(foo|bar)$' {
301
if ngx.var.tag == "foo" then
302
res1, res2 = ngx.location.capture_multi{
307
res1, res2 = ngx.location.capture_multi{
312
print("args: " .. ngx.var.args)
313
local n = ngx.var.arg_n
314
ngx.say(n .. " res1.status = " .. res1.status)
315
ngx.say(n .. " res1.body = " .. res1.body)
316
ngx.say(n .. " res2.status = " .. res2.status)
317
ngx.say(n .. " res2.body = " .. res2.body)
319
content_by_lua return;
321
location ~ '^/[abcd]$' {
323
set $memc_value hello;
325
memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
329
--- response_body eval
331
res1.body = [1 res1.status = 201
332
1 res1.body = STORED\r
335
1 res2.body = STORED\r
339
res2.body = [2 res1.status = 201
340
2 res1.body = STORED\r
343
2 res2.body = STORED\r
350
=== TEST 8: memc 4 concurrent requests
354
local res1, res2, res3, res4 = ngx.location.capture_multi{
360
ngx.say("res1.status = " .. res1.status)
361
ngx.say("res1.body = " .. res1.body)
363
ngx.say("res2.status = " .. res2.status)
364
ngx.say("res2.body = " .. res2.body)
366
ngx.say("res3.status = " .. res3.status)
367
ngx.say("res3.body = " .. res3.body)
369
ngx.say("res4.status = " .. res4.status)
370
ngx.say("res4.body = " .. res4.body)
372
content_by_lua return;
374
location ~ '^/[a-d]$' {
376
set $memc_value hello;
378
memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
382
--- response_body eval