user_agent_test.rb 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. # encoding: utf-8
  2. require 'integration_test_helper'
  3. class UserAgentTest < ActiveSupport::TestCase
  4. host = 'https://r2d2.znuny.com'
  5. #host = 'http://127.0.0.1:3003'
  6. setup do
  7. if ENV['ZAMMAD_PROXY_TEST'] == 'true'
  8. Setting.set('proxy', ENV['ZAMMAD_PROXY'])
  9. Setting.set('proxy_username', ENV['ZAMMAD_PROXY_USERNAME'])
  10. Setting.set('proxy_password', ENV['ZAMMAD_PROXY_PASSWORD'])
  11. end
  12. end
  13. # check
  14. test 'check some results' do
  15. # get / 200
  16. result = UserAgent.get(
  17. "#{host}/test/get/1?submitted=123",
  18. )
  19. assert(result)
  20. assert_equal(true, result.success?)
  21. assert_equal('200', result.code)
  22. assert_equal(String, result.body.class)
  23. assert(result.body =~ /"get"/)
  24. assert(result.body =~ /"123"/)
  25. assert(result.body =~ /"content_type_requested":null/)
  26. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  27. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  28. end
  29. # get / 404
  30. result = UserAgent.get(
  31. "#{host}/test/not_existing",
  32. )
  33. assert(result)
  34. assert_equal(false, result.success?)
  35. assert_equal('404', result.code)
  36. assert_equal(NilClass, result.body.class)
  37. # post / 200
  38. result = UserAgent.post(
  39. "#{host}/test/post/1",
  40. {
  41. submitted: 'some value',
  42. }
  43. )
  44. assert(result)
  45. assert_equal(true, result.success?)
  46. assert_equal('201', result.code)
  47. assert_equal(String, result.body.class)
  48. assert(result.body =~ /"post"/)
  49. assert(result.body =~ /"some value"/)
  50. assert(result.body =~ %r{"application/x-www-form-urlencoded"})
  51. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  52. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  53. end
  54. # post / 404
  55. result = UserAgent.post(
  56. "#{host}/test/not_existing",
  57. {
  58. submitted: 'some value',
  59. }
  60. )
  61. assert(result)
  62. assert_equal(false, result.success?)
  63. assert_equal('404', result.code)
  64. assert_equal(NilClass, result.body.class)
  65. # put / 200
  66. result = UserAgent.put(
  67. "#{host}/test/put/1",
  68. {
  69. submitted: 'some value',
  70. }
  71. )
  72. assert(result)
  73. assert_equal(true, result.success?)
  74. assert_equal('200', result.code)
  75. assert_equal(String, result.body.class)
  76. assert(result.body =~ /"put"/)
  77. assert(result.body =~ /"some value"/)
  78. assert(result.body =~ %r{"application/x-www-form-urlencoded"})
  79. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  80. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  81. end
  82. # put / 404
  83. result = UserAgent.put(
  84. "#{host}/test/not_existing",
  85. {
  86. submitted: 'some value',
  87. }
  88. )
  89. assert(result)
  90. assert_equal(false, result.success?)
  91. assert_equal('404', result.code)
  92. assert_equal(NilClass, result.body.class)
  93. # delete / 200
  94. result = UserAgent.delete(
  95. "#{host}/test/delete/1",
  96. )
  97. assert(result)
  98. assert_equal(true, result.success?)
  99. assert_equal('200', result.code)
  100. assert_equal(String, result.body.class)
  101. assert(result.body =~ /"delete"/)
  102. assert(result.body =~ /"content_type_requested":null/)
  103. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  104. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  105. end
  106. # delete / 404
  107. result = UserAgent.delete(
  108. "#{host}/test/not_existing",
  109. )
  110. assert(result)
  111. assert_equal(false, result.success?)
  112. assert_equal('404', result.code)
  113. assert_equal(NilClass, result.body.class)
  114. # with http basic auth
  115. # get / 200
  116. result = UserAgent.get(
  117. "#{host}/test_basic_auth/get/1?submitted=123",
  118. {},
  119. {
  120. user: 'basic_auth_user',
  121. password: 'test123',
  122. }
  123. )
  124. assert(result)
  125. assert_equal(true, result.success?)
  126. assert_equal('200', result.code)
  127. assert_equal(String, result.body.class)
  128. assert(result.body =~ /"get"/)
  129. assert(result.body =~ /"123"/)
  130. assert(result.body =~ /"content_type_requested":null/)
  131. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  132. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  133. end
  134. # get / 401
  135. result = UserAgent.get(
  136. "#{host}/test_basic_auth/get/1?submitted=123",
  137. {},
  138. {
  139. user: 'basic_auth_user_not_existing',
  140. password: 'test<>123',
  141. }
  142. )
  143. assert(result)
  144. assert_equal(false, result.success?)
  145. assert_equal('401', result.code)
  146. assert_equal(NilClass, result.body.class)
  147. # post / 200
  148. result = UserAgent.post(
  149. "#{host}/test_basic_auth/post/1",
  150. {
  151. submitted: 'some value',
  152. },
  153. {
  154. user: 'basic_auth_user',
  155. password: 'test123',
  156. }
  157. )
  158. assert(result)
  159. assert_equal(true, result.success?)
  160. assert_equal('201', result.code)
  161. assert_equal(String, result.body.class)
  162. assert(result.body =~ /"post"/)
  163. assert(result.body =~ /"some value"/)
  164. assert(result.body =~ %r{"application/x-www-form-urlencoded"})
  165. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  166. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  167. end
  168. # post / 401
  169. result = UserAgent.post(
  170. "#{host}/test_basic_auth/post/1",
  171. {
  172. submitted: 'some value',
  173. },
  174. {
  175. user: 'basic_auth_user_not_existing',
  176. password: 'test<>123',
  177. }
  178. )
  179. assert(result)
  180. assert_equal(false, result.success?)
  181. assert_equal('401', result.code)
  182. assert_equal(NilClass, result.body.class)
  183. # put / 200
  184. result = UserAgent.put(
  185. "#{host}/test_basic_auth/put/1",
  186. {
  187. submitted: 'some value',
  188. },
  189. {
  190. user: 'basic_auth_user',
  191. password: 'test123',
  192. }
  193. )
  194. assert(result)
  195. assert_equal(true, result.success?)
  196. assert_equal('200', result.code)
  197. assert_equal(String, result.body.class)
  198. assert(result.body =~ /"put"/)
  199. assert(result.body =~ /"some value"/)
  200. assert(result.body =~ %r{"application/x-www-form-urlencoded"})
  201. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  202. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  203. end
  204. # put / 401
  205. result = UserAgent.put(
  206. "#{host}/test_basic_auth/put/1",
  207. {
  208. submitted: 'some value',
  209. },
  210. {
  211. user: 'basic_auth_user_not_existing',
  212. password: 'test<>123',
  213. }
  214. )
  215. assert(result)
  216. assert_equal(false, result.success?)
  217. assert_equal('401', result.code)
  218. assert_equal(NilClass, result.body.class)
  219. # delete / 200
  220. result = UserAgent.delete(
  221. "#{host}/test_basic_auth/delete/1",
  222. {
  223. user: 'basic_auth_user',
  224. password: 'test123',
  225. }
  226. )
  227. assert(result)
  228. assert_equal(true, result.success?)
  229. assert_equal('200', result.code)
  230. assert_equal(String, result.body.class)
  231. assert(result.body =~ /"delete"/)
  232. assert(result.body =~ /"content_type_requested":null/)
  233. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  234. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  235. end
  236. # delete / 401
  237. result = UserAgent.delete(
  238. "#{host}/test_basic_auth/delete/1",
  239. {
  240. user: 'basic_auth_user_not_existing',
  241. password: 'test<>123',
  242. }
  243. )
  244. assert(result)
  245. assert_equal(false, result.success?)
  246. assert_equal('401', result.code)
  247. assert_equal(NilClass, result.body.class)
  248. end
  249. # check
  250. test 'check redirect' do
  251. # get / 301
  252. result = UserAgent.request(
  253. "#{host}/test/redirect",
  254. )
  255. assert(result)
  256. assert_equal(true, result.success?)
  257. assert_equal('200', result.code)
  258. assert_equal(String, result.body.class)
  259. assert(result.body =~ /"get"/)
  260. assert(result.body =~ /"abc"/)
  261. assert(result.body =~ /"content_type_requested":null/)
  262. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  263. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  264. end
  265. # get / 301
  266. result = UserAgent.request(
  267. "#{host}/test_basic_auth/redirect",
  268. {
  269. user: 'basic_auth_user',
  270. password: 'test123',
  271. }
  272. )
  273. assert(result)
  274. assert_equal(true, result.success?)
  275. assert_equal('200', result.code)
  276. assert_equal(String, result.body.class)
  277. assert(result.body =~ /"get"/)
  278. assert(result.body =~ /"abc"/)
  279. assert(result.body =~ /"content_type_requested":null/)
  280. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  281. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  282. end
  283. # get / 401
  284. result = UserAgent.request(
  285. "#{host}/test_basic_auth/redirect",
  286. {
  287. user: 'basic_auth_user_not_existing',
  288. password: 'test123',
  289. }
  290. )
  291. assert(result)
  292. assert_equal(false, result.success?)
  293. assert_equal('401', result.code)
  294. assert_equal(NilClass, result.body.class)
  295. end
  296. # check
  297. test 'check request' do
  298. # get / 200
  299. result = UserAgent.request(
  300. "#{host}/test/get/1?submitted=123",
  301. )
  302. assert(result)
  303. assert_equal(true, result.success?)
  304. assert_equal('200', result.code)
  305. assert_equal(String, result.body.class)
  306. assert(result.body =~ /"get"/)
  307. assert(result.body =~ /"123"/)
  308. assert(result.body =~ /"content_type_requested":null/)
  309. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  310. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  311. end
  312. # ftp / 200
  313. result = UserAgent.request(
  314. #'ftp://root.cern.ch/pub/README-root-build.txt',
  315. 'ftp://ftp.gwdg.de/pub/rfc/rfc-index.txt',
  316. )
  317. assert(result)
  318. assert_equal(true, result.success?)
  319. assert_equal('200', result.code)
  320. assert_equal(String, result.body.class)
  321. assert(result.body =~ /instructions/i)
  322. # ftp / 401
  323. result = UserAgent.request(
  324. #'ftp://root.cern.ch/pub/not_existing.msg',
  325. 'ftp://ftp.gwdg.de/pub/rfc/not_existing.txt',
  326. )
  327. assert(result)
  328. assert_equal(false, result.success?)
  329. assert_equal('550', result.code)
  330. assert_equal(NilClass, result.body.class)
  331. # get / 200 / gzip
  332. result = UserAgent.request(
  333. 'https://httpbin.org/gzip',
  334. )
  335. assert(result)
  336. assert_equal(true, result.success?)
  337. assert_equal('200', result.code)
  338. assert_equal(String, result.body.class)
  339. assert(result.body =~ /"GET"/)
  340. # get / 200 / gzip
  341. result = UserAgent.request(
  342. 'http://httpbin.org/gzip',
  343. )
  344. assert(result)
  345. assert_equal(true, result.success?)
  346. assert_equal('200', result.code)
  347. assert_equal(String, result.body.class)
  348. assert(result.body =~ /"GET"/)
  349. # get / 200 / gzip
  350. result = UserAgent.request(
  351. 'https://httpbin.org/deflate',
  352. )
  353. assert(result)
  354. assert_equal(true, result.success?)
  355. assert_equal('200', result.code)
  356. assert_equal(String, result.body.class)
  357. assert(result.body =~ /"GET"/)
  358. # get / 200 / gzip
  359. result = UserAgent.request(
  360. 'http://httpbin.org/deflate',
  361. )
  362. assert(result)
  363. assert_equal(true, result.success?)
  364. assert_equal('200', result.code)
  365. assert_equal(String, result.body.class)
  366. assert(result.body =~ /"GET"/)
  367. end
  368. # check
  369. test 'check not existing' do
  370. # get / 0
  371. result = UserAgent.request(
  372. 'http://not.existing.host/test.php',
  373. )
  374. assert(result)
  375. assert_equal(false, result.success?)
  376. assert_equal(0, result.code)
  377. assert_equal(NilClass, result.body.class)
  378. # ftp / 0
  379. result = UserAgent.request(
  380. 'ftp://not.existing.host/test.bin',
  381. )
  382. assert(result)
  383. assert_equal(false, result.success?)
  384. assert_equal(0, result.code)
  385. assert_equal(NilClass, result.body.class)
  386. end
  387. # check
  388. test 'check timeout' do
  389. # get / timeout
  390. result = UserAgent.get(
  391. "#{host}/test/get/3?submitted=123",
  392. {},
  393. {
  394. open_timeout: 1,
  395. read_timeout: 1,
  396. }
  397. )
  398. assert(result)
  399. assert_equal(false, result.success?)
  400. assert_equal(0, result.code)
  401. assert_equal(NilClass, result.body.class)
  402. # post / timeout
  403. result = UserAgent.post(
  404. "#{host}/test/post/3",
  405. {
  406. submitted: 'timeout',
  407. },
  408. {
  409. open_timeout: 1,
  410. read_timeout: 1,
  411. }
  412. )
  413. assert(result)
  414. assert_equal(false, result.success?)
  415. assert_equal(0, result.code)
  416. assert_equal(NilClass, result.body.class)
  417. end
  418. # check
  419. test 'check json' do
  420. # get / 200
  421. result = UserAgent.get(
  422. "#{host}/test/get/1",
  423. {
  424. submitted: { key: 'some value ' }
  425. },
  426. {
  427. json: true,
  428. }
  429. )
  430. assert(result)
  431. assert_equal(true, result.success?)
  432. assert_equal('200', result.code)
  433. assert_equal(String, result.body.class)
  434. assert(result.body =~ /"content_type_requested"/)
  435. assert(result.body =~ %r{"application/json"})
  436. assert_equal('some value ', result.data['submitted']['key'])
  437. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  438. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  439. end
  440. # get / 401
  441. result = UserAgent.get(
  442. "#{host}/test/not_existing",
  443. {
  444. submitted: { key: 'some value ' }
  445. },
  446. {
  447. json: true,
  448. }
  449. )
  450. assert(result)
  451. assert_equal(false, result.success?)
  452. assert_equal('404', result.code)
  453. assert_equal(NilClass, result.body.class)
  454. assert(!result.data)
  455. # post / 200
  456. result = UserAgent.post(
  457. "#{host}/test/post/1",
  458. {
  459. submitted: { key: 'some value ' }
  460. },
  461. {
  462. json: true,
  463. }
  464. )
  465. assert(result)
  466. assert_equal(true, result.success?)
  467. assert_equal('201', result.code)
  468. assert_equal(String, result.body.class)
  469. assert(result.body =~ /"content_type_requested"/)
  470. assert(result.body =~ %r{"application/json"})
  471. assert_equal('some value ', result.data['submitted']['key'])
  472. if ENV['ZAMMAD_PROXY_TEST'] == 'true' && ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']
  473. assert(result.body =~ /"remote_ip":"#{ENV['ZAMMAD_PROXY_REMOTE_IP_CHECK']}"/)
  474. end
  475. end
  476. end