-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
312 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,281 @@ | ||
# vim:set ft= ts=4 sts=4 sw=4 et fdm=marker: | ||
|
||
use strict; | ||
use lib '.'; | ||
use t::TestWasm; | ||
|
||
plan tests => repeat_each() * (blocks() * 4); | ||
|
||
run_tests(); | ||
|
||
__DATA__ | ||
=== TEST 1: client connection drop - proxy_wasm & echo - chained filters | ||
If a client drops the connection immediately after sending an HTTP request, | ||
and the sent request is answered by the echo directive, | ||
all filters executing on that request will have their on_response_headers, | ||
on_response_body, on_log and on_done entrypoints invoked. | ||
--- load_nginx_modules: ngx_http_echo_module | ||
--- wasm_modules: on_phases | ||
--- config | ||
location /t { | ||
proxy_wasm on_phases; | ||
proxy_wasm on_phases; | ||
echo ok; | ||
} | ||
--- shutdown | ||
--- ignore_response | ||
--- grep_error_log eval: qr/#\d+ on_(response|log|done).*/ | ||
--- grep_error_log_out eval | ||
qr/#\d+ on_response_headers, 5 headers.* | ||
#\d+ on_response_headers, 5 headers.* | ||
#\d+ on_response_body, 3 bytes, eof: false.* | ||
#\d+ on_response_body, 3 bytes, eof: false.* | ||
#\d+ on_response_body, 0 bytes, eof: true.* | ||
#\d+ on_response_body, 0 bytes, eof: true.* | ||
#\d+ on_done.* | ||
#\d+ on_log.* | ||
#\d+ on_done.* | ||
#\d+ on_log.*/ | ||
--- no_error_log | ||
[error] | ||
[crit] | ||
[stub] | ||
=== TEST 2: client connection drop - proxy_wasm & proxy_pass - chained filters | ||
If a client drops the connection immediately after sending an HTTP request, | ||
and sent request is proxied by proxy_pass, | ||
all filters executing on that request will only have their on_log and on_done | ||
entrypoints invoked. | ||
--- wasm_modules: on_phases | ||
--- http_config eval | ||
qq{ | ||
server { | ||
listen unix:$ENV{TEST_NGINX_UNIX_SOCKET}; | ||
location / { | ||
return 200; | ||
} | ||
} | ||
} | ||
--- config | ||
location /t { | ||
proxy_wasm on_phases; | ||
proxy_wasm on_phases; | ||
proxy_pass http://unix:$TEST_NGINX_UNIX_SOCKET:/; | ||
} | ||
--- shutdown | ||
--- ignore_response | ||
--- grep_error_log eval: qr/\[info\] .*? on_(response|log|done).*/ | ||
--- grep_error_log_out eval | ||
qr/\[info\] .*? on_done.* | ||
\[info\] .*? on_log.*/ | ||
--- no_error_log eval | ||
[ | ||
qr/\[info\] .*? on_response.*/, | ||
"[error]", | ||
"[crit]" | ||
] | ||
=== TEST 3: client connection drop - proxy_wasm - filters dispatch HTTP call | ||
If a client drops the connection immediately after sending an HTTP request, | ||
all filters executing on that request that have dispatched HTTP calls will have | ||
their on_http_call_response entrypoint invoked. | ||
--- load_nginx_modules: ngx_http_echo_module | ||
--- wasm_modules: hostcalls | ||
--- http_config eval | ||
qq{ | ||
server { | ||
listen unix:$ENV{TEST_NGINX_UNIX_SOCKET}; | ||
location /status/200 { | ||
return 200; | ||
} | ||
location /status/201 { | ||
return 201; | ||
} | ||
} | ||
} | ||
--- config | ||
location /t { | ||
proxy_wasm hostcalls 'test=/t/dispatch_http_call \ | ||
host=unix:$TEST_NGINX_UNIX_SOCKET \ | ||
path=/status/200'; | ||
proxy_wasm hostcalls 'test=/t/dispatch_http_call \ | ||
host=unix:$TEST_NGINX_UNIX_SOCKET \ | ||
path=/status/201'; | ||
echo ok; | ||
} | ||
--- shutdown | ||
--- ignore_response | ||
--- grep_error_log eval: qr/\*\d+.*?on_http_call_response.*/ | ||
--- grep_error_log_out eval | ||
qr/^\*\d+ .*? on_http_call_response \(id: \d+, status: 200[^*].* | ||
\*\d+ .*? on_http_call_response \(id: \d+, status: 201[^*].*/ | ||
--- no_error_log | ||
[error] | ||
[crit] | ||
[stub] | ||
=== TEST 4: client connection drop - proxy_wasm - send_local_response() | ||
If a client drops the connection immediately after sending an HTTP request, | ||
and a filter running on that request calls send_local_response(), | ||
a response will be produced; | ||
filters running on the same request and declared after the filter which called | ||
send_local_response() will have their on_response_headers, on_response_body, | ||
on_log and on_done entrypoints invoked; | ||
filters running on the same request and declared before the filter will have | ||
only their on_response_body, on_log and on_done entrypoints invoked. | ||
--- wasm_modules: hostcalls on_phases | ||
--- config | ||
location /t { | ||
proxy_wasm on_phases; | ||
proxy_wasm hostcalls 'test=/t/send_local_response/body'; | ||
proxy_wasm on_phases; | ||
} | ||
--- shutdown | ||
--- ignore_response | ||
--- grep_error_log eval: qr/\[info\] .*? on_(response|log|done).*/ | ||
--- grep_error_log_out eval | ||
qr/.*\["hostcalls" #1\].* on_response_headers.* | ||
.*\["on_phases" #2\].* on_response_headers.* | ||
.*\["on_phases" #1\].* on_response_body.* | ||
.*\["hostcalls" #1\].* on_response_body.* | ||
.*\["on_phases" #2\].* on_response_body.* | ||
.*\["on_phases" #1\].* on_done.* | ||
.*\["on_phases" #1\].* on_log.* | ||
.*\["hostcalls" #1\].* on_done.* | ||
.*\["hostcalls" #1\].* on_log.* | ||
.*\["on_phases" #2\].* on_done.* | ||
.*\["on_phases" #2\].* on_log.*/ | ||
--- no_error_log eval | ||
[ | ||
qr/.*\["on_phases" #1\].* on_response_headers.*/, | ||
"[error]", | ||
"[crit]", | ||
] | ||
=== TEST 6: client connection drop - wasm_call & echo - body_filter | ||
If a client drops the connection immediately after sending an HTTP request, | ||
and that request is answered by the echo directive, | ||
wasm functions configured to execute on content/header_filter/body_filter phases | ||
will be invoked. | ||
--- SKIP: This test is intermitently passing on CI. | ||
--- load_nginx_modules: ngx_http_echo_module | ||
--- wasm_modules: ngx_rust_tests | ||
--- config | ||
location /t { | ||
wasm_call content ngx_rust_tests log_notice_hello; | ||
wasm_call header_filter ngx_rust_tests log_notice_hello; | ||
wasm_call body_filter ngx_rust_tests log_notice_hello; | ||
echo ok; | ||
} | ||
--- shutdown | ||
--- ignore_response | ||
--- grep_error_log eval: qr/\[debug\] .*? \*\d wasm ops calling .* in .* phase.*/ | ||
--- grep_error_log_out eval | ||
qr/\[debug\] .* wasm ops calling "ngx_rust_tests.log_notice_hello" in "content" phase.* | ||
\[debug\] .* wasm ops calling "ngx_rust_tests.log_notice_hello" in "header_filter" phase.* | ||
\[debug\] .* wasm ops calling "ngx_rust_tests.log_notice_hello" in "body_filter" phase.* | ||
\[debug\] .* wasm ops calling "ngx_rust_tests.log_notice_hello" in "body_filter" phase.*/ | ||
--- no_error_log | ||
[error] | ||
[crit] | ||
[stub] | ||
=== TEST 7: client connection drop - wasm_call & proxy_pass - body_filter | ||
If a client drops the connection immediately after sending an HTTP request, | ||
and that request is proxied by proxy_pass, | ||
only wasm functions configured to execute in content phase will be invoked. | ||
--- SKIP: This test is intermitently passing on CI. | ||
--- load_nginx_modules: ngx_http_echo_module | ||
--- wasm_modules: ngx_rust_tests | ||
--- http_config eval | ||
qq{ | ||
server { | ||
listen unix:$ENV{TEST_NGINX_UNIX_SOCKET}; | ||
location / { | ||
return 201; | ||
} | ||
} | ||
} | ||
--- config | ||
location /t { | ||
wasm_call content ngx_rust_tests log_notice_hello; | ||
wasm_call header_filter ngx_rust_tests log_notice_hello; | ||
wasm_call body_filter ngx_rust_tests log_notice_hello; | ||
proxy_pass http://unix:$TEST_NGINX_UNIX_SOCKET:/; | ||
} | ||
--- shutdown | ||
--- ignore_response | ||
--- grep_error_log eval: qr/\[debug\] .*? \*\d wasm ops calling .* in .* phase.*/ | ||
--- grep_error_log_out eval | ||
qr/\[debug\] .* wasm ops calling "ngx_rust_tests.log_notice_hello" in "content" phase.*/ | ||
--- no_error_log eval | ||
[ | ||
qr/\[debug\] .* wasm ops calling .* in "(header_filter|body_filter)" phase.*/, | ||
"[error]", | ||
"[crit]", | ||
] | ||
=== TEST 5: upstream connection drop - dispatch_http_call() | ||
--- SKIP | ||
--- wasm_modules: hostcalls | ||
--- tcp_listen: $TEST_NGINX_UNIX_SOCKET | ||
--- tcp_reply eval | ||
sub { | ||
return ["HTTP/1.1 100 OK\r\n", | ||
"Connection: close\r\n", | ||
"Content-Length: 0\r\n", | ||
"\r\n"]; | ||
} | ||
--- config | ||
location /t { | ||
proxy_wasm hostcalls 'test=/t/dispatch_http_call \ | ||
host=unix:$TEST_NGINX_UNIX_SOCKET \ | ||
on_http_call_response=echo_response_headers'; | ||
return 204; | ||
} | ||
--- ignore_response | ||
--- grep_error_log eval: qr/(wasm tcp socket|recv:).*/ | ||
--- grep_error_log_out eval | ||
qr/wasm tcp socket connected to "unix:$ENV{TEST_NGINX_UNIX_SOCKET}:0" | ||
wasm tcp socket sent all the data | ||
wasm tcp socket handler.* | ||
wasm tcp socket resuming | ||
wasm tcp socket handler.* | ||
wasm tcp socket receive handler for "unix:$ENV{TEST_NGINX_UNIX_SOCKET}:0" | ||
wasm tcp socket resuming | ||
wasm tcp socket trying to receive data.* | ||
recv: eof:1, avail:-1 | ||
recv: fd:\d+ 0 of 1024 | ||
wasm tcp socket eof | ||
wasm tcp socket no bytes to parse | ||
wasm tcp socket reading done | ||
wasm tcp socket closing/ | ||
--- no_error_log | ||
[error] | ||
[crit] | ||
[stub] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters