| # 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: |
| |