1
# vim:set ft= ts=4 sw=4 et fdm=marker:
4
use Test::Nginx::Socket;
8
plan tests => repeat_each() * (blocks() * 5 + 10);
10
our $HtmlDir = html_dir;
12
$ENV{TEST_NGINX_CLIENT_PORT} ||= server_port();
13
$ENV{TEST_NGINX_MEMCACHED_PORT} ||= 11211;
14
#$ENV{TEST_NGINX_REDIS_PORT} ||= 6379;
17
'/usr/local/openresty-debug/lualib/?.lua;/usr/local/openresty/lualib/?.lua;;';
29
"lua_package_path '$::HtmlDir/?.lua;./?.lua';"
32
set $port $TEST_NGINX_MEMCACHED_PORT;
34
local test = require "test"
35
local port = ngx.var.port
42
module("test", package.seeall)
45
local sock = ngx.socket.tcp()
46
local ok, err = sock:connect("127.0.0.1", port)
48
ngx.say("failed to connect: ", err)
52
ngx.say("connected: ", ok, ", reused: ", sock:getreusedtimes())
54
local req = "flush_all\r\n"
56
local bytes, err = sock:send(req)
58
ngx.say("failed to send request: ", err)
61
ngx.say("request sent: ", bytes)
63
local line, err, part = sock:receive()
65
ngx.say("received: ", line)
68
ngx.say("failed to receive a line: ", err, " [", part, "]")
71
local ok, err = sock:setkeepalive()
73
ngx.say("failed to set reusable: ", err)
78
--- response_body_like
79
^connected: 1, reused: \d+
82
connected: 1, reused: [1-9]\d*
87
"lua socket keepalive: free connection pool for "]
89
qq{lua socket get keepalive peer: using connection
90
lua socket keepalive create connection pool for key "127.0.0.1:$ENV{TEST_NGINX_MEMCACHED_PORT}"
95
=== TEST 2: free up the whole connection pool if no active connections
97
"lua_package_path '$::HtmlDir/?.lua;./?.lua';"
100
set $port $TEST_NGINX_MEMCACHED_PORT;
102
local test = require "test"
103
local port = ngx.var.port
112
module("test", package.seeall)
114
function go(port, keepalive)
115
local sock = ngx.socket.tcp()
116
local ok, err = sock:connect("127.0.0.1", port)
118
ngx.say("failed to connect: ", err)
122
ngx.say("connected: ", ok, ", reused: ", sock:getreusedtimes())
124
local req = "flush_all\r\n"
126
local bytes, err = sock:send(req)
128
ngx.say("failed to send request: ", err)
131
ngx.say("request sent: ", bytes)
133
local line, err, part = sock:receive()
135
ngx.say("received: ", line)
138
ngx.say("failed to receive a line: ", err, " [", part, "]")
142
local ok, err = sock:setkeepalive()
144
ngx.say("failed to set reusable: ", err)
151
--- response_body_like
152
^connected: 1, reused: \d+
155
connected: 1, reused: [1-9]\d*
161
["lua socket get keepalive peer: using connection",
162
"lua socket keepalive: free connection pool for "]
166
=== TEST 3: upstream sockets close prematurely
168
"lua_package_path '$::HtmlDir/?.lua;./?.lua';"
171
keepalive_timeout 100ms;
173
set $port $TEST_NGINX_CLIENT_PORT;
175
local port = ngx.var.port
177
local sock = ngx.socket.tcp()
179
local ok, err = sock:connect("127.0.0.1", port)
181
ngx.say("failed to connect: ", err)
185
ngx.say("connected: ", ok)
187
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
189
local bytes, err = sock:send(req)
191
ngx.say("failed to send request: ", err)
195
ngx.say("request sent: ", bytes)
197
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
198
local data, err = reader()
201
ngx.say("failed to receive response body: ", err)
205
ngx.say("received response of ", #data, " bytes")
207
local ok, err = sock:setkeepalive()
209
ngx.say("failed to set reusable: ", err)
212
ngx.location.capture("/sleep")
230
received response of 156 bytes
235
["lua socket keepalive close handler",
236
"lua socket keepalive: free connection pool for "]
241
=== TEST 4: http keepalive
243
"lua_package_path '$::HtmlDir/?.lua;./?.lua';"
247
keepalive_timeout 60s;
249
set $port $TEST_NGINX_CLIENT_PORT;
251
local port = ngx.var.port
253
local sock = ngx.socket.tcp()
255
local ok, err = sock:connect("127.0.0.1", port)
257
ngx.say("failed to connect: ", err)
261
ngx.say("connected: ", ok)
263
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
265
local bytes, err = sock:send(req)
267
ngx.say("failed to send request: ", err)
271
ngx.say("request sent: ", bytes)
273
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
274
local data, err = reader()
277
ngx.say("failed to receive response body: ", err)
281
ngx.say("received response of ", #data, " bytes")
283
local ok, err = sock:setkeepalive()
285
ngx.say("failed to set reusable: ", err)
288
ngx.location.capture("/sleep")
306
received response of 156 bytes
308
--- no_error_log eval
310
"lua socket keepalive close handler: fd:",
311
"lua socket keepalive: free connection pool for "]
316
=== TEST 5: lua_socket_keepalive_timeout
320
keepalive_timeout 60s;
321
lua_socket_keepalive_timeout 100ms;
323
set $port $TEST_NGINX_CLIENT_PORT;
325
local port = ngx.var.port
327
local sock = ngx.socket.tcp()
329
local ok, err = sock:connect("127.0.0.1", port)
331
ngx.say("failed to connect: ", err)
335
ngx.say("connected: ", ok)
337
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
339
local bytes, err = sock:send(req)
341
ngx.say("failed to send request: ", err)
345
ngx.say("request sent: ", bytes)
347
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
348
local data, res = reader()
351
ngx.say("failed to receive response body: ", err)
355
ngx.say("received response of ", #data, " bytes")
357
local ok, err = sock:setkeepalive()
359
ngx.say("failed to set reusable: ", err)
362
ngx.location.capture("/sleep")
380
received response of 156 bytes
385
["lua socket keepalive close handler",
386
"lua socket keepalive: free connection pool for ",
387
"lua socket keepalive timeout: 100 ms",
388
qr/lua socket connection pool size: 30\b/]
393
=== TEST 6: lua_socket_pool_size
397
keepalive_timeout 60s;
398
lua_socket_keepalive_timeout 100ms;
399
lua_socket_pool_size 1;
401
set $port $TEST_NGINX_CLIENT_PORT;
403
local port = ngx.var.port
405
local sock = ngx.socket.tcp()
407
local ok, err = sock:connect("127.0.0.1", port)
409
ngx.say("failed to connect: ", err)
413
ngx.say("connected: ", ok)
415
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
417
local bytes, err = sock:send(req)
419
ngx.say("failed to send request: ", err)
423
ngx.say("request sent: ", bytes)
425
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
426
local data, res = reader()
429
ngx.say("failed to receive response body: ", err)
433
ngx.say("received response of ", #data, " bytes")
435
local ok, err = sock:setkeepalive()
437
ngx.say("failed to set reusable: ", err)
440
ngx.location.capture("/sleep")
458
received response of 156 bytes
463
["lua socket keepalive close handler",
464
"lua socket keepalive: free connection pool for ",
465
"lua socket keepalive timeout: 100 ms",
466
qr/lua socket connection pool size: 1\b/]
471
=== TEST 7: "lua_socket_keepalive_timeout 0" means unlimited
475
keepalive_timeout 60s;
476
lua_socket_keepalive_timeout 0;
478
set $port $TEST_NGINX_CLIENT_PORT;
480
local port = ngx.var.port
482
local sock = ngx.socket.tcp()
484
local ok, err = sock:connect("127.0.0.1", port)
486
ngx.say("failed to connect: ", err)
490
ngx.say("connected: ", ok)
492
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
494
local bytes, err = sock:send(req)
496
ngx.say("failed to send request: ", err)
500
ngx.say("request sent: ", bytes)
502
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
503
local data, res = reader()
506
ngx.say("failed to receive response body: ", err)
510
ngx.say("received response of ", #data, " bytes")
512
local ok, err = sock:setkeepalive()
514
ngx.say("failed to set reusable: ", err)
517
ngx.location.capture("/sleep")
535
received response of 156 bytes
540
["lua socket keepalive timeout: unlimited",
541
qr/lua socket connection pool size: 30\b/]
546
=== TEST 8: setkeepalive(timeout) overrides lua_socket_keepalive_timeout
550
keepalive_timeout 60s;
551
lua_socket_keepalive_timeout 60s;
553
set $port $TEST_NGINX_CLIENT_PORT;
555
local port = ngx.var.port
557
local sock = ngx.socket.tcp()
559
local ok, err = sock:connect("127.0.0.1", port)
561
ngx.say("failed to connect: ", err)
565
ngx.say("connected: ", ok)
567
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
569
local bytes, err = sock:send(req)
571
ngx.say("failed to send request: ", err)
575
ngx.say("request sent: ", bytes)
577
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
578
local data, res = reader()
581
ngx.say("failed to receive response body: ", err)
585
ngx.say("received response of ", #data, " bytes")
587
local ok, err = sock:setkeepalive(123)
589
ngx.say("failed to set reusable: ", err)
592
ngx.location.capture("/sleep")
610
received response of 156 bytes
615
["lua socket keepalive close handler",
616
"lua socket keepalive: free connection pool for ",
617
"lua socket keepalive timeout: 123 ms",
618
qr/lua socket connection pool size: 30\b/]
623
=== TEST 9: sock:setkeepalive(timeout, size) overrides lua_socket_pool_size
627
keepalive_timeout 60s;
628
lua_socket_keepalive_timeout 100ms;
629
lua_socket_pool_size 100;
631
set $port $TEST_NGINX_CLIENT_PORT;
633
local port = ngx.var.port
635
local sock = ngx.socket.tcp()
637
local ok, err = sock:connect("127.0.0.1", port)
639
ngx.say("failed to connect: ", err)
643
ngx.say("connected: ", ok)
645
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
647
local bytes, err = sock:send(req)
649
ngx.say("failed to send request: ", err)
653
ngx.say("request sent: ", bytes)
655
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
656
local data, res = reader()
659
ngx.say("failed to receive response body: ", err)
663
ngx.say("received response of ", #data, " bytes")
665
local ok, err = sock:setkeepalive(101, 25)
667
ngx.say("failed to set reusable: ", err)
670
ngx.location.capture("/sleep")
688
received response of 156 bytes
693
["lua socket keepalive close handler",
694
"lua socket keepalive: free connection pool for ",
695
"lua socket keepalive timeout: 101 ms",
696
qr/lua socket connection pool size: 25\b/]
701
=== TEST 10: sock:keepalive_timeout(0) means unlimited
705
keepalive_timeout 60s;
706
lua_socket_keepalive_timeout 1000ms;
708
set $port $TEST_NGINX_CLIENT_PORT;
710
local port = ngx.var.port
712
local sock = ngx.socket.tcp()
714
local ok, err = sock:connect("127.0.0.1", port)
716
ngx.say("failed to connect: ", err)
720
ngx.say("connected: ", ok)
722
local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
724
local bytes, err = sock:send(req)
726
ngx.say("failed to send request: ", err)
730
ngx.say("request sent: ", bytes)
732
local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
733
local data, res = reader()
736
ngx.say("failed to receive response body: ", err)
740
ngx.say("received response of ", #data, " bytes")
742
local ok, err = sock:setkeepalive(0)
744
ngx.say("failed to set reusable: ", err)
747
ngx.location.capture("/sleep")
765
received response of 156 bytes
770
["lua socket keepalive timeout: unlimited",
771
qr/lua socket connection pool size: 30\b/]
776
=== TEST 11: sanity (uds)
779
lua_package_path '$::HtmlDir/?.lua;./?.lua';
781
listen unix:/tmp/test-nginx.sock;
782
default_type 'text/plain';
787
more_clear_headers Date;
793
set $port $TEST_NGINX_MEMCACHED_PORT;
795
local test = require "test"
796
local port = ngx.var.port
805
module("test", package.seeall)
808
local sock = ngx.socket.tcp()
809
local ok, err = sock:connect("unix:/tmp/test-nginx.sock")
811
ngx.say("failed to connect: ", err)
815
ngx.say("connected: ", ok, ", reused: ", sock:getreusedtimes())
817
local req = "GET /foo HTTP/1.1\r\nHost: localhost\r\nConnection: keepalive\r\n\r\n"
819
local bytes, err = sock:send(req)
821
ngx.say("failed to send request: ", err)
824
ngx.say("request sent: ", bytes)
826
local reader = sock:receiveuntil("\r\n0\r\n\r\n")
827
local data, err = reader()
830
ngx.say("failed to receive response body: ", err)
834
ngx.say("received response of ", #data, " bytes")
836
local ok, err = sock:setkeepalive()
838
ngx.say("failed to set reusable: ", err)
841
--- response_body_like
842
^connected: 1, reused: \d+
844
received response of 119 bytes
845
connected: 1, reused: [1-9]\d*
847
received response of 119 bytes
848
--- no_error_log eval
850
"lua socket keepalive: free connection pool for "]
852
["lua socket get keepalive peer: using connection",
853
'lua socket keepalive create connection pool for key "unix:/tmp/test-nginx.sock"']
857
=== TEST 12: github issue #108: ngx.locaiton.capture + redis.set_keepalive
860
lua_package_path "$::HtmlDir/?.lua;;";
864
default_type text/html;
865
set $port $TEST_NGINX_MEMCACHED_PORT;
867
lua_need_request_body on;
868
content_by_lua_file html/t.lua;
873
proxy_pass http://127.0.0.1:$server_port/dummy;
881
local sock, err = ngx.socket.connect("127.0.0.1", ngx.var.port)
882
if not sock then ngx.say(err) return end
883
sock:send("flush_all\r\n")
887
sock, err = ngx.socket.connect("127.0.0.1", ngx.var.port)
888
if not sock then ngx.say(err) return end
889
local res = ngx.location.capture("/anyurl") --3
897
lua socket get keepalive peer: using connection