1
# vim:set ft= ts=4 sw=4 et fdm=marker:
4
use Test::Nginx::Socket;
8
plan tests => repeat_each() * (blocks() * 3);
10
our $HtmlDir = html_dir;
12
$ENV{TEST_NGINX_CLIENT_PORT} ||= server_port();
13
$ENV{TEST_NGINX_MEMCACHED_PORT} ||= 11211;
23
=== TEST 1: read events come when socket is idle
27
set $port $TEST_NGINX_CLIENT_PORT;
30
local sock = ngx.socket.tcp()
31
local port = ngx.var.port
33
local ok, err = sock:connect("127.0.0.1", port)
35
ngx.say("failed to connect: ", err)
39
ngx.say("connected: ", ok)
41
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n"
43
local bytes, err = sock:send(req)
45
ngx.say("failed to send request: ", err)
48
ngx.say("request sent: ", bytes)
50
local reader = sock:receiveuntil("foofoo\\r\\n")
51
local line, err, part = reader()
53
ngx.print("read: ", line)
56
ngx.say("failed to read a line: ", err, " [", part, "]")
59
ngx.location.capture("/sleep")
61
local data, err, part = sock:receive("*a")
63
ngx.say("failed to read the 2nd part: ", err)
65
ngx.say("2nd part: [", data, "]")
68
ok, err = sock:close()
69
ngx.say("close: ", ok, " ", err)
75
more_clear_headers Date;
83
more_clear_headers Date;
87
--- response_body eval
90
read: HTTP/1.1 200 OK\r
92
Content-Type: text/plain\r
93
Transfer-Encoding: chunked\r
109
=== TEST 2: read timer cleared in time
114
set $port $TEST_NGINX_MEMCACHED_PORT;
117
local sock = ngx.socket.tcp()
118
local port = ngx.var.port
122
local ok, err = sock:connect("127.0.0.1", port)
124
ngx.say("failed to connect: ", err)
128
ngx.say("connected: ", ok)
130
local req = "flush_all\\r\\n"
132
local bytes, err = sock:send(req)
134
ngx.say("failed to send request: ", err)
137
ngx.say("request sent: ", bytes)
139
local line, err, part = sock:receive()
141
ngx.say("received: ", line)
144
ngx.say("failed to receive a line: ", err, " [", part, "]")
147
ngx.location.capture("/sleep")
149
local bytes, err = sock:send(req)
151
ngx.say("failed to send request: ", err)
154
ngx.say("request sent again: ", bytes)
156
ok, err = sock:close()
157
ngx.say("close: ", ok, " ", err)
167
more_clear_headers Date;
175
request sent again: 11
182
=== TEST 3: connect timer cleared in time
187
set $port $TEST_NGINX_MEMCACHED_PORT;
190
local sock = ngx.socket.tcp()
191
local port = ngx.var.port
195
local ok, err = sock:connect("127.0.0.1", port)
197
ngx.say("failed to connect: ", err)
201
ngx.say("connected: ", ok)
203
ngx.location.capture("/sleep")
205
local req = "flush_all\\r\\n"
206
local bytes, err = sock:send(req)
208
ngx.say("failed to send request: ", err)
211
ngx.say("request sent: ", bytes)
213
ok, err = sock:close()
214
ngx.say("close: ", ok, " ", err)
224
more_clear_headers Date;
237
=== TEST 4: send timer cleared in time
242
set $port $TEST_NGINX_MEMCACHED_PORT;
245
local sock = ngx.socket.tcp()
246
local port = ngx.var.port
250
local ok, err = sock:connect("127.0.0.1", port)
252
ngx.say("failed to connect: ", err)
256
ngx.say("connected: ", ok)
258
local req = "flush_all\\r\\n"
260
local bytes, err = sock:send(req)
262
ngx.say("failed to send request: ", err)
265
ngx.say("request sent: ", bytes)
267
ngx.location.capture("/sleep")
269
local line, err, part = sock:receive()
271
ngx.say("received: ", line)
274
ngx.say("failed to receive a line: ", err, " [", part, "]")
278
ok, err = sock:close()
279
ngx.say("close: ", ok, " ", err)
289
more_clear_headers Date;
303
=== TEST 5: set keepalive when system socket recv buffer has unread data
307
set $port $TEST_NGINX_CLIENT_PORT;
310
local sock = ngx.socket.tcp()
311
local port = ngx.var.port
313
local ok, err = sock:connect("127.0.0.1", port)
315
ngx.say("failed to connect: ", err)
319
ngx.say("connected: ", ok)
321
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n"
323
local bytes, err = sock:send(req)
325
ngx.say("failed to send request: ", err)
328
ngx.say("request sent: ", bytes)
330
local reader = sock:receiveuntil("foofoo\\r\\n")
331
local line, err, part = reader()
333
ngx.print("read: ", line)
336
ngx.say("failed to read a line: ", err, " [", part, "]")
339
ngx.location.capture("/sleep")
341
local ok, err = sock:setkeepalive()
343
ngx.say("failed to set keepalive: ", err)
350
more_clear_headers Date;
358
more_clear_headers Date;
362
--- response_body eval
365
read: HTTP/1.1 200 OK\r
367
Content-Type: text/plain\r
368
Transfer-Encoding: chunked\r
372
failed to set keepalive: connection in dubious state
379
=== TEST 6: set keepalive when cosocket recv buffer has unread data
383
set $port $TEST_NGINX_MEMCACHED_PORT;
386
local sock = ngx.socket.tcp()
387
local port = ngx.var.port
389
local ok, err = sock:connect("127.0.0.1", port)
391
ngx.say("failed to connect: ", err)
395
ngx.say("connected: ", ok)
397
local req = "flush_all\\r\\n"
399
local bytes, err = sock:send(req)
401
ngx.say("failed to send request: ", err)
405
ngx.say("request sent: ", bytes)
407
local data, err = sock:receive(1)
409
ngx.say("failed to read the 1st byte: ", err)
413
ngx.say("read: ", data)
415
local ok, err = sock:setkeepalive()
417
ngx.say("failed to set keepalive: ", err)
424
more_clear_headers Date;
428
--- response_body eval
432
failed to set keepalive: unread data in buffer