1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
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';
}
use Test::Nginx::Socket::Lua::Stream;
repeat_each(2);
plan tests => repeat_each() * (blocks() * 4);
add_block_preprocessor(sub {
my $block = shift;
if (!defined $block->error_log) {
$block->set_value("no_error_log", "[error]");
}
});
log_level("debug");
no_long_string();
#no_diff();
run_tests();
__DATA__
=== TEST 1: receiveany returns anything once socket receives
--- config
location = /foo {
server_tokens off;
content_by_lua_block {
local resp = {
'1',
'hello',
}
local length = 0
for _, v in ipairs(resp) do
length = length + #v
end
-- flush http header
ngx.header['Content-Length'] = length
ngx.flush(true)
ngx.sleep(0.01)
-- send http body bytes by bytes
for _, v in ipairs(resp) do
ngx.print(v)
ngx.flush(true)
ngx.sleep(0.01)
end
}
}
--- stream_server_config
content_by_lua_block {
local sock = ngx.socket.tcp()
sock:settimeout(500)
assert(sock:connect("127.0.0.1", $TEST_NGINX_SERVER_PORT))
local req = {
'GET /foo HTTP/1.0\r\n',
'Host: localhost\r\n',
'Connection: close\r\n\r\n',
}
local ok, err = sock:send(req)
if not ok then
ngx.say("send request failed: ", err)
return
end
-- skip http header
while true do
local data, err, _ = sock:receive('*l')
if err then
ngx.say('unexpected error occurs when receiving http head: ' .. err)
return
end
if #data == 0 then -- read last line of head
break
end
end
-- receive http body
while true do
local data, err = sock:receiveany(1024)
if err then
if err ~= 'closed' then
ngx.say('unexpected err: ', err)
end
break
end
ngx.say(data)
end
sock:close()
}
--- stream_response
1
h
e
l
l
o
--- grep_error_log eval
qr/lua tcp socket read any/
--- grep_error_log_out
lua tcp socket read any
lua tcp socket read any
lua tcp socket read any
lua tcp socket read any
lua tcp socket read any
lua tcp socket read any
lua tcp socket read any
|