@@ -4,7 +4,7 @@ use Test::Nginx::Socket::Lua::Stream;
4
4
5
5
repeat_each(2 );
6
6
7
- plan tests => repeat_each() * (blocks() * 3 + 1 );
7
+ plan tests => repeat_each() * (blocks() * 3 + 1 ) + 16 ;
8
8
9
9
our $ HtmlDir = html_dir;
10
10
@@ -823,3 +823,180 @@ done
823
823
--- grep_error_log_out
824
824
stream lua finalize socket
825
825
GC 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