request.t 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. use Test::Nginx::Socket;
  2. our $HttpConfig = <<'_EOC_';
  3. lua_package_path "lib/?.lua;/usr/local/share/lua/5.1/?.lua;;";
  4. _EOC_
  5. repeat_each(3);
  6. plan tests => repeat_each() * (blocks() * 3 + 14);
  7. run_tests();
  8. __DATA__
  9. === TEST 1: do_request blocked
  10. --- http_config eval: $::HttpConfig
  11. --- config
  12. location /t {
  13. content_by_lua_block {
  14. local request = require "resty.t1k.request"
  15. local t = {
  16. mode = "block",
  17. host = "127.0.0.1",
  18. port = 18000,
  19. connect_timeout = 1000,
  20. send_timeout = 1000,
  21. read_timeout = 1000,
  22. req_body_size = 1024,
  23. keepalive_size = 16,
  24. keepalive_timeout = 10000,
  25. }
  26. local ok, err, result = request.do_request(t)
  27. if not ok then
  28. ngx.log(ngx.ERR, err)
  29. end
  30. ngx.say(result["action"])
  31. ngx.say(result["status"])
  32. ngx.say(result["event_id"])
  33. }
  34. }
  35. --- tcp_listen: 18000
  36. --- tcp_reply eval
  37. "\x41\x01\x00\x00\x00?\x02\x03\x00\x00\x00405\xa4\x33\x00\x00\x00<!-- event_id: c0c039a7c348486eaffd9e2f9846b66b -->"
  38. --- request
  39. GET /t/shell.php
  40. --- response_body
  41. ?
  42. 405
  43. c0c039a7c348486eaffd9e2f9846b66b
  44. --- no_error_log
  45. [error]
  46. --- error_log
  47. lua-resty-t1k: successfully connected to t1k server 127.0.0.1:18000
  48. --- log_level: debug
  49. === TEST 2: do_request blocked with unix domain socket
  50. --- http_config eval: $::HttpConfig
  51. --- config
  52. location /t {
  53. content_by_lua_block {
  54. local request = require "resty.t1k.request"
  55. local t = {
  56. mode = "block",
  57. host = "unix:t1k.sock",
  58. uds = true,
  59. connect_timeout = 1000,
  60. send_timeout = 1000,
  61. read_timeout = 1000,
  62. req_body_size = 1024,
  63. keepalive_size = 16,
  64. keepalive_timeout = 10000,
  65. }
  66. local ok, err, result = request.do_request(t)
  67. if not ok then
  68. ngx.log(ngx.ERR, err)
  69. end
  70. ngx.say(result["action"])
  71. ngx.say(result["status"])
  72. ngx.say(result["event_id"])
  73. }
  74. }
  75. --- tcp_listen: t1k.sock
  76. --- tcp_reply eval
  77. "\x41\x01\x00\x00\x00?\x02\x03\x00\x00\x00405\xa4\x33\x00\x00\x00<!-- event_id: c0c039a7c348486eaffd9e2f9846b66b -->"
  78. --- request
  79. GET /t/shell.php
  80. --- response_body
  81. ?
  82. 405
  83. c0c039a7c348486eaffd9e2f9846b66b
  84. --- no_error_log
  85. [error]
  86. --- error_log
  87. lua-resty-t1k: successfully connected to t1k server unix:t1k.sock
  88. --- log_level: debug
  89. === TEST 3: do_request passed
  90. --- http_config eval: $::HttpConfig
  91. --- config
  92. location /t {
  93. content_by_lua_block {
  94. local request = require "resty.t1k.request"
  95. local t = {
  96. mode = "block",
  97. host = "127.0.0.1",
  98. port = 18000,
  99. connect_timeout = 1000,
  100. send_timeout = 1000,
  101. read_timeout = 1000,
  102. req_body_size = 1024,
  103. keepalive_size = 16,
  104. keepalive_timeout = 10000,
  105. }
  106. local ok, err, result = request.do_request(t)
  107. if not ok then
  108. ngx.log(ngx.ERR, err)
  109. end
  110. ngx.say(result["action"])
  111. }
  112. }
  113. --- tcp_listen: 18000
  114. --- tcp_reply eval
  115. "\xc1\x01\x00\x00\x00."
  116. --- request
  117. GET /t
  118. --- response_body
  119. .
  120. --- no_error_log
  121. [error]
  122. --- error_log
  123. lua-resty-t1k: successfully connected to t1k server 127.0.0.1:18000
  124. --- log_level: debug
  125. === TEST 4: do_request passed with unix domain socket
  126. --- http_config eval: $::HttpConfig
  127. --- config
  128. location /t {
  129. content_by_lua_block {
  130. local request = require "resty.t1k.request"
  131. local t = {
  132. mode = "block",
  133. host = "unix:t1k.sock",
  134. uds = true,
  135. connect_timeout = 1000,
  136. send_timeout = 1000,
  137. read_timeout = 1000,
  138. req_body_size = 1024,
  139. keepalive_size = 16,
  140. keepalive_timeout = 10000,
  141. }
  142. local ok, err, result = request.do_request(t)
  143. if not ok then
  144. ngx.log(ngx.ERR, err)
  145. end
  146. ngx.say(result["action"])
  147. }
  148. }
  149. --- tcp_listen: t1k.sock
  150. --- tcp_reply eval
  151. "\xc1\x01\x00\x00\x00."
  152. --- request
  153. GET /t
  154. --- response_body
  155. .
  156. --- no_error_log
  157. [error]
  158. --- error_log
  159. lua-resty-t1k: successfully connected to t1k server unix:t1k.sock
  160. --- log_level: debug
  161. === TEST 5: do_request trim request body
  162. --- http_config eval: $::HttpConfig
  163. --- config
  164. location /t {
  165. content_by_lua_block {
  166. local request = require "resty.t1k.request"
  167. local t = {
  168. mode = "block",
  169. host = "127.0.0.1",
  170. port = 18000,
  171. connect_timeout = 1000,
  172. send_timeout = 1000,
  173. read_timeout = 1000,
  174. req_body_size = 0.0625,
  175. keepalive_size = 16,
  176. keepalive_timeout = 10000,
  177. }
  178. local ok, err, result = request.do_request(t)
  179. if not ok then
  180. ngx.log(ngx.ERR, err)
  181. end
  182. ngx.say(result["action"])
  183. }
  184. }
  185. --- tcp_listen: 18000
  186. --- tcp_reply eval
  187. "\xc1\x01\x00\x00\x00."
  188. --- request
  189. GET /t
  190. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  191. --- response_body
  192. .
  193. --- no_error_log
  194. [error]
  195. --- error_log
  196. lua-resty-t1k: request body is too long: 123 bytes, cut to 64 bytes
  197. lua-resty-t1k: successfully connected to t1k server 127.0.0.1:18000
  198. --- log_level: debug
  199. === TEST 6: do_request trim request body with unix domain socket
  200. --- http_config eval: $::HttpConfig
  201. --- config
  202. location /t {
  203. content_by_lua_block {
  204. local request = require "resty.t1k.request"
  205. local t = {
  206. mode = "block",
  207. host = "unix:t1k.sock",
  208. uds = true,
  209. connect_timeout = 1000,
  210. send_timeout = 1000,
  211. read_timeout = 1000,
  212. req_body_size = 0.0625,
  213. keepalive_size = 16,
  214. keepalive_timeout = 10000,
  215. }
  216. local ok, err, result = request.do_request(t)
  217. if not ok then
  218. ngx.log(ngx.ERR, err)
  219. end
  220. ngx.say(result["action"])
  221. }
  222. }
  223. --- tcp_listen: t1k.sock
  224. --- tcp_reply eval
  225. "\xc1\x01\x00\x00\x00."
  226. --- request
  227. GET /t
  228. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  229. --- response_body
  230. .
  231. --- no_error_log
  232. [error]
  233. --- error_log
  234. lua-resty-t1k: request body is too long: 123 bytes, cut to 64 bytes
  235. lua-resty-t1k: successfully connected to t1k server unix:t1k.sock
  236. --- log_level: debug
  237. === TEST 7: do_request refuse connection
  238. --- http_config eval: $::HttpConfig
  239. --- config
  240. location /t {
  241. content_by_lua_block {
  242. local request = require "resty.t1k.request"
  243. local t = {
  244. mode = "block",
  245. host = "127.0.0.1",
  246. port = 18000,
  247. connect_timeout = 1000,
  248. send_timeout = 1000,
  249. read_timeout = 1000,
  250. req_body_size = 0.0625,
  251. keepalive_size = 16,
  252. keepalive_timeout = 10000,
  253. }
  254. local ok, err, result = request.do_request(t)
  255. if not ok then
  256. ngx.log(ngx.ERR, err)
  257. end
  258. ngx.say("result: ", result)
  259. }
  260. }
  261. --- request
  262. GET /t
  263. --- response_body
  264. result: nil
  265. --- error_log
  266. failed to connect to t1k server 127.0.0.1:18000
  267. --- log_level: debug
  268. === TEST 8: do_request refuse connection with unix domain socket
  269. --- http_config eval: $::HttpConfig
  270. --- config
  271. location /t {
  272. content_by_lua_block {
  273. local request = require "resty.t1k.request"
  274. local t = {
  275. mode = "block",
  276. host = "unix:t1k.sock",
  277. uds = true,
  278. connect_timeout = 1000,
  279. send_timeout = 1000,
  280. read_timeout = 1000,
  281. req_body_size = 0.0625,
  282. keepalive_size = 16,
  283. keepalive_timeout = 10000,
  284. }
  285. local ok, err, result = request.do_request(t)
  286. if not ok then
  287. ngx.log(ngx.ERR, err)
  288. end
  289. ngx.say("result: ", result)
  290. }
  291. }
  292. --- request
  293. GET /t
  294. --- response_body
  295. result: nil
  296. --- error_log
  297. failed to connect to t1k server unix:t1k.sock
  298. --- log_level: debug
  299. === TEST 9: do_request timeout
  300. --- http_config eval: $::HttpConfig
  301. --- config
  302. location /t {
  303. content_by_lua_block {
  304. local request = require "resty.t1k.request"
  305. local t = {
  306. mode = "block",
  307. host = "127.0.0.1",
  308. port = 18000,
  309. connect_timeout = 1000,
  310. send_timeout = 1000,
  311. read_timeout = 100,
  312. req_body_size = 1024,
  313. keepalive_size = 16,
  314. keepalive_timeout = 10000,
  315. }
  316. local ok, err, result = request.do_request(t)
  317. if not ok then
  318. ngx.log(ngx.ERR, err)
  319. end
  320. ngx.say("result: ", result)
  321. }
  322. }
  323. --- tcp_listen: 18000
  324. --- tcp_reply_delay: 200ms
  325. --- tcp_reply eval
  326. "\x41\x01\x00\x00\x00?\x02\x03\x00\x00\x00405\xa4\x33\x00\x00\x00<!-- event_id: c0c039a7c348486eaffd9e2f9846b66b -->"
  327. --- request
  328. GET /t/shell.php
  329. --- response_body
  330. result: nil
  331. --- error_log
  332. failed to receive info packet from t1k server 127.0.0.1:18000: timeout
  333. --- log_level: debug
  334. === TEST 10: do_request timeout with unix domain socket
  335. --- http_config eval: $::HttpConfig
  336. --- config
  337. location /t {
  338. content_by_lua_block {
  339. local request = require "resty.t1k.request"
  340. local t = {
  341. mode = "block",
  342. host = "unix:t1k.sock",
  343. uds = true,
  344. connect_timeout = 1000,
  345. send_timeout = 1000,
  346. read_timeout = 100,
  347. req_body_size = 1024,
  348. keepalive_size = 16,
  349. keepalive_timeout = 10000,
  350. }
  351. local ok, err, result = request.do_request(t)
  352. if not ok then
  353. ngx.log(ngx.ERR, err)
  354. end
  355. ngx.say("result: ", result)
  356. }
  357. }
  358. --- tcp_listen: t1k.sock
  359. --- tcp_reply_delay: 200ms
  360. --- tcp_reply eval
  361. "\x41\x01\x00\x00\x00?\x02\x03\x00\x00\x00405\xa4\x33\x00\x00\x00<!-- event_id: c0c039a7c348486eaffd9e2f9846b66b -->"
  362. --- request
  363. GET /t/shell.php
  364. --- response_body
  365. result: nil
  366. --- error_log
  367. failed to receive info packet from t1k server unix:t1k.sock: timeout
  368. --- log_level: debug
  369. === TEST 11: do_request invalid action
  370. --- http_config eval: $::HttpConfig
  371. --- config
  372. location /t {
  373. content_by_lua_block {
  374. local request = require "resty.t1k.request"
  375. local t = {
  376. mode = "block",
  377. host = "127.0.0.1",
  378. port = 18000,
  379. connect_timeout = 1000,
  380. send_timeout = 1000,
  381. read_timeout = 1000,
  382. req_body_size = 0.0625,
  383. keepalive_size = 16,
  384. keepalive_timeout = 10000,
  385. }
  386. local ok, err, result = request.do_request(t)
  387. if not ok then
  388. ngx.log(ngx.ERR, err)
  389. end
  390. ngx.say("action: ", result["action"])
  391. }
  392. }
  393. --- tcp_listen: 18000
  394. --- tcp_reply eval
  395. "\xc1\x01\x00\x00\x00~"
  396. --- request
  397. GET /t
  398. --- response_body
  399. action: ~
  400. --- no_error_log
  401. [error]
  402. --- error_log
  403. successfully connected to t1k server 127.0.0.1:18000
  404. --- log_level: debug
  405. === TEST 12: do_request invalid action with unix domain socket
  406. --- http_config eval: $::HttpConfig
  407. --- config
  408. location /t {
  409. content_by_lua_block {
  410. local request = require "resty.t1k.request"
  411. local t = {
  412. mode = "block",
  413. host = "unix:t1k.sock",
  414. uds = true,
  415. connect_timeout = 1000,
  416. send_timeout = 1000,
  417. read_timeout = 1000,
  418. req_body_size = 0.0625,
  419. keepalive_size = 16,
  420. keepalive_timeout = 10000,
  421. }
  422. local ok, err, result = request.do_request(t)
  423. if not ok then
  424. ngx.log(ngx.ERR, err)
  425. end
  426. ngx.say("action: ", result["action"])
  427. }
  428. }
  429. --- tcp_listen: t1k.sock
  430. --- tcp_reply eval
  431. "\xc1\x01\x00\x00\x00~"
  432. --- request
  433. GET /t
  434. --- response_body
  435. action: ~
  436. --- no_error_log
  437. [error]
  438. --- error_log
  439. successfully connected to t1k server unix:t1k.sock
  440. --- log_level: debug
  441. === TEST 13: do_request remote address
  442. --- http_config eval: $::HttpConfig
  443. --- config
  444. location /t {
  445. access_by_lua_block {
  446. local utils = require "resty.t1k.utils"
  447. ngx.say("ngx.var.http_x_real_ip or ngx.var.remote_addr is ", utils.get_indexed_element(ngx.var.http_x_real_ip) or ngx.var.remote_addr)
  448. ngx.say("ngx.var.http_x_forwarded_for: 2 or ngx.var.remote_addr is ", utils.get_indexed_element(ngx.var.http_x_forwarded_for, 2) or ngx.var.remote_addr)
  449. ngx.say("ngx.var.http_x_forwarded_for: -2 or ngx.var.remote_addr is ", utils.get_indexed_element(ngx.var.http_x_forwarded_for, -2) or ngx.var.remote_addr)
  450. ngx.say("ngx.var.http_non_existent_header or ngx.var.remote_addr is ", utils.get_indexed_element(ngx.var.http_non_existent_header) or ngx.var.remote_addr)
  451. }
  452. }
  453. --- request
  454. GET /t
  455. --- more_headers
  456. X-Forwarded-For: 1.1.1.1, 2.2.2.2, 2001:db8:3333:4444:5555:6666:7777:8888, 3.3.3.3
  457. X-Real-IP: 100.100.100.100
  458. --- response_body
  459. ngx.var.http_x_real_ip or ngx.var.remote_addr is 100.100.100.100
  460. ngx.var.http_x_forwarded_for: 2 or ngx.var.remote_addr is 2.2.2.2
  461. ngx.var.http_x_forwarded_for: -2 or ngx.var.remote_addr is 2001:db8:3333:4444:5555:6666:7777:8888
  462. ngx.var.http_non_existent_header or ngx.var.remote_addr is 127.0.0.1
  463. --- no_error_log
  464. [error]
  465. === TEST 14: do_request http2
  466. --- http_config eval: $::HttpConfig
  467. --- config
  468. location /t {
  469. content_by_lua_block {
  470. local request = require "resty.t1k.request"
  471. local t = {
  472. mode = "block",
  473. host = "127.0.0.1",
  474. port = 18000,
  475. connect_timeout = 1000,
  476. send_timeout = 1000,
  477. read_timeout = 1000,
  478. req_body_size = 1024,
  479. keepalive_size = 16,
  480. keepalive_timeout = 10000,
  481. }
  482. local ok, err, result = request.do_request(t)
  483. if not ok then
  484. ngx.log(ngx.ERR, err)
  485. end
  486. ngx.say(result["action"])
  487. ngx.say(result["status"])
  488. ngx.say(result["event_id"])
  489. }
  490. }
  491. --- tcp_listen: 18000
  492. --- tcp_reply eval
  493. "\x41\x01\x00\x00\x00?\x02\x03\x00\x00\x00405\xa4\x33\x00\x00\x00<!-- event_id: c0c039a7c348486eaffd9e2f9846b66b -->"
  494. --- http2
  495. --- request
  496. GET /t/shell.php
  497. --- tcp_query eval
  498. qr/.*HTTP\/2.0.*/
  499. --- response_body
  500. ?
  501. 405
  502. c0c039a7c348486eaffd9e2f9846b66b
  503. --- no_error_log
  504. [error]
  505. --- error_log
  506. lua-resty-t1k: successfully connected to t1k server 127.0.0.1:18000
  507. --- log_level: debug
  508. === TEST 15: do_request http2 with unix domain socket
  509. --- http_config eval: $::HttpConfig
  510. --- config
  511. location /t {
  512. content_by_lua_block {
  513. local request = require "resty.t1k.request"
  514. local t = {
  515. mode = "block",
  516. host = "unix:t1k.sock",
  517. uds = true,
  518. connect_timeout = 1000,
  519. send_timeout = 1000,
  520. read_timeout = 1000,
  521. req_body_size = 1024,
  522. keepalive_size = 16,
  523. keepalive_timeout = 10000,
  524. }
  525. local ok, err, result = request.do_request(t)
  526. if not ok then
  527. ngx.log(ngx.ERR, err)
  528. end
  529. ngx.say(result["action"])
  530. ngx.say(result["status"])
  531. ngx.say(result["event_id"])
  532. }
  533. }
  534. --- tcp_listen: t1k.sock
  535. --- tcp_reply eval
  536. "\x41\x01\x00\x00\x00?\x02\x03\x00\x00\x00405\xa4\x33\x00\x00\x00<!-- event_id: c0c039a7c348486eaffd9e2f9846b66b -->"
  537. --- http2
  538. --- request
  539. GET /t/shell.php
  540. --- tcp_query eval
  541. qr/.*HTTP\/2.0.*/
  542. --- response_body
  543. ?
  544. 405
  545. c0c039a7c348486eaffd9e2f9846b66b
  546. --- no_error_log
  547. [error]
  548. --- error_log
  549. lua-resty-t1k: successfully connected to t1k server unix:t1k.sock
  550. --- log_level: debug