# vim:set ft= ts=4 sw=4 et fdm=marker: use Test::Nginx::Socket::Lua; repeat_each(2); #repeat_each(1); plan tests => blocks() * repeat_each() * 2; #no_diff(); #no_long_string(); run_tests(); __DATA__ === TEST 1: sanity --- config location /read { access_by_lua ' ngx.exec("/hi"); ngx.say("Hi"); '; } location /hi { echo "Hello"; } --- request GET /read --- response_body Hello === TEST 2: empty uri arg --- config location /read { access_by_lua ' ngx.exec(""); ngx.say("Hi"); '; content_by_lua 'ngx.exit(ngx.OK)'; } location /hi { echo "Hello"; } --- request GET /read --- response_body_like: 500 Internal Server Error --- error_code: 500 === TEST 3: no arg --- config location /read { access_by_lua ' ngx.exec(); ngx.say("Hi"); '; content_by_lua 'ngx.exit(ngx.OK)'; } location /hi { echo "Hello"; } --- request GET /read --- response_body_like: 500 Internal Server Error --- error_code: 500 === TEST 4: too many args --- config location /read { access_by_lua ' ngx.exec(1, 2, 3, 4); ngx.say("Hi"); '; content_by_lua 'ngx.exit(ngx.OK)'; } location /hi { echo "Hello"; } --- request GET /read --- response_body_like: 500 Internal Server Error --- error_code: 500 === TEST 5: null uri --- config location /read { access_by_lua ' ngx.exec(nil) ngx.say("Hi") '; content_by_lua 'ngx.exit(ngx.OK)'; } location /hi { echo "Hello"; } --- request GET /read --- response_body_like: 500 Internal Server Error --- error_code: 500 === TEST 6: user args --- config location /read { access_by_lua ' ngx.exec("/hi", "Yichun Zhang") ngx.say("Hi") '; content_by_lua 'ngx.exit(ngx.OK)'; } location /hi { echo Hello $query_string; } --- request GET /read --- response_body Hello Yichun Zhang === TEST 7: args in uri --- config location /read { access_by_lua ' ngx.exec("/hi?agentzh") ngx.say("Hi") '; content_by_lua 'ngx.exit(ngx.OK)'; } location /hi { echo Hello $query_string; } --- request GET /read --- response_body Hello agentzh === TEST 8: args in uri and user args --- config location /read { access_by_lua ' ngx.exec("/hi?a=Yichun", "b=Zhang") ngx.say("Hi") '; content_by_lua 'ngx.exit(ngx.OK)'; } location /hi { echo Hello $query_string; } --- request GET /read --- response_body Hello a=Yichun&b=Zhang === TEST 9: args in uri and user args --- config location /read { access_by_lua ' ngx.exec("@hi?a=Yichun", "b=Zhang") ngx.say("Hi") '; content_by_lua 'ngx.exit(ngx.OK)'; } location @hi { echo Hello $query_string; } --- request GET /read --- response_body Hello === TEST 10: exec after location capture --- config location /test { access_by_lua_file 'html/test.lua'; echo world; } location /a { echo "hello"; } location /b { echo "hello"; } --- user_files >>> test.lua ngx.location.capture('/a') ngx.exec('/b') --- request GET /test --- response_body hello === TEST 11: exec after (named) location capture --- config location /test { access_by_lua_file 'html/test.lua'; } location /a { echo "hello"; } location @b { echo "hello"; } --- user_files >>> test.lua ngx.location.capture('/a') ngx.exec('@b') --- request GET /test --- response_body hello === TEST 12: github issue #40: 2 Subrequest calls when using access_by_lua, ngx.exec and echo_location --- config location = /hi { echo hello; } location /sub { proxy_pass http://127.0.0.1:$server_port/hi; } location /p{ #content_by_lua ' #local res = ngx.location.capture("/sub") #ngx.print(res.body) #'; echo_location /sub; } location /lua { access_by_lua ' ngx.exec("/p") '; } --- request GET /lua --- response_body hello --- timeout: 3 === TEST 13: github issue #40: 2 Subrequest calls when using access_by_lua, ngx.exec and echo_location (named location) --- config location = /hi { echo hello; } location /sub { proxy_pass http://127.0.0.1:$server_port/hi; } location @p { #content_by_lua ' #local res = ngx.location.capture("/sub") #ngx.print(res.body) #'; echo_location /sub; } location /lua { access_by_lua ' ngx.exec("@p") '; } --- request GET /lua --- response_body hello === TEST 14: github issue #40: 2 Subrequest calls when using access_by_lua, ngx.exec and echo_location (post subrequest) --- config location = /hi { echo hello; } location /sub { proxy_pass http://127.0.0.1:$server_port/hi; } location /p{ #content_by_lua ' #local res = ngx.location.capture("/sub") #ngx.print(res.body) #'; echo_location /sub; } location /blah { echo blah; } location /lua { access_by_lua ' ngx.location.capture("/blah") ngx.exec("/p") '; } --- request GET /lua --- response_body hello === TEST 15: access_by_lua + ngx.exec + subrequest capture --- config location /main { access_by_lua ' res = ngx.location.capture("/test_loc"); ngx.print("hello, ", res.body) '; content_by_lua return; } location /test_loc { rewrite_by_lua ' ngx.exec("@proxy") '; } location @proxy { #echo proxy; proxy_pass http://127.0.0.1:$server_port/foo; } location /foo { echo bah; } --- request GET /main --- response_body hello, bah