| # vim:set ft= ts=4 sw=4 et fdm=marker: |
| |
| BEGIN { |
| if (!defined $ENV{LD_PRELOAD}) { |
| $ENV{LD_PRELOAD} = ''; |
| } |
| |
| if ($ENV{LD_PRELOAD} !~ /\bmockeagain\.so\b/) { |
| $ENV{LD_PRELOAD} = "mockeagain.so $ENV{LD_PRELOAD}"; |
| } |
| |
| if ($ENV{MOCKEAGAIN} eq 'r') { |
| $ENV{MOCKEAGAIN} = 'rw'; |
| |
| } else { |
| $ENV{MOCKEAGAIN} = 'w'; |
| } |
| |
| $ENV{TEST_NGINX_EVENT_TYPE} = 'poll'; |
| $ENV{MOCKEAGAIN_WRITE_TIMEOUT_PATTERN} = 'hello, world'; |
| $ENV{TEST_NGINX_POSTPONE_OUTPUT} = 1; |
| } |
| |
| use lib 'lib'; |
| use Test::Nginx::Socket::Lua; |
| use t::StapThread; |
| |
| our $GCScript = $t::StapThread::GCScript; |
| our $StapScript = $t::StapThread::StapScript; |
| |
| #worker_connections(1014); |
| #master_on(); |
| #workers(2); |
| #log_level('warn'); |
| |
| repeat_each(2); |
| |
| plan tests => repeat_each() * (blocks() * 3); |
| |
| #no_diff(); |
| no_long_string(); |
| run_tests(); |
| |
| __DATA__ |
| |
| === TEST 1: pending response header data |
| --- config |
| server_tokens off; |
| postpone_output 1; |
| location = /t { |
| content_by_lua ' |
| ngx.send_headers() |
| ngx.req.read_body() |
| local sock, err = ngx.req.socket(true) |
| if not sock then |
| ngx.log(ngx.ERR, "server: failed to get raw req socket: ", err) |
| return |
| end |
| '; |
| } |
| |
| --- raw_request eval |
| "GET /t HTTP/1.1\r |
| Host: localhost\r |
| Upgrade: mysocket\r |
| Connection: close\r |
| \r |
| " |
| --- stap2 |
| F(ngx_http_header_filter) { |
| println("header filter") |
| } |
| F(ngx_http_lua_req_socket) { |
| println("lua req socket") |
| } |
| --- response_body |
| --- error_log |
| server: failed to get raw req socket: pending data to write |
| |
| |
| |
| === TEST 2: send timeout |
| --- config |
| server_tokens off; |
| postpone_output 1; |
| location = /t { |
| content_by_lua ' |
| ngx.send_headers() |
| ngx.req.read_body() |
| ngx.flush(true) |
| local sock, err = ngx.req.socket(true) |
| if not sock then |
| ngx.log(ngx.ERR, "server: failed to get raw req socket: ", err) |
| return |
| end |
| sock:settimeout(100) |
| local ok, err = sock:send("hello, world!") |
| if not ok then |
| ngx.log(ngx.ERR, "server: failed to send: ", err) |
| end |
| ngx.exit(444) |
| '; |
| } |
| |
| --- raw_request eval |
| "GET /t HTTP/1.1\r |
| Host: localhost\r |
| Upgrade: mysocket\r |
| Connection: close\r |
| \r |
| " |
| --- ignore_response |
| --- error_log |
| lua tcp socket write timed out |
| server: failed to send: timeout |
| --- no_error_log |
| [alert] |
| |