PageRenderTime 52ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/t/023-rewrite/socket-keepalive.t

https://github.com/npk/lua-nginx-module
Unknown | 987 lines | 776 code | 211 blank | 0 comment | 0 complexity | 3a404be1b7e8d9d98b073f5c6c080436 MD5 | raw file
  1. # vim:set ft= ts=4 sw=4 et fdm=marker:
  2. use lib 'lib';
  3. use Test::Nginx::Socket;
  4. repeat_each(2);
  5. plan tests => repeat_each() * (blocks() * 5 + 8);
  6. our $HtmlDir = html_dir;
  7. $ENV{TEST_NGINX_CLIENT_PORT} ||= server_port();
  8. $ENV{TEST_NGINX_MEMCACHED_PORT} ||= 11211;
  9. $ENV{TEST_NGINX_HTML_DIR} = $HtmlDir;
  10. #$ENV{TEST_NGINX_REDIS_PORT} ||= 6379;
  11. $ENV{LUA_PATH} ||=
  12. '/usr/local/openresty-debug/lualib/?.lua;/usr/local/openresty/lualib/?.lua;;';
  13. no_long_string();
  14. #no_diff();
  15. #log_level 'warn';
  16. no_shuffle();
  17. run_tests();
  18. __DATA__
  19. === TEST 1: sanity
  20. --- http_config eval
  21. "lua_package_path '$::HtmlDir/?.lua;./?.lua';"
  22. --- config
  23. location /t {
  24. set $port $TEST_NGINX_MEMCACHED_PORT;
  25. rewrite_by_lua '
  26. local test = require "test"
  27. local port = ngx.var.port
  28. test.go(port)
  29. test.go(port)
  30. ';
  31. content_by_lua return;
  32. }
  33. --- user_files
  34. >>> test.lua
  35. module("test", package.seeall)
  36. function go(port)
  37. local sock = ngx.socket.tcp()
  38. local ok, err = sock:connect("127.0.0.1", port)
  39. if not ok then
  40. ngx.say("failed to connect: ", err)
  41. return
  42. end
  43. ngx.say("connected: ", ok, ", reused: ", sock:getreusedtimes())
  44. local req = "flush_all\r\n"
  45. local bytes, err = sock:send(req)
  46. if not bytes then
  47. ngx.say("failed to send request: ", err)
  48. return
  49. end
  50. ngx.say("request sent: ", bytes)
  51. local line, err, part = sock:receive()
  52. if line then
  53. ngx.say("received: ", line)
  54. else
  55. ngx.say("failed to receive a line: ", err, " [", part, "]")
  56. end
  57. local ok, err = sock:setkeepalive()
  58. if not ok then
  59. ngx.say("failed to set reusable: ", err)
  60. end
  61. end
  62. --- request
  63. GET /t
  64. --- response_body_like
  65. ^connected: 1, reused: \d+
  66. request sent: 11
  67. received: OK
  68. connected: 1, reused: [1-9]\d*
  69. request sent: 11
  70. received: OK
  71. --- no_error_log eval
  72. ["[error]",
  73. "lua socket keepalive: free connection pool for "]
  74. --- error_log eval
  75. qq{lua socket get keepalive peer: using connection
  76. lua socket keepalive create connection pool for key "127.0.0.1:$ENV{TEST_NGINX_MEMCACHED_PORT}"
  77. }
  78. === TEST 2: free up the whole connection pool if no active connections
  79. --- http_config eval
  80. "lua_package_path '$::HtmlDir/?.lua;./?.lua';"
  81. --- config
  82. location /t {
  83. set $port $TEST_NGINX_MEMCACHED_PORT;
  84. rewrite_by_lua '
  85. local test = require "test"
  86. local port = ngx.var.port
  87. test.go(port, true)
  88. test.go(port, false)
  89. ';
  90. content_by_lua return;
  91. }
  92. --- request
  93. GET /t
  94. --- user_files
  95. >>> test.lua
  96. module("test", package.seeall)
  97. function go(port, keepalive)
  98. local sock = ngx.socket.tcp()
  99. local ok, err = sock:connect("127.0.0.1", port)
  100. if not ok then
  101. ngx.say("failed to connect: ", err)
  102. return
  103. end
  104. ngx.say("connected: ", ok, ", reused: ", sock:getreusedtimes())
  105. local req = "flush_all\r\n"
  106. local bytes, err = sock:send(req)
  107. if not bytes then
  108. ngx.say("failed to send request: ", err)
  109. return
  110. end
  111. ngx.say("request sent: ", bytes)
  112. local line, err, part = sock:receive()
  113. if line then
  114. ngx.say("received: ", line)
  115. else
  116. ngx.say("failed to receive a line: ", err, " [", part, "]")
  117. end
  118. if keepalive then
  119. local ok, err = sock:setkeepalive()
  120. if not ok then
  121. ngx.say("failed to set reusable: ", err)
  122. end
  123. else
  124. sock:close()
  125. end
  126. end
  127. --- response_body_like
  128. ^connected: 1, reused: \d+
  129. request sent: 11
  130. received: OK
  131. connected: 1, reused: [1-9]\d*
  132. request sent: 11
  133. received: OK
  134. --- no_error_log
  135. [error]
  136. --- error_log eval
  137. ["lua socket get keepalive peer: using connection",
  138. "lua socket keepalive: free connection pool for "]
  139. === TEST 3: upstream sockets close prematurely
  140. --- http_config eval
  141. "lua_package_path '$::HtmlDir/?.lua;./?.lua';"
  142. --- config
  143. server_tokens off;
  144. keepalive_timeout 100ms;
  145. location /t {
  146. set $port $TEST_NGINX_CLIENT_PORT;
  147. rewrite_by_lua '
  148. local port = ngx.var.port
  149. local sock = ngx.socket.tcp()
  150. local ok, err = sock:connect("127.0.0.1", port)
  151. if not ok then
  152. ngx.say("failed to connect: ", err)
  153. return
  154. end
  155. ngx.say("connected: ", ok)
  156. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  157. local bytes, err = sock:send(req)
  158. if not bytes then
  159. ngx.say("failed to send request: ", err)
  160. return
  161. end
  162. ngx.say("request sent: ", bytes)
  163. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  164. local data, err = reader()
  165. if not data then
  166. ngx.say("failed to receive response body: ", err)
  167. return
  168. end
  169. ngx.say("received response of ", #data, " bytes")
  170. local ok, err = sock:setkeepalive()
  171. if not ok then
  172. ngx.say("failed to set reusable: ", err)
  173. end
  174. ngx.location.capture("/sleep")
  175. ngx.say("done")
  176. ';
  177. content_by_lua return;
  178. }
  179. location /foo {
  180. echo foo;
  181. }
  182. location /sleep {
  183. echo_sleep 1;
  184. }
  185. --- request
  186. GET /t
  187. --- response_body
  188. connected: 1
  189. request sent: 61
  190. received response of 156 bytes
  191. done
  192. --- no_error_log
  193. [error]
  194. --- error_log eval
  195. ["lua socket keepalive close handler",
  196. "lua socket keepalive: free connection pool for "]
  197. --- timeout: 3
  198. === TEST 4: http keepalive
  199. --- http_config eval
  200. "lua_package_path '$::HtmlDir/?.lua;./?.lua';"
  201. --- config
  202. server_tokens off;
  203. location /t {
  204. keepalive_timeout 60s;
  205. set $port $TEST_NGINX_CLIENT_PORT;
  206. rewrite_by_lua '
  207. local port = ngx.var.port
  208. local sock = ngx.socket.tcp()
  209. local ok, err = sock:connect("127.0.0.1", port)
  210. if not ok then
  211. ngx.say("failed to connect: ", err)
  212. return
  213. end
  214. ngx.say("connected: ", ok)
  215. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  216. local bytes, err = sock:send(req)
  217. if not bytes then
  218. ngx.say("failed to send request: ", err)
  219. return
  220. end
  221. ngx.say("request sent: ", bytes)
  222. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  223. local data, err = reader()
  224. if not data then
  225. ngx.say("failed to receive response body: ", err)
  226. return
  227. end
  228. ngx.say("received response of ", #data, " bytes")
  229. local ok, err = sock:setkeepalive()
  230. if not ok then
  231. ngx.say("failed to set reusable: ", err)
  232. end
  233. ngx.location.capture("/sleep")
  234. ngx.say("done")
  235. ';
  236. content_by_lua return;
  237. }
  238. location /foo {
  239. echo foo;
  240. }
  241. location /sleep {
  242. echo_sleep 1;
  243. }
  244. --- request
  245. GET /t
  246. --- response_body
  247. connected: 1
  248. request sent: 61
  249. received response of 156 bytes
  250. done
  251. --- no_error_log eval
  252. ["[error]",
  253. "lua socket keepalive close handler: fd:",
  254. "lua socket keepalive: free connection pool for "]
  255. --- timeout: 4
  256. === TEST 5: lua_socket_keepalive_timeout
  257. --- config
  258. server_tokens off;
  259. location /t {
  260. keepalive_timeout 60s;
  261. lua_socket_keepalive_timeout 100ms;
  262. set $port $TEST_NGINX_CLIENT_PORT;
  263. rewrite_by_lua '
  264. local port = ngx.var.port
  265. local sock = ngx.socket.tcp()
  266. local ok, err = sock:connect("127.0.0.1", port)
  267. if not ok then
  268. ngx.say("failed to connect: ", err)
  269. return
  270. end
  271. ngx.say("connected: ", ok)
  272. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  273. local bytes, err = sock:send(req)
  274. if not bytes then
  275. ngx.say("failed to send request: ", err)
  276. return
  277. end
  278. ngx.say("request sent: ", bytes)
  279. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  280. local data, res = reader()
  281. if not data then
  282. ngx.say("failed to receive response body: ", err)
  283. return
  284. end
  285. ngx.say("received response of ", #data, " bytes")
  286. local ok, err = sock:setkeepalive()
  287. if not ok then
  288. ngx.say("failed to set reusable: ", err)
  289. end
  290. ngx.location.capture("/sleep")
  291. ngx.say("done")
  292. ';
  293. content_by_lua return;
  294. }
  295. location /foo {
  296. echo foo;
  297. }
  298. location /sleep {
  299. echo_sleep 1;
  300. }
  301. --- request
  302. GET /t
  303. --- response_body
  304. connected: 1
  305. request sent: 61
  306. received response of 156 bytes
  307. done
  308. --- no_error_log
  309. [error]
  310. --- error_log eval
  311. ["lua socket keepalive close handler",
  312. "lua socket keepalive: free connection pool for ",
  313. "lua socket keepalive timeout: 100 ms",
  314. qr/lua socket connection pool size: 30\b/]
  315. --- timeout: 4
  316. === TEST 6: lua_socket_pool_size
  317. --- config
  318. server_tokens off;
  319. location /t {
  320. keepalive_timeout 60s;
  321. lua_socket_keepalive_timeout 100ms;
  322. lua_socket_pool_size 1;
  323. set $port $TEST_NGINX_CLIENT_PORT;
  324. rewrite_by_lua '
  325. local port = ngx.var.port
  326. local sock = ngx.socket.tcp()
  327. local ok, err = sock:connect("127.0.0.1", port)
  328. if not ok then
  329. ngx.say("failed to connect: ", err)
  330. return
  331. end
  332. ngx.say("connected: ", ok)
  333. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  334. local bytes, err = sock:send(req)
  335. if not bytes then
  336. ngx.say("failed to send request: ", err)
  337. return
  338. end
  339. ngx.say("request sent: ", bytes)
  340. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  341. local data, res = reader()
  342. if not data then
  343. ngx.say("failed to receive response body: ", err)
  344. return
  345. end
  346. ngx.say("received response of ", #data, " bytes")
  347. local ok, err = sock:setkeepalive()
  348. if not ok then
  349. ngx.say("failed to set reusable: ", err)
  350. end
  351. ngx.location.capture("/sleep")
  352. ngx.say("done")
  353. ';
  354. content_by_lua return;
  355. }
  356. location /foo {
  357. echo foo;
  358. }
  359. location /sleep {
  360. echo_sleep 1;
  361. }
  362. --- request
  363. GET /t
  364. --- response_body
  365. connected: 1
  366. request sent: 61
  367. received response of 156 bytes
  368. done
  369. --- no_error_log
  370. [error]
  371. --- error_log eval
  372. ["lua socket keepalive close handler",
  373. "lua socket keepalive: free connection pool for ",
  374. "lua socket keepalive timeout: 100 ms",
  375. qr/lua socket connection pool size: 1\b/]
  376. --- timeout: 4
  377. === TEST 7: "lua_socket_keepalive_timeout 0" means unlimited
  378. --- config
  379. server_tokens off;
  380. location /t {
  381. keepalive_timeout 60s;
  382. lua_socket_keepalive_timeout 0;
  383. set $port $TEST_NGINX_CLIENT_PORT;
  384. rewrite_by_lua '
  385. local port = ngx.var.port
  386. local sock = ngx.socket.tcp()
  387. local ok, err = sock:connect("127.0.0.1", port)
  388. if not ok then
  389. ngx.say("failed to connect: ", err)
  390. return
  391. end
  392. ngx.say("connected: ", ok)
  393. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  394. local bytes, err = sock:send(req)
  395. if not bytes then
  396. ngx.say("failed to send request: ", err)
  397. return
  398. end
  399. ngx.say("request sent: ", bytes)
  400. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  401. local data, res = reader()
  402. if not data then
  403. ngx.say("failed to receive response body: ", err)
  404. return
  405. end
  406. ngx.say("received response of ", #data, " bytes")
  407. local ok, err = sock:setkeepalive()
  408. if not ok then
  409. ngx.say("failed to set reusable: ", err)
  410. end
  411. ngx.location.capture("/sleep")
  412. ngx.say("done")
  413. ';
  414. content_by_lua return;
  415. }
  416. location /foo {
  417. echo foo;
  418. }
  419. location /sleep {
  420. echo_sleep 1;
  421. }
  422. --- request
  423. GET /t
  424. --- response_body
  425. connected: 1
  426. request sent: 61
  427. received response of 156 bytes
  428. done
  429. --- no_error_log
  430. [error]
  431. --- error_log eval
  432. ["lua socket keepalive timeout: unlimited",
  433. qr/lua socket connection pool size: 30\b/]
  434. --- timeout: 4
  435. === TEST 8: setkeepalive(timeout) overrides lua_socket_keepalive_timeout
  436. --- config
  437. server_tokens off;
  438. location /t {
  439. keepalive_timeout 60s;
  440. lua_socket_keepalive_timeout 60s;
  441. set $port $TEST_NGINX_CLIENT_PORT;
  442. rewrite_by_lua '
  443. local port = ngx.var.port
  444. local sock = ngx.socket.tcp()
  445. local ok, err = sock:connect("127.0.0.1", port)
  446. if not ok then
  447. ngx.say("failed to connect: ", err)
  448. return
  449. end
  450. ngx.say("connected: ", ok)
  451. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  452. local bytes, err = sock:send(req)
  453. if not bytes then
  454. ngx.say("failed to send request: ", err)
  455. return
  456. end
  457. ngx.say("request sent: ", bytes)
  458. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  459. local data, res = reader()
  460. if not data then
  461. ngx.say("failed to receive response body: ", err)
  462. return
  463. end
  464. ngx.say("received response of ", #data, " bytes")
  465. local ok, err = sock:setkeepalive(123)
  466. if not ok then
  467. ngx.say("failed to set reusable: ", err)
  468. end
  469. ngx.location.capture("/sleep")
  470. ngx.say("done")
  471. ';
  472. content_by_lua return;
  473. }
  474. location /foo {
  475. echo foo;
  476. }
  477. location /sleep {
  478. echo_sleep 1;
  479. }
  480. --- request
  481. GET /t
  482. --- response_body
  483. connected: 1
  484. request sent: 61
  485. received response of 156 bytes
  486. done
  487. --- no_error_log
  488. [error]
  489. --- error_log eval
  490. ["lua socket keepalive close handler",
  491. "lua socket keepalive: free connection pool for ",
  492. "lua socket keepalive timeout: 123 ms",
  493. qr/lua socket connection pool size: 30\b/]
  494. --- timeout: 4
  495. === TEST 9: sock:setkeepalive(timeout, size) overrides lua_socket_pool_size
  496. --- config
  497. server_tokens off;
  498. location /t {
  499. keepalive_timeout 60s;
  500. lua_socket_keepalive_timeout 100ms;
  501. lua_socket_pool_size 100;
  502. set $port $TEST_NGINX_CLIENT_PORT;
  503. rewrite_by_lua '
  504. local port = ngx.var.port
  505. local sock = ngx.socket.tcp()
  506. local ok, err = sock:connect("127.0.0.1", port)
  507. if not ok then
  508. ngx.say("failed to connect: ", err)
  509. return
  510. end
  511. ngx.say("connected: ", ok)
  512. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  513. local bytes, err = sock:send(req)
  514. if not bytes then
  515. ngx.say("failed to send request: ", err)
  516. return
  517. end
  518. ngx.say("request sent: ", bytes)
  519. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  520. local data, res = reader()
  521. if not data then
  522. ngx.say("failed to receive response body: ", err)
  523. return
  524. end
  525. ngx.say("received response of ", #data, " bytes")
  526. local ok, err = sock:setkeepalive(101, 25)
  527. if not ok then
  528. ngx.say("failed to set reusable: ", err)
  529. end
  530. ngx.location.capture("/sleep")
  531. ngx.say("done")
  532. ';
  533. content_by_lua return;
  534. }
  535. location /foo {
  536. echo foo;
  537. }
  538. location /sleep {
  539. echo_sleep 1;
  540. }
  541. --- request
  542. GET /t
  543. --- response_body
  544. connected: 1
  545. request sent: 61
  546. received response of 156 bytes
  547. done
  548. --- no_error_log
  549. [error]
  550. --- error_log eval
  551. ["lua socket keepalive close handler",
  552. "lua socket keepalive: free connection pool for ",
  553. "lua socket keepalive timeout: 101 ms",
  554. qr/lua socket connection pool size: 25\b/]
  555. --- timeout: 4
  556. === TEST 10: sock:keepalive_timeout(0) means unlimited
  557. --- config
  558. server_tokens off;
  559. location /t {
  560. keepalive_timeout 60s;
  561. lua_socket_keepalive_timeout 1000ms;
  562. set $port $TEST_NGINX_CLIENT_PORT;
  563. rewrite_by_lua '
  564. local port = ngx.var.port
  565. local sock = ngx.socket.tcp()
  566. local ok, err = sock:connect("127.0.0.1", port)
  567. if not ok then
  568. ngx.say("failed to connect: ", err)
  569. return
  570. end
  571. ngx.say("connected: ", ok)
  572. local req = "GET /foo HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: keepalive\\r\\n\\r\\n"
  573. local bytes, err = sock:send(req)
  574. if not bytes then
  575. ngx.say("failed to send request: ", err)
  576. return
  577. end
  578. ngx.say("request sent: ", bytes)
  579. local reader = sock:receiveuntil("\\r\\n0\\r\\n\\r\\n")
  580. local data, res = reader()
  581. if not data then
  582. ngx.say("failed to receive response body: ", err)
  583. return
  584. end
  585. ngx.say("received response of ", #data, " bytes")
  586. local ok, err = sock:setkeepalive(0)
  587. if not ok then
  588. ngx.say("failed to set reusable: ", err)
  589. end
  590. ngx.location.capture("/sleep")
  591. ngx.say("done")
  592. ';
  593. content_by_lua return;
  594. }
  595. location /foo {
  596. echo foo;
  597. }
  598. location /sleep {
  599. echo_sleep 1;
  600. }
  601. --- request
  602. GET /t
  603. --- response_body
  604. connected: 1
  605. request sent: 61
  606. received response of 156 bytes
  607. done
  608. --- no_error_log
  609. [error]
  610. --- error_log eval
  611. ["lua socket keepalive timeout: unlimited",
  612. qr/lua socket connection pool size: 30\b/]
  613. --- timeout: 4
  614. === TEST 11: sanity (uds)
  615. --- http_config eval
  616. "
  617. lua_package_path '$::HtmlDir/?.lua;./?.lua';
  618. server {
  619. listen unix:$::HtmlDir/nginx.sock;
  620. default_type 'text/plain';
  621. server_tokens off;
  622. location /foo {
  623. echo foo;
  624. more_clear_headers Date;
  625. }
  626. }
  627. "
  628. --- config
  629. location /t {
  630. set $port $TEST_NGINX_MEMCACHED_PORT;
  631. rewrite_by_lua '
  632. local test = require "test"
  633. local path = "$TEST_NGINX_HTML_DIR/nginx.sock";
  634. local port = ngx.var.port
  635. test.go(path, port)
  636. test.go(path, port)
  637. ';
  638. content_by_lua return;
  639. }
  640. --- request
  641. GET /t
  642. --- user_files
  643. >>> test.lua
  644. module("test", package.seeall)
  645. function go(path, port)
  646. local sock = ngx.socket.tcp()
  647. local ok, err = sock:connect("unix:" .. path)
  648. if not ok then
  649. ngx.say("failed to connect: ", err)
  650. return
  651. end
  652. ngx.say("connected: ", ok, ", reused: ", sock:getreusedtimes())
  653. local req = "GET /foo HTTP/1.1\r\nHost: localhost\r\nConnection: keepalive\r\n\r\n"
  654. local bytes, err = sock:send(req)
  655. if not bytes then
  656. ngx.say("failed to send request: ", err)
  657. return
  658. end
  659. ngx.say("request sent: ", bytes)
  660. local reader = sock:receiveuntil("\r\n0\r\n\r\n")
  661. local data, err = reader()
  662. if not data then
  663. ngx.say("failed to receive response body: ", err)
  664. return
  665. end
  666. ngx.say("received response of ", #data, " bytes")
  667. local ok, err = sock:setkeepalive()
  668. if not ok then
  669. ngx.say("failed to set reusable: ", err)
  670. end
  671. end
  672. --- response_body_like
  673. ^connected: 1, reused: \d+
  674. request sent: 61
  675. received response of 119 bytes
  676. connected: 1, reused: [1-9]\d*
  677. request sent: 61
  678. received response of 119 bytes
  679. --- no_error_log eval
  680. ["[error]",
  681. "lua socket keepalive: free connection pool for "]
  682. --- error_log eval
  683. ["lua socket get keepalive peer: using connection",
  684. 'lua socket keepalive create connection pool for key "unix:']
  685. === TEST 12: github issue #108: ngx.locaiton.capture + redis.set_keepalive
  686. --- http_config eval
  687. qq{
  688. lua_package_path "$::HtmlDir/?.lua;;";
  689. }
  690. --- config
  691. location /t {
  692. default_type text/html;
  693. set $port $TEST_NGINX_MEMCACHED_PORT;
  694. #lua_code_cache off;
  695. lua_need_request_body on;
  696. rewrite_by_lua_file html/t.lua;
  697. content_by_lua return;
  698. }
  699. location /anyurl {
  700. internal;
  701. proxy_pass http://127.0.0.1:$server_port/dummy;
  702. }
  703. location = /dummy {
  704. echo dummy;
  705. }
  706. --- user_files
  707. >>> t.lua
  708. local sock, err = ngx.socket.connect("127.0.0.1", ngx.var.port)
  709. if not sock then ngx.say(err) return end
  710. sock:send("flush_all\r\n")
  711. sock:receive()
  712. sock:setkeepalive()
  713. sock, err = ngx.socket.connect("127.0.0.1", ngx.var.port)
  714. if not sock then ngx.say(err) return end
  715. local res = ngx.location.capture("/anyurl") --3
  716. ngx.say("ok")
  717. --- request
  718. GET /t
  719. --- response_body
  720. ok
  721. --- error_log
  722. lua socket get keepalive peer: using connection
  723. --- no_error_log
  724. [error]
  725. [alert]
  726. === TEST 13: github issue #110: ngx.exit with HTTP_NOT_FOUND causes worker process to exit
  727. --- http_config eval
  728. "lua_package_path '$::HtmlDir/?.lua;./?.lua';"
  729. --- config
  730. error_page 404 /404.html;
  731. location /t {
  732. set $port $TEST_NGINX_MEMCACHED_PORT;
  733. access_by_lua '
  734. local test = require "test"
  735. local port = ngx.var.port
  736. test.go(port)
  737. ngx.exit(404)
  738. ';
  739. echo hello;
  740. }
  741. --- user_files
  742. >>> 404.html
  743. Not found, dear...
  744. >>> test.lua
  745. module("test", package.seeall)
  746. function go(port)
  747. local sock = ngx.socket.tcp()
  748. local ok, err = sock:connect("127.0.0.1", port)
  749. if not ok then
  750. ngx.log(ngx.ERR, "failed to connect: ", err)
  751. return
  752. end
  753. local req = "flush_all\r\n"
  754. local bytes, err = sock:send(req)
  755. if not bytes then
  756. ngx.log(ngx.ERR, "failed to send request: ", err)
  757. return
  758. end
  759. local line, err, part = sock:receive()
  760. if not line then
  761. ngx.log(ngx.ERR, "failed to receive a line: ", err, " [", part, "]")
  762. return
  763. end
  764. -- local ok, err = sock:setkeepalive()
  765. -- if not ok then
  766. -- ngx.log(ngx.ERR, "failed to set reusable: ", err)
  767. -- return
  768. -- end
  769. end
  770. --- request
  771. GET /t
  772. --- response_body
  773. Not found, dear...
  774. --- error_code: 404
  775. --- no_error_log
  776. [error]