@@ -4,7 +4,7 @@ use Test::Nginx::Socket::Lua::Stream;
44
55repeat_each(2 );
66
7- plan tests => repeat_each() * (blocks() * 3 + 1 );
7+ plan tests => repeat_each() * (blocks() * 3 + 1 ) + 16 ;
88
99our $ HtmlDir = html_dir;
1010
@@ -823,3 +823,180 @@ done
823823--- grep_error_log_out
824824stream lua finalize socket
825825GC cycle done
826+
827+
828+
829+ === TEST 13: sanity of raw req socket receive any
830+ --- stream_server_config
831+
832+ content_by_lua_block {
833+ local sock, err = ngx.req.socket(true)
834+ if not sock then
835+ ngx.log(ngx.ERR, "server: failed to get raw req socket: ", err)
836+ return
837+ end
838+ ngx.log(ngx.INFO, "Got raw req socket")
839+ local data, err = sock:receiveany(500)
840+ if not data then
841+ ngx.log(ngx.ERR, "server: failed to receive: ", err)
842+ return
843+ end
844+ ngx.log(ngx.INFO, "Got: ", #data, " bytes")
845+
846+ local bytes, err = sock:send("1: received: " .. data .. "\n")
847+ if not bytes then
848+ ngx.log(ngx.ERR, "server: failed to send: ", err)
849+ return
850+ end
851+ }
852+
853+ --- stream_request: hello
854+ --- stream_response
855+ 1: received: hello
856+ --- no_error_log
857+ stream lua socket tcp_nodelay
858+ [error]
859+ --- error_log
860+ Got raw req socket
861+ Got: 5 bytes
862+
863+
864+
865+ === TEST 14: receiveany small block size for a big size block
866+ --- stream_server_config
867+ content_by_lua_block {
868+ local sock, err = ngx.req.socket(true)
869+ if not sock then
870+ ngx.log(ngx.ERR, "server: failed to get raw req socket: ", err)
871+ return
872+ end
873+ sock:settimeouts(500, 100, 500)
874+ ngx.sleep(0.2)
875+ ngx.log(ngx.INFO, ' receiveany every 3 bytes per read ... ')
876+ local i = 0
877+ while true do
878+ i = i + 1
879+ ngx.log(ngx.INFO, ' reading: ', i)
880+ local data, err = sock:receiveany(3)
881+ if not data then
882+ if err == ' closed' then
883+ ngx.log(ngx.INFO, ' client closed')
884+ break
885+ end
886+ if err == ' timeout' then
887+ ngx.log(ngx.INFO, ' client timeout, considered as closed')
888+ break
889+ end
890+ ngx.log(ngx.ERR, ' server receiveany error: ', err)
891+ break
892+ end
893+ if i == 1 then
894+ ngx.log(ngx.INFO, ' send back ok ... ')
895+ local ok, err = sock:send("ok\n")
896+ if not ok then
897+ ngx.log(ngx.ERR, "failed to send: ", err)
898+ return
899+ end
900+ end
901+ ngx.log(ngx.INFO, "Time ", i, " - got ", #data, " bytes: ", data)
902+ sock:send("receive: " .. data .. "\n")
903+ end
904+ }
905+
906+ --- stream_request: hello, stream receiveany!
907+ --- stream_response
908+ ok
909+ receive: hel
910+ receive: lo,
911+ receive: st
912+ receive: rea
913+ receive: m r
914+ receive: ece
915+ receive: ive
916+ receive: any
917+ receive: !
918+ --- no_error_log
919+ receiveany error:
920+ --- error_log
921+ read timed out
922+ client timeout
923+
924+
925+
926+ === TEST 15: receiveany with limited, max <= 0
927+ --- stream_server_config
928+ content_by_lua_block {
929+ local sock, err = ngx.req.socket(true)
930+ if sock == nil then
931+ ngx.log(ngx.ERR, ' raw req socket error: ', err)
932+ return
933+ end
934+ sock:settimeouts(500, 500, 500)
935+
936+ local function receiveany_log_err(...)
937+ local ok, err = pcall(sock.receiveany, sock, ...)
938+ if not ok then
939+ ngx.log(ngx.ERR, ' failed receiveany ', err)
940+ end
941+ end
942+
943+
944+ receiveany_log_err(0)
945+ receiveany_log_err(-1)
946+ receiveany_log_err(100, 200)
947+ receiveany_log_err()
948+ receiveany_log_err(nil)
949+ }
950+ --- error_log
951+ bad argument #2 to ' ? ' (bad max argument)
952+ bad argument #2 to ' ? ' (bad max argument)
953+ expecting 2 arguments (including the object), but got 3
954+ expecting 2 arguments (including the object), but got 1
955+ bad argument #2 to ' ? ' (bad max argument)
956+
957+
958+
959+ === TEST 16: receiveany send data after read side timeout
960+ --- stream_server_config
961+ content_by_lua_block {
962+ local sock, err = ngx.req.socket(true)
963+ if sock == nil then
964+ ngx.log(ngx.ERR, ' failed to get raw req socket', err)
965+ return
966+ end
967+ sock:settimeouts(500, 500, 500)
968+
969+ local data, err, bytes
970+ while true do
971+ data, err = sock:receiveany(1024)
972+ if err then
973+ if err ~= ' closed' then
974+ ngx.log(ngx.ERR, ' receiveany unexpected err: ', err)
975+ break
976+ end
977+
978+ data = "send data after read side closed"
979+ bytes, err = sock:send(data)
980+ if not bytes then
981+ ngx.log(ngx.ERR, ' failed to send after error ',err)
982+ end
983+
984+ break
985+ end
986+ ngx.say(data)
987+ end
988+
989+ local bytes, err2 = sock:send("send data after read side ")
990+ if not bytes then
991+ ngx.log(ngx.ERR, "failed to send: ", err2)
992+ end
993+
994+ local bytes, err2 = sock:send(err)
995+ if not bytes then
996+ ngx.log(ngx.ERR, "failed to send: ", err2)
997+ end
998+ }
999+ --- stream_response chomp
1000+ send data after read side timeout
1001+ --- error_log
1002+ receiveany unexpected err: timeout
0 commit comments