passenger 4.0.30 → 4.0.31

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 (409) hide show
  1. data.tar.gz.asc +7 -7
  2. data/NEWS +31 -0
  3. data/bin/passenger +5 -5
  4. data/bin/passenger-config +6 -126
  5. data/bin/passenger-install-apache2-module +108 -26
  6. data/bin/passenger-install-nginx-module +81 -27
  7. data/bin/passenger-memory-stats +7 -6
  8. data/bin/passenger-status +13 -10
  9. data/build/agents.rb +8 -12
  10. data/build/apache2.rb +12 -7
  11. data/build/basics.rb +28 -20
  12. data/build/common_library.rb +4 -4
  13. data/build/cplusplus_support.rb +4 -4
  14. data/build/cxx_tests.rb +5 -3
  15. data/build/debian.rb +1 -2
  16. data/build/integration_tests.rb +25 -9
  17. data/build/misc.rb +2 -2
  18. data/build/oxt_tests.rb +5 -6
  19. data/build/packaging.rb +72 -40
  20. data/build/ruby_tests.rb +5 -1
  21. data/build/test_basics.rb +1 -2
  22. data/debian.template/locations.ini.template +1 -0
  23. data/debian.template/rules.template +2 -1
  24. data/dev/install_scripts_bootstrap_code.rb +42 -0
  25. data/dev/run_travis.sh +1 -0
  26. data/dev/runner +27 -0
  27. data/doc/Packaging.txt.md +5 -10
  28. data/doc/Users guide Apache.idmap.txt +3 -1
  29. data/doc/Users guide Apache.txt +5 -3
  30. data/doc/Users guide Nginx.idmap.txt +9 -5
  31. data/doc/Users guide Nginx.txt +47 -17
  32. data/doc/users_guide_snippets/environment_variables.txt +2 -2
  33. data/doc/users_guide_snippets/installation.txt +6 -2
  34. data/doc/users_guide_snippets/tips.txt +4 -0
  35. data/ext/apache2/Hooks.cpp +16 -3
  36. data/ext/common/Account.h +6 -5
  37. data/ext/common/AgentsStarter.h +1 -1
  38. data/ext/common/ApplicationPool2/Common.h +72 -0
  39. data/ext/common/ApplicationPool2/Group.h +263 -148
  40. data/ext/common/ApplicationPool2/Implementation.cpp +66 -44
  41. data/ext/common/ApplicationPool2/Options.h +1 -7
  42. data/ext/common/ApplicationPool2/Pool.h +96 -72
  43. data/ext/common/ApplicationPool2/Process.h +12 -17
  44. data/ext/common/ApplicationPool2/Socket.h +4 -4
  45. data/ext/common/ApplicationPool2/SuperGroup.h +20 -17
  46. data/ext/common/Constants.h +15 -1
  47. data/ext/common/MessageServer.h +22 -0
  48. data/ext/common/Utils.cpp +4 -1
  49. data/ext/common/Utils.h +3 -1
  50. data/ext/common/Utils/StrIntUtils.h +1 -0
  51. data/ext/common/Utils/Timer.h +15 -1
  52. data/ext/common/Utils/utf8/checked.h +0 -0
  53. data/ext/common/Utils/utf8/core.h +0 -0
  54. data/ext/common/Utils/utf8/unchecked.h +0 -0
  55. data/ext/common/agents/Base.cpp +59 -35
  56. data/ext/common/agents/HelperAgent/Main.cpp +23 -12
  57. data/ext/common/agents/HelperAgent/RequestHandler.h +10 -1
  58. data/ext/common/agents/LoggingAgent/FilterSupport.h +9 -5
  59. data/ext/common/agents/TempDirToucher.c +12 -3
  60. data/ext/common/agents/Watchdog/Main.cpp +8 -2
  61. data/ext/nginx/ConfigurationCommands.c +10 -0
  62. data/ext/nginx/ConfigurationFields.h +2 -0
  63. data/ext/nginx/ContentHandler.c +32 -19
  64. data/ext/nginx/CreateLocationConfig.c +5 -0
  65. data/ext/nginx/MergeLocationConfig.c +6 -0
  66. data/ext/nginx/config +13 -6
  67. data/ext/ruby/passenger_native_support.c +61 -2
  68. data/helper-scripts/classic-rails-loader.rb +9 -10
  69. data/helper-scripts/classic-rails-preloader.rb +10 -11
  70. data/helper-scripts/node-loader.js +3 -2
  71. data/helper-scripts/rack-loader.rb +8 -9
  72. data/helper-scripts/rack-preloader.rb +9 -10
  73. data/lib/phusion_passenger.rb +36 -7
  74. data/lib/phusion_passenger/abstract_installer.rb +16 -15
  75. data/lib/phusion_passenger/active_support3_extensions/init.rb +1 -1
  76. data/lib/phusion_passenger/admin_tools/memory_stats.rb +2 -2
  77. data/lib/phusion_passenger/admin_tools/server_instance.rb +5 -5
  78. data/lib/phusion_passenger/analytics_logger.rb +3 -3
  79. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +1 -1
  80. data/lib/phusion_passenger/config.rb +125 -0
  81. data/lib/phusion_passenger/config/about_command.rb +183 -0
  82. data/lib/phusion_passenger/config/command.rb +57 -0
  83. data/lib/phusion_passenger/config/restart_app_command.rb +146 -0
  84. data/lib/phusion_passenger/config/utils.rb +108 -0
  85. data/lib/phusion_passenger/console_text_template.rb +2 -1
  86. data/lib/phusion_passenger/constants.rb +7 -2
  87. data/lib/phusion_passenger/loader_shared_helpers.rb +12 -21
  88. data/lib/phusion_passenger/message_client.rb +15 -4
  89. data/lib/phusion_passenger/native_support.rb +116 -98
  90. data/lib/phusion_passenger/nginx/config_options.rb +5 -0
  91. data/lib/phusion_passenger/platform_info.rb +1 -1
  92. data/lib/phusion_passenger/platform_info/apache.rb +9 -5
  93. data/lib/phusion_passenger/platform_info/apache_detector.rb +5 -6
  94. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -3
  95. data/lib/phusion_passenger/platform_info/compiler.rb +29 -11
  96. data/lib/phusion_passenger/platform_info/curl.rb +1 -1
  97. data/lib/phusion_passenger/platform_info/cxx_portability.rb +30 -16
  98. data/lib/phusion_passenger/platform_info/depcheck.rb +6 -6
  99. data/lib/phusion_passenger/platform_info/linux.rb +2 -2
  100. data/lib/phusion_passenger/platform_info/operating_system.rb +25 -5
  101. data/lib/phusion_passenger/platform_info/ruby.rb +7 -4
  102. data/lib/phusion_passenger/platform_info/zlib.rb +1 -1
  103. data/lib/phusion_passenger/plugin.rb +0 -1
  104. data/lib/phusion_passenger/preloader_shared_helpers.rb +1 -1
  105. data/lib/phusion_passenger/public_api.rb +1 -1
  106. data/lib/phusion_passenger/rack/thread_handler_extension.rb +1 -1
  107. data/lib/phusion_passenger/request_handler.rb +8 -9
  108. data/lib/phusion_passenger/request_handler/thread_handler.rb +21 -9
  109. data/lib/phusion_passenger/ruby_core_enhancements.rb +1 -1
  110. data/lib/phusion_passenger/standalone/app_finder.rb +2 -2
  111. data/lib/phusion_passenger/standalone/command.rb +10 -8
  112. data/lib/phusion_passenger/standalone/help_command.rb +1 -1
  113. data/lib/phusion_passenger/standalone/main.rb +3 -3
  114. data/lib/phusion_passenger/standalone/package_runtime_command.rb +2 -2
  115. data/lib/phusion_passenger/standalone/runtime_installer.rb +55 -13
  116. data/lib/phusion_passenger/standalone/runtime_locator.rb +3 -3
  117. data/lib/phusion_passenger/standalone/start_command.rb +6 -7
  118. data/lib/phusion_passenger/standalone/status_command.rb +1 -1
  119. data/lib/phusion_passenger/standalone/stop_command.rb +1 -1
  120. data/lib/phusion_passenger/standalone/utils.rb +1 -1
  121. data/lib/phusion_passenger/standalone/version_command.rb +2 -3
  122. data/lib/phusion_passenger/utils.rb +1 -1
  123. data/lib/phusion_passenger/utils/download.rb +1 -2
  124. data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  125. data/lib/phusion_passenger/utils/hosts_file_parser.rb +1 -1
  126. data/lib/phusion_passenger/utils/tee_input.rb +1 -1
  127. data/lib/phusion_passenger/utils/terminal_choice_menu.rb +217 -0
  128. data/lib/phusion_passenger/utils/unseekable_socket.rb +1 -1
  129. data/resources/templates/apache2/config_snippets.txt.erb +2 -3
  130. data/resources/templates/apache2/deployment_example.txt.erb +2 -2
  131. data/resources/templates/apache2/notify_apache_module_installed.txt.erb +3 -0
  132. data/resources/templates/nginx/config_snippets.txt.erb +1 -1
  133. data/resources/templates/nginx/deployment_example.txt.erb +2 -2
  134. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +11 -5
  135. data/rpm/Vagrantfile +1 -0
  136. data/test/cxx/ApplicationPool2/PoolTest.cpp +224 -35
  137. data/test/cxx/ApplicationPool2/ProcessTest.cpp +6 -6
  138. data/test/cxx/MessagePassingTest.cpp +1 -1
  139. data/test/cxx/RequestHandlerTest.cpp +26 -26
  140. data/test/integration_tests/apache2_tests.rb +162 -243
  141. data/test/integration_tests/native_packaging_spec.rb +10 -10
  142. data/test/integration_tests/nginx_tests.rb +87 -107
  143. data/test/integration_tests/shared/example_webapp_tests.rb +246 -0
  144. data/test/integration_tests/source_packaging_test.rb +2 -1
  145. data/test/integration_tests/standalone_tests.rb +34 -19
  146. data/test/ruby/admin_tools_spec.rb +4 -4
  147. data/test/ruby/analytics_logger_spec.rb +1 -1
  148. data/test/ruby/debug_logging_spec.rb +2 -2
  149. data/test/ruby/message_channel_spec.rb +1 -1
  150. data/test/ruby/request_handler_spec.rb +171 -64
  151. data/test/ruby/shared/loader_sharedspec.rb +5 -5
  152. data/test/ruby/shared/rails/analytics_logging_extensions_sharedspec.rb +2 -2
  153. data/test/ruby/spec_helper.rb +4 -4
  154. data/test/ruby/standalone/runtime_installer_spec.rb +1 -1
  155. data/test/ruby/standalone/runtime_locator_spec.rb +1 -1
  156. data/test/ruby/utils/file_system_watcher_spec.rb +1 -1
  157. data/test/ruby/utils/hosts_file_parser.rb +1 -1
  158. data/test/ruby/utils/unseekable_socket_spec.rb +1 -1
  159. data/test/ruby/utils_spec.rb +4 -4
  160. data/test/stub/apache2/httpd.conf.erb +5 -0
  161. data/test/stub/index.html +1 -0
  162. data/test/stub/rack/config.ru +80 -33
  163. data/test/stub/{rails_apps/1.2/empty/app/models → rack/public}/.gitignore +0 -0
  164. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/Rakefile +0 -0
  165. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/application_controller.rb +0 -0
  166. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/recipes_controller.rb +0 -0
  167. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/uploads_controller.rb +0 -0
  168. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/controllers/welcome_controller.rb +0 -0
  169. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/app/helpers/application_helper.rb +0 -0
  170. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/recipes_helper.rb +0 -0
  171. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/test_helper.rb +0 -0
  172. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/uploads_helper.rb +0 -0
  173. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/helpers/welcome_helper.rb +0 -0
  174. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/layouts/default.rhtml +0 -0
  175. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/recipes/create.rhtml +0 -0
  176. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/recipes/index.rhtml +0 -0
  177. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/recipes/new.rhtml +0 -0
  178. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/uploads/index.rhtml +0 -0
  179. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/uploads/new.html.erb +0 -0
  180. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/welcome/cached.rhtml +0 -0
  181. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/app/views/welcome/index.rhtml +0 -0
  182. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/boot.rb +0 -0
  183. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/database.yml +0 -0
  184. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/environment.rb +0 -0
  185. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/config/environments/development.rb +0 -0
  186. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/environments/production.rb +0 -0
  187. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/config/initializers/inflections.rb +0 -0
  188. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/config/initializers/mime_types.rb +0 -0
  189. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/config/routes.rb +0 -0
  190. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/log/useless.txt +0 -0
  191. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/.htaccess +0 -0
  192. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/public/404.html +0 -0
  193. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/public/422.html +0 -0
  194. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/public/500.html +0 -0
  195. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/dispatch.cgi +0 -0
  196. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/dispatch.fcgi +0 -0
  197. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/dispatch.rb +0 -0
  198. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/public/favicon.ico +0 -0
  199. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/images/angrywizard.gif +0 -0
  200. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/images/cookbook.gif +0 -0
  201. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/images/header.png +0 -0
  202. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/public/images/rails.png +0 -0
  203. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/public/robots.txt +0 -0
  204. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/uploads.html +0 -0
  205. data/test/stub/{rails_apps/1.2/empty/db → rails2.3-mycook/public/uploads}/.gitignore +0 -0
  206. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/public/welcome/cached.html +0 -0
  207. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/about +0 -0
  208. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/console +0 -0
  209. data/test/stub/{rails_apps/2.2/empty → rails2.3-mycook}/script/dbconsole +0 -0
  210. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/destroy +0 -0
  211. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/generate +0 -0
  212. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/performance/benchmarker +0 -0
  213. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/performance/profiler +0 -0
  214. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/performance/request +0 -0
  215. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/plugin +0 -0
  216. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/process/inspector +0 -0
  217. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/process/reaper +0 -0
  218. data/test/stub/{rails_apps/1.2/empty → rails2.3-mycook}/script/process/spawner +0 -0
  219. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/runner +0 -0
  220. data/test/stub/{rails_apps/2.0/empty → rails2.3-mycook}/script/server +0 -0
  221. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/sites/some.site/public/uploads.html +0 -0
  222. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/sites/some.site/public/welcome/cached.html +0 -0
  223. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/cache/useless.txt +0 -0
  224. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/pids/useless.txt +0 -0
  225. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/sessions/useless.txt +0 -0
  226. data/test/stub/{rails_apps/2.3/mycook → rails2.3-mycook}/tmp/sockets/useless.txt +0 -0
  227. data/test/stub/rails2.3/app/controllers/foo_controller.rb +1 -1
  228. data/test/stub/rails2.3/config/routes.rb +1 -2
  229. data/test/stub/wsgi/passenger_wsgi.py +47 -8
  230. data/test/stub/{rails_apps/1.2/empty/public/stylesheets → wsgi/public}/.gitignore +0 -0
  231. data/test/support/apache2_controller.rb +2 -2
  232. data/test/support/nginx_controller.rb +11 -5
  233. data/test/support/placebo-preloader.rb +2 -2
  234. data/test/support/test_helper.rb +26 -7
  235. metadata +78 -240
  236. metadata.gz.asc +7 -7
  237. data/debian.template/repack.sh +0 -42
  238. data/debian.template/watch +0 -3
  239. data/test/integration_tests/cgi_environment_spec.rb +0 -36
  240. data/test/integration_tests/hello_world_rack_spec.rb +0 -43
  241. data/test/integration_tests/hello_world_wsgi_spec.rb +0 -41
  242. data/test/integration_tests/mycook_spec.rb +0 -166
  243. data/test/stub/rack/public/rack.jpg +0 -0
  244. data/test/stub/rails_apps/1.2/empty/.gitignore +0 -3
  245. data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +0 -7
  246. data/test/stub/rails_apps/1.2/empty/config/boot.rb +0 -108
  247. data/test/stub/rails_apps/1.2/empty/config/database.yml +0 -31
  248. data/test/stub/rails_apps/1.2/empty/config/environment.rb +0 -66
  249. data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +0 -21
  250. data/test/stub/rails_apps/1.2/empty/config/environments/production.rb +0 -18
  251. data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +0 -18
  252. data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +0 -19
  253. data/test/stub/rails_apps/1.2/empty/config/routes.rb +0 -23
  254. data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +0 -2
  255. data/test/stub/rails_apps/1.2/empty/public/.htaccess +0 -40
  256. data/test/stub/rails_apps/1.2/empty/public/500.html +0 -30
  257. data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +0 -10
  258. data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +0 -24
  259. data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +0 -10
  260. data/test/stub/rails_apps/1.2/empty/public/robots.txt +0 -1
  261. data/test/stub/rails_apps/1.2/empty/script/about +0 -3
  262. data/test/stub/rails_apps/1.2/empty/script/breakpointer +0 -3
  263. data/test/stub/rails_apps/1.2/empty/script/console +0 -3
  264. data/test/stub/rails_apps/1.2/empty/script/destroy +0 -3
  265. data/test/stub/rails_apps/1.2/empty/script/generate +0 -3
  266. data/test/stub/rails_apps/1.2/empty/script/plugin +0 -3
  267. data/test/stub/rails_apps/1.2/empty/script/runner +0 -3
  268. data/test/stub/rails_apps/1.2/empty/script/server +0 -3
  269. data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +0 -28
  270. data/test/stub/rails_apps/2.0/empty/.gitignore +0 -3
  271. data/test/stub/rails_apps/2.0/empty/Rakefile +0 -10
  272. data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +0 -10
  273. data/test/stub/rails_apps/2.0/empty/app/helpers/application_helper.rb +0 -3
  274. data/test/stub/rails_apps/2.0/empty/app/models/.gitignore +0 -0
  275. data/test/stub/rails_apps/2.0/empty/config/boot.rb +0 -108
  276. data/test/stub/rails_apps/2.0/empty/config/database.yml +0 -31
  277. data/test/stub/rails_apps/2.0/empty/config/environment.rb +0 -59
  278. data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +0 -18
  279. data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +0 -18
  280. data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +0 -22
  281. data/test/stub/rails_apps/2.0/empty/config/routes.rb +0 -35
  282. data/test/stub/rails_apps/2.0/empty/db/.gitignore +0 -0
  283. data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +0 -2
  284. data/test/stub/rails_apps/2.0/empty/public/.htaccess +0 -40
  285. data/test/stub/rails_apps/2.0/empty/public/404.html +0 -30
  286. data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +0 -10
  287. data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +0 -24
  288. data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +0 -10
  289. data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
  290. data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
  291. data/test/stub/rails_apps/2.0/empty/public/stylesheets/.gitignore +0 -0
  292. data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +0 -3
  293. data/test/stub/rails_apps/2.0/empty/script/performance/profiler +0 -3
  294. data/test/stub/rails_apps/2.0/empty/script/process/inspector +0 -3
  295. data/test/stub/rails_apps/2.0/empty/script/process/reaper +0 -3
  296. data/test/stub/rails_apps/2.0/empty/script/process/spawner +0 -3
  297. data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +0 -38
  298. data/test/stub/rails_apps/2.2/empty/.gitignore +0 -3
  299. data/test/stub/rails_apps/2.2/empty/Rakefile +0 -10
  300. data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +0 -15
  301. data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +0 -3
  302. data/test/stub/rails_apps/2.2/empty/app/models/.gitignore +0 -0
  303. data/test/stub/rails_apps/2.2/empty/config/boot.rb +0 -109
  304. data/test/stub/rails_apps/2.2/empty/config/database.yml +0 -31
  305. data/test/stub/rails_apps/2.2/empty/config/environment.rb +0 -75
  306. data/test/stub/rails_apps/2.2/empty/config/environments/development.rb +0 -17
  307. data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +0 -24
  308. data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +0 -24
  309. data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +0 -22
  310. data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +0 -10
  311. data/test/stub/rails_apps/2.2/empty/config/initializers/mime_types.rb +0 -5
  312. data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +0 -17
  313. data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +0 -5
  314. data/test/stub/rails_apps/2.2/empty/config/routes.rb +0 -43
  315. data/test/stub/rails_apps/2.2/empty/db/.gitignore +0 -0
  316. data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +0 -5
  317. data/test/stub/rails_apps/2.2/empty/public/404.html +0 -30
  318. data/test/stub/rails_apps/2.2/empty/public/422.html +0 -30
  319. data/test/stub/rails_apps/2.2/empty/public/500.html +0 -33
  320. data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +0 -10
  321. data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +0 -24
  322. data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +0 -10
  323. data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
  324. data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
  325. data/test/stub/rails_apps/2.2/empty/public/robots.txt +0 -5
  326. data/test/stub/rails_apps/2.2/empty/public/stylesheets/.gitignore +0 -0
  327. data/test/stub/rails_apps/2.2/empty/script/about +0 -4
  328. data/test/stub/rails_apps/2.2/empty/script/console +0 -3
  329. data/test/stub/rails_apps/2.2/empty/script/destroy +0 -3
  330. data/test/stub/rails_apps/2.2/empty/script/generate +0 -3
  331. data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +0 -3
  332. data/test/stub/rails_apps/2.2/empty/script/performance/profiler +0 -3
  333. data/test/stub/rails_apps/2.2/empty/script/performance/request +0 -3
  334. data/test/stub/rails_apps/2.2/empty/script/plugin +0 -3
  335. data/test/stub/rails_apps/2.2/empty/script/process/inspector +0 -3
  336. data/test/stub/rails_apps/2.2/empty/script/process/reaper +0 -3
  337. data/test/stub/rails_apps/2.2/empty/script/process/spawner +0 -3
  338. data/test/stub/rails_apps/2.2/empty/script/runner +0 -3
  339. data/test/stub/rails_apps/2.2/empty/script/server +0 -3
  340. data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +0 -9
  341. data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +0 -38
  342. data/test/stub/rails_apps/2.3/empty/.gitignore +0 -3
  343. data/test/stub/rails_apps/2.3/empty/Rakefile +0 -10
  344. data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +0 -10
  345. data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +0 -3
  346. data/test/stub/rails_apps/2.3/empty/app/models/.gitignore +0 -0
  347. data/test/stub/rails_apps/2.3/empty/config/boot.rb +0 -110
  348. data/test/stub/rails_apps/2.3/empty/config/database.yml +0 -31
  349. data/test/stub/rails_apps/2.3/empty/config/environment.rb +0 -41
  350. data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +0 -17
  351. data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +0 -28
  352. data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +0 -28
  353. data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +0 -28
  354. data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +0 -7
  355. data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +0 -10
  356. data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +0 -5
  357. data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +0 -21
  358. data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +0 -15
  359. data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +0 -5
  360. data/test/stub/rails_apps/2.3/empty/config/routes.rb +0 -43
  361. data/test/stub/rails_apps/2.3/empty/db/.gitignore +0 -0
  362. data/test/stub/rails_apps/2.3/empty/db/seeds.rb +0 -7
  363. data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +0 -2
  364. data/test/stub/rails_apps/2.3/empty/public/404.html +0 -30
  365. data/test/stub/rails_apps/2.3/empty/public/422.html +0 -30
  366. data/test/stub/rails_apps/2.3/empty/public/500.html +0 -30
  367. data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
  368. data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
  369. data/test/stub/rails_apps/2.3/empty/public/robots.txt +0 -5
  370. data/test/stub/rails_apps/2.3/empty/public/stylesheets/.gitignore +0 -0
  371. data/test/stub/rails_apps/2.3/empty/script/about +0 -4
  372. data/test/stub/rails_apps/2.3/empty/script/console +0 -3
  373. data/test/stub/rails_apps/2.3/empty/script/dbconsole +0 -3
  374. data/test/stub/rails_apps/2.3/empty/script/destroy +0 -3
  375. data/test/stub/rails_apps/2.3/empty/script/generate +0 -3
  376. data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +0 -3
  377. data/test/stub/rails_apps/2.3/empty/script/performance/profiler +0 -3
  378. data/test/stub/rails_apps/2.3/empty/script/plugin +0 -3
  379. data/test/stub/rails_apps/2.3/empty/script/runner +0 -3
  380. data/test/stub/rails_apps/2.3/empty/script/server +0 -3
  381. data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +0 -9
  382. data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +0 -38
  383. data/test/stub/rails_apps/2.3/mycook/Rakefile +0 -10
  384. data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +0 -3
  385. data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +0 -18
  386. data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +0 -10
  387. data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +0 -5
  388. data/test/stub/rails_apps/2.3/mycook/public/404.html +0 -30
  389. data/test/stub/rails_apps/2.3/mycook/public/422.html +0 -30
  390. data/test/stub/rails_apps/2.3/mycook/public/500.html +0 -30
  391. data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
  392. data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
  393. data/test/stub/rails_apps/2.3/mycook/public/robots.txt +0 -5
  394. data/test/stub/rails_apps/2.3/mycook/public/uploads/.gitignore +0 -0
  395. data/test/stub/rails_apps/2.3/mycook/script/about +0 -3
  396. data/test/stub/rails_apps/2.3/mycook/script/console +0 -3
  397. data/test/stub/rails_apps/2.3/mycook/script/dbconsole +0 -3
  398. data/test/stub/rails_apps/2.3/mycook/script/destroy +0 -3
  399. data/test/stub/rails_apps/2.3/mycook/script/generate +0 -3
  400. data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +0 -3
  401. data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +0 -3
  402. data/test/stub/rails_apps/2.3/mycook/script/performance/request +0 -3
  403. data/test/stub/rails_apps/2.3/mycook/script/plugin +0 -3
  404. data/test/stub/rails_apps/2.3/mycook/script/process/inspector +0 -3
  405. data/test/stub/rails_apps/2.3/mycook/script/process/reaper +0 -3
  406. data/test/stub/rails_apps/2.3/mycook/script/process/spawner +0 -3
  407. data/test/stub/rails_apps/2.3/mycook/script/runner +0 -3
  408. data/test/stub/rails_apps/2.3/mycook/script/server +0 -3
  409. data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
@@ -25,7 +25,8 @@ SOURCE_ROOT = File.expand_path("../..", File.dirname(__FILE__))
25
25
  Dir.chdir(SOURCE_ROOT)
26
26
  $LOAD_PATH.unshift("#{SOURCE_ROOT}/lib")
27
27
  require 'phusion_passenger'
28
- require 'phusion_passenger/packaging'
28
+ PhusionPassenger.locate_directories
29
+ PhusionPassenger.require_passenger_lib 'packaging'
29
30
  require 'rubygems'
30
31
  require 'tmpdir'
31
32
  require 'fileutils'
@@ -2,7 +2,8 @@ source_root = File.expand_path("../..", File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift("#{source_root}/lib")
3
3
  require 'phusion_passenger'
4
4
  PhusionPassenger.locate_directories
5
- require 'phusion_passenger/platform_info/binary_compatibility'
5
+ PhusionPassenger.require_passenger_lib 'constants'
6
+ PhusionPassenger.require_passenger_lib 'platform_info/binary_compatibility'
6
7
  require 'tmpdir'
7
8
  require 'fileutils'
8
9
  require 'webrick'
@@ -16,6 +17,8 @@ ENV.delete('PASSENGER_DEBUG')
16
17
  ENV['PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY'] = '0'
17
18
  ENV['PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY'] = '0'
18
19
 
20
+ module PhusionPassenger
21
+
19
22
  describe "Passenger Standalone" do
20
23
  after :each do
21
24
  ENV.delete('PASSENGER_DEBUG')
@@ -85,11 +88,11 @@ describe "Passenger Standalone" do
85
88
  end
86
89
 
87
90
  def create_dummy_nginx_binary
88
- File.open("nginx", "w") do |f|
91
+ File.open("PassengerWebHelper", "w") do |f|
89
92
  f.puts "#!/bin/bash"
90
93
  f.puts "echo nginx version: 1.0.0"
91
94
  end
92
- File.chmod(0755, "nginx")
95
+ File.chmod(0755, "PassengerWebHelper")
93
96
  end
94
97
 
95
98
  def create_file(filename, contents = nil)
@@ -114,10 +117,10 @@ describe "Passenger Standalone" do
114
117
  end
115
118
 
116
119
  describe "start command" do
117
- SUPPORT_BINARIES_DOWNLOAD_MESSAGE = "Downloading Passenger support binaries for your platform, if available"
118
- NGINX_BINARY_DOWNLOAD_MESSAGE = "Downloading Nginx binary for your platform, if available"
119
- NGINX_SOURCE_DOWNLOAD_MESSAGE = "Downloading Nginx..."
120
- COMPILING_MESSAGE = "Installing Phusion Passenger Standalone"
120
+ SUPPORT_BINARIES_DOWNLOAD_MESSAGE = " --> Downloading #{PROGRAM_NAME} support binaries for your platform"
121
+ NGINX_BINARY_DOWNLOAD_MESSAGE = "Downloading web helper for your platform"
122
+ NGINX_SOURCE_DOWNLOAD_MESSAGE = "Downloading web helper source code..."
123
+ COMPILING_MESSAGE = "Installing #{PROGRAM_NAME} Standalone..."
121
124
 
122
125
  def test_serving_application(passenger_command)
123
126
  Dir.chdir(@runtime_dir) do
@@ -150,7 +153,7 @@ describe "Passenger Standalone" do
150
153
 
151
154
  Dir.mkdir("#{@webroot}/#{version}")
152
155
  Dir.chdir("#{@webroot}/#{version}") do
153
- create_tarball("nginx-#{nginx_version}-#{compat_id}.tar.gz") do
156
+ create_tarball("webhelper-#{nginx_version}-#{compat_id}.tar.gz") do
154
157
  create_dummy_nginx_binary
155
158
  end
156
159
  create_tarball("support-#{compat_id}.tar.gz") do
@@ -198,16 +201,16 @@ describe "Passenger Standalone" do
198
201
  test_serving_application(command)
199
202
  end
200
203
 
201
- specify "if the downloaded support binaries work but the download Nginx binary doesn't, " +
202
- "and Nginx compilation doesn't succeed the first time, then Nginx compilation " +
204
+ specify "if the downloaded support binaries work but the downloaded web helper binary doesn't, " +
205
+ "and web helper compilation doesn't succeed the first time, then web helper compilation " +
203
206
  "succeeds the second time" do
204
207
  Dir.chdir("#{@webroot}/#{version}") do
205
208
  create_tarball("support-#{compat_id}.tar.gz") do
206
209
  FileUtils.cp_r(Dir["#{PhusionPassenger.source_root}/buildout/*"],
207
210
  ".")
208
211
  end
209
- create_tarball("nginx-#{nginx_version}-#{compat_id}.tar.gz") do
210
- create_file("nginx",
212
+ create_tarball("webhelper-#{nginx_version}-#{compat_id}.tar.gz") do
213
+ create_file("PassengerWebHelper",
211
214
  "#!/bin/sh\n" +
212
215
  "exit 1\n")
213
216
  end
@@ -225,10 +228,10 @@ describe "Passenger Standalone" do
225
228
  @output = `#{command} --runtime-check-only --no-compile-runtime 2>&1`
226
229
  $?.exitstatus.should_not == 0
227
230
  @output.should include(SUPPORT_BINARIES_DOWNLOAD_MESSAGE)
228
- @output.should include("All support binaries are usable.")
231
+ @output.should include("All good\n")
229
232
  @output.should include(NGINX_BINARY_DOWNLOAD_MESSAGE)
230
- @output.should include("Nginx binary is not usable.")
231
- @output.should include("Refusing to compile the Phusion Passenger Standalone")
233
+ @output.should include("Not usable, will compile from source")
234
+ @output.should include("Refusing to compile the Phusion Passenger Standalone runtime")
232
235
 
233
236
  @output = capture_output("#{command} --runtime-check-only")
234
237
  @output.should include(NGINX_SOURCE_DOWNLOAD_MESSAGE)
@@ -255,18 +258,28 @@ describe "Passenger Standalone" do
255
258
  context "when natively packaged" do
256
259
  before :each do
257
260
  sh "passenger-config --make-locations-ini > '#{@runtime_dir}/locations.ini'"
261
+ File.open("#{@runtime_dir}/locations.ini", "r+") do |f|
262
+ data = f.read
263
+ data.sub!(/natively_packaged=.*/, 'natively_packaged=true')
264
+ if !data.sub!(/native_packaging_method=.*/, 'native_packaging_method=deb')
265
+ data << "native_packaging_method=deb\n"
266
+ end
267
+ f.rewind
268
+ f.truncate(0)
269
+ f.write(data)
270
+ end
258
271
  ENV['PASSENGER_LOCATION_CONFIGURATION_FILE'] = "#{@runtime_dir}/locations.ini"
259
- create_file("#{PhusionPassenger.lib_dir}/nginx")
272
+ create_file("#{PhusionPassenger.lib_dir}/PassengerWebHelper")
260
273
  end
261
274
 
262
275
  after :each do
263
276
  ENV.delete('PASSENGER_LOCATION_CONFIGURATION_FILE')
264
- File.unlink("#{PhusionPassenger.lib_dir}/nginx")
277
+ File.unlink("#{PhusionPassenger.lib_dir}/PassengerWebHelper")
265
278
  end
266
279
 
267
280
  it "downloads only the Nginx binary from the Internet" do
268
- File.rename("#{@webroot}/#{version}/nginx-#{nginx_version}-#{compat_id}.tar.gz",
269
- "#{@webroot}/#{version}/nginx-0.0.1-#{compat_id}.tar.gz")
281
+ File.rename("#{@webroot}/#{version}/webhelper-#{nginx_version}-#{compat_id}.tar.gz",
282
+ "#{@webroot}/#{version}/webhelper-0.0.1-#{compat_id}.tar.gz")
270
283
  @output = capture_output("passenger start " +
271
284
  "--runtime-dir '#{@runtime_dir}' " +
272
285
  "--runtime-check-only " +
@@ -321,3 +334,5 @@ describe "Passenger Standalone" do
321
334
  end
322
335
  end
323
336
  end
337
+
338
+ end # module PhusionPassenger
@@ -1,9 +1,9 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'fileutils'
3
- require 'phusion_passenger/constants'
4
- require 'phusion_passenger/utils'
5
- require 'phusion_passenger/admin_tools'
6
- require 'phusion_passenger/admin_tools/server_instance'
3
+ PhusionPassenger.require_passenger_lib 'constants'
4
+ PhusionPassenger.require_passenger_lib 'utils'
5
+ PhusionPassenger.require_passenger_lib 'admin_tools'
6
+ PhusionPassenger.require_passenger_lib 'admin_tools/server_instance'
7
7
 
8
8
  module PhusionPassenger
9
9
 
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'stringio'
3
- require 'phusion_passenger/analytics_logger'
3
+ PhusionPassenger.require_passenger_lib 'analytics_logger'
4
4
 
5
5
  module PhusionPassenger
6
6
 
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'phusion_passenger/debug_logging'
3
- require 'phusion_passenger/utils/tmpdir'
2
+ PhusionPassenger.require_passenger_lib 'debug_logging'
3
+ PhusionPassenger.require_passenger_lib 'utils/tmpdir'
4
4
  require 'stringio'
5
5
 
6
6
  module PhusionPassenger
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'socket'
3
- require 'phusion_passenger/message_channel'
3
+ PhusionPassenger.require_passenger_lib 'message_channel'
4
4
 
5
5
  module PhusionPassenger
6
6
 
@@ -1,9 +1,9 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'phusion_passenger/request_handler'
3
- require 'phusion_passenger/request_handler/thread_handler'
4
- require 'phusion_passenger/rack/thread_handler_extension'
5
- require 'phusion_passenger/analytics_logger'
6
- require 'phusion_passenger/utils'
2
+ PhusionPassenger.require_passenger_lib 'request_handler'
3
+ PhusionPassenger.require_passenger_lib 'request_handler/thread_handler'
4
+ PhusionPassenger.require_passenger_lib 'rack/thread_handler_extension'
5
+ PhusionPassenger.require_passenger_lib 'analytics_logger'
6
+ PhusionPassenger.require_passenger_lib 'utils'
7
7
 
8
8
  require 'fileutils'
9
9
 
@@ -328,78 +328,185 @@ describe RequestHandler do
328
328
  hijack_callback_called.should == true
329
329
  end
330
330
 
331
- describe "on GET requests that may have a body" do
332
- before :each do
333
- @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
334
- include Rack::ThreadHandlerExtension
335
- end
331
+ specify "GET requests with Content-Length are assumed to have a request body" do
332
+ @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
333
+ include Rack::ThreadHandlerExtension
336
334
  end
337
335
 
338
- it "allows reading from the client socket" do
339
- lambda_called = false
336
+ lambda_called = false
340
337
 
341
- @options["app"] = lambda do |env|
342
- lambda_called = true
343
- env['rack.input'].read(3).should == "abc"
344
- [200, {}, ["ok"]]
345
- end
338
+ @options["app"] = lambda do |env|
339
+ lambda_called = true
340
+ env['rack.input'].read(3).should == "abc"
341
+ [200, {}, ["ok"]]
342
+ end
346
343
 
347
- @request_handler = RequestHandler.new(@owner_pipe[1], @options)
348
- @request_handler.start_main_loop_thread
349
- client = connect
350
- begin
351
- send_binary_request(client,
352
- "REQUEST_METHOD" => "GET",
353
- "PATH_INFO" => "/",
354
- "CONTENT_LENGTH" => "3")
355
- client.write("abc")
356
- client.close_write
357
- client.read.should ==
358
- "Status: 200\r\n" +
359
- "\r\n" +
360
- "ok"
361
- ensure
362
- client.close
363
- end
344
+ @request_handler = RequestHandler.new(@owner_pipe[1], @options)
345
+ @request_handler.start_main_loop_thread
346
+ client = connect
347
+ begin
348
+ send_binary_request(client,
349
+ "REQUEST_METHOD" => "GET",
350
+ "PATH_INFO" => "/",
351
+ "CONTENT_LENGTH" => "3")
352
+ client.write("abc")
353
+ client.close_write
354
+ client.read.should ==
355
+ "Status: 200\r\n" +
356
+ "\r\n" +
357
+ "ok"
358
+ ensure
359
+ client.close
360
+ end
364
361
 
365
- lambda_called.should be_true
362
+ lambda_called.should be_true
363
+ end
364
+
365
+ specify "GET requests with Transfer-Encoding are assumed to have a request body" do
366
+ @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
367
+ include Rack::ThreadHandlerExtension
366
368
  end
369
+
370
+ lambda_called = false
371
+
372
+ @options["app"] = lambda do |env|
373
+ lambda_called = true
374
+ env['rack.input'].read(13).should ==
375
+ "3\r\n" +
376
+ "abc\r\n" +
377
+ "0\r\n\r\n"
378
+ [200, {}, ["ok"]]
379
+ end
380
+
381
+ @request_handler = RequestHandler.new(@owner_pipe[1], @options)
382
+ @request_handler.start_main_loop_thread
383
+ client = connect
384
+ begin
385
+ send_binary_request(client,
386
+ "REQUEST_METHOD" => "GET",
387
+ "PATH_INFO" => "/",
388
+ "HTTP_TRANSFER_ENCODING" => "chunked")
389
+ client.write(
390
+ "3\r\n" +
391
+ "abc\r\n" +
392
+ "0\r\n\r\n")
393
+ client.close_write
394
+ client.read.should ==
395
+ "Status: 200\r\n" +
396
+ "\r\n" +
397
+ "ok"
398
+ ensure
399
+ client.close
400
+ end
401
+
402
+ lambda_called.should be_true
367
403
  end
368
404
 
369
- describe "on GET requests that are not supposed to have a body" do
370
- before :each do
371
- @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
372
- include Rack::ThreadHandlerExtension
373
- end
405
+ specify "GET requests with neither Content-Length nor Transfer-Encoding are assumed to have no request body" do
406
+ @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
407
+ include Rack::ThreadHandlerExtension
374
408
  end
375
409
 
376
- it "disallows reading from the client socket" do
377
- lambda_called = false
410
+ lambda_called = false
378
411
 
379
- @options["app"] = lambda do |env|
380
- lambda_called = true
381
- env['rack.input'].read(1).should be_nil
382
- env['rack.input'].gets.should be_nil
383
- [200, {}, ["ok"]]
384
- end
412
+ @options["app"] = lambda do |env|
413
+ lambda_called = true
414
+ env['rack.input'].read(1).should be_nil
415
+ env['rack.input'].gets.should be_nil
416
+ [200, {}, ["ok"]]
417
+ end
385
418
 
386
- @request_handler = RequestHandler.new(@owner_pipe[1], @options)
387
- @request_handler.start_main_loop_thread
388
- client = connect
389
- begin
390
- send_binary_request(client,
391
- "REQUEST_METHOD" => "GET",
392
- "PATH_INFO" => "/")
393
- client.close_write
394
- client.read.should ==
395
- "Status: 200\r\n" +
396
- "\r\n" +
397
- "ok"
398
- ensure
399
- client.close
400
- end
419
+ @request_handler = RequestHandler.new(@owner_pipe[1], @options)
420
+ @request_handler.start_main_loop_thread
421
+ client = connect
422
+ begin
423
+ send_binary_request(client,
424
+ "REQUEST_METHOD" => "GET",
425
+ "PATH_INFO" => "/")
426
+ client.close_write
427
+ client.read.should ==
428
+ "Status: 200\r\n" +
429
+ "\r\n" +
430
+ "ok"
431
+ ensure
432
+ client.close
433
+ end
401
434
 
402
- lambda_called.should be_true
435
+ lambda_called.should be_true
436
+ end
437
+
438
+ specify "GET requests with Content-Length 0 are assumed to have no request body" do
439
+ @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
440
+ include Rack::ThreadHandlerExtension
441
+ end
442
+
443
+ lambda_called = false
444
+
445
+ @options["app"] = lambda do |env|
446
+ lambda_called = true
447
+ env['rack.input'].read(1).should be_nil
448
+ env['rack.input'].gets.should be_nil
449
+ [200, {}, ["ok"]]
450
+ end
451
+
452
+ @request_handler = RequestHandler.new(@owner_pipe[1], @options)
453
+ @request_handler.start_main_loop_thread
454
+ client = connect
455
+ begin
456
+ send_binary_request(client,
457
+ "REQUEST_METHOD" => "GET",
458
+ "PATH_INFO" => "/",
459
+ "CONTENT_LENGTH" => "0")
460
+ client.close_write
461
+ client.read.should ==
462
+ "Status: 200\r\n" +
463
+ "\r\n" +
464
+ "ok"
465
+ ensure
466
+ client.close
467
+ end
468
+
469
+ lambda_called.should be_true
470
+ end
471
+
472
+ specify "non-GET requests are assumed to have a request body, even those without Content-Length and Transfer-Encoding" do
473
+ @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
474
+ include Rack::ThreadHandlerExtension
475
+ end
476
+
477
+ lambda_called = false
478
+
479
+ @options["app"] = lambda do |env|
480
+ lambda_called = true
481
+ env['rack.input'].read(3).should == "abc"
482
+ [200, {}, ["ok"]]
483
+ end
484
+
485
+ @request_handler = RequestHandler.new(@owner_pipe[1], @options)
486
+ @request_handler.start_main_loop_thread
487
+ client = connect
488
+ begin
489
+ send_binary_request(client,
490
+ "REQUEST_METHOD" => "POST",
491
+ "PATH_INFO" => "/")
492
+ client.write("abc")
493
+ client.close_write
494
+ client.read.should ==
495
+ "Status: 200\r\n" +
496
+ "\r\n" +
497
+ "ok"
498
+ ensure
499
+ client.close
500
+ end
501
+
502
+ lambda_called.should be_true
503
+ end
504
+
505
+ describe "on GET requests that are not supposed to have a body" do
506
+ before :each do
507
+ @options["thread_handler"] = Class.new(RequestHandler::ThreadHandler) do
508
+ include Rack::ThreadHandlerExtension
509
+ end
403
510
  end
404
511
 
405
512
  it "allows reading from the client socket once the socket has been fully hijacked" do
@@ -1,6 +1,6 @@
1
1
  require 'socket'
2
- require 'phusion_passenger/utils'
3
- require 'phusion_passenger/message_channel'
2
+ PhusionPassenger.require_passenger_lib 'utils'
3
+ PhusionPassenger.require_passenger_lib 'message_channel'
4
4
 
5
5
  module PhusionPassenger
6
6
 
@@ -234,12 +234,12 @@ shared_examples_for "a loader" do
234
234
  result[:status].should == "Ready"
235
235
  headers, body = perform_request(
236
236
  "REQUEST_METHOD" => "GET",
237
- "PATH_INFO" => "/hello",
237
+ "PATH_INFO" => "/",
238
238
  # For Rails 2
239
- "REQUEST_URI" => "/hello"
239
+ "REQUEST_URI" => "/"
240
240
  )
241
241
  headers["Status"].should == "200"
242
- body.should == "hello world"
242
+ body.should == "front page"
243
243
  end
244
244
  end
245
245