Use the package name to infer module location. This will make it easier to script our maintaining tasks.
283 lines
4.9 KiB
Perl
283 lines
4.9 KiB
Perl
# vi:filetype=
|
|
|
|
use lib 'lib';
|
|
use Test::Nginx::Socket;
|
|
|
|
repeat_each(2);
|
|
|
|
plan tests => repeat_each() * 2 * blocks();
|
|
|
|
#$Test::Nginx::LWP::LogLevel = 'debug';
|
|
|
|
run_tests();
|
|
|
|
__DATA__
|
|
|
|
=== TEST 1: sanity
|
|
--- config
|
|
location /main {
|
|
echo_foreach_split '&' $query_string;
|
|
echo_location_async $echo_it;
|
|
echo '/* end */';
|
|
echo_end;
|
|
}
|
|
location /sub/1.css {
|
|
echo "body { font-size: 12pt; }";
|
|
}
|
|
location /sub/2.css {
|
|
echo "table { color: 'red'; }";
|
|
}
|
|
--- request
|
|
GET /main?/sub/1.css&/sub/2.css
|
|
--- response_body
|
|
body { font-size: 12pt; }
|
|
/* end */
|
|
table { color: 'red'; }
|
|
/* end */
|
|
|
|
|
|
|
|
=== TEST 2: split in a url argument (echo_location_async)
|
|
--- config
|
|
location /main_async {
|
|
echo_foreach_split ',' $arg_cssfiles;
|
|
echo_location_async $echo_it;
|
|
echo_end;
|
|
}
|
|
location /foo.css {
|
|
echo foo;
|
|
}
|
|
location /bar.css {
|
|
echo bar;
|
|
}
|
|
location /baz.css {
|
|
echo baz;
|
|
}
|
|
--- request
|
|
GET /main_async?cssfiles=/foo.css,/bar.css,/baz.css
|
|
--- response_body
|
|
foo
|
|
bar
|
|
baz
|
|
|
|
|
|
|
|
=== TEST 3: split in a url argument (echo_location)
|
|
--- config
|
|
location /main_sync {
|
|
echo_foreach_split ',' $arg_cssfiles;
|
|
echo_location $echo_it;
|
|
echo_end;
|
|
}
|
|
location /foo.css {
|
|
echo foo;
|
|
}
|
|
location /bar.css {
|
|
echo bar;
|
|
}
|
|
location /baz.css {
|
|
echo baz;
|
|
}
|
|
--- request
|
|
GET /main_sync?cssfiles=/foo.css,/bar.css,/baz.css
|
|
--- response_body
|
|
foo
|
|
bar
|
|
baz
|
|
--- SKIP
|
|
|
|
|
|
|
|
=== TEST 4: empty loop
|
|
--- config
|
|
location /main {
|
|
echo "start";
|
|
echo_foreach_split ',' $arg_cssfiles;
|
|
echo_end;
|
|
echo "end";
|
|
}
|
|
--- request
|
|
GET /main?cssfiles=/foo.css,/bar.css,/baz.css
|
|
--- response_body
|
|
start
|
|
end
|
|
|
|
|
|
|
|
=== TEST 5: trailing delimiter
|
|
--- config
|
|
location /main_t {
|
|
echo_foreach_split ',' $arg_cssfiles;
|
|
echo_location_async $echo_it;
|
|
echo_end;
|
|
}
|
|
location /foo.css {
|
|
echo foo;
|
|
}
|
|
--- request
|
|
GET /main_t?cssfiles=/foo.css,
|
|
--- response_body
|
|
foo
|
|
|
|
|
|
|
|
=== TEST 6: multi-char delimiter
|
|
--- config
|
|
location /main_sleep {
|
|
echo_foreach_split '-a-' $arg_list;
|
|
echo $echo_it;
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /main_sleep?list=foo-a-bar-a-baz
|
|
--- error_code: 500
|
|
--- response_body_like: 500 Internal Server Error
|
|
|
|
|
|
|
|
=== TEST 7: multi-char delimiter (the right way)
|
|
--- config
|
|
location /main_sleep {
|
|
echo_foreach_split -- '-a-' $arg_list;
|
|
echo $echo_it;
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /main_sleep?list=foo-a-bar-a-baz
|
|
--- response_body
|
|
foo
|
|
bar
|
|
baz
|
|
|
|
|
|
|
|
=== TEST 8: loop with sleep
|
|
--- config
|
|
location /main_sleep {
|
|
echo_foreach_split '-' $arg_list;
|
|
echo_sleep 0.001;
|
|
echo $echo_it;
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /main_sleep?list=foo-a-bar-A-baz
|
|
--- response_body
|
|
foo
|
|
a
|
|
bar
|
|
A
|
|
baz
|
|
|
|
|
|
|
|
=== TEST 9: empty
|
|
--- config
|
|
location /merge {
|
|
default_type 'text/javascript';
|
|
echo_foreach_split '&' $query_string;
|
|
echo "/* JS File $echo_it */";
|
|
echo_location_async $echo_it;
|
|
echo;
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /merge
|
|
--- response_body
|
|
|
|
|
|
|
|
=== TEST 10: single &
|
|
--- config
|
|
location /merge {
|
|
default_type 'text/javascript';
|
|
echo_foreach_split '&' $query_string;
|
|
echo "/* JS File $echo_it */";
|
|
echo_location_async $echo_it;
|
|
echo;
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /merge?&
|
|
--- response_body
|
|
|
|
|
|
|
|
=== TEST 11: pure &'s
|
|
--- config
|
|
location /merge {
|
|
default_type 'text/javascript';
|
|
echo_foreach_split '&' $query_string;
|
|
echo "/* JS File $echo_it */";
|
|
echo_location_async $echo_it;
|
|
echo;
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /merge?&&&
|
|
--- response_body
|
|
|
|
|
|
|
|
=== TEST 12: pure & and spaces
|
|
TODO: needs to uri_decode $echo_it...
|
|
--- config
|
|
location /merge {
|
|
default_type 'text/javascript';
|
|
echo_foreach_split '&' $query_string;
|
|
echo "/* JS File $echo_it */";
|
|
echo_location_async $echo_it;
|
|
echo;
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /merge?&%20&%20&
|
|
--- response_body
|
|
--- SKIP
|
|
|
|
|
|
|
|
=== TEST 13: multiple foreach_split
|
|
--- config
|
|
location /multi {
|
|
echo_foreach_split '&' $query_string;
|
|
echo [$echo_it];
|
|
echo_end;
|
|
|
|
echo '...';
|
|
|
|
echo_foreach_split '-' $query_string;
|
|
echo [$echo_it];
|
|
echo_end;
|
|
}
|
|
--- request
|
|
GET /multi?a-b&c-d
|
|
--- response_body
|
|
[a-b]
|
|
[c-d]
|
|
...
|
|
[a]
|
|
[b&c]
|
|
[d]
|
|
|
|
|
|
|
|
=== TEST 14: github issue #2: setting a variable from $echo_it results to crashing
|
|
--- config
|
|
location = /getFile {
|
|
set $filelist "a,b,c";
|
|
echo_foreach_split ',' $filelist;
|
|
set $file $echo_it;
|
|
echo_subrequest GET '/getFile2' -q 'sha256=$file';
|
|
echo_end;
|
|
}
|
|
|
|
location = /getFile2 {
|
|
echo "sha256: $arg_sha256";
|
|
}
|
|
--- request
|
|
GET /getFile
|
|
--- response_body
|
|
sha256:
|
|
sha256:
|
|
sha256:
|
|
|