5
use Test::Nginx::Socket;
7
plan tests => 2 * blocks() - 1;
9
$ENV{TEST_NGINX_HTML_DIR} = html_dir;
18
echo_subrequest GET /sub;
30
=== TEST 2: trailing echo
33
echo_subrequest GET /sub;
34
echo after subrequest;
47
=== TEST 3: leading echo
50
echo before subrequest;
51
echo_subrequest GET /sub;
64
=== TEST 4: leading & trailing echo
67
echo before subrequest;
68
echo_subrequest GET /sub;
69
echo after subrequest;
83
=== TEST 5: multiple subrequests
87
echo_subrequest GET /sub;
90
echo_subrequest GET /sub;
108
=== TEST 6: timed multiple subrequests (blocking sleep)
112
echo_subrequest GET /sub1;
113
echo_subrequest GET /sub2;
114
echo "took $echo_timer_elapsed sec for total.";
117
echo_blocking_sleep 0.02;
121
echo_blocking_sleep 0.01;
127
--- response_body_like
130
took 0\.0(?:2[5-9]|3[0-5]) sec for total\.$
134
=== TEST 7: timed multiple subrequests (non-blocking sleep)
138
echo_subrequest GET /sub1;
139
echo_subrequest GET /sub2;
140
echo "took $echo_timer_elapsed sec for total.";
153
--- response_body_like
156
took 0\.0(?:2[5-9]|3[0-6]) sec for total\.$
160
=== TEST 8: location with args
163
echo_subrequest GET /sub -q 'foo=Foo&bar=Bar';
166
echo $arg_foo $arg_bar;
175
=== TEST 9: chained subrequests
179
echo_subrequest GET /sub;
185
echo_subrequest GET /subsub;
203
=== TEST 10: chained subrequests using named locations
204
as of 0.8.20, ngx_http_subrequest still does not support
205
named location. sigh. this case is a TODO.
209
echo_subrequest GET @sub;
215
echo_subrequest GET @subsub;
234
=== TEST 11: explicit flush in main request
238
echo_subrequest GET /sub;
256
=== TEST 12: DELETE subrequest
259
echo_subrequest DELETE /sub;
262
echo "sub method: $echo_request_method";
263
echo "main method: $echo_client_request_method";
273
=== TEST 13: DELETE subrequest
276
echo "main method: $echo_client_request_method";
277
echo_subrequest GET /proxy;
278
echo_subrequest DELETE /proxy;
281
proxy_pass $scheme://127.0.0.1:$server_port/sub;
284
echo "sub method: $echo_request_method";
295
=== TEST 14: POST subrequest with body
298
echo_subrequest POST /sub -b 'hello, world';
301
echo "sub method: $echo_request_method";
302
# we don't need to call echo_read_client_body explicitly here
303
echo "sub body: $echo_request_body";
309
sub body: hello, world
313
=== TEST 15: POST subrequest with body (explicitly read the body)
316
echo_subrequest POST /sub -b 'hello, world';
319
echo "sub method: $echo_request_method";
320
# we call echo_read_client_body explicitly here even
321
# though it's not necessary.
322
echo_read_request_body;
323
echo "sub body: $echo_request_body";
329
sub body: hello, world
333
=== TEST 16: POST subrequest with body (with proxy in the middle) and without read body explicitly
336
echo_subrequest POST /proxy -b 'hello, world';
339
proxy_pass $scheme://127.0.0.1:$server_port/sub;
342
echo "sub method: $echo_request_method.";
343
# we need to read body explicitly here...or $echo_request_body
344
# will evaluate to empty ("")
345
echo "sub body: $echo_request_body.";
355
=== TEST 17: POST subrequest with body (with proxy in the middle) and read body explicitly
358
echo_subrequest POST /proxy -b 'hello, world';
361
proxy_pass $scheme://127.0.0.1:$server_port/sub;
364
echo "sub method: $echo_request_method.";
365
# we need to read body explicitly here...or $echo_request_body
366
# will evaluate to empty ("")
367
echo_read_request_body;
368
echo "sub body: $echo_request_body.";
374
sub body: hello, world.
378
=== TEST 18: multiple subrequests
381
echo_subrequest POST '/sub' -q 'foo=Foo' -b 'hi';
382
echo_subrequest PUT '/sub' -q 'bar=Bar' -b 'hello';
385
echo "querystring: $query_string";
386
echo "method: $echo_request_method";
387
echo "body: $echo_request_body";
388
echo "content length: $http_content_length";
407
=== TEST 19: unsafe uri
410
echo_subrequest GET '/../foo';
418
=== TEST 20: querystring in url
421
echo_subrequest GET /sub?foo=Foo&bar=Bar;
424
echo $arg_foo $arg_bar;
433
=== TEST 21: querystring in url *AND* an explicit querystring
436
echo_subrequest GET /sub?foo=Foo&bar=Bar -q blah=Blah;
439
echo $arg_foo $arg_bar $arg_blah;
448
=== TEST 22: let subrequest to read the main request's request body
451
echo_subrequest POST /sub;
454
echo_read_request_body;
460
--- response_body chomp
465
=== TEST 23: deep nested echo_subrequest/echo_subrequest_async
468
echo_subrequest GET /bar;
469
echo_subrequest_async GET /bar;
470
echo_subrequest_async GET /bar;
471
echo_subrequest GET /group;
472
echo_subrequest_async GET /group;
476
echo_subrequest GET /bar;
477
echo_subrequest_async GET /bar;
496
=== TEST 24: deep nested echo_subrequest/echo_subrequest_async
499
echo_subrequest GET /bar?a;
500
echo_subrequest_async GET /bar?b;
501
echo_subrequest_async GET /bar?c;
502
echo_subrequest GET /group?a=d&b=e;
503
echo_subrequest_async GET /group?a=f&b=g;
507
echo_subrequest GET /bar?$arg_a;
508
echo_subrequest_async GET /bar?$arg_b;
512
echo -n $query_string;
516
--- response_body: abcdefg
521
=== TEST 25: POST subrequest with file body (relative paths)
524
echo_subrequest POST /sub -f html/blah.txt;
527
echo "sub method: $echo_request_method";
528
# we don't need to call echo_read_client_body explicitly here
542
=== TEST 26: POST subrequest with file body (absolute paths)
545
echo_subrequest POST /sub -f $TEST_NGINX_HTML_DIR/blah.txt;
548
echo "sub method: $echo_request_method";
549
# we don't need to call echo_read_client_body explicitly here
565
=== TEST 27: POST subrequest with file body (file not found)
568
echo_subrequest POST /sub -f html/blah/blah.txt;
571
echo "sub method: $echo_request_method";
572
# we don't need to call echo_read_client_body explicitly here
580
--- response_body_like: 500 Internal Server Error