blob: 489a2842dd9478574c4df501b2b86ffc52e2a527 [file] [log] [blame] [raw]
# vi:filetype=
use lib 'lib';
use Test::Nginx::Socket;
repeat_each(2);
plan tests => repeat_each() * (2 * blocks() + 5);
#$Test::Nginx::LWP::LogLevel = 'debug';
run_tests();
__DATA__
=== TEST 1: sanity
--- config
location /echo {
echo hello;
}
--- request
GET /echo
--- response_body
hello
=== TEST 2: multiple args
--- config
location /echo {
echo say hello world;
}
--- request
GET /echo
--- response_body
say hello world
=== TEST 3: multiple directive instances
--- config
location /echo {
echo say that;
echo hello;
echo world !;
}
--- request
GET /echo
--- response_body
say that
hello
world !
=== TEST 4: echo without arguments
--- config
location /echo {
echo;
echo;
}
--- request
GET /echo
--- response_body eval
"\n\n"
=== TEST 5: escaped newline
--- config
location /echo {
echo "hello\nworld";
}
--- request
GET /echo
--- response_body
hello
world
=== TEST 6: escaped tabs and \r and " wihtin "..."
--- config
location /echo {
echo "i say \"hello\tworld\"\r";
}
--- request
GET /echo
--- response_body eval: "i say \"hello\tworld\"\r\n"
=== TEST 7: escaped tabs and \r and " in single quotes
--- config
location /echo {
echo 'i say \"hello\tworld\"\r';
}
--- request
GET /echo
--- response_body eval: "i say \"hello\tworld\"\r\n"
=== TEST 8: escaped tabs and \r and " w/o any quotes
--- config
location /echo {
echo i say \"hello\tworld\"\r;
}
--- request
GET /echo
--- response_body eval: "i say \"hello\tworld\"\r\n"
=== TEST 9: escaping $
As of Nginx 0.8.20, there's still no way to escape the '$' character.
--- config
location /echo {
echo \$;
}
--- request
GET /echo
--- response_body
$
--- SKIP
=== TEST 10: XSS
--- config
location /blah {
echo_duplicate 1 "$arg_callback(";
echo_location_async "/data?$uri";
echo_duplicate 1 ")";
}
location /data {
echo_duplicate 1 '{"dog":"$query_string"}';
}
--- request
GET /blah/9999999.json?callback=ding1111111
--- response_body chomp
ding1111111({"dog":"/blah/9999999.json"})
=== TEST 11: XSS - filter version
--- config
location /blah {
echo_before_body "$arg_callback(";
echo_duplicate 1 '{"dog":"$uri"}';
echo_after_body ")";
}
--- request
GET /blah/9999999.json?callback=ding1111111
--- response_body
ding1111111(
{"dog":"/blah/9999999.json"})
=== TEST 12: if
--- config
location /first {
echo "before";
echo_location_async /second $request_uri;
echo "after";
}
location = /second {
if ($query_string ~ '([^?]+)') {
set $memcached_key $1; # needing this to be keyed on the request_path, not the entire uri
echo $memcached_key;
}
}
--- request
GET /first/9999999.json?callback=ding1111111
--- response_body
before
/first/9999999.json
after
=== TEST 13: echo -n
--- config
location /echo {
echo -n hello;
echo -n world;
}
--- request
GET /echo
--- response_body chop
helloworld
=== TEST 14: echo a -n
--- config
location /echo {
echo a -n hello;
echo b -n world;
}
--- request
GET /echo
--- response_body
a -n hello
b -n world
=== TEST 15: -n in a var
--- config
location /echo {
set $opt -n;
echo $opt hello;
echo $opt world;
}
--- request
GET /echo
--- response_body
-n hello
-n world
=== TEST 16: -n only
--- config
location /echo {
echo -n;
echo -n;
}
--- request
GET /echo
--- response_body chop
=== TEST 17: -n with an empty string
--- config
location /echo {
echo -n "";
set $empty "";
echo -n $empty;
}
--- request
GET /echo
--- response_body chop
=== TEST 18: -- -n
--- config
location /echo {
echo -- -n hello;
echo -- -n world;
}
--- request
GET /echo
--- response_body
-n hello
-n world
=== TEST 19: -n -n
--- config
location /echo {
echo -n -n hello;
echo -n -n world;
}
--- request
GET /echo
--- response_body chop
helloworld
=== TEST 20: -n -- -n
--- config
location /echo {
echo -n -- -n hello;
echo -n -- -n world;
}
--- request
GET /echo
--- response_body chop
-n hello-n world
=== TEST 21: proxy
--- config
location /main {
proxy_pass http://127.0.0.1:$server_port/echo;
}
location /echo {
echo hello;
echo world;
}
--- request
GET /main
--- response_headers
!Content-Length
--- response_body
hello
world
=== TEST 22: if is evil
--- config
location /test {
set $a 3;
set_by_lua $a '
if ngx.var.a == "3" then
return 4
end
';
echo $a;
}
--- request
GET /test
--- response_body
4
--- SKIP
=== TEST 23: HEAD
--- config
location /echo {
echo hello;
echo world;
}
--- request
HEAD /echo
--- response_body
=== TEST 24: POST
--- config
location /echo {
echo hello;
echo world;
}
--- pipelined_requests eval
["POST /echo
blah blah", "POST /echo
foo bar baz"]
--- response_body eval
["hello\nworld\n","hello\nworld\n"]
=== TEST 25: POST
--- config
location /echo {
echo_sleep 0.001;
echo hello;
echo world;
}
--- pipelined_requests eval
["POST /echo
blah blah", "POST /echo
foo bar baz"]
--- response_body eval
["hello\nworld\n","hello\nworld\n"]