passenger 4.0.60 → 5.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (1301) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +5 -0
  5. data/.travis.yml +3 -2
  6. data/CHANGELOG +31 -53
  7. data/CONTRIBUTING.md +4 -4
  8. data/CONTRIBUTORS +0 -1
  9. data/Gemfile +18 -0
  10. data/Gemfile.lock +41 -0
  11. data/Rakefile +16 -0
  12. data/bin/passenger +2 -2
  13. data/bin/passenger-install-apache2-module +12 -12
  14. data/bin/passenger-install-nginx-module +9 -14
  15. data/bin/passenger-status +125 -87
  16. data/build/agents.rb +112 -140
  17. data/build/apache2.rb +4 -9
  18. data/build/basics.rb +5 -3
  19. data/build/common_library.rb +1 -0
  20. data/build/cxx_tests.rb +69 -47
  21. data/build/debian.rb +4 -2
  22. data/build/documentation.rb +1 -0
  23. data/build/integration_tests.rb +28 -43
  24. data/build/misc.rb +0 -18
  25. data/build/nginx.rb +2 -6
  26. data/build/packaging.rb +33 -22
  27. data/build/preprocessor.rb +2 -4
  28. data/build/ruby_tests.rb +7 -26
  29. data/build/test_basics.rb +24 -25
  30. data/debian.template/control.template +2 -2
  31. data/debian.template/locations.ini.template +2 -3
  32. data/debian.template/passenger.install.template +2 -2
  33. data/debian.template/rules.template +1 -1
  34. data/dev/ci/run_jenkins.sh +0 -1
  35. data/dev/ci/run_rpm_tests.sh +3 -0
  36. data/dev/ci/run_travis.sh +63 -17
  37. data/dev/copy_boost_headers +22 -6
  38. data/dev/ruby_server.rb +244 -0
  39. data/dev/vagrant/provision.sh +3 -1
  40. data/doc/DebuggingAndStressTesting.md +3 -3
  41. data/doc/Design and Architecture.txt +5 -6
  42. data/doc/Packaging.txt.md +35 -6
  43. data/doc/ServerOptimizationGuide.txt.md +339 -0
  44. data/doc/Users guide Apache.idmap.txt +177 -187
  45. data/doc/Users guide Apache.txt +143 -219
  46. data/doc/Users guide Nginx.idmap.txt +166 -166
  47. data/doc/Users guide Nginx.txt +265 -223
  48. data/doc/Users guide Standalone.txt +3 -3
  49. data/doc/templates/markdown.html.erb +37 -6
  50. data/doc/users_guide_snippets/environment_variables.txt +1 -1
  51. data/doc/users_guide_snippets/support_information.txt +1 -1
  52. data/doc/users_guide_snippets/tips.txt +2 -2
  53. data/ext/apache2/Configuration.cpp +23 -81
  54. data/ext/apache2/Configuration.hpp +18 -92
  55. data/ext/apache2/ConfigurationCommands.cpp +64 -15
  56. data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
  57. data/ext/apache2/ConfigurationFields.hpp +12 -0
  58. data/ext/apache2/ConfigurationSetters.cpp +73 -1
  59. data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
  60. data/ext/apache2/CreateDirConfig.cpp +6 -0
  61. data/ext/apache2/DirectoryMapper.h +11 -6
  62. data/ext/apache2/Hooks.cpp +291 -408
  63. data/ext/apache2/MergeDirConfig.cpp +42 -0
  64. data/ext/apache2/SetHeaders.cpp +61 -16
  65. data/ext/apache2/SetHeaders.cpp.erb +9 -7
  66. data/ext/boost/container/allocator_traits.hpp +400 -0
  67. data/ext/boost/container/deque.hpp +2012 -0
  68. data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
  69. data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
  70. data/ext/boost/container/detail/algorithms.hpp +84 -0
  71. data/ext/boost/container/detail/allocation_type.hpp +54 -0
  72. data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
  73. data/ext/boost/container/detail/config_begin.hpp +49 -0
  74. data/ext/boost/container/detail/config_end.hpp +17 -0
  75. data/ext/boost/container/detail/destroyers.hpp +365 -0
  76. data/ext/boost/container/detail/flat_tree.hpp +1055 -0
  77. data/ext/boost/container/detail/function_detector.hpp +88 -0
  78. data/ext/boost/container/detail/iterators.hpp +611 -0
  79. data/ext/boost/container/detail/math_functions.hpp +113 -0
  80. data/ext/boost/container/detail/memory_util.hpp +83 -0
  81. data/ext/boost/container/detail/mpl.hpp +160 -0
  82. data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
  83. data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
  84. data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
  85. data/ext/boost/container/detail/pair.hpp +354 -0
  86. data/ext/boost/container/detail/pool_common.hpp +52 -0
  87. data/ext/boost/container/detail/preprocessor.hpp +232 -0
  88. data/ext/boost/container/detail/transform_iterator.hpp +176 -0
  89. data/ext/boost/container/detail/tree.hpp +1134 -0
  90. data/ext/boost/container/detail/type_traits.hpp +210 -0
  91. data/ext/boost/container/detail/utilities.hpp +1141 -0
  92. data/ext/boost/container/detail/value_init.hpp +45 -0
  93. data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
  94. data/ext/boost/container/detail/version_type.hpp +92 -0
  95. data/ext/boost/container/detail/workaround.hpp +44 -0
  96. data/ext/boost/container/flat_map.hpp +1674 -0
  97. data/ext/boost/container/flat_set.hpp +1408 -0
  98. data/ext/boost/container/list.hpp +1475 -0
  99. data/ext/boost/container/map.hpp +1508 -0
  100. data/ext/boost/container/scoped_allocator.hpp +1503 -0
  101. data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
  102. data/ext/boost/container/set.hpp +1280 -0
  103. data/ext/boost/container/slist.hpp +1706 -0
  104. data/ext/boost/container/stable_vector.hpp +1869 -0
  105. data/ext/boost/container/static_vector.hpp +1053 -0
  106. data/ext/boost/container/string.hpp +2856 -0
  107. data/ext/boost/container/throw_exception.hpp +110 -0
  108. data/ext/boost/container/vector.hpp +2671 -0
  109. data/ext/boost/detail/is_xxx.hpp +61 -0
  110. data/ext/boost/intrusive/any_hook.hpp +344 -0
  111. data/ext/boost/intrusive/avl_set.hpp +2528 -0
  112. data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
  113. data/ext/boost/intrusive/avltree.hpp +1786 -0
  114. data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
  115. data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
  116. data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
  117. data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
  118. data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
  119. data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
  120. data/ext/boost/intrusive/detail/assert.hpp +41 -0
  121. data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
  122. data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
  123. data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
  124. data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
  125. data/ext/boost/intrusive/detail/config_end.hpp +15 -0
  126. data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
  127. data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
  128. data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
  129. data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
  130. data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
  131. data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
  132. data/ext/boost/intrusive/detail/list_node.hpp +196 -0
  133. data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
  134. data/ext/boost/intrusive/detail/mpl.hpp +383 -0
  135. data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
  136. data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
  137. data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
  138. data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
  139. data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
  140. data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
  141. data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
  142. data/ext/boost/intrusive/detail/utilities.hpp +858 -0
  143. data/ext/boost/intrusive/detail/workaround.hpp +22 -0
  144. data/ext/boost/intrusive/hashtable.hpp +3110 -0
  145. data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
  146. data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
  147. data/ext/boost/intrusive/link_mode.hpp +46 -0
  148. data/ext/boost/intrusive/list.hpp +1525 -0
  149. data/ext/boost/intrusive/list_hook.hpp +290 -0
  150. data/ext/boost/intrusive/member_value_traits.hpp +70 -0
  151. data/ext/boost/intrusive/options.hpp +810 -0
  152. data/ext/boost/intrusive/parent_from_member.hpp +42 -0
  153. data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
  154. data/ext/boost/intrusive/pointer_traits.hpp +265 -0
  155. data/ext/boost/intrusive/priority_compare.hpp +39 -0
  156. data/ext/boost/intrusive/rbtree.hpp +1785 -0
  157. data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
  158. data/ext/boost/intrusive/set.hpp +2554 -0
  159. data/ext/boost/intrusive/set_hook.hpp +300 -0
  160. data/ext/boost/intrusive/sg_set.hpp +2601 -0
  161. data/ext/boost/intrusive/sgtree.hpp +2009 -0
  162. data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
  163. data/ext/boost/intrusive/slist.hpp +2219 -0
  164. data/ext/boost/intrusive/slist_hook.hpp +294 -0
  165. data/ext/boost/intrusive/splay_set.hpp +2575 -0
  166. data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
  167. data/ext/boost/intrusive/splaytree.hpp +1784 -0
  168. data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
  169. data/ext/boost/intrusive/treap.hpp +1882 -0
  170. data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
  171. data/ext/boost/intrusive/treap_set.hpp +2751 -0
  172. data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
  173. data/ext/boost/intrusive/unordered_set.hpp +2115 -0
  174. data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
  175. data/ext/boost/intrusive_ptr.hpp +18 -0
  176. data/ext/boost/math/common_factor_ct.hpp +180 -0
  177. data/ext/boost/math_fwd.hpp +108 -0
  178. data/ext/boost/move/detail/move_helpers.hpp +175 -0
  179. data/ext/boost/parameter.hpp +21 -0
  180. data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
  181. data/ext/boost/parameter/aux_/cast.hpp +143 -0
  182. data/ext/boost/parameter/aux_/default.hpp +69 -0
  183. data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
  184. data/ext/boost/parameter/aux_/maybe.hpp +120 -0
  185. data/ext/boost/parameter/aux_/overloads.hpp +88 -0
  186. data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
  187. data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
  188. data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
  189. data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
  190. data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
  191. data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
  192. data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
  193. data/ext/boost/parameter/aux_/set.hpp +67 -0
  194. data/ext/boost/parameter/aux_/tag.hpp +38 -0
  195. data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
  196. data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
  197. data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
  198. data/ext/boost/parameter/aux_/void.hpp +29 -0
  199. data/ext/boost/parameter/aux_/yesno.hpp +26 -0
  200. data/ext/boost/parameter/binding.hpp +106 -0
  201. data/ext/boost/parameter/config.hpp +14 -0
  202. data/ext/boost/parameter/keyword.hpp +152 -0
  203. data/ext/boost/parameter/macros.hpp +99 -0
  204. data/ext/boost/parameter/match.hpp +55 -0
  205. data/ext/boost/parameter/name.hpp +156 -0
  206. data/ext/boost/parameter/parameters.hpp +931 -0
  207. data/ext/boost/parameter/preprocessor.hpp +1178 -0
  208. data/ext/boost/parameter/python.hpp +735 -0
  209. data/ext/boost/parameter/value_type.hpp +108 -0
  210. data/ext/boost/pool/detail/for.m4 +107 -0
  211. data/ext/boost/pool/detail/guard.hpp +69 -0
  212. data/ext/boost/pool/detail/mutex.hpp +42 -0
  213. data/ext/boost/pool/detail/pool_construct.bat +24 -0
  214. data/ext/boost/pool/detail/pool_construct.ipp +852 -0
  215. data/ext/boost/pool/detail/pool_construct.m4 +84 -0
  216. data/ext/boost/pool/detail/pool_construct.sh +12 -0
  217. data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
  218. data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
  219. data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
  220. data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
  221. data/ext/boost/pool/object_pool.hpp +287 -0
  222. data/ext/boost/pool/pool.hpp +1024 -0
  223. data/ext/boost/pool/pool_alloc.hpp +488 -0
  224. data/ext/boost/pool/poolfwd.hpp +82 -0
  225. data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
  226. data/ext/boost/pool/singleton_pool.hpp +251 -0
  227. data/ext/boost/preprocessor/arithmetic.hpp +25 -0
  228. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  229. data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
  230. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  231. data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
  232. data/ext/boost/preprocessor/array.hpp +32 -0
  233. data/ext/boost/preprocessor/array/enum.hpp +33 -0
  234. data/ext/boost/preprocessor/array/insert.hpp +55 -0
  235. data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
  236. data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
  237. data/ext/boost/preprocessor/array/push_back.hpp +33 -0
  238. data/ext/boost/preprocessor/array/push_front.hpp +33 -0
  239. data/ext/boost/preprocessor/array/remove.hpp +54 -0
  240. data/ext/boost/preprocessor/array/replace.hpp +49 -0
  241. data/ext/boost/preprocessor/array/reverse.hpp +29 -0
  242. data/ext/boost/preprocessor/array/to_list.hpp +33 -0
  243. data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
  244. data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
  245. data/ext/boost/preprocessor/assert_msg.hpp +17 -0
  246. data/ext/boost/preprocessor/comma.hpp +17 -0
  247. data/ext/boost/preprocessor/comparison.hpp +24 -0
  248. data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
  249. data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
  250. data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  251. data/ext/boost/preprocessor/comparison/less.hpp +46 -0
  252. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  253. data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
  254. data/ext/boost/preprocessor/config/limits.hpp +30 -0
  255. data/ext/boost/preprocessor/control.hpp +22 -0
  256. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  257. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  258. data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  259. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  260. data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
  261. data/ext/boost/preprocessor/debug.hpp +18 -0
  262. data/ext/boost/preprocessor/debug/assert.hpp +44 -0
  263. data/ext/boost/preprocessor/debug/line.hpp +35 -0
  264. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  265. data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
  266. data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
  267. data/ext/boost/preprocessor/detail/null.hpp +17 -0
  268. data/ext/boost/preprocessor/detail/split.hpp +35 -0
  269. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  270. data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
  271. data/ext/boost/preprocessor/expand.hpp +17 -0
  272. data/ext/boost/preprocessor/expr_if.hpp +17 -0
  273. data/ext/boost/preprocessor/facilities.hpp +23 -0
  274. data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
  275. data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
  276. data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
  277. data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
  278. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
  279. data/ext/boost/preprocessor/for.hpp +17 -0
  280. data/ext/boost/preprocessor/if.hpp +17 -0
  281. data/ext/boost/preprocessor/iteration.hpp +19 -0
  282. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  283. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  284. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  285. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  286. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  287. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  288. data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  289. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  290. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  291. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  292. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  293. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  294. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  295. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  296. data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
  297. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  298. data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
  299. data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
  300. data/ext/boost/preprocessor/iteration/local.hpp +26 -0
  301. data/ext/boost/preprocessor/iteration/self.hpp +19 -0
  302. data/ext/boost/preprocessor/library.hpp +36 -0
  303. data/ext/boost/preprocessor/limits.hpp +17 -0
  304. data/ext/boost/preprocessor/list.hpp +37 -0
  305. data/ext/boost/preprocessor/list/at.hpp +39 -0
  306. data/ext/boost/preprocessor/list/cat.hpp +42 -0
  307. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  308. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  309. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  310. data/ext/boost/preprocessor/list/enum.hpp +41 -0
  311. data/ext/boost/preprocessor/list/filter.hpp +54 -0
  312. data/ext/boost/preprocessor/list/first_n.hpp +58 -0
  313. data/ext/boost/preprocessor/list/for_each.hpp +49 -0
  314. data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
  315. data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
  316. data/ext/boost/preprocessor/list/size.hpp +58 -0
  317. data/ext/boost/preprocessor/list/to_array.hpp +123 -0
  318. data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
  319. data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
  320. data/ext/boost/preprocessor/logical.hpp +29 -0
  321. data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
  322. data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
  323. data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
  324. data/ext/boost/preprocessor/logical/nor.hpp +30 -0
  325. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  326. data/ext/boost/preprocessor/logical/or.hpp +30 -0
  327. data/ext/boost/preprocessor/logical/xor.hpp +30 -0
  328. data/ext/boost/preprocessor/max.hpp +17 -0
  329. data/ext/boost/preprocessor/min.hpp +17 -0
  330. data/ext/boost/preprocessor/punctuation.hpp +20 -0
  331. data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  332. data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
  333. data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
  334. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  335. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  336. data/ext/boost/preprocessor/repetition.hpp +32 -0
  337. data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  338. data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  339. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  340. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  341. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  342. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  343. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  344. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  345. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  346. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  347. data/ext/boost/preprocessor/selection.hpp +18 -0
  348. data/ext/boost/preprocessor/selection/max.hpp +39 -0
  349. data/ext/boost/preprocessor/selection/min.hpp +39 -0
  350. data/ext/boost/preprocessor/seq.hpp +43 -0
  351. data/ext/boost/preprocessor/seq/cat.hpp +49 -0
  352. data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
  353. data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
  354. data/ext/boost/preprocessor/seq/filter.hpp +54 -0
  355. data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
  356. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  357. data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
  358. data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
  359. data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
  360. data/ext/boost/preprocessor/seq/insert.hpp +28 -0
  361. data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
  362. data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
  363. data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
  364. data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
  365. data/ext/boost/preprocessor/seq/remove.hpp +29 -0
  366. data/ext/boost/preprocessor/seq/replace.hpp +29 -0
  367. data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
  368. data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
  369. data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
  370. data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
  371. data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
  372. data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
  373. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  374. data/ext/boost/preprocessor/slot.hpp +17 -0
  375. data/ext/boost/preprocessor/slot/counter.hpp +25 -0
  376. data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
  377. data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  378. data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  379. data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  380. data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  381. data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  382. data/ext/boost/preprocessor/tuple.hpp +28 -0
  383. data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
  384. data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
  385. data/ext/boost/preprocessor/tuple/size.hpp +28 -0
  386. data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
  387. data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
  388. data/ext/boost/preprocessor/variadic.hpp +23 -0
  389. data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
  390. data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
  391. data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
  392. data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
  393. data/ext/boost/preprocessor/while.hpp +17 -0
  394. data/ext/boost/preprocessor/wstringize.hpp +29 -0
  395. data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
  396. data/ext/common/AccountsDatabase.h +3 -4
  397. data/ext/common/AgentsStarter.cpp +12 -15
  398. data/ext/common/AgentsStarter.h +54 -120
  399. data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
  400. data/ext/common/ApplicationPool2/AppTypes.h +21 -14
  401. data/ext/common/ApplicationPool2/Common.h +36 -19
  402. data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
  403. data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
  404. data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
  405. data/ext/common/ApplicationPool2/Group.h +304 -171
  406. data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
  407. data/ext/common/ApplicationPool2/Options.h +50 -62
  408. data/ext/common/ApplicationPool2/Pool.h +285 -189
  409. data/ext/common/ApplicationPool2/Process.h +126 -115
  410. data/ext/common/ApplicationPool2/Session.h +70 -30
  411. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
  412. data/ext/common/ApplicationPool2/Socket.h +57 -43
  413. data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
  414. data/ext/common/ApplicationPool2/Spawner.h +59 -38
  415. data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
  416. data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
  417. data/ext/common/BackgroundEventLoop.cpp +48 -1
  418. data/ext/common/BackgroundEventLoop.h +3 -1
  419. data/ext/common/Constants.h +30 -8
  420. data/ext/common/DataStructures/HashedStaticString.h +103 -0
  421. data/ext/common/DataStructures/LString.h +396 -0
  422. data/ext/common/DataStructures/StringKeyTable.h +588 -0
  423. data/ext/common/EventedMessageServer.h +1 -0
  424. data/ext/common/FileDescriptor.h +5 -0
  425. data/ext/common/InstanceDirectory.h +240 -0
  426. data/ext/common/Logging.cpp +38 -13
  427. data/ext/common/Logging.h +53 -22
  428. data/ext/common/MemoryKit/mbuf.cpp +413 -0
  429. data/ext/common/MemoryKit/mbuf.h +266 -0
  430. data/ext/common/MemoryKit/palloc.cpp +337 -0
  431. data/ext/common/MemoryKit/palloc.h +121 -0
  432. data/ext/common/ResourceLocator.h +62 -6
  433. data/ext/common/SafeLibev.h +4 -4
  434. data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
  435. data/ext/common/ServerKit/Channel.h +747 -0
  436. data/ext/common/ServerKit/Client.h +166 -0
  437. data/ext/common/ServerKit/ClientRef.h +130 -0
  438. data/ext/common/ServerKit/Context.h +129 -0
  439. data/ext/common/ServerKit/Errors.h +103 -0
  440. data/ext/common/ServerKit/FdSinkChannel.h +206 -0
  441. data/ext/common/ServerKit/FdSourceChannel.h +230 -0
  442. data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
  443. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
  444. data/ext/common/ServerKit/HeaderTable.h +472 -0
  445. data/ext/common/ServerKit/Hooks.h +79 -0
  446. data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
  447. data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
  448. data/ext/common/ServerKit/HttpClient.h +94 -0
  449. data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
  450. data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
  451. data/ext/common/ServerKit/HttpRequest.h +276 -0
  452. data/ext/common/ServerKit/HttpRequestRef.h +130 -0
  453. data/ext/common/ServerKit/HttpServer.h +1152 -0
  454. data/ext/common/ServerKit/Implementation.cpp +47 -0
  455. data/ext/common/ServerKit/Server.h +1040 -0
  456. data/ext/common/ServerKit/http_parser.cpp +2259 -0
  457. data/ext/common/ServerKit/http_parser.h +330 -0
  458. data/ext/common/StaticString.h +8 -0
  459. data/ext/common/Utils.cpp +14 -12
  460. data/ext/common/Utils.h +9 -103
  461. data/ext/common/Utils/BufferedIO.h +1 -0
  462. data/ext/common/Utils/CachedFileStat.hpp +1 -7
  463. data/ext/common/Utils/DateParsing.h +379 -0
  464. data/ext/common/Utils/FileChangeChecker.h +3 -9
  465. data/ext/common/Utils/Hasher.cpp +52 -0
  466. data/ext/common/Utils/Hasher.h +58 -0
  467. data/ext/common/Utils/IOUtils.cpp +62 -62
  468. data/ext/common/Utils/JsonUtils.h +21 -0
  469. data/ext/common/Utils/OptionParsing.h +75 -0
  470. data/ext/common/Utils/StrIntUtils.cpp +112 -19
  471. data/ext/common/Utils/StrIntUtils.h +52 -12
  472. data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
  473. data/ext/common/Utils/VariantMap.h +18 -7
  474. data/ext/common/Utils/modp_b64.cpp +290 -0
  475. data/ext/common/Utils/modp_b64.h +241 -0
  476. data/ext/common/Utils/modp_b64_data.h +479 -0
  477. data/ext/common/Utils/sysqueue.h +811 -0
  478. data/ext/common/agents/Base.cpp +71 -98
  479. data/ext/common/agents/Base.h +11 -3
  480. data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
  481. data/ext/common/agents/HelperAgent/Main.cpp +899 -487
  482. data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
  484. data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
  485. data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
  486. data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
  487. data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
  488. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
  489. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
  490. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
  491. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
  492. data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
  493. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
  494. data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
  495. data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
  496. data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
  497. data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
  498. data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
  499. data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
  500. data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
  501. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  502. data/ext/common/agents/Main.cpp +107 -0
  503. data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
  504. data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
  505. data/ext/common/agents/Watchdog/AdminServer.h +390 -0
  506. data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
  507. data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
  508. data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
  509. data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
  510. data/ext/common/agents/Watchdog/Main.cpp +743 -202
  511. data/ext/libeio/eio.c +17 -0
  512. data/ext/libeio/eio.h +2 -0
  513. data/ext/nginx/CacheLocationConfig.c +177 -198
  514. data/ext/nginx/CacheLocationConfig.c.erb +35 -22
  515. data/ext/nginx/Configuration.c +402 -236
  516. data/ext/nginx/Configuration.h +12 -5
  517. data/ext/nginx/ConfigurationCommands.c +35 -15
  518. data/ext/nginx/ConfigurationCommands.c.erb +4 -4
  519. data/ext/nginx/ConfigurationFields.h +9 -5
  520. data/ext/nginx/ConfigurationFields.h.erb +3 -1
  521. data/ext/nginx/ContentHandler.c +393 -362
  522. data/ext/nginx/CreateLocationConfig.c +8 -4
  523. data/ext/nginx/CreateLocationConfig.c.erb +8 -3
  524. data/ext/nginx/MergeLocationConfig.c +36 -6
  525. data/ext/nginx/MergeLocationConfig.c.erb +42 -1
  526. data/ext/nginx/ngx_http_passenger_module.c +28 -15
  527. data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
  528. data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
  529. data/ext/oxt/implementation.cpp +92 -20
  530. data/ext/oxt/thread.hpp +5 -0
  531. data/ext/ruby/extconf.rb +3 -6
  532. data/ext/ruby/passenger_native_support.c +13 -40
  533. data/helper-scripts/download_binaries/extconf.rb +4 -4
  534. data/helper-scripts/meteor-loader.rb +12 -112
  535. data/helper-scripts/node-loader.js +3 -91
  536. data/helper-scripts/rack-loader.rb +13 -14
  537. data/helper-scripts/rack-preloader.rb +16 -17
  538. data/helper-scripts/wsgi-loader.py +11 -7
  539. data/lib/phusion_passenger.rb +100 -79
  540. data/lib/phusion_passenger/abstract_installer.rb +28 -3
  541. data/lib/phusion_passenger/admin_tools.rb +3 -3
  542. data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
  543. data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
  544. data/lib/phusion_passenger/apache2/config_options.rb +72 -22
  545. data/lib/phusion_passenger/common_library.rb +79 -14
  546. data/lib/phusion_passenger/config/about_command.rb +17 -23
  547. data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
  548. data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
  549. data/lib/phusion_passenger/config/command.rb +1 -4
  550. data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
  551. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
  552. data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
  553. data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
  554. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
  555. data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
  556. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
  557. data/lib/phusion_passenger/config/installation_utils.rb +241 -0
  558. data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
  559. data/lib/phusion_passenger/config/main.rb +43 -14
  560. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
  561. data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
  562. data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
  563. data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
  564. data/lib/phusion_passenger/config/utils.rb +64 -39
  565. data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
  566. data/lib/phusion_passenger/constants.rb +27 -6
  567. data/lib/phusion_passenger/debug_logging.rb +32 -15
  568. data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
  569. data/lib/phusion_passenger/message_client.rb +21 -22
  570. data/lib/phusion_passenger/native_support.rb +26 -31
  571. data/lib/phusion_passenger/nginx/config_options.rb +32 -19
  572. data/lib/phusion_passenger/packaging.rb +7 -3
  573. data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
  574. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
  575. data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
  576. data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
  577. data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  578. data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
  579. data/lib/phusion_passenger/request_handler.rb +47 -82
  580. data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
  581. data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
  582. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
  583. data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
  584. data/lib/phusion_passenger/standalone/command.rb +27 -275
  585. data/lib/phusion_passenger/standalone/command2.rb +292 -0
  586. data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
  587. data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
  588. data/lib/phusion_passenger/standalone/main.rb +69 -71
  589. data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
  590. data/lib/phusion_passenger/standalone/start_command.rb +406 -467
  591. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
  592. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
  593. data/lib/phusion_passenger/standalone/status_command.rb +64 -23
  594. data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
  595. data/lib/phusion_passenger/standalone/version_command.rb +1 -5
  596. data/lib/phusion_passenger/utils.rb +0 -4
  597. data/lib/phusion_passenger/utils/json.rb +70 -4
  598. data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
  599. data/lib/phusion_passenger/utils/tee_input.rb +3 -3
  600. data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
  601. data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
  602. data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
  603. data/packaging/rpm/setup-system +2 -1
  604. data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
  605. data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
  606. data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
  607. data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
  608. data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
  609. data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
  610. data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
  611. data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
  612. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
  613. data/resources/templates/standalone/config.erb +14 -16
  614. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
  615. data/test/.rspec +1 -0
  616. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
  617. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
  618. data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
  619. data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
  620. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
  621. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
  622. data/test/cxx/BufferedIOTest.cpp +40 -40
  623. data/test/cxx/CxxTestMain.cpp +4 -22
  624. data/test/cxx/DataStructures/LStringTest.cpp +275 -0
  625. data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
  626. data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
  627. data/test/cxx/MessageServerTest.cpp +62 -55
  628. data/test/cxx/RequestHandlerTest.cpp +26 -27
  629. data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
  630. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
  631. data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
  632. data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
  633. data/test/cxx/ServerKit/ServerTest.cpp +408 -0
  634. data/test/cxx/TestSupport.cpp +51 -15
  635. data/test/cxx/TestSupport.h +31 -21
  636. data/test/cxx/UnionStationTest.cpp +121 -122
  637. data/test/cxx/UtilsTest.cpp +9 -33
  638. data/test/integration_tests/apache2_tests.rb +65 -27
  639. data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
  640. data/test/integration_tests/native_packaging_spec.rb +32 -17
  641. data/test/integration_tests/nginx_tests.rb +28 -10
  642. data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
  643. data/test/integration_tests/standalone_tests.rb +232 -169
  644. data/test/ruby/debug_logging_spec.rb +44 -40
  645. data/test/ruby/rails3.0/preloader_spec.rb +1 -1
  646. data/test/ruby/rails3.1/preloader_spec.rb +1 -1
  647. data/test/ruby/rails3.2/preloader_spec.rb +1 -1
  648. data/test/ruby/rails4.0/preloader_spec.rb +1 -1
  649. data/test/ruby/rails4.1/preloader_spec.rb +1 -1
  650. data/test/ruby/request_handler_spec.rb +62 -24
  651. data/test/ruby/shared/loader_sharedspec.rb +10 -9
  652. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
  653. data/test/ruby/spec_helper.rb +2 -11
  654. data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
  655. data/test/ruby/union_station_spec.rb +45 -40
  656. data/test/ruby/utils/tee_input_spec.rb +5 -5
  657. data/test/ruby/utils_spec.rb +3 -39
  658. data/test/stub/apache2/httpd.conf.erb +5 -2
  659. data/test/stub/nginx/nginx.conf.erb +3 -1
  660. data/test/support/apache2_controller.rb +25 -25
  661. data/test/support/nginx_controller.rb +14 -14
  662. data/test/support/test_helper.rb +74 -75
  663. metadata +439 -643
  664. metadata.gz.asc +7 -7
  665. data/ext/common/MultiLibeio.cpp +0 -204
  666. data/ext/common/MultiLibeio.h +0 -67
  667. data/ext/common/ServerInstanceDir.h +0 -402
  668. data/ext/common/Utils/Base64.cpp +0 -143
  669. data/ext/common/Utils/Base64.h +0 -83
  670. data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
  671. data/ext/common/Utils/PriorityQueue.h +0 -54
  672. data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
  673. data/ext/common/Utils/fib.c +0 -699
  674. data/ext/common/Utils/fib.h +0 -101
  675. data/ext/common/Utils/fibpriv.h +0 -67
  676. data/ext/common/agents/EnvPrinter.c +0 -16
  677. data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
  678. data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
  679. data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
  680. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
  681. data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
  682. data/ext/common/agents/SpawnPreparer.cpp +0 -206
  683. data/ext/common/agents/TempDirToucher.c +0 -383
  684. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
  685. data/helper-scripts/classic-rails-loader.rb +0 -166
  686. data/helper-scripts/classic-rails-preloader.rb +0 -193
  687. data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
  688. data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
  689. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
  690. data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
  691. data/lib/phusion_passenger/standalone/config_file.rb +0 -119
  692. data/lib/phusion_passenger/standalone/help_command.rb +0 -57
  693. data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
  694. data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
  695. data/lib/phusion_passenger/standalone/utils.rb +0 -58
  696. data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
  697. data/packaging/debian/LICENSE.md +0 -19
  698. data/packaging/debian/README.md +0 -320
  699. data/packaging/debian/Vagrantfile +0 -25
  700. data/packaging/debian/build +0 -210
  701. data/packaging/debian/debian_specs/nginx/changelog +0 -1989
  702. data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
  703. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
  704. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
  705. data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
  706. data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
  707. data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
  708. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
  709. data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
  710. data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
  711. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
  712. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
  713. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
  714. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
  715. data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
  716. data/packaging/debian/debian_specs/nginx/control.erb +0 -226
  717. data/packaging/debian/debian_specs/nginx/copyright +0 -196
  718. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
  719. data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
  720. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
  721. data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
  722. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
  723. data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
  724. data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
  725. data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
  726. data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
  727. data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
  728. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
  729. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
  730. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
  731. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
  732. data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
  733. data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
  734. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
  735. data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
  736. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
  737. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
  738. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
  739. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
  740. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
  741. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
  742. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
  743. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
  744. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
  745. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
  746. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
  747. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
  748. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
  749. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
  750. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
  751. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
  752. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
  753. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
  754. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
  755. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
  756. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
  757. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
  758. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
  759. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
  760. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
  761. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
  762. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
  763. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
  764. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
  765. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
  766. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
  767. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
  768. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
  769. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
  770. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
  771. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
  772. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
  773. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
  774. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
  775. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
  776. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
  777. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
  778. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
  779. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
  780. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
  781. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
  782. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
  783. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
  784. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
  785. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
  786. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
  787. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
  788. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
  789. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
  790. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
  791. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
  792. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
  793. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
  794. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
  795. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
  796. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
  797. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
  798. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
  799. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
  800. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
  801. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
  802. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
  803. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
  804. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
  805. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
  806. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
  807. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
  808. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
  809. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
  810. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
  811. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
  812. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
  813. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
  814. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
  815. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
  816. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
  817. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
  818. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
  819. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
  820. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
  821. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
  822. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
  823. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
  824. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
  825. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
  826. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
  827. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
  828. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
  829. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
  830. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
  831. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
  832. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
  833. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
  834. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
  835. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
  836. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
  837. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
  838. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
  839. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
  840. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
  841. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
  842. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
  843. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
  844. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
  845. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
  846. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
  847. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
  848. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
  849. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
  850. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
  851. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
  852. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
  853. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
  854. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
  855. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
  856. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
  857. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
  858. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
  859. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
  860. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
  861. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
  862. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
  863. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
  864. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
  865. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
  866. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
  867. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
  868. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
  869. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
  870. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
  871. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
  872. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
  873. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
  874. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
  875. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
  876. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
  877. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
  878. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
  879. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
  880. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
  881. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
  882. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
  883. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
  884. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
  885. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
  886. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
  887. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
  888. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
  889. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
  890. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
  891. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
  892. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
  893. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
  894. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
  895. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
  896. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
  897. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
  898. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
  899. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
  900. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
  901. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
  902. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
  903. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
  904. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
  905. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
  906. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
  907. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
  908. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
  909. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
  910. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
  911. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
  912. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
  913. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
  914. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
  915. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
  916. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
  917. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
  918. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
  919. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
  920. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
  921. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
  922. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
  923. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
  924. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
  925. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
  926. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
  927. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
  928. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
  929. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
  930. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
  931. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
  932. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
  933. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
  934. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
  935. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
  936. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
  937. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
  938. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
  939. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
  940. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
  941. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
  942. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
  943. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
  944. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
  945. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
  946. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
  947. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
  948. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
  949. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
  950. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
  951. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
  952. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
  953. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
  954. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
  955. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
  956. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
  957. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
  958. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
  959. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
  960. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
  961. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
  962. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
  963. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
  964. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
  965. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
  966. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
  967. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
  968. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
  969. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
  970. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
  971. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
  972. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
  973. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
  974. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
  975. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
  976. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
  977. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
  978. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
  979. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
  980. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
  981. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
  982. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
  983. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
  984. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
  985. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
  986. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
  987. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
  988. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
  989. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
  990. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
  991. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
  992. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
  993. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
  994. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
  995. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
  996. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
  997. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
  998. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
  999. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
  1000. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
  1001. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
  1002. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
  1003. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
  1004. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
  1005. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
  1006. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
  1007. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
  1008. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
  1009. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
  1010. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
  1011. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
  1012. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
  1013. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
  1014. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
  1015. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
  1016. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
  1017. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
  1018. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
  1019. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
  1020. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
  1021. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
  1022. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
  1023. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
  1024. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
  1025. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
  1026. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
  1027. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
  1028. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
  1029. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
  1030. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
  1031. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
  1032. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
  1033. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
  1034. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
  1035. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
  1036. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
  1037. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
  1038. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
  1039. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
  1040. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
  1041. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
  1042. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
  1043. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
  1044. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
  1045. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
  1046. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
  1047. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
  1048. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
  1049. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
  1050. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
  1051. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
  1052. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
  1053. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
  1054. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
  1055. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
  1056. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
  1057. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
  1058. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
  1059. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
  1060. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
  1061. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
  1062. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
  1063. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
  1064. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
  1065. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
  1066. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
  1067. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
  1068. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
  1069. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
  1070. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
  1071. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
  1072. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
  1073. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
  1074. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
  1075. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
  1076. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
  1077. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
  1078. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
  1079. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
  1080. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
  1081. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
  1082. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
  1083. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
  1084. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
  1085. data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
  1086. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
  1087. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
  1088. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
  1089. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
  1090. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
  1091. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
  1092. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
  1093. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
  1094. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
  1095. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
  1096. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
  1097. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
  1098. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
  1099. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
  1100. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
  1101. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
  1102. data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
  1103. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
  1104. data/packaging/debian/debian_specs/nginx/patches/series +0 -1
  1105. data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
  1106. data/packaging/debian/debian_specs/nginx/source/format +0 -1
  1107. data/packaging/debian/debian_specs/nginx/tests/control +0 -4
  1108. data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
  1109. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
  1110. data/packaging/debian/debian_specs/nginx/watch +0 -3
  1111. data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
  1112. data/packaging/debian/debian_specs/passenger/changelog +0 -316
  1113. data/packaging/debian/debian_specs/passenger/compat +0 -1
  1114. data/packaging/debian/debian_specs/passenger/control.erb +0 -123
  1115. data/packaging/debian/debian_specs/passenger/copyright +0 -385
  1116. data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
  1117. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
  1118. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
  1119. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
  1120. data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
  1121. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
  1122. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
  1123. data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
  1124. data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
  1125. data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
  1126. data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
  1127. data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
  1128. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
  1129. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
  1130. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
  1131. data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
  1132. data/packaging/debian/debian_specs/passenger/source/format +0 -1
  1133. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
  1134. data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
  1135. data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
  1136. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
  1137. data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
  1138. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
  1139. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
  1140. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
  1141. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
  1142. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
  1143. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
  1144. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
  1145. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
  1146. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
  1147. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
  1148. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
  1149. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
  1150. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
  1151. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
  1152. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
  1153. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  1154. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
  1155. data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
  1156. data/packaging/debian/docker_images/Makefile +0 -38
  1157. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  1158. data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
  1159. data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
  1160. data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
  1161. data/packaging/debian/docker_images/buildbox/install.sh +0 -85
  1162. data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
  1163. data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
  1164. data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
  1165. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
  1166. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
  1167. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
  1168. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
  1169. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
  1170. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
  1171. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
  1172. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
  1173. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
  1174. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
  1175. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
  1176. data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
  1177. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
  1178. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
  1179. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
  1180. data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
  1181. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
  1182. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
  1183. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
  1184. data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
  1185. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
  1186. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
  1187. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
  1188. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
  1189. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
  1190. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
  1191. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
  1192. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
  1193. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
  1194. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
  1195. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
  1196. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
  1197. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
  1198. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
  1199. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
  1200. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
  1201. data/packaging/debian/internal/build/Rakefile +0 -235
  1202. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
  1203. data/packaging/debian/internal/build/build-source-package.rb +0 -121
  1204. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
  1205. data/packaging/debian/internal/build/rakefile_support.rb +0 -96
  1206. data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
  1207. data/packaging/debian/internal/build/setup-environment.sh +0 -29
  1208. data/packaging/debian/internal/lib/distro_info.rb +0 -82
  1209. data/packaging/debian/internal/lib/distro_info.sh +0 -303
  1210. data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
  1211. data/packaging/debian/internal/lib/library.sh +0 -83
  1212. data/packaging/debian/internal/lib/preprocessor.rb +0 -173
  1213. data/packaging/debian/internal/lib/tracking.rb +0 -95
  1214. data/packaging/debian/internal/lib/tracking_category.rb +0 -45
  1215. data/packaging/debian/internal/lib/tracking_database.rb +0 -132
  1216. data/packaging/debian/internal/lib/tracking_task.rb +0 -148
  1217. data/packaging/debian/internal/lib/utils.rb +0 -78
  1218. data/packaging/debian/internal/publish/Rakefile +0 -97
  1219. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
  1220. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
  1221. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
  1222. data/packaging/debian/internal/publish/preinit.sh +0 -7
  1223. data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
  1224. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
  1225. data/packaging/debian/internal/scripts/initccache.sh +0 -35
  1226. data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
  1227. data/packaging/debian/internal/scripts/my_init +0 -340
  1228. data/packaging/debian/internal/scripts/pin_certificates +0 -34
  1229. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
  1230. data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
  1231. data/packaging/debian/internal/scripts/setuser +0 -31
  1232. data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
  1233. data/packaging/debian/internal/shell/preinit.sh +0 -28
  1234. data/packaging/debian/internal/shell/sudoers.conf +0 -1
  1235. data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
  1236. data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
  1237. data/packaging/debian/internal/test/apache/vhost.conf +0 -17
  1238. data/packaging/debian/internal/test/misc/config.json +0 -15
  1239. data/packaging/debian/internal/test/misc/hosts.conf +0 -4
  1240. data/packaging/debian/internal/test/misc/init.sh +0 -25
  1241. data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
  1242. data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
  1243. data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
  1244. data/packaging/debian/internal/test/misc/test_support.rb +0 -61
  1245. data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
  1246. data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
  1247. data/packaging/debian/internal/test/test.sh +0 -141
  1248. data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
  1249. data/packaging/debian/jenkins/publish/publish.sh +0 -69
  1250. data/packaging/debian/jenkins/test/test.sh +0 -63
  1251. data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
  1252. data/packaging/debian/publish +0 -172
  1253. data/packaging/debian/shell +0 -116
  1254. data/packaging/debian/test +0 -142
  1255. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
  1256. data/test/cxx/Base64Test.cpp +0 -50
  1257. data/test/cxx/FileBackedPipeTest.cpp +0 -626
  1258. data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
  1259. data/test/cxx/ScgiRequestParserTest.cpp +0 -423
  1260. data/test/cxx/ServerInstanceDirTest.cpp +0 -175
  1261. data/test/ruby/admin_tools_spec.rb +0 -360
  1262. data/test/ruby/classic_rails/loader_spec.rb +0 -46
  1263. data/test/ruby/classic_rails/preloader_spec.rb +0 -52
  1264. data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
  1265. data/test/stub/rails2.3/Rakefile +0 -10
  1266. data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
  1267. data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
  1268. data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
  1269. data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
  1270. data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
  1271. data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
  1272. data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
  1273. data/test/stub/rails2.3/config/boot.rb +0 -110
  1274. data/test/stub/rails2.3/config/database.yml +0 -19
  1275. data/test/stub/rails2.3/config/environment.rb +0 -62
  1276. data/test/stub/rails2.3/config/environments/development.rb +0 -17
  1277. data/test/stub/rails2.3/config/environments/production.rb +0 -18
  1278. data/test/stub/rails2.3/config/environments/staging.rb +0 -18
  1279. data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
  1280. data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
  1281. data/test/stub/rails2.3/config/routes.rb +0 -35
  1282. data/test/stub/rails2.3/log/.gitignore +0 -1
  1283. data/test/stub/rails2.3/public/.gitignore +0 -1
  1284. data/test/stub/rails2.3/script/about +0 -3
  1285. data/test/stub/rails2.3/script/console +0 -3
  1286. data/test/stub/rails2.3/script/dbconsole +0 -3
  1287. data/test/stub/rails2.3/script/destroy +0 -3
  1288. data/test/stub/rails2.3/script/generate +0 -3
  1289. data/test/stub/rails2.3/script/performance/benchmarker +0 -3
  1290. data/test/stub/rails2.3/script/performance/profiler +0 -3
  1291. data/test/stub/rails2.3/script/performance/request +0 -3
  1292. data/test/stub/rails2.3/script/plugin +0 -3
  1293. data/test/stub/rails2.3/script/process/inspector +0 -3
  1294. data/test/stub/rails2.3/script/process/reaper +0 -3
  1295. data/test/stub/rails2.3/script/process/spawner +0 -3
  1296. data/test/stub/rails2.3/script/runner +0 -3
  1297. data/test/stub/rails2.3/script/server +0 -3
  1298. data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
  1299. data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
  1300. data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
  1301. data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -1,1749 +0,0 @@
1
- package Test::Nginx::Socket;
2
-
3
- use lib 'lib';
4
- use lib 'inc';
5
-
6
- use Test::Base -Base;
7
-
8
- our $VERSION = '0.17';
9
-
10
- use Encode;
11
- use Data::Dumper;
12
- use Time::HiRes qw(sleep time);
13
- use Test::LongString;
14
- use List::MoreUtils qw( any );
15
- use IO::Select ();
16
-
17
- our $ServerAddr = 'localhost';
18
- our $Timeout = $ENV{TEST_NGINX_TIMEOUT} || 2;
19
-
20
- use Test::Nginx::Util qw(
21
- setup_server_root
22
- write_config_file
23
- get_canon_version
24
- get_nginx_version
25
- trim
26
- show_all_chars
27
- parse_headers
28
- run_tests
29
- $ServerPortForClient
30
- $ServerPort
31
- $PidFile
32
- $ServRoot
33
- $ConfFile
34
- $RunTestHelper
35
- $RepeatEach
36
- worker_connections
37
- master_process_enabled
38
- config_preamble
39
- repeat_each
40
- workers
41
- master_on
42
- log_level
43
- no_shuffle
44
- no_root_location
45
- server_root
46
- html_dir
47
- server_port
48
- no_nginx_manager
49
- );
50
-
51
- #use Smart::Comments::JSON '###';
52
- use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
53
- use POSIX qw(EAGAIN);
54
- use IO::Socket;
55
-
56
- #our ($PrevRequest, $PrevConfig);
57
-
58
- our $NoLongString = undef;
59
-
60
- our @EXPORT = qw( plan run_tests run_test
61
- repeat_each config_preamble worker_connections
62
- master_process_enabled
63
- no_long_string workers master_on
64
- log_level no_shuffle no_root_location
65
- server_addr server_root html_dir server_port
66
- timeout no_nginx_manager
67
- );
68
-
69
- sub send_request ($$$$@);
70
-
71
- sub run_test_helper ($$);
72
-
73
- sub error_event_handler ($);
74
- sub read_event_handler ($);
75
- sub write_event_handler ($);
76
-
77
- sub no_long_string () {
78
- $NoLongString = 1;
79
- }
80
-
81
- sub server_addr (@) {
82
- if (@_) {
83
-
84
- #warn "setting server addr to $_[0]\n";
85
- $ServerAddr = shift;
86
- }
87
- else {
88
- return $ServerAddr;
89
- }
90
- }
91
-
92
- sub timeout (@) {
93
- if (@_) {
94
- $Timeout = shift;
95
- }
96
- else {
97
- $Timeout;
98
- }
99
- }
100
-
101
- $RunTestHelper = \&run_test_helper;
102
-
103
- # This will parse a "request"" string. The expected format is:
104
- # - One line for the HTTP verb (POST, GET, etc.) plus optional relative URL
105
- # (default is /) plus optional HTTP version (default is HTTP/1.1).
106
- # - More lines considered as the body of the request.
107
- # Most people don't care about headers and this is enough.
108
- #
109
- # This function will return a reference to a hash with the parsed elements
110
- # plus information on the parsing itself like "how many white spaces were
111
- # skipped before the VERB" (skipped_before_method), "was the version provided"
112
- # (http_ver_size = 0).
113
- sub parse_request ($$) {
114
- my ( $name, $rrequest ) = @_;
115
- open my $in, '<', $rrequest;
116
- my $first = <$in>;
117
- if ( !$first ) {
118
- Test::More::BAIL_OUT("$name - Request line should be non-empty");
119
- die;
120
- }
121
- #$first =~ s/^\s+|\s+$//gs;
122
- my ($before_meth, $meth, $after_meth);
123
- my ($rel_url, $rel_url_size, $after_rel_url);
124
- my ($http_ver, $http_ver_size, $after_http_ver);
125
- my $end_line_size;
126
- if ($first =~ /^(\s*)(\S+)( *)((\S+)( *))?((\S+)( *))?(\s*)/) {
127
- $before_meth = defined $1 ? length($1) : undef;
128
- $meth = $2;
129
- $after_meth = defined $3 ? length($3) : undef;
130
- $rel_url = $5;
131
- $rel_url_size = defined $5 ? length($5) : undef;
132
- $after_rel_url = defined $6 ? length($6) : undef;
133
- $http_ver = $8;
134
- if (!defined $8) {
135
- $http_ver_size = undef;
136
- } else {
137
- $http_ver_size = defined $8 ? length($8) : undef;
138
- }
139
- if (!defined $9) {
140
- $after_http_ver = undef;
141
- } else {
142
- $after_http_ver = defined $9 ? length($9) : undef;
143
- }
144
- $end_line_size = defined $10 ? length($10) : undef;
145
- } else {
146
- Test::More::BAIL_OUT("$name - Request line is not valid. Should be 'meth [url [version]]'");
147
- die;
148
- }
149
- if ( !defined $rel_url ) {
150
- $rel_url = '/';
151
- $rel_url_size = 0;
152
- $after_rel_url = 0;
153
- }
154
- if ( !defined $http_ver ) {
155
- $http_ver = 'HTTP/1.1';
156
- $http_ver_size = 0;
157
- $after_http_ver = 0;
158
- }
159
-
160
- #my $url = "http://localhost:$ServerPortForClient" . $rel_url;
161
-
162
- my $content = do { local $/; <$in> };
163
- my $content_size;
164
- if ( !defined $content ) {
165
- $content = "";
166
- $content_size = 0;
167
- } else {
168
- $content_size = length($content);
169
- }
170
-
171
- #warn Dumper($content);
172
-
173
- close $in;
174
-
175
- return {
176
- method => $meth,
177
- url => $rel_url,
178
- content => $content,
179
- http_ver => $http_ver,
180
- skipped_before_method => $before_meth,
181
- method_size => length($meth),
182
- skipped_after_method => $after_meth,
183
- url_size => $rel_url_size,
184
- skipped_after_url => $after_rel_url,
185
- http_ver_size => $http_ver_size,
186
- skipped_after_http_ver => $after_http_ver + $end_line_size,
187
- content_size => $content_size,
188
- };
189
- }
190
-
191
- # From a parsed request, builds the "moves" to apply to the original request
192
- # to transform it (e.g. add missing version). Elements of the returned array
193
- # are of 2 types:
194
- # - d : number of characters to remove.
195
- # - s_* : number of characters (s_s) to replace by value (s_v).
196
- sub get_moves($) {
197
- my ($parsed_req) = @_;
198
- return ({d => $parsed_req->{skipped_before_method}},
199
- {s_s => $parsed_req->{method_size},
200
- s_v => $parsed_req->{method}},
201
- {d => $parsed_req->{skipped_after_method}},
202
- {s_s => $parsed_req->{url_size},
203
- s_v => $parsed_req->{url}},
204
- {d => $parsed_req->{skipped_after_url}},
205
- {s_s => $parsed_req->{http_ver_size},
206
- s_v => $parsed_req->{http_ver}},
207
- {d => $parsed_req->{skipped_after_http_ver}},
208
- {s_s => 0,
209
- s_v => $parsed_req->{headers}},
210
- {s_s => $parsed_req->{content_size},
211
- s_v => $parsed_req->{content}}
212
- );
213
- }
214
-
215
- # Apply moves (see above) to an array of packets that correspond to a request.
216
- # The use of this function is explained in the build_request_from_packets
217
- # function.
218
- sub apply_moves($$) {
219
- my ($r_packet, $r_move) = @_;
220
- my $current_packet = shift @$r_packet;
221
- my $current_move = shift @$r_move;
222
- my $in_packet_cursor = 0;
223
- my @result = ();
224
- while (defined $current_packet) {
225
- if (!defined $current_move) {
226
- push @result, $current_packet;
227
- $current_packet = shift @$r_packet;
228
- $in_packet_cursor = 0;
229
- } elsif (defined $current_move->{d}) {
230
- # Remove stuff from packet
231
- if ($current_move->{d} > length($current_packet) - $in_packet_cursor) {
232
- # Eat up what is left of packet.
233
- $current_move->{d} -= length($current_packet) - $in_packet_cursor;
234
- if ($in_packet_cursor > 0) {
235
- # Something in packet from previous iteration.
236
- push @result, $current_packet;
237
- }
238
- $current_packet = shift @$r_packet;
239
- $in_packet_cursor = 0;
240
- } else {
241
- # Remove from current point in current packet
242
- substr($current_packet, $in_packet_cursor, $current_move->{d}) = '';
243
- $current_move = shift @$r_move;
244
- }
245
- } else {
246
- # Substitute stuff
247
- if ($current_move->{s_s} > length($current_packet) - $in_packet_cursor) {
248
- # {s_s=>3, s_v=>GET} on ['GE', 'T /foo']
249
- $current_move->{s_s} -= length($current_packet) - $in_packet_cursor;
250
- substr($current_packet, $in_packet_cursor) = substr($current_move->{s_v}, 0, length($current_packet) - $in_packet_cursor);
251
- push @result, $current_packet;
252
- $current_move->{s_v} = substr($current_move->{s_v}, length($current_packet) - $in_packet_cursor);
253
- $current_packet = shift @$r_packet;
254
- $in_packet_cursor = 0;
255
- } else {
256
- substr($current_packet, $in_packet_cursor, $current_move->{s_s}) = $current_move->{s_v};
257
- $in_packet_cursor += length($current_move->{s_v});
258
- $current_move = shift @$r_move;
259
- }
260
- }
261
- }
262
- return \@result;
263
- }
264
- # Given a request as an array of packets, will parse it, append the appropriate
265
- # headers and return another array of packets.
266
- # The function implemented here can be high-level summarized as:
267
- # 1 - Concatenate all packets to obtain a string representation of request.
268
- # 2 - Parse the string representation
269
- # 3 - Get the "moves" from the parsing
270
- # 4 - Apply the "moves" to the packets.
271
- sub build_request_from_packets($$$$$) {
272
- my ( $name, $more_headers, $is_chunked, $conn_header, $request_packets ) = @_;
273
- # Concatenate packets as a string
274
- my $parsable_request = '';
275
- my @packet_length;
276
- for my $one_packet (@$request_packets) {
277
- $parsable_request .= $one_packet;
278
- push @packet_length, length($one_packet);
279
- }
280
- # Parse the string representation.
281
- my $parsed_req = parse_request( $name, \$parsable_request );
282
-
283
- # Append headers
284
- my $len_header = '';
285
- if ( !$is_chunked
286
- && defined $parsed_req->{content}
287
- && $parsed_req->{content} ne ''
288
- && $more_headers !~ /\bContent-Length:/ )
289
- {
290
- $parsed_req->{content} =~ s/^\s+|\s+$//gs;
291
-
292
- $len_header .=
293
- "Content-Length: " . length( $parsed_req->{content} ) . "\r\n";
294
- }
295
- $parsed_req->{method} .= ' ';
296
- $parsed_req->{url} .= ' ';
297
- $parsed_req->{http_ver} .= "\r\n";
298
- $parsed_req->{headers} = "Host: localhost\r\nConnection: $conn_header\r\n$more_headers$len_header\r\n";
299
-
300
- # Get the moves from parsing
301
- my @elements_moves = get_moves($parsed_req);
302
- # Apply them to the packets.
303
- return apply_moves($request_packets, \@elements_moves);
304
- }
305
-
306
- # Returns an array of array of hashes from the block. Each element of
307
- # the first-level array is a request.
308
- # Each request is an array of the "packets" to be sent. Each packet is a
309
- # string to send, with an (optionnal) delay before sending it.
310
- # This function parses (and therefore defines the syntax) of "request*"
311
- # sections. See documentation for supported syntax.
312
- sub get_req_from_block ($) {
313
- my ($block) = @_;
314
- my $name = $block->name;
315
-
316
- my @req_list = ();
317
-
318
- if ( defined $block->raw_request ) {
319
-
320
- # Should be deprecated.
321
- if ( ref $block->raw_request && ref $block->raw_request eq 'ARRAY' ) {
322
-
323
- # User already provided an array. So, he/she specified where the
324
- # data should be split. This allows for backward compatibility but
325
- # should use request with arrays as it provides the same functionnality.
326
- my @rr_list = ();
327
- for my $elt ( @{ $block->raw_request } ) {
328
- push @rr_list, {value => $elt};
329
- }
330
- push @req_list, \@rr_list;
331
- }
332
- else {
333
- push @req_list, [{value => $block->raw_request}];
334
- }
335
- }
336
- else {
337
- my $request;
338
- if ( defined $block->request_eval ) {
339
-
340
- diag "$name - request_eval DEPRECATED. Use request eval instead.";
341
- $request = eval $block->request_eval;
342
- if ($@) {
343
- warn $@;
344
- }
345
- }
346
- else {
347
- $request = $block->request;
348
- }
349
-
350
- my $is_chunked = 0;
351
- my $more_headers = '';
352
- if ( $block->more_headers ) {
353
- my @headers = split /\n+/, $block->more_headers;
354
- for my $header (@headers) {
355
- next if $header =~ /^\s*\#/;
356
- my ( $key, $val ) = split /:\s*/, $header, 2;
357
- if ( lc($key) eq 'transfer-encoding' and $val eq 'chunked' ) {
358
- $is_chunked = 1;
359
- }
360
-
361
- #warn "[$key, $val]\n";
362
- $more_headers .= "$key: $val\r\n";
363
- }
364
- }
365
-
366
- if ( $block->pipelined_requests ) {
367
- my $reqs = $block->pipelined_requests;
368
- if ( !ref $reqs || ref $reqs ne 'ARRAY' ) {
369
- Test::More::BAIL_OUT(
370
- "$name - invalid entries in --- pipelined_requests");
371
- }
372
- my $i = 0;
373
- my $prq = "";
374
- for my $request (@$reqs) {
375
- my $conn_type;
376
- if ( $i++ == @$reqs - 1 ) {
377
- $conn_type = 'close';
378
- }
379
- else {
380
- $conn_type = 'keep-alive';
381
- }
382
- my $r_br = build_request_from_packets($name, $more_headers,
383
- $is_chunked, $conn_type,
384
- [$request] );
385
- $prq .= $$r_br[0];
386
- }
387
- push @req_list, [{value =>$prq}];
388
- }
389
- else {
390
- # request section.
391
- if (!ref $request) {
392
- # One request and it is a good old string.
393
- my $r_br = build_request_from_packets($name, $more_headers,
394
- $is_chunked, 'Close',
395
- [$request] );
396
- push @req_list, [{value => $$r_br[0]}];
397
- } elsif (ref $request eq 'ARRAY') {
398
- # A bunch of requests...
399
- for my $one_req (@$request) {
400
- if (!ref $one_req) {
401
- # This request is a good old string.
402
- my $r_br = build_request_from_packets($name, $more_headers,
403
- $is_chunked, 'Close',
404
- [$one_req] );
405
- push @req_list, [{value => $$r_br[0]}];
406
- } elsif (ref $one_req eq 'ARRAY') {
407
- # Request expressed as a serie of packets
408
- my @packet_array = ();
409
- for my $one_packet (@$one_req) {
410
- if (!ref $one_packet) {
411
- # Packet is a string.
412
- push @packet_array, $one_packet;
413
- } elsif (ref $one_packet eq 'HASH'){
414
- # Packet is a hash with a value...
415
- push @packet_array, $one_packet->{value};
416
- } else {
417
- Test::More::BAIL_OUT "$name - Invalid syntax. $one_packet should be a string or hash with value.";
418
- }
419
- }
420
- my $transformed_packet_array = build_request_from_packets($name, $more_headers,
421
- $is_chunked, 'Close',
422
- \@packet_array);
423
- my @transformed_req = ();
424
- my $idx = 0;
425
- for my $one_transformed_packet (@$transformed_packet_array) {
426
- if (!ref $$one_req[$idx]) {
427
- push @transformed_req, {value => $one_transformed_packet};
428
- } else {
429
- # Is a HASH (checked above as $one_packet)
430
- $$one_req[$idx]->{value} = $one_transformed_packet;
431
- push @transformed_req, $$one_req[$idx];
432
- }
433
- $idx++;
434
- }
435
- push @req_list, \@transformed_req;
436
- } else {
437
- Test::More::BAIL_OUT "$name - Invalid syntax. $one_req should be a string or an array of packets.";
438
- }
439
- }
440
- } else {
441
- Test::More::BAIL_OUT(
442
- "$name - invalid ---request : MUST be string or array of requests");
443
- }
444
- }
445
-
446
- }
447
- return \@req_list;
448
- }
449
-
450
- sub run_test_helper ($$) {
451
- my ( $block, $dry_run ) = @_;
452
-
453
- my $name = $block->name;
454
-
455
- my $r_req_list = get_req_from_block($block);
456
-
457
- if ( $#$r_req_list < 0 ) {
458
- Test::More::BAIL_OUT("$name - request empty");
459
- }
460
-
461
- #warn "request: $req\n";
462
-
463
- my $timeout = $block->timeout;
464
- if ( !defined $timeout ) {
465
- $timeout = $Timeout;
466
- }
467
-
468
- my $req_idx = 0;
469
- for my $one_req (@$r_req_list) {
470
- my $raw_resp;
471
-
472
- if ($dry_run) {
473
- $raw_resp = "200 OK HTTP/1.0\r\nContent-Length: 0\r\n\r\n";
474
- }
475
- else {
476
- $raw_resp = send_request( $one_req, $block->raw_request_middle_delay,
477
- $timeout, $block->name );
478
- }
479
-
480
- #warn "raw resonse: [$raw_resp]\n";
481
-
482
- my ($n, $need_array);
483
-
484
- if ($block->pipelined_requests) {
485
- $n = @{ $block->pipelined_requests };
486
- $need_array = 1;
487
-
488
- } else {
489
- $need_array = $#$r_req_list > 0;
490
- }
491
-
492
- again:
493
- #warn "!!! resp: [$raw_resp]";
494
- if (!defined $raw_resp) {
495
- $raw_resp = '';
496
- }
497
-
498
- my ( $res, $raw_headers, $left ) = parse_response( $name, $raw_resp );
499
-
500
- if (!$n) {
501
- if ($left) {
502
- my $name = $block->name;
503
- $left =~ s/([\0-\037\200-\377])/sprintf('\x{%02x}',ord $1)/eg;
504
- warn "WARNING: $name - unexpected extra bytes after last chunk in ",
505
- "response: \"$left\"\n";
506
- }
507
-
508
- } else {
509
- $raw_resp = $left;
510
- $n--;
511
- }
512
-
513
- check_error_code($block, $res, $dry_run, $req_idx, $need_array);
514
- check_raw_response_headers($block, $raw_headers, $dry_run, $req_idx, $need_array);
515
- check_response_headers($block, $res, $raw_headers, $dry_run, $req_idx, $need_array);
516
- check_response_body($block, $res, $dry_run, $req_idx, $need_array);
517
- $req_idx++;
518
-
519
- if ($n) {
520
- goto again;
521
- }
522
- }
523
- }
524
-
525
- # Helper function to retrieve a "check" (e.g. error_code) section. This also
526
- # checks that tests with arrays of requests are arrays themselves.
527
- sub get_indexed_value($$$$) {
528
- my ($name, $value, $req_idx, $need_array) = @_;
529
- if ($need_array) {
530
- if (ref $value && ref $value eq 'ARRAY') {
531
- return $$value[$req_idx];
532
- } else {
533
- Test::More::BAIL_OUT("$name - You asked for many requests, the expected results should be arrays as well.");
534
- }
535
- } else {
536
- # One element but still provided as an array.
537
- if (ref $value && ref $value eq 'ARRAY') {
538
- if ($req_idx != 0) {
539
- Test::More::BAIL_OUT("$name - SHOULD NOT HAPPEN: idx != 0 and don't need array.");
540
- } else {
541
- return $$value[0];
542
- }
543
- } else {
544
- return $value;
545
- }
546
- }
547
- }
548
- sub check_error_code($$$$$) {
549
- my ($block, $res, $dry_run, $req_idx, $need_array) = @_;
550
- my $name = $block->name;
551
- SKIP: {
552
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
553
- if ( defined $block->error_code ) {
554
- is( $res->code || '',
555
- get_indexed_value($name, $block->error_code, $req_idx, $need_array),
556
- "$name - status code ok" );
557
- } else {
558
- is( $res->code || '', 200, "$name - status code ok" );
559
- }
560
- }
561
- }
562
- sub check_raw_response_headers($$$$$) {
563
- my ($block, $raw_headers, $dry_run, $req_idx, $need_array) = @_;
564
- my $name = $block->name;
565
- if ( defined $block->raw_response_headers_like ) {
566
- SKIP: {
567
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
568
- my $expected = get_indexed_value($name,
569
- $block->raw_response_headers_like,
570
- $req_idx,
571
- $need_array);
572
- like $raw_headers, qr/$expected/s, "$name - raw resp headers like";
573
- }
574
- }
575
- }
576
- sub check_response_headers($$$$$) {
577
- my ($block, $res, $raw_headers, $dry_run, $req_idx, $need_array) = @_;
578
- my $name = $block->name;
579
- if ( defined $block->response_headers ) {
580
- my $headers = parse_headers( get_indexed_value($name,
581
- $block->response_headers,
582
- $req_idx,
583
- $need_array));
584
- while ( my ( $key, $val ) = each %$headers ) {
585
- if ( !defined $val ) {
586
-
587
- #warn "HIT";
588
- SKIP: {
589
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
590
- unlike $raw_headers, qr/^\s*\Q$key\E\s*:/ms,
591
- "$name - header $key not present in the raw headers";
592
- }
593
- next;
594
- }
595
-
596
- my $actual_val = $res->header($key);
597
- if ( !defined $actual_val ) {
598
- $actual_val = '';
599
- }
600
-
601
- SKIP: {
602
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
603
- is $actual_val, $val, "$name - header $key ok";
604
- }
605
- }
606
- }
607
- elsif ( defined $block->response_headers_like ) {
608
- my $headers = parse_headers( get_indexed_value($name,
609
- $block->response_headers_like,
610
- $req_idx,
611
- $need_array) );
612
- while ( my ( $key, $val ) = each %$headers ) {
613
- my $expected_val = $res->header($key);
614
- if ( !defined $expected_val ) {
615
- $expected_val = '';
616
- }
617
- SKIP: {
618
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
619
- like $expected_val, qr/^$val$/, "$name - header $key like ok";
620
- }
621
- }
622
- }
623
- }
624
-
625
- sub check_response_body() {
626
- my ($block, $res, $dry_run, $req_idx, $need_array) = @_;
627
- my $name = $block->name;
628
- if ( defined $block->response_body
629
- || defined $block->response_body_eval )
630
- {
631
- my $content = $res->content;
632
- if ( defined $content ) {
633
- $content =~ s/^TE: deflate,gzip;q=0\.3\r\n//gms;
634
- $content =~ s/^Connection: TE, close\r\n//gms;
635
- }
636
-
637
- my $expected;
638
- if ( $block->response_body_eval ) {
639
- diag "$name - response_body_eval is DEPRECATED. Use response_body eval instead.";
640
- $expected = eval get_indexed_value($name,
641
- $block->response_body_eval,
642
- $req_idx,
643
- $need_array);
644
- if ($@) {
645
- warn $@;
646
- }
647
- }
648
- else {
649
- $expected = get_indexed_value($name,
650
- $block->response_body,
651
- $req_idx,
652
- $need_array);
653
- }
654
-
655
- if ( $block->charset ) {
656
- Encode::from_to( $expected, 'UTF-8', $block->charset );
657
- }
658
-
659
- unless (ref $expected) {
660
- $expected =~ s/\$ServerPort\b/$ServerPort/g;
661
- $expected =~ s/\$ServerPortForClient\b/$ServerPortForClient/g;
662
- }
663
-
664
- #warn show_all_chars($content);
665
-
666
- #warn "no long string: $NoLongString";
667
- SKIP: {
668
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
669
- if (ref $expected) {
670
- like $content, $expected, "$name - response_body - like";
671
-
672
- } else {
673
- if ($NoLongString) {
674
- is( $content, $expected,
675
- "$name - response_body - response is expected" );
676
- }
677
- else {
678
- is_string( $content, $expected,
679
- "$name - response_body - response is expected" );
680
- }
681
- }
682
- }
683
-
684
- }
685
- elsif ( defined $block->response_body_like ) {
686
- my $content = $res->content;
687
- if ( defined $content ) {
688
- $content =~ s/^TE: deflate,gzip;q=0\.3\r\n//gms;
689
- }
690
- $content =~ s/^Connection: TE, close\r\n//gms;
691
- my $expected_pat = get_indexed_value($name,
692
- $block->response_body_like,
693
- $req_idx,
694
- $need_array);
695
- $expected_pat =~ s/\$ServerPort\b/$ServerPort/g;
696
- $expected_pat =~ s/\$ServerPortForClient\b/$ServerPortForClient/g;
697
- my $summary = trim($content);
698
-
699
- SKIP: {
700
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
701
- like( $content, qr/$expected_pat/s,
702
- "$name - response_body_like - response is expected ($summary)"
703
- );
704
- }
705
- } elsif ( defined $block->response_body_unlike ) {
706
- my $content = $res->content;
707
- if ( defined $content ) {
708
- $content =~ s/^TE: deflate,gzip;q=0\.3\r\n//gms;
709
- }
710
- $content =~ s/^Connection: TE, close\r\n//gms;
711
- my $expected_pat = get_indexed_value($name,
712
- $block->response_body_unlike,
713
- $req_idx,
714
- $need_array);
715
- $expected_pat =~ s/\$ServerPort\b/$ServerPort/g;
716
- $expected_pat =~ s/\$ServerPortForClient\b/$ServerPortForClient/g;
717
- my $summary = trim($content);
718
-
719
- SKIP: {
720
- skip "$name - tests skipped due to the lack of directive $dry_run", 1 if $dry_run;
721
- unlike( $content, qr/$expected_pat/s,
722
- "$name - response_body_like - response is expected ($summary)"
723
- );
724
- }
725
- }
726
-
727
- sub parse_response($$) {
728
- my ( $name, $raw_resp ) = @_;
729
-
730
- my $left;
731
-
732
- my $raw_headers = '';
733
- if ( $raw_resp =~ /(.*?\r\n)\r\n/s ) {
734
-
735
- #warn "\$1: $1";
736
- $raw_headers = $1;
737
- }
738
-
739
- #warn "raw headers: $raw_headers\n";
740
-
741
- my $res = HTTP::Response->parse($raw_resp);
742
- my $enc = $res->header('Transfer-Encoding');
743
-
744
- my $len = $res->header('Content-Length');
745
-
746
- if ( defined $enc && $enc eq 'chunked' ) {
747
-
748
- #warn "Found chunked!";
749
- my $raw = $res->content;
750
- if ( !defined $raw ) {
751
- $raw = '';
752
- }
753
-
754
- my $decoded = '';
755
- while (1) {
756
- if ( $raw =~ /\G 0 [\ \t]* \r\n \r\n /gcsx ) {
757
- if ( $raw =~ /\G (.+) /gcsx ) {
758
- $left = $1;
759
- }
760
-
761
- last;
762
- }
763
- if ( $raw =~ m{ \G [\ \t]* ( [A-Fa-f0-9]+ ) [\ \t]* \r\n }gcsx ) {
764
- my $rest = hex($1);
765
-
766
- #warn "chunk size: $rest\n";
767
- my $bit_sz = 32765;
768
- while ( $rest > 0 ) {
769
- my $bit = $rest < $bit_sz ? $rest : $bit_sz;
770
-
771
- #warn "bit: $bit\n";
772
- if ( $raw =~ /\G(.{$bit})/gcs ) {
773
- $decoded .= $1;
774
-
775
- #warn "decoded: [$1]\n";
776
- }
777
- else {
778
- fail(
779
- "$name - invalid chunked data received (not enought octets for the data section)"
780
- );
781
- return;
782
- }
783
-
784
- $rest -= $bit;
785
- }
786
- if ( $raw !~ /\G\r\n/gcs ) {
787
- fail(
788
- "$name - invalid chunked data received (expected CRLF)."
789
- );
790
- return;
791
- }
792
- }
793
- elsif ( $raw =~ /\G.+/gcs ) {
794
- fail "$name - invalid chunked body received: $&";
795
- return;
796
- }
797
- else {
798
- fail "$name - no last chunk found - $raw";
799
- return;
800
- }
801
- }
802
-
803
- #warn "decoded: $decoded\n";
804
- $res->content($decoded);
805
-
806
- } elsif (defined $len && $len ne '' && $len >= 0) {
807
- my $raw = $res->content;
808
- if (length $raw < $len) {
809
- warn "WARNING: $name - response body truncated: ",
810
- "$len expected, but got ", length $raw, "\n";
811
-
812
- } elsif (length $raw > $len) {
813
- my $content = substr $raw, 0, $len;
814
- $left = substr $raw, $len;
815
- $res->content($content);
816
- #warn "parsed body: [", $res->content, "]\n";
817
- }
818
- }
819
-
820
- return ( $res, $raw_headers, $left );
821
- }
822
-
823
- sub send_request ($$$$@) {
824
- my ( $req, $middle_delay, $timeout, $name, $tries ) = @_;
825
-
826
- my $sock = IO::Socket::INET->new(
827
- PeerAddr => $ServerAddr,
828
- PeerPort => $ServerPortForClient,
829
- Proto => 'tcp'
830
- );
831
-
832
- if (! defined $sock) {
833
- $tries ||= 0;
834
- if ($tries < 3) {
835
- warn "Can't connect to $ServerAddr:$ServerPortForClient: $!\n";
836
- sleep 1;
837
- return send_request($req, $middle_delay, $timeout, $name, $tries + 1);
838
- } else {
839
- die "Can't connect to $ServerAddr:$ServerPortForClient: $!\n";
840
- }
841
- }
842
-
843
- my @req_bits = ref $req ? @$req : ($req);
844
-
845
- my $flags = fcntl $sock, F_GETFL, 0
846
- or die "Failed to get flags: $!\n";
847
-
848
- fcntl $sock, F_SETFL, $flags | O_NONBLOCK
849
- or die "Failed to set flags: $!\n";
850
-
851
- my $ctx = {
852
- resp => '',
853
- write_offset => 0,
854
- buf_size => 1024,
855
- req_bits => \@req_bits,
856
- write_buf => (shift @req_bits)->{"value"},
857
- middle_delay => $middle_delay,
858
- sock => $sock,
859
- name => $name,
860
- };
861
-
862
- my $readable_hdls = IO::Select->new($sock);
863
- my $writable_hdls = IO::Select->new($sock);
864
- my $err_hdls = IO::Select->new($sock);
865
-
866
- while (1) {
867
- if ( $readable_hdls->count == 0
868
- && $writable_hdls->count == 0
869
- && $err_hdls->count == 0 )
870
- {
871
- last;
872
- }
873
-
874
- my ( $new_readable, $new_writable, $new_err ) =
875
- IO::Select->select( $readable_hdls, $writable_hdls, $err_hdls,
876
- $timeout );
877
-
878
- if ( !defined $new_err
879
- && !defined $new_readable
880
- && !defined $new_writable )
881
- {
882
-
883
- # timed out
884
- timeout_event_handler($ctx);
885
- last;
886
- }
887
-
888
- for my $hdl (@$new_err) {
889
- next if !defined $hdl;
890
-
891
- error_event_handler($ctx);
892
-
893
- if ( $err_hdls->exists($hdl) ) {
894
- $err_hdls->remove($hdl);
895
- }
896
-
897
- if ( $readable_hdls->exists($hdl) ) {
898
- $readable_hdls->remove($hdl);
899
- }
900
-
901
- if ( $writable_hdls->exists($hdl) ) {
902
- $writable_hdls->remove($hdl);
903
- }
904
-
905
- for my $h (@$readable_hdls) {
906
- next if !defined $h;
907
- if ( $h eq $hdl ) {
908
- undef $h;
909
- last;
910
- }
911
- }
912
-
913
- for my $h (@$writable_hdls) {
914
- next if !defined $h;
915
- if ( $h eq $hdl ) {
916
- undef $h;
917
- last;
918
- }
919
- }
920
-
921
- close $hdl;
922
- }
923
-
924
- for my $hdl (@$new_readable) {
925
- next if !defined $hdl;
926
-
927
- my $res = read_event_handler($ctx);
928
- if ( !$res ) {
929
-
930
- # error occured
931
- if ( $err_hdls->exists($hdl) ) {
932
- $err_hdls->remove($hdl);
933
- }
934
-
935
- if ( $readable_hdls->exists($hdl) ) {
936
- $readable_hdls->remove($hdl);
937
- }
938
-
939
- if ( $writable_hdls->exists($hdl) ) {
940
- $writable_hdls->remove($hdl);
941
- }
942
-
943
- for my $h (@$writable_hdls) {
944
- next if !defined $h;
945
- if ( $h eq $hdl ) {
946
- undef $h;
947
- last;
948
- }
949
- }
950
-
951
- close $hdl;
952
- }
953
- }
954
-
955
- for my $hdl (@$new_writable) {
956
- next if !defined $hdl;
957
-
958
- my $res = write_event_handler($ctx);
959
- if ( !$res ) {
960
-
961
- # error occured
962
- if ( $err_hdls->exists($hdl) ) {
963
- $err_hdls->remove($hdl);
964
- }
965
-
966
- if ( $readable_hdls->exists($hdl) ) {
967
- $readable_hdls->remove($hdl);
968
- }
969
-
970
- if ( $writable_hdls->exists($hdl) ) {
971
- $writable_hdls->remove($hdl);
972
- }
973
-
974
- close $hdl;
975
-
976
- } elsif ( $res == 2 ) {
977
- if ( $writable_hdls->exists($hdl) ) {
978
- $writable_hdls->remove($hdl);
979
- }
980
- }
981
- }
982
- }
983
-
984
- return $ctx->{resp};
985
- }
986
-
987
- sub timeout_event_handler ($) {
988
- my $ctx = shift;
989
- warn "ERROR: socket client: timed out - $ctx->{name}\n";
990
- }
991
-
992
- sub error_event_handler ($) {
993
- warn "exception occurs on the socket: $!\n";
994
- }
995
-
996
- sub write_event_handler ($) {
997
- my ($ctx) = @_;
998
-
999
- while (1) {
1000
- return undef if !defined $ctx->{write_buf};
1001
-
1002
- my $rest = length( $ctx->{write_buf} ) - $ctx->{write_offset};
1003
-
1004
- #warn "offset: $write_offset, rest: $rest, length ", length($write_buf), "\n";
1005
- #die;
1006
-
1007
- if ( $rest > 0 ) {
1008
- my $bytes;
1009
- eval {
1010
- $bytes = syswrite(
1011
- $ctx->{sock}, $ctx->{write_buf},
1012
- $rest, $ctx->{write_offset}
1013
- );
1014
- };
1015
-
1016
- if ($@) {
1017
- my $errmsg = "write failed: $@";
1018
- warn "$errmsg\n";
1019
- $ctx->{resp} = $errmsg;
1020
- return undef;
1021
- }
1022
-
1023
- if ( !defined $bytes ) {
1024
- if ( $! == EAGAIN ) {
1025
-
1026
- #warn "write again...";
1027
- #sleep 0.002;
1028
- return 1;
1029
- }
1030
- my $errmsg = "write failed: $!";
1031
- warn "$errmsg\n";
1032
- if ( !$ctx->{resp} ) {
1033
- $ctx->{resp} = "$errmsg";
1034
- }
1035
- return undef;
1036
- }
1037
-
1038
- #warn "wrote $bytes bytes.\n";
1039
- $ctx->{write_offset} += $bytes;
1040
- }
1041
- else {
1042
- my $next_send = shift @{ $ctx->{req_bits} } or return 2;
1043
- $ctx->{write_buf} = $next_send->{'value'};
1044
- $ctx->{write_offset} = 0;
1045
- my $wait_time;
1046
- if (!defined $next_send->{'delay_before'}) {
1047
- if (defined $ctx->{middle_delay}) {
1048
- $wait_time = $ctx->{middle_delay};
1049
- }
1050
- } else {
1051
- $wait_time = $next_send->{'delay_before'};
1052
- }
1053
- if ($wait_time) {
1054
- #warn "sleeping..";
1055
- sleep $wait_time;
1056
- }
1057
- }
1058
- }
1059
-
1060
- # impossible to reach here...
1061
- return undef;
1062
- }
1063
-
1064
- sub read_event_handler ($) {
1065
- my ($ctx) = @_;
1066
- while (1) {
1067
- my $read_buf;
1068
- my $bytes = sysread( $ctx->{sock}, $read_buf, $ctx->{buf_size} );
1069
-
1070
- if ( !defined $bytes ) {
1071
- if ( $! == EAGAIN ) {
1072
-
1073
- #warn "read again...";
1074
- #sleep 0.002;
1075
- return 1;
1076
- }
1077
- $ctx->{resp} = "500 read failed: $!";
1078
- return undef;
1079
- }
1080
-
1081
- if ( $bytes == 0 ) {
1082
- return undef; # connection closed
1083
- }
1084
-
1085
- $ctx->{resp} .= $read_buf;
1086
-
1087
- #warn "read $bytes ($read_buf) bytes.\n";
1088
- }
1089
-
1090
- # impossible to reach here...
1091
- return undef;
1092
- }
1093
-
1094
- 1;
1095
- __END__
1096
-
1097
- =encoding utf-8
1098
-
1099
- =head1 NAME
1100
-
1101
- Test::Nginx::Socket - Socket-backed test scaffold for the Nginx C modules
1102
-
1103
- =head1 SYNOPSIS
1104
-
1105
- use Test::Nginx::Socket;
1106
-
1107
- plan tests => $Test::Nginx::Socket::RepeatEach * 2 * blocks();
1108
-
1109
- run_tests();
1110
-
1111
- __DATA__
1112
-
1113
- === TEST 1: sanity
1114
- --- config
1115
- location /echo {
1116
- echo_before_body hello;
1117
- echo world;
1118
- }
1119
- --- request
1120
- GET /echo
1121
- --- response_body
1122
- hello
1123
- world
1124
- --- error_code: 200
1125
-
1126
-
1127
- === TEST 2: set Server
1128
- --- config
1129
- location /foo {
1130
- echo hi;
1131
- more_set_headers 'Server: Foo';
1132
- }
1133
- --- request
1134
- GET /foo
1135
- --- response_headers
1136
- Server: Foo
1137
- --- response_body
1138
- hi
1139
-
1140
-
1141
- === TEST 3: clear Server
1142
- --- config
1143
- location /foo {
1144
- echo hi;
1145
- more_clear_headers 'Server: ';
1146
- }
1147
- --- request
1148
- GET /foo
1149
- --- response_headers_like
1150
- Server: nginx.*
1151
- --- response_body
1152
- hi
1153
-
1154
-
1155
- === TEST 3: chunk size too small
1156
- --- config
1157
- chunkin on;
1158
- location /main {
1159
- echo_request_body;
1160
- }
1161
- --- more_headers
1162
- Transfer-Encoding: chunked
1163
- --- request eval
1164
- "POST /main
1165
- 4\r
1166
- hello\r
1167
- 0\r
1168
- \r
1169
- "
1170
- --- error_code: 400
1171
- --- response_body_like: 400 Bad Request
1172
-
1173
- =head1 DESCRIPTION
1174
-
1175
- This module provides a test scaffold based on non-blocking L<IO::Socket> for automated testing in Nginx C module development.
1176
-
1177
- This class inherits from L<Test::Base>, thus bringing all its
1178
- declarative power to the Nginx C module testing practices.
1179
-
1180
- You need to terminate or kill any Nginx processes before running the test suite if you have changed the Nginx server binary. Normally it's as simple as
1181
-
1182
- killall nginx
1183
- PATH=/path/to/your/nginx-with-memc-module:$PATH prove -r t
1184
-
1185
- This module will create a temporary server root under t/servroot/ of the current working directory and starts and uses the nginx executable in the PATH environment.
1186
-
1187
- You will often want to look into F<t/servroot/logs/error.log>
1188
- when things go wrong ;)
1189
-
1190
- =head1 Sections supported
1191
-
1192
- The following sections are supported:
1193
-
1194
- =head2 config
1195
-
1196
- Content of this section will be included in the "server" part of the generated
1197
- config file. This is the place where you want to put the "location" directive
1198
- enabling the module you want to test. Example:
1199
-
1200
- location /echo {
1201
- echo_before_body hello;
1202
- echo world;
1203
- }
1204
-
1205
- Sometimes you simply don't want to bother copying ten times the same
1206
- configuration for the ten tests you want to run against your module. One way
1207
- to do this is to write a config section only for the first test in your C<.t>
1208
- file. All subsequent tests will re-use the same config. Please note that this
1209
- depends on the order of test, so you should run C<prove> with variable
1210
- C<TEST_NGINX_NO_SHUFFLE=1> (see below for more on this variable).
1211
-
1212
- Please note that config section goes through environment variable expansion
1213
- provided the variables to expand start with TEST_NGINX.
1214
- So, the following is a perfectly legal (provided C<TEST_NGINX_HTML_DIR> is
1215
- set correctly):
1216
-
1217
- location /main {
1218
- echo_subrequest POST /sub -f $TEST_NGINX_HTML_DIR/blah.txt;
1219
- }
1220
-
1221
- =head2 http_config
1222
-
1223
- Content of this section will be included in the "http" part of the generated
1224
- config file. This is the place where you want to put the "upstream" directive
1225
- you might want to test. Example:
1226
-
1227
- upstream database {
1228
- postgres_server 127.0.0.1:$TEST_NGINX_POSTGRESQL_PORT
1229
- dbname=ngx_test user=ngx_test
1230
- password=wrong_pass;
1231
- }
1232
-
1233
- As you guessed from the example above, this section goes through environment
1234
- variable expansion (variables have to start with TEST_NGINX).
1235
-
1236
- =head2 main_config
1237
-
1238
- Content of this section will be included in the "main" part of the generated
1239
- config file. This is very rarely used, except if you are testing nginx core
1240
- itself.
1241
-
1242
- This section goes through environment
1243
- variable expansion (variables have to start with TEST_NGINX).
1244
-
1245
- =head2 request
1246
-
1247
- This is probably the most important section. It defines the request(s) you
1248
- are going to send to the nginx server. It offers a pretty powerful grammar
1249
- which we are going to walk through one example at a time.
1250
-
1251
- In its most basic form, this section looks like that:
1252
-
1253
- --- request
1254
- GET
1255
-
1256
- This will just do a GET request on the root (i.e. /) of the server using
1257
- HTTP/1.1.
1258
-
1259
- Of course, you might want to test something else than the root of your
1260
- web server and even use a different version of HTTP. This is possible:
1261
-
1262
- --- request
1263
- GET /foo HTTP/1.0
1264
-
1265
- Please note that specifying HTTP/1.0 will not prevent Test::Nginx from
1266
- sending the C<Host> header. Actually Test::Nginx always sends 2 headers:
1267
- C<Host> (with value localhost) and C<Connection> (with value Close for
1268
- simple requests and keep-alive for all but the last pipelined_requests).
1269
-
1270
- You can also add a content to your request:
1271
-
1272
- --- request
1273
- POST /foo
1274
- Hello world
1275
-
1276
- Test::Nginx will automatically calculate the content length and add the
1277
- corresponding header for you.
1278
-
1279
- This being said, as soon as you want to POST real data, you will be interested
1280
- in using the more_headers section and using the power of Test::Base filters
1281
- to urlencode the content you are sending. Which gives us a
1282
- slightly more realistic example:
1283
-
1284
- --- more_headers
1285
- Content-type: application/x-www-form-urlencoded
1286
- --- request eval
1287
- use URI::Escape;
1288
- "POST /rrd/foo
1289
- value=".uri_escape("N:12345")
1290
-
1291
- Sometimes a test is more than one request. Typically you want to POST some
1292
- data and make sure the data has been taken into account with a GET. You can
1293
- do it using arrays:
1294
-
1295
- --- request eval
1296
- ["POST /users
1297
- name=foo", "GET /users/foo"]
1298
-
1299
- This way, REST-like interfaces are pretty easy to test.
1300
-
1301
- When you develop nifty nginx modules you will eventually want to test things
1302
- with buffers and "weird" network conditions. This is where you split
1303
- your request into network packets:
1304
-
1305
- --- request eval
1306
- [["POST /users\nna", "me=foo"]]
1307
-
1308
- Here, Test::Nginx will first send the request line, the headers it
1309
- automatically added for you and the first two letters of the body ("na" in
1310
- our example) in ONE network packet. Then, it will send the next packet (here
1311
- it's "me=foo"). When we talk about packets here, this is nto exactly correct
1312
- as there is no way to guarantee the behavior of the TCP/IP stack. What
1313
- Test::Nginx can guarantee is that this will result in two calls to
1314
- C<syswrite>.
1315
-
1316
- A good way to make I<almost> sure the two calls result in two packets is to
1317
- introduce a delay (let's say 2 seconds)before sending the second packet:
1318
-
1319
- --- request eval
1320
- [["POST /users\nna", {value => "me=foo", delay_before => 2}]]
1321
-
1322
- Of course, everything can be combined till your brain starts boiling ;) :
1323
-
1324
- --- request eval
1325
- use URI::Escape;
1326
- my $val="value=".uri_escape("N:12346");
1327
- [["POST /rrd/foo
1328
- ".substr($val, 0, 6),
1329
- {value => substr($val, 6, 5), delay_before=>5},
1330
- substr($val, 11)], "GET /rrd/foo"]
1331
-
1332
- =head2 request_eval
1333
-
1334
- Use of this section is deprecated and tests using it should replace it with
1335
- a C<request> section with an C<eval> filter. More explicitly:
1336
-
1337
- --- request_eval
1338
- "POST /echo_body
1339
- hello\x00\x01\x02
1340
- world\x03\x04\xff"
1341
-
1342
- should be replaced by:
1343
-
1344
- --- request eval
1345
- "POST /echo_body
1346
- hello\x00\x01\x02
1347
- world\x03\x04\xff"
1348
-
1349
- =head2 pipelined_requests
1350
-
1351
- Specify pipelined requests that use a single keep-alive connection to the server.
1352
-
1353
- Here is an example from ngx_lua's test suite:
1354
-
1355
- === TEST 7: discard body
1356
- --- config
1357
- location = /foo {
1358
- content_by_lua '
1359
- ngx.req.discard_body()
1360
- ngx.say("body: ", ngx.var.request_body)
1361
- ';
1362
- }
1363
- location = /bar {
1364
- content_by_lua '
1365
- ngx.req.read_body()
1366
- ngx.say("body: ", ngx.var.request_body)
1367
- ';
1368
- }
1369
- --- pipelined_requests eval
1370
- ["POST /foo
1371
- hello, world",
1372
- "POST /bar
1373
- hiya, world"]
1374
- --- response_body eval
1375
- ["body: nil\n",
1376
- "body: hiya, world\n"]
1377
-
1378
- =head2 more_headers
1379
-
1380
- Adds the content of this section as headers to the request being sent. Example:
1381
-
1382
- --- more_headers
1383
- X-Foo: blah
1384
-
1385
- This will add C<X-Foo: blah> to the request (on top of the automatically
1386
- generated headers like C<Host>, C<Connection> and potentially
1387
- C<Content-Length>).
1388
-
1389
- =head2 response_body
1390
-
1391
- The expected value for the body of the submitted request.
1392
-
1393
- --- response_body
1394
- hello
1395
-
1396
- If the test is made of multiple requests, then the response_body B<MUST>
1397
- be an array and each request B<MUST> return the corresponding expected
1398
- body:
1399
-
1400
- --- request eval
1401
- ["GET /hello", "GET /world"]
1402
- --- response_body eval
1403
- ["hello", "world"]
1404
-
1405
- =head2 response_body_eval
1406
-
1407
- Use of this section is deprecated and tests using it should replace it
1408
- with a C<request> section with an C<eval> filter. Therefore:
1409
-
1410
- --- response_body_eval
1411
- "hello\x00\x01\x02
1412
- world\x03\x04\xff"
1413
-
1414
- should be replaced by:
1415
-
1416
- --- response_body eval
1417
- "hello\x00\x01\x02
1418
- world\x03\x04\xff"
1419
-
1420
- =head2 response_body_like
1421
-
1422
- The body returned by the request MUST match the pattern provided by this
1423
- section. Example:
1424
-
1425
- --- response_body_like
1426
- ^elapsed 0\.00[0-5] sec\.$
1427
-
1428
- If the test is made of multiple requests, then response_body_like B<MUST>
1429
- be an array and each request B<MUST> match the corresponding pattern.
1430
-
1431
- =head2 response_headers
1432
-
1433
- The headers specified in this section are in the response sent by nginx.
1434
-
1435
- --- response_headers
1436
- Content-Type: application/x-resty-dbd-stream
1437
-
1438
- Of course, you can specify many headers in this section:
1439
-
1440
- --- response_headers
1441
- X-Resty-DBD-Module:
1442
- Content-Type: application/x-resty-dbd-stream
1443
-
1444
- The test will be successful only if all headers are found in the response with
1445
- the appropriate values.
1446
-
1447
- If the test is made of multiple requests, then response_headers B<MUST>
1448
- be an array and each element of the array is checked against the
1449
- response to the corresponding request.
1450
-
1451
- =head2 response_headers_like
1452
-
1453
- The value of the headers returned by nginx match the patterns.
1454
-
1455
- --- response_headers_like
1456
- X-Resty-DBD-Module: ngx_drizzle \d+\.\d+\.\d+
1457
- Content-Type: application/x-resty-dbd-stream
1458
-
1459
- This will check that the response's C<Content-Type> is
1460
- application/x-resty-dbd-stream and that the C<X-Resty-DBD-Module> matches
1461
- C<ngx_drizzle \d+\.\d+\.\d+>.
1462
-
1463
- The test will be successful only if all headers are found in the response and
1464
- if the values match the patterns.
1465
-
1466
- If the test is made of multiple requests, then response_headers_like B<MUST>
1467
- be an array and each element of the array is checked against the
1468
- response to the corresponding request.
1469
-
1470
- =head2 raw_response_headers_like
1471
-
1472
- Checks the headers part of the response against this pattern. This is
1473
- particularly useful when you want to write tests of redirect functions
1474
- that are not bound to the value of the port your nginx server (under
1475
- test) is listening to:
1476
-
1477
- --- raw_response_headers_like: Location: http://localhost(?::\d+)?/foo\r\n
1478
-
1479
- As usual, if the test is made of multiple requests, then
1480
- raw_response_headers_like B<MUST> be an array.
1481
-
1482
- =head2 error_code
1483
-
1484
- The expected value of the HTTP response code. If not set, this is assumed
1485
- to be 200. But you can expect other things such as a redirect:
1486
-
1487
- --- error_code: 302
1488
-
1489
- If the test is made of multiple requests, then
1490
- error_code B<MUST> be an array with the expected value for the response status
1491
- of each request in the test.
1492
-
1493
- =head2 raw_request
1494
-
1495
- The exact request to send to nginx. This is useful when you want to test
1496
- soem behaviors that are not available with "request" such as an erroneous
1497
- C<Content-Length> header or splitting packets right in the middle of headers:
1498
-
1499
- --- raw_request eval
1500
- ["POST /rrd/taratata HTTP/1.1\r
1501
- Host: localhost\r
1502
- Connection: Close\r
1503
- Content-Type: application/",
1504
- "x-www-form-urlencoded\r
1505
- Content-Length:15\r\n\r\nvalue=N%3A12345"]
1506
-
1507
- This can also be useful to tests "invalid" request lines:
1508
-
1509
- --- raw_request
1510
- GET /foo HTTP/2.0 THE_FUTURE_IS_NOW
1511
-
1512
- =head2 user_files
1513
-
1514
- With this section you can create a file that will be copied in the
1515
- html directory of the nginx server under test. For example:
1516
-
1517
- --- user_files
1518
- >>> blah.txt
1519
- Hello, world
1520
-
1521
- will create a file named C<blah.txt> in the html directory of the nginx
1522
- server tested. The file will contain the text "Hello, world".
1523
-
1524
- =head2 skip_nginx
1525
-
1526
- =head2 skip_nginx2
1527
-
1528
- Both string scalar and string arrays are supported as values.
1529
-
1530
- =head2 raw_request_middle_delay
1531
-
1532
- Delay in sec between sending successive packets in the "raw_request" array
1533
- value. Also used when a request is split in packets.
1534
-
1535
- =head1 Environment variables
1536
-
1537
- All environment variables starting with C<TEST_NGINX_> are expanded in the
1538
- sections used to build the configuration of the server that tests automatically
1539
- starts. The following environment variables are supported by this module:
1540
-
1541
- =head2 TEST_NGINX_NO_NGINX_MANAGER
1542
-
1543
- Defaults to 0. If set to 1, Test::Nginx module will not manage
1544
- (configure/start/stop) the C<nginx> process. Can be useful to run tests
1545
- against an already configured (and running) nginx server.
1546
-
1547
- =head2 TEST_NGINX_NO_SHUFFLE
1548
-
1549
- Dafaults to 0. If set to 1, will make sure the tests are run in the order
1550
- they appear in the test file (and not in random order).
1551
-
1552
- =head2 TEST_NGINX_USE_VALGRIND
1553
-
1554
- If set to 1, will start nginx with valgrind. nginx is actually started with
1555
- C<valgrind -q --leak-check=full --gen-suppressions=all --suppressions=valgrind.suppress>,
1556
- the suppressions option being used only if there is actually
1557
- a valgrind.suppress file.
1558
-
1559
- =head2 TEST_NGINX_BINARY
1560
-
1561
- The command to start nginx. Defaults to C<nginx>. Can be used as an alternative
1562
- to setting C<PATH> to run a specific nginx instance.
1563
-
1564
- =head2 TEST_NGINX_LOG_LEVEL
1565
-
1566
- Value of the last argument of the C<error_log> configuration directive.
1567
- Defaults to C<debug>.
1568
-
1569
- =head2 TEST_NGINX_MASTER_PROCESS
1570
-
1571
- Value of the C<master_process> configuration directive. Defaults to C<off>.
1572
-
1573
- =head2 TEST_NGINX_SERVER_PORT
1574
-
1575
- Value of the port the server started by Test::Nginx will listen to. If not
1576
- set, C<TEST_NGINX_PORT> is used. If C<TEST_NGINX_PORT> is not set,
1577
- then C<1984> is used. See below for typical use.
1578
-
1579
- =head2 TEST_NGINX_CLIENT_PORT
1580
-
1581
- Value of the port Test::Nginx will diirect requests to. If not
1582
- set, C<TEST_NGINX_PORT> is used. If C<TEST_NGINX_PORT> is not set,
1583
- then C<1984> is used. A typical use of this feature is to test extreme
1584
- network conditions by adding a "proxy" between Test::Nginx and nginx
1585
- itself. This is described in the C<etcproxy integration> section of this
1586
- module README.
1587
-
1588
- =head2 TEST_NGINX_PORT
1589
-
1590
- A shortcut for setting both C<TEST_NGINX_CLIENT_PORT> and
1591
- C<TEST_NGINX_SERVER_PORT>.
1592
-
1593
- =head2 TEST_NGINX_SLEEP
1594
-
1595
- How much time (in seconds) should Test::Nginx sleep between two calls to C<syswrite> when
1596
- sending request data. Defaults to 0.
1597
-
1598
- =head2 TEST_NGINX_FORCE_RESTART_ON_TEST
1599
-
1600
- Defaults to 1. If set to 0, Test::Nginx will not restart the nginx
1601
- server when the config does not change between two tests.
1602
-
1603
- =head2 TEST_NGINX_SERVROOT
1604
-
1605
- The root of the nginx "hierarchy" (where you find the conf, *_tmp and logs
1606
- directories). This value will be used with the C<-p> option of C<nginx>.
1607
- Defaults to appending C<t/servroot> to the current directory.
1608
-
1609
- =head2 TEST_NGINX_IGNORE_MISSING_DIRECTIVES
1610
-
1611
- If set to 1 will SKIP all tests which C<config> sections resulted in a
1612
- C<unknown directive> when trying to start C<nginx>. Useful when you want to
1613
- run tests on a build of nginx that does not include all modules it should.
1614
- By default, these tests will FAIL.
1615
-
1616
- =head2 TEST_NGINX_EVENT_TYPE
1617
-
1618
- This environment can be used to specify a event API type to be used by Nginx. Possible values are C<epoll>, C<kqueue>, C<select>, C<rtsig>, C<poll>, and others.
1619
-
1620
- For example,
1621
-
1622
- $ TEST_NGINX_EVENT_TYPE=select prove -r t
1623
-
1624
- =head2 TEST_NGINX_ERROR_LOG
1625
-
1626
- Error log files from all tests will be appended to the file specified with
1627
- this variable. There is no default value which disables the feature. This
1628
- is very useful when debugging. By default, each test triggers a start/stop
1629
- cycle for C<nginx>. All logs are removed before each restart, so you can
1630
- only see the logs for the last test run (which you usually do not control
1631
- except if you set C<TEST_NGINX_NO_SHUFFLE=1>). With this, you accumulate
1632
- all logs into a single file that is never cleaned up by Test::Nginx.
1633
-
1634
- =head1 Samples
1635
-
1636
- You'll find live samples in the following Nginx 3rd-party modules:
1637
-
1638
- =over
1639
-
1640
- =item ngx_echo
1641
-
1642
- L<http://github.com/agentzh/echo-nginx-module>
1643
-
1644
- =item ngx_chunkin
1645
-
1646
- L<http://wiki.nginx.org/NginxHttpChunkinModule>
1647
-
1648
- =item ngx_memc
1649
-
1650
- L<http://wiki.nginx.org/NginxHttpMemcModule>
1651
-
1652
- =item ngx_drizzle
1653
-
1654
- L<http://github.com/chaoslawful/drizzle-nginx-module>
1655
-
1656
- =item ngx_rds_json
1657
-
1658
- L<http://github.com/agentzh/rds-json-nginx-module>
1659
-
1660
- =item ngx_xss
1661
-
1662
- L<http://github.com/agentzh/xss-nginx-module>
1663
-
1664
- =item ngx_srcache
1665
-
1666
- L<http://github.com/agentzh/srcache-nginx-module>
1667
-
1668
- =item ngx_lua
1669
-
1670
- L<http://github.com/chaoslawful/lua-nginx-module>
1671
-
1672
- =item ngx_set_misc
1673
-
1674
- L<http://github.com/agentzh/set-misc-nginx-module>
1675
-
1676
- =item ngx_array_var
1677
-
1678
- L<http://github.com/agentzh/array-var-nginx-module>
1679
-
1680
- =item ngx_form_input
1681
-
1682
- L<http://github.com/calio/form-input-nginx-module>
1683
-
1684
- =item ngx_iconv
1685
-
1686
- L<http://github.com/calio/iconv-nginx-module>
1687
-
1688
- =item ngx_set_cconv
1689
-
1690
- L<http://github.com/liseen/set-cconv-nginx-module>
1691
-
1692
- =item ngx_postgres
1693
-
1694
- L<http://github.com/FRiCKLE/ngx_postgres>
1695
-
1696
- =item ngx_coolkit
1697
-
1698
- L<http://github.com/FRiCKLE/ngx_coolkit>
1699
-
1700
- =back
1701
-
1702
- =head1 SOURCE REPOSITORY
1703
-
1704
- This module has a Git repository on Github, which has access for all.
1705
-
1706
- http://github.com/agentzh/test-nginx
1707
-
1708
- If you want a commit bit, feel free to drop me a line.
1709
-
1710
- =head1 AUTHORS
1711
-
1712
- agentzh (章亦春) C<< <agentzh@gmail.com> >>
1713
-
1714
- Antoine BONAVITA C<< <antoine.bonavita@gmail.com> >>
1715
-
1716
- =head1 COPYRIGHT & LICENSE
1717
-
1718
- Copyright (c) 2009-2011, Taobao Inc., Alibaba Group (L<http://www.taobao.com>).
1719
-
1720
- Copyright (c) 2009-2011, agentzh C<< <agentzh@gmail.com> >>.
1721
-
1722
- Copyright (c) 2011, Antoine BONAVITA C<< <antoine.bonavita@gmail.com> >>.
1723
-
1724
- This module is licensed under the terms of the BSD license.
1725
-
1726
- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1727
-
1728
- =over
1729
-
1730
- =item *
1731
-
1732
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
1733
-
1734
- =item *
1735
-
1736
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
1737
-
1738
- =item *
1739
-
1740
- Neither the name of the Taobao Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
1741
-
1742
- =back
1743
-
1744
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1745
-
1746
- =head1 SEE ALSO
1747
-
1748
- L<Test::Nginx::LWP>, L<Test::Base>.
1749
-