passenger 5.0.4 → 5.0.5

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 (550) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +10 -0
  5. data/CHANGELOG +21 -0
  6. data/build/agents.rb +2 -2
  7. data/build/apache2.rb +6 -5
  8. data/build/common_library.rb +22 -7
  9. data/build/cxx_tests.rb +0 -3
  10. data/build/misc.rb +1 -1
  11. data/dev/parse_file_descriptor_log +119 -0
  12. data/doc/CloudLicensingConfiguration.html +387 -0
  13. data/doc/Design and Architecture.html +2430 -0
  14. data/doc/Packaging.html +488 -0
  15. data/doc/Security of user switching support.html +1833 -0
  16. data/doc/ServerOptimizationGuide.html +659 -0
  17. data/doc/ServerOptimizationGuide.txt.md +8 -0
  18. data/doc/Users guide Apache.html +9116 -0
  19. data/doc/Users guide Apache.idmap.txt +6 -2
  20. data/doc/Users guide Apache.txt +26 -7
  21. data/doc/Users guide Nginx.html +9025 -0
  22. data/doc/Users guide Nginx.idmap.txt +7 -3
  23. data/doc/Users guide Nginx.txt +29 -6
  24. data/doc/Users guide Standalone.html +3983 -0
  25. data/doc/Users guide.html +1748 -0
  26. data/doc/users_guide_snippets/installation.txt +4 -4
  27. data/ext/apache2/Configuration.cpp +16 -5
  28. data/ext/apache2/Configuration.hpp +4 -2
  29. data/ext/apache2/Hooks.cpp +44 -19
  30. data/ext/boost/libs/thread/src/pthread/once.cpp +2 -0
  31. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +6 -0
  32. data/ext/common/AgentsStarter.h +3 -2
  33. data/ext/common/ApplicationPool2/DirectSpawner.h +14 -4
  34. data/ext/common/ApplicationPool2/DummySpawner.h +12 -7
  35. data/ext/common/ApplicationPool2/Implementation.cpp +1 -1
  36. data/ext/common/ApplicationPool2/Process.h +2 -1
  37. data/ext/common/ApplicationPool2/Session.h +6 -6
  38. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -4
  39. data/ext/common/ApplicationPool2/Socket.h +59 -27
  40. data/ext/common/ApplicationPool2/Spawner.h +2 -2
  41. data/ext/common/BackgroundEventLoop.cpp +6 -1
  42. data/ext/common/Constants.h +1 -1
  43. data/ext/common/EventedClient.h +1 -1
  44. data/ext/common/EventedServer.h +2 -2
  45. data/ext/common/FileDescriptor.h +25 -6
  46. data/ext/common/Logging.cpp +107 -52
  47. data/ext/common/Logging.h +146 -19
  48. data/ext/common/MessageClient.h +2 -2
  49. data/ext/common/MessageServer.h +3 -2
  50. data/ext/common/RandomGenerator.h +8 -7
  51. data/ext/common/SafeLibev.h +5 -1
  52. data/ext/common/ServerKit/AcceptLoadBalancer.h +9 -4
  53. data/ext/common/ServerKit/FdSinkChannel.h +5 -2
  54. data/ext/common/ServerKit/FdSourceChannel.h +5 -2
  55. data/ext/common/ServerKit/FileBufferedChannel.h +2 -0
  56. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +7 -2
  57. data/ext/common/ServerKit/HttpServer.h +6 -0
  58. data/ext/common/ServerKit/Server.h +40 -3
  59. data/ext/common/StaticString.h +20 -0
  60. data/ext/common/UnionStation/Connection.h +3 -1
  61. data/ext/common/UnionStation/Core.h +6 -4
  62. data/ext/common/Utils.cpp +4 -3
  63. data/ext/common/Utils/DateParsing.h +19 -5
  64. data/ext/common/Utils/FastStringStream.h +183 -0
  65. data/ext/common/Utils/IOUtils.cpp +47 -28
  66. data/ext/common/Utils/IOUtils.h +56 -12
  67. data/ext/common/Utils/MessagePassing.h +3 -3
  68. data/ext/common/Utils/ProcessMetricsCollector.h +2 -2
  69. data/ext/common/Utils/ScopeGuard.h +16 -5
  70. data/ext/common/Utils/SpeedMeter.h +2 -2
  71. data/ext/common/Utils/StrIntUtils.cpp +6 -6
  72. data/ext/common/Utils/StrIntUtils.h +2 -1
  73. data/ext/common/agents/Base.cpp +56 -4
  74. data/ext/common/agents/Base.h +2 -1
  75. data/ext/common/agents/HelperAgent/AdminServer.h +122 -11
  76. data/ext/common/agents/HelperAgent/Main.cpp +16 -5
  77. data/ext/common/agents/HelperAgent/OptionParser.h +7 -1
  78. data/ext/common/agents/HelperAgent/RequestHandler.h +1 -1
  79. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +10 -1
  80. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +8 -0
  81. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +4 -3
  82. data/ext/common/agents/LoggingAgent/AdminServer.h +57 -11
  83. data/ext/common/agents/LoggingAgent/LoggingServer.h +3 -3
  84. data/ext/common/agents/LoggingAgent/Main.cpp +11 -3
  85. data/ext/common/agents/Watchdog/AdminServer.h +53 -11
  86. data/ext/common/agents/Watchdog/AgentWatcher.cpp +3 -3
  87. data/ext/common/agents/Watchdog/Main.cpp +13 -6
  88. data/ext/libeio/ecb.h +1 -1
  89. data/ext/libev/ev.c +13 -1
  90. data/ext/libev/ev.h +3 -0
  91. data/ext/nginx/Configuration.c +28 -6
  92. data/ext/nginx/Configuration.h +2 -1
  93. data/ext/nginx/ngx_http_passenger_module.c +5 -4
  94. data/ext/oxt/dynamic_thread_group.hpp +38 -5
  95. data/lib/phusion_passenger.rb +1 -1
  96. data/lib/phusion_passenger/common_library.rb +9 -5
  97. data/lib/phusion_passenger/config/reopen_logs_command.rb +2 -2
  98. data/lib/phusion_passenger/packaging.rb +23 -37
  99. data/passenger.gemspec +21 -21
  100. metadata +4 -453
  101. metadata.gz.asc +7 -7
  102. data/.gitignore +0 -68
  103. data/.travis.yml +0 -16
  104. data/Gemfile +0 -17
  105. data/Gemfile.lock +0 -39
  106. data/Vagrantfile +0 -54
  107. data/debian.template/README.Debian +0 -15
  108. data/debian.template/changelog +0 -316
  109. data/debian.template/compat +0 -1
  110. data/debian.template/control.erb +0 -91
  111. data/debian.template/copyright +0 -385
  112. data/debian.template/libapache2-mod-passenger.install +0 -3
  113. data/debian.template/libapache2-mod-passenger.postinst +0 -36
  114. data/debian.template/libapache2-mod-passenger.prerm +0 -15
  115. data/debian.template/locations.ini.erb +0 -14
  116. data/debian.template/passenger-dev.install.erb +0 -3
  117. data/debian.template/passenger-doc.install.erb +0 -2
  118. data/debian.template/passenger.conf +0 -6
  119. data/debian.template/passenger.docs +0 -4
  120. data/debian.template/passenger.install.erb +0 -14
  121. data/debian.template/passenger.load +0 -3
  122. data/debian.template/passenger.manpages +0 -3
  123. data/debian.template/patches/series +0 -0
  124. data/debian.template/rules.erb +0 -76
  125. data/debian.template/source/format +0 -1
  126. data/ext/common/EventedBufferedInput.h +0 -458
  127. data/packaging/rpm/LICENSE.txt +0 -19
  128. data/packaging/rpm/Makefile +0 -13
  129. data/packaging/rpm/README.md +0 -41
  130. data/packaging/rpm/Vagrantfile +0 -38
  131. data/packaging/rpm/Vagrantfile.centos +0 -30
  132. data/packaging/rpm/build +0 -170
  133. data/packaging/rpm/create_project +0 -41
  134. data/packaging/rpm/git_update +0 -88
  135. data/packaging/rpm/image/Dockerfile +0 -37
  136. data/packaging/rpm/image/Gemfile +0 -3
  137. data/packaging/rpm/image/Gemfile.lock +0 -12
  138. data/packaging/rpm/image/RPM-GPG-KEY-amazon-ga +0 -19
  139. data/packaging/rpm/image/amazon2014-i386.cfg +0 -96
  140. data/packaging/rpm/image/amazon2014-x86_64.cfg +0 -96
  141. data/packaging/rpm/image/site-defaults.cfg +0 -168
  142. data/packaging/rpm/internal/build_tasks.rb +0 -238
  143. data/packaging/rpm/internal/dummygpg +0 -11
  144. data/packaging/rpm/internal/exec_build +0 -42
  145. data/packaging/rpm/internal/get_distro_arch +0 -14
  146. data/packaging/rpm/internal/get_distro_id +0 -10
  147. data/packaging/rpm/internal/git_update +0 -27
  148. data/packaging/rpm/internal/inituidgid +0 -17
  149. data/packaging/rpm/internal/my_init +0 -344
  150. data/packaging/rpm/internal/python27 +0 -3
  151. data/packaging/rpm/internal/repo_update +0 -46
  152. data/packaging/rpm/internal/setuser +0 -26
  153. data/packaging/rpm/internal/tracking_helper +0 -40
  154. data/packaging/rpm/jenkins_release +0 -99
  155. data/packaging/rpm/lib/build_tasks_support.rb +0 -402
  156. data/packaging/rpm/lib/preprocessor.rb +0 -341
  157. data/packaging/rpm/nginx_spec/404.html +0 -119
  158. data/packaging/rpm/nginx_spec/50x.html +0 -119
  159. data/packaging/rpm/nginx_spec/index.html +0 -116
  160. data/packaging/rpm/nginx_spec/nginx-auto-cc-gcc.patch +0 -13
  161. data/packaging/rpm/nginx_spec/nginx-logo.png +0 -0
  162. data/packaging/rpm/nginx_spec/nginx-upgrade +0 -13
  163. data/packaging/rpm/nginx_spec/nginx-upgrade.8 +0 -151
  164. data/packaging/rpm/nginx_spec/nginx.conf +0 -131
  165. data/packaging/rpm/nginx_spec/nginx.init +0 -144
  166. data/packaging/rpm/nginx_spec/nginx.logrotate +0 -13
  167. data/packaging/rpm/nginx_spec/nginx.service +0 -15
  168. data/packaging/rpm/nginx_spec/nginx.spec.template +0 -560
  169. data/packaging/rpm/nginx_spec/nginx.sysconfig +0 -4
  170. data/packaging/rpm/nginx_spec/passenger.conf +0 -9
  171. data/packaging/rpm/nginx_spec/poweredby.png +0 -0
  172. data/packaging/rpm/passenger_spec/apache-passenger.conf.in +0 -26
  173. data/packaging/rpm/passenger_spec/config.json +0 -30
  174. data/packaging/rpm/passenger_spec/passenger.logrotate +0 -7
  175. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -478
  176. data/packaging/rpm/passenger_spec/passenger_dynamic_thread_group.patch +0 -16
  177. data/packaging/rpm/passenger_spec/passenger_tests_default_config_example.patch +0 -44
  178. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-GLIBC_HAVE_LONG_LONG.patch +0 -21
  179. data/packaging/rpm/repo_update +0 -114
  180. data/packaging/rpm/setup-system +0 -61
  181. data/packaging/rpm/shell +0 -10
  182. data/test/.rspec +0 -4
  183. data/test/config.json.example +0 -42
  184. data/test/config.json.rpm-automation +0 -15
  185. data/test/config.json.travis +0 -15
  186. data/test/config.json.vagrant +0 -30
  187. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +0 -124
  188. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -30
  189. data/test/cxx/ApplicationPool2/PoolTest.cpp +0 -2062
  190. data/test/cxx/ApplicationPool2/ProcessTest.cpp +0 -130
  191. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +0 -243
  192. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +0 -823
  193. data/test/cxx/BufferedIOTest.cpp +0 -364
  194. data/test/cxx/CachedFileStatTest.cpp +0 -402
  195. data/test/cxx/CxxTestMain.cpp +0 -181
  196. data/test/cxx/DataStructures/LStringTest.cpp +0 -275
  197. data/test/cxx/DataStructures/StringKeyTableTest.cpp +0 -199
  198. data/test/cxx/DateParsingTest.cpp +0 -75
  199. data/test/cxx/DechunkerTest.cpp +0 -250
  200. data/test/cxx/EventedBufferedInputTest.cpp +0 -758
  201. data/test/cxx/EventedClientTest.cpp +0 -523
  202. data/test/cxx/FileChangeCheckerTest.cpp +0 -331
  203. data/test/cxx/FileDescriptorTest.cpp +0 -69
  204. data/test/cxx/FilterSupportTest.cpp +0 -433
  205. data/test/cxx/IOUtilsTest.cpp +0 -861
  206. data/test/cxx/MemoryKit/MbufTest.cpp +0 -213
  207. data/test/cxx/MessageIOTest.cpp +0 -360
  208. data/test/cxx/MessagePassingTest.cpp +0 -81
  209. data/test/cxx/MessageReadersWritersTest.cpp +0 -576
  210. data/test/cxx/MessageServerTest.cpp +0 -393
  211. data/test/cxx/ProcessMetricsCollectorTest.cpp +0 -123
  212. data/test/cxx/RequestHandlerTest.cpp +0 -1463
  213. data/test/cxx/ResponseCacheTest.cpp +0 -322
  214. data/test/cxx/ServerKit/ChannelTest.cpp +0 -1467
  215. data/test/cxx/ServerKit/CookieUtilsTest.cpp +0 -274
  216. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +0 -992
  217. data/test/cxx/ServerKit/HeaderTableTest.cpp +0 -177
  218. data/test/cxx/ServerKit/HttpServerTest.cpp +0 -1580
  219. data/test/cxx/ServerKit/ServerTest.cpp +0 -408
  220. data/test/cxx/StaticStringTest.cpp +0 -220
  221. data/test/cxx/StringMapTest.cpp +0 -131
  222. data/test/cxx/SystemTimeTest.cpp +0 -37
  223. data/test/cxx/TemplateTest.cpp +0 -118
  224. data/test/cxx/TestSupport.cpp +0 -207
  225. data/test/cxx/TestSupport.h +0 -333
  226. data/test/cxx/UnionStationTest.cpp +0 -741
  227. data/test/cxx/Utils/StrIntUtilsTest.cpp +0 -39
  228. data/test/cxx/UtilsTest.cpp +0 -672
  229. data/test/cxx/VariantMapTest.cpp +0 -191
  230. data/test/gdbinit.example +0 -34
  231. data/test/integration_tests/apache2_tests.rb +0 -585
  232. data/test/integration_tests/downloaded_binaries_tests.rb +0 -185
  233. data/test/integration_tests/native_packaging_spec.rb +0 -368
  234. data/test/integration_tests/nginx_tests.rb +0 -402
  235. data/test/integration_tests/shared/example_webapp_tests.rb +0 -289
  236. data/test/integration_tests/source_packaging_test.rb +0 -201
  237. data/test/integration_tests/spec_helper.rb +0 -22
  238. data/test/integration_tests/standalone_tests.rb +0 -392
  239. data/test/node/line_reader_spec.js +0 -338
  240. data/test/node/spec_helper.js +0 -65
  241. data/test/oxt/backtrace_test.cpp +0 -88
  242. data/test/oxt/counter.hpp +0 -55
  243. data/test/oxt/dynamic_thread_group_test.cpp +0 -131
  244. data/test/oxt/oxt_test_main.cpp +0 -27
  245. data/test/oxt/spin_lock_test.cpp +0 -59
  246. data/test/oxt/syscall_interruption_test.cpp +0 -39
  247. data/test/ruby/debug_logging_spec.rb +0 -145
  248. data/test/ruby/message_channel_spec.rb +0 -196
  249. data/test/ruby/rack/loader_spec.rb +0 -42
  250. data/test/ruby/rack/preloader_spec.rb +0 -48
  251. data/test/ruby/rails3.0/loader_spec.rb +0 -26
  252. data/test/ruby/rails3.0/preloader_spec.rb +0 -32
  253. data/test/ruby/rails3.1/loader_spec.rb +0 -26
  254. data/test/ruby/rails3.1/preloader_spec.rb +0 -32
  255. data/test/ruby/rails3.2/loader_spec.rb +0 -26
  256. data/test/ruby/rails3.2/preloader_spec.rb +0 -32
  257. data/test/ruby/rails4.0/loader_spec.rb +0 -28
  258. data/test/ruby/rails4.0/preloader_spec.rb +0 -34
  259. data/test/ruby/rails4.1/loader_spec.rb +0 -28
  260. data/test/ruby/rails4.1/preloader_spec.rb +0 -34
  261. data/test/ruby/request_handler_spec.rb +0 -747
  262. data/test/ruby/shared/loader_sharedspec.rb +0 -247
  263. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +0 -357
  264. data/test/ruby/shared/ruby_loader_sharedspec.rb +0 -55
  265. data/test/ruby/spec_helper.rb +0 -114
  266. data/test/ruby/standalone/runtime_installer_spec.rb +0 -402
  267. data/test/ruby/union_station_spec.rb +0 -288
  268. data/test/ruby/utils/file_system_watcher_spec.rb +0 -229
  269. data/test/ruby/utils/hosts_file_parser.rb +0 -258
  270. data/test/ruby/utils/tee_input_spec.rb +0 -235
  271. data/test/ruby/utils/unseekable_socket_spec.rb +0 -66
  272. data/test/ruby/utils_spec.rb +0 -41
  273. data/test/stub/apache2/httpd.conf.erb +0 -122
  274. data/test/stub/apache2/mime.types +0 -748
  275. data/test/stub/garbage1.dat +0 -0
  276. data/test/stub/garbage2.dat +0 -0
  277. data/test/stub/garbage3.dat +0 -0
  278. data/test/stub/http_request.yml +0 -23
  279. data/test/stub/index.html +0 -1
  280. data/test/stub/nginx/koi-utf +0 -109
  281. data/test/stub/nginx/koi-win +0 -103
  282. data/test/stub/nginx/mime.types +0 -70
  283. data/test/stub/nginx/nginx.conf.erb +0 -70
  284. data/test/stub/nginx/win-utf +0 -126
  285. data/test/stub/node/app.js +0 -133
  286. data/test/stub/node/public/.gitignore +0 -0
  287. data/test/stub/node/tmp/.gitignore +0 -0
  288. data/test/stub/rack/config.ru +0 -95
  289. data/test/stub/rack/library.rb +0 -16
  290. data/test/stub/rack/public/.gitignore +0 -0
  291. data/test/stub/rack/start.rb +0 -52
  292. data/test/stub/rack/tmp/.gitignore +0 -0
  293. data/test/stub/rails3.0/.gitignore +0 -4
  294. data/test/stub/rails3.0/Gemfile +0 -22
  295. data/test/stub/rails3.0/Gemfile.lock +0 -80
  296. data/test/stub/rails3.0/Rakefile +0 -10
  297. data/test/stub/rails3.0/app/controllers/application_controller.rb +0 -4
  298. data/test/stub/rails3.0/app/helpers/application_helper.rb +0 -2
  299. data/test/stub/rails3.0/app/views/layouts/application.html.erb +0 -14
  300. data/test/stub/rails3.0/config.ru +0 -4
  301. data/test/stub/rails3.0/config/application.rb +0 -48
  302. data/test/stub/rails3.0/config/boot.rb +0 -13
  303. data/test/stub/rails3.0/config/database.yml +0 -22
  304. data/test/stub/rails3.0/config/environment.rb +0 -5
  305. data/test/stub/rails3.0/config/environments/development.rb +0 -19
  306. data/test/stub/rails3.0/config/environments/production.rb +0 -48
  307. data/test/stub/rails3.0/config/environments/test.rb +0 -32
  308. data/test/stub/rails3.0/config/initializers/backtrace_silencers.rb +0 -7
  309. data/test/stub/rails3.0/config/initializers/inflections.rb +0 -10
  310. data/test/stub/rails3.0/config/initializers/mime_types.rb +0 -5
  311. data/test/stub/rails3.0/config/initializers/passenger.rb +0 -2
  312. data/test/stub/rails3.0/config/initializers/secret_token.rb +0 -7
  313. data/test/stub/rails3.0/config/initializers/session_store.rb +0 -8
  314. data/test/stub/rails3.0/config/locales/en.yml +0 -5
  315. data/test/stub/rails3.0/config/routes.rb +0 -58
  316. data/test/stub/rails3.0/db/seeds.rb +0 -7
  317. data/test/stub/rails3.0/doc/README_FOR_APP +0 -2
  318. data/test/stub/rails3.0/lib/tasks/.gitkeep +0 -0
  319. data/test/stub/rails3.0/log/.gitignore +0 -0
  320. data/test/stub/rails3.0/public/404.html +0 -26
  321. data/test/stub/rails3.0/public/422.html +0 -26
  322. data/test/stub/rails3.0/public/500.html +0 -26
  323. data/test/stub/rails3.0/public/favicon.ico +0 -0
  324. data/test/stub/rails3.0/public/index.html +0 -279
  325. data/test/stub/rails3.0/public/robots.txt +0 -5
  326. data/test/stub/rails3.0/public/stylesheets/.gitkeep +0 -0
  327. data/test/stub/rails3.0/script/rails +0 -9
  328. data/test/stub/rails3.0/test/performance/browsing_test.rb +0 -9
  329. data/test/stub/rails3.0/test/test_helper.rb +0 -13
  330. data/test/stub/rails3.0/vendor/plugins/.gitkeep +0 -0
  331. data/test/stub/rails3.1/.gitignore +0 -15
  332. data/test/stub/rails3.1/Gemfile +0 -37
  333. data/test/stub/rails3.1/Gemfile.lock +0 -115
  334. data/test/stub/rails3.1/README +0 -261
  335. data/test/stub/rails3.1/Rakefile +0 -7
  336. data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
  337. data/test/stub/rails3.1/app/assets/stylesheets/application.css +0 -7
  338. data/test/stub/rails3.1/app/controllers/application_controller.rb +0 -3
  339. data/test/stub/rails3.1/app/helpers/application_helper.rb +0 -2
  340. data/test/stub/rails3.1/app/mailers/.gitkeep +0 -0
  341. data/test/stub/rails3.1/app/models/.gitkeep +0 -0
  342. data/test/stub/rails3.1/app/views/layouts/application.html.erb +0 -14
  343. data/test/stub/rails3.1/config.ru +0 -4
  344. data/test/stub/rails3.1/config/application.rb +0 -48
  345. data/test/stub/rails3.1/config/boot.rb +0 -6
  346. data/test/stub/rails3.1/config/database.yml +0 -25
  347. data/test/stub/rails3.1/config/environment.rb +0 -5
  348. data/test/stub/rails3.1/config/environments/development.rb +0 -30
  349. data/test/stub/rails3.1/config/environments/production.rb +0 -60
  350. data/test/stub/rails3.1/config/environments/test.rb +0 -39
  351. data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +0 -7
  352. data/test/stub/rails3.1/config/initializers/inflections.rb +0 -10
  353. data/test/stub/rails3.1/config/initializers/mime_types.rb +0 -5
  354. data/test/stub/rails3.1/config/initializers/passenger.rb +0 -2
  355. data/test/stub/rails3.1/config/initializers/secret_token.rb +0 -7
  356. data/test/stub/rails3.1/config/initializers/session_store.rb +0 -8
  357. data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +0 -14
  358. data/test/stub/rails3.1/config/locales/en.yml +0 -5
  359. data/test/stub/rails3.1/config/routes.rb +0 -58
  360. data/test/stub/rails3.1/db/seeds.rb +0 -7
  361. data/test/stub/rails3.1/doc/README_FOR_APP +0 -2
  362. data/test/stub/rails3.1/lib/assets/.gitkeep +0 -0
  363. data/test/stub/rails3.1/lib/tasks/.gitkeep +0 -0
  364. data/test/stub/rails3.1/log/.gitkeep +0 -0
  365. data/test/stub/rails3.1/public/404.html +0 -26
  366. data/test/stub/rails3.1/public/422.html +0 -26
  367. data/test/stub/rails3.1/public/500.html +0 -26
  368. data/test/stub/rails3.1/public/favicon.ico +0 -0
  369. data/test/stub/rails3.1/public/index.html +0 -241
  370. data/test/stub/rails3.1/public/robots.txt +0 -5
  371. data/test/stub/rails3.1/script/rails +0 -6
  372. data/test/stub/rails3.1/test/fixtures/.gitkeep +0 -0
  373. data/test/stub/rails3.1/test/functional/.gitkeep +0 -0
  374. data/test/stub/rails3.1/test/integration/.gitkeep +0 -0
  375. data/test/stub/rails3.1/test/performance/browsing_test.rb +0 -12
  376. data/test/stub/rails3.1/test/test_helper.rb +0 -13
  377. data/test/stub/rails3.1/test/unit/.gitkeep +0 -0
  378. data/test/stub/rails3.1/vendor/assets/stylesheets/.gitkeep +0 -0
  379. data/test/stub/rails3.1/vendor/plugins/.gitkeep +0 -0
  380. data/test/stub/rails3.2/.gitignore +0 -15
  381. data/test/stub/rails3.2/Gemfile +0 -39
  382. data/test/stub/rails3.2/Gemfile.lock +0 -113
  383. data/test/stub/rails3.2/Rakefile +0 -7
  384. data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
  385. data/test/stub/rails3.2/app/assets/stylesheets/application.css +0 -13
  386. data/test/stub/rails3.2/app/controllers/application_controller.rb +0 -3
  387. data/test/stub/rails3.2/app/helpers/application_helper.rb +0 -2
  388. data/test/stub/rails3.2/app/mailers/.gitkeep +0 -0
  389. data/test/stub/rails3.2/app/models/.gitkeep +0 -0
  390. data/test/stub/rails3.2/app/views/layouts/application.html.erb +0 -14
  391. data/test/stub/rails3.2/config.ru +0 -4
  392. data/test/stub/rails3.2/config/application.rb +0 -62
  393. data/test/stub/rails3.2/config/boot.rb +0 -6
  394. data/test/stub/rails3.2/config/database.yml +0 -25
  395. data/test/stub/rails3.2/config/environment.rb +0 -5
  396. data/test/stub/rails3.2/config/environments/development.rb +0 -37
  397. data/test/stub/rails3.2/config/environments/production.rb +0 -67
  398. data/test/stub/rails3.2/config/environments/test.rb +0 -37
  399. data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +0 -7
  400. data/test/stub/rails3.2/config/initializers/inflections.rb +0 -15
  401. data/test/stub/rails3.2/config/initializers/mime_types.rb +0 -5
  402. data/test/stub/rails3.2/config/initializers/passenger.rb +0 -2
  403. data/test/stub/rails3.2/config/initializers/secret_token.rb +0 -7
  404. data/test/stub/rails3.2/config/initializers/session_store.rb +0 -8
  405. data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +0 -14
  406. data/test/stub/rails3.2/config/locales/en.yml +0 -5
  407. data/test/stub/rails3.2/config/routes.rb +0 -58
  408. data/test/stub/rails3.2/db/seeds.rb +0 -7
  409. data/test/stub/rails3.2/doc/README_FOR_APP +0 -2
  410. data/test/stub/rails3.2/lib/assets/.gitkeep +0 -0
  411. data/test/stub/rails3.2/lib/tasks/.gitkeep +0 -0
  412. data/test/stub/rails3.2/log/.gitkeep +0 -0
  413. data/test/stub/rails3.2/public/404.html +0 -26
  414. data/test/stub/rails3.2/public/422.html +0 -26
  415. data/test/stub/rails3.2/public/500.html +0 -25
  416. data/test/stub/rails3.2/public/favicon.ico +0 -0
  417. data/test/stub/rails3.2/public/index.html +0 -241
  418. data/test/stub/rails3.2/public/robots.txt +0 -5
  419. data/test/stub/rails3.2/script/rails +0 -6
  420. data/test/stub/rails3.2/test/fixtures/.gitkeep +0 -0
  421. data/test/stub/rails3.2/test/functional/.gitkeep +0 -0
  422. data/test/stub/rails3.2/test/integration/.gitkeep +0 -0
  423. data/test/stub/rails3.2/test/performance/browsing_test.rb +0 -12
  424. data/test/stub/rails3.2/test/test_helper.rb +0 -13
  425. data/test/stub/rails3.2/test/unit/.gitkeep +0 -0
  426. data/test/stub/rails3.2/vendor/assets/stylesheets/.gitkeep +0 -0
  427. data/test/stub/rails3.2/vendor/plugins/.gitkeep +0 -0
  428. data/test/stub/rails4.0/.gitignore +0 -16
  429. data/test/stub/rails4.0/Gemfile +0 -45
  430. data/test/stub/rails4.0/Gemfile.lock +0 -126
  431. data/test/stub/rails4.0/README.rdoc +0 -28
  432. data/test/stub/rails4.0/Rakefile +0 -6
  433. data/test/stub/rails4.0/app/assets/images/.keep +0 -0
  434. data/test/stub/rails4.0/app/assets/javascripts/application.js +0 -16
  435. data/test/stub/rails4.0/app/assets/stylesheets/application.css +0 -13
  436. data/test/stub/rails4.0/app/controllers/application_controller.rb +0 -5
  437. data/test/stub/rails4.0/app/controllers/concerns/.keep +0 -0
  438. data/test/stub/rails4.0/app/helpers/application_helper.rb +0 -2
  439. data/test/stub/rails4.0/app/mailers/.keep +0 -0
  440. data/test/stub/rails4.0/app/models/.keep +0 -0
  441. data/test/stub/rails4.0/app/models/concerns/.keep +0 -0
  442. data/test/stub/rails4.0/app/views/layouts/application.html.erb +0 -14
  443. data/test/stub/rails4.0/bin/bundle +0 -3
  444. data/test/stub/rails4.0/bin/rails +0 -4
  445. data/test/stub/rails4.0/bin/rake +0 -4
  446. data/test/stub/rails4.0/config.ru +0 -4
  447. data/test/stub/rails4.0/config/application.rb +0 -23
  448. data/test/stub/rails4.0/config/boot.rb +0 -4
  449. data/test/stub/rails4.0/config/database.yml +0 -25
  450. data/test/stub/rails4.0/config/environment.rb +0 -5
  451. data/test/stub/rails4.0/config/environments/development.rb +0 -29
  452. data/test/stub/rails4.0/config/environments/production.rb +0 -80
  453. data/test/stub/rails4.0/config/environments/test.rb +0 -36
  454. data/test/stub/rails4.0/config/initializers/backtrace_silencers.rb +0 -7
  455. data/test/stub/rails4.0/config/initializers/filter_parameter_logging.rb +0 -4
  456. data/test/stub/rails4.0/config/initializers/inflections.rb +0 -16
  457. data/test/stub/rails4.0/config/initializers/mime_types.rb +0 -5
  458. data/test/stub/rails4.0/config/initializers/passenger.rb +0 -2
  459. data/test/stub/rails4.0/config/initializers/secret_token.rb +0 -12
  460. data/test/stub/rails4.0/config/initializers/session_store.rb +0 -3
  461. data/test/stub/rails4.0/config/initializers/wrap_parameters.rb +0 -14
  462. data/test/stub/rails4.0/config/locales/en.yml +0 -23
  463. data/test/stub/rails4.0/config/routes.rb +0 -57
  464. data/test/stub/rails4.0/db/seeds.rb +0 -7
  465. data/test/stub/rails4.0/lib/assets/.keep +0 -0
  466. data/test/stub/rails4.0/lib/tasks/.keep +0 -0
  467. data/test/stub/rails4.0/log/.keep +0 -0
  468. data/test/stub/rails4.0/public/404.html +0 -58
  469. data/test/stub/rails4.0/public/422.html +0 -58
  470. data/test/stub/rails4.0/public/500.html +0 -57
  471. data/test/stub/rails4.0/public/favicon.ico +0 -0
  472. data/test/stub/rails4.0/public/robots.txt +0 -5
  473. data/test/stub/rails4.0/test/controllers/.keep +0 -0
  474. data/test/stub/rails4.0/test/fixtures/.keep +0 -0
  475. data/test/stub/rails4.0/test/helpers/.keep +0 -0
  476. data/test/stub/rails4.0/test/integration/.keep +0 -0
  477. data/test/stub/rails4.0/test/mailers/.keep +0 -0
  478. data/test/stub/rails4.0/test/models/.keep +0 -0
  479. data/test/stub/rails4.0/test/test_helper.rb +0 -15
  480. data/test/stub/rails4.0/vendor/assets/javascripts/.keep +0 -0
  481. data/test/stub/rails4.0/vendor/assets/stylesheets/.keep +0 -0
  482. data/test/stub/rails4.1/.gitignore +0 -16
  483. data/test/stub/rails4.1/Gemfile +0 -45
  484. data/test/stub/rails4.1/Gemfile.lock +0 -129
  485. data/test/stub/rails4.1/README.rdoc +0 -28
  486. data/test/stub/rails4.1/Rakefile +0 -6
  487. data/test/stub/rails4.1/app/assets/images/.keep +0 -0
  488. data/test/stub/rails4.1/app/assets/javascripts/application.js +0 -16
  489. data/test/stub/rails4.1/app/assets/stylesheets/application.css +0 -13
  490. data/test/stub/rails4.1/app/controllers/application_controller.rb +0 -5
  491. data/test/stub/rails4.1/app/controllers/concerns/.keep +0 -0
  492. data/test/stub/rails4.1/app/helpers/application_helper.rb +0 -2
  493. data/test/stub/rails4.1/app/mailers/.keep +0 -0
  494. data/test/stub/rails4.1/app/models/.keep +0 -0
  495. data/test/stub/rails4.1/app/models/concerns/.keep +0 -0
  496. data/test/stub/rails4.1/app/views/layouts/application.html.erb +0 -14
  497. data/test/stub/rails4.1/bin/bundle +0 -3
  498. data/test/stub/rails4.1/bin/rails +0 -4
  499. data/test/stub/rails4.1/bin/rake +0 -4
  500. data/test/stub/rails4.1/config.ru +0 -4
  501. data/test/stub/rails4.1/config/application.rb +0 -23
  502. data/test/stub/rails4.1/config/boot.rb +0 -4
  503. data/test/stub/rails4.1/config/database.yml +0 -25
  504. data/test/stub/rails4.1/config/environment.rb +0 -5
  505. data/test/stub/rails4.1/config/environments/development.rb +0 -29
  506. data/test/stub/rails4.1/config/environments/production.rb +0 -80
  507. data/test/stub/rails4.1/config/environments/test.rb +0 -36
  508. data/test/stub/rails4.1/config/initializers/backtrace_silencers.rb +0 -7
  509. data/test/stub/rails4.1/config/initializers/filter_parameter_logging.rb +0 -4
  510. data/test/stub/rails4.1/config/initializers/inflections.rb +0 -16
  511. data/test/stub/rails4.1/config/initializers/mime_types.rb +0 -5
  512. data/test/stub/rails4.1/config/initializers/passenger.rb +0 -5
  513. data/test/stub/rails4.1/config/initializers/secret_token.rb +0 -12
  514. data/test/stub/rails4.1/config/initializers/session_store.rb +0 -3
  515. data/test/stub/rails4.1/config/initializers/wrap_parameters.rb +0 -14
  516. data/test/stub/rails4.1/config/locales/en.yml +0 -23
  517. data/test/stub/rails4.1/config/routes.rb +0 -57
  518. data/test/stub/rails4.1/db/seeds.rb +0 -7
  519. data/test/stub/rails4.1/lib/assets/.keep +0 -0
  520. data/test/stub/rails4.1/lib/tasks/.keep +0 -0
  521. data/test/stub/rails4.1/log/.keep +0 -0
  522. data/test/stub/rails4.1/public/404.html +0 -58
  523. data/test/stub/rails4.1/public/422.html +0 -58
  524. data/test/stub/rails4.1/public/500.html +0 -57
  525. data/test/stub/rails4.1/public/favicon.ico +0 -0
  526. data/test/stub/rails4.1/public/robots.txt +0 -5
  527. data/test/stub/rails4.1/test/controllers/.keep +0 -0
  528. data/test/stub/rails4.1/test/fixtures/.keep +0 -0
  529. data/test/stub/rails4.1/test/helpers/.keep +0 -0
  530. data/test/stub/rails4.1/test/integration/.keep +0 -0
  531. data/test/stub/rails4.1/test/mailers/.keep +0 -0
  532. data/test/stub/rails4.1/test/models/.keep +0 -0
  533. data/test/stub/rails4.1/test/test_helper.rb +0 -15
  534. data/test/stub/rails4.1/vendor/assets/javascripts/.keep +0 -0
  535. data/test/stub/rails4.1/vendor/assets/stylesheets/.keep +0 -0
  536. data/test/stub/start_error.pl +0 -24
  537. data/test/stub/upload_data.txt +0 -494
  538. data/test/stub/wsgi/passenger_wsgi.py +0 -212
  539. data/test/stub/wsgi/public/.gitignore +0 -0
  540. data/test/stub/wsgi/tmp/.gitignore +0 -0
  541. data/test/support/allocate_memory.c +0 -14
  542. data/test/support/apache2_controller.rb +0 -258
  543. data/test/support/multipart.rb +0 -62
  544. data/test/support/nginx_controller.rb +0 -97
  545. data/test/support/placebo-preloader.rb +0 -88
  546. data/test/support/test_helper.rb +0 -455
  547. data/test/support/valgrind.h +0 -2539
  548. data/test/tut/tut.h +0 -1310
  549. data/test/tut/tut_reporter.h +0 -256
  550. data/test/valgrind-osx.supp +0 -7
@@ -1,402 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
- require 'support/nginx_controller'
3
-
4
- WEB_SERVER_DECHUNKS_REQUESTS = true
5
-
6
- require 'integration_tests/shared/example_webapp_tests'
7
-
8
- describe "Phusion Passenger for Nginx" do
9
- before :all do
10
- if !CONFIG['nginx']
11
- STDERR.puts "*** ERROR: You must set the 'nginx' config option in test/config.json."
12
- exit!(1)
13
- end
14
-
15
- check_hosts_configuration
16
- FileUtils.mkdir_p("tmp.nginx")
17
- end
18
-
19
- after :all do
20
- begin
21
- @nginx.stop if @nginx
22
- ensure
23
- FileUtils.rm_rf("tmp.nginx")
24
- end
25
- end
26
-
27
- before :each do
28
- File.open("test.log", "a") do |f|
29
- # Make sure that all Nginx log output is prepended by the test description
30
- # so that we know which messages are associated with which tests.
31
- f.puts "\n#### #{Time.now}: #{example.full_description}"
32
- @test_log_pos = f.pos
33
- end
34
- end
35
-
36
- after :each do
37
- log "End of test"
38
- if example.exception
39
- puts "\t---------------- Begin logs -------------------"
40
- File.open("test.log", "r") do |f|
41
- f.seek(@test_log_pos)
42
- puts f.read.split("\n").map{ |line| "\t#{line}" }.join("\n")
43
- end
44
- puts "\t---------------- End logs -------------------"
45
- puts "\tThe following test failed. The web server logs are printed above."
46
- end
47
- end
48
-
49
- def create_nginx_controller(options = {})
50
- @nginx = NginxController.new("tmp.nginx")
51
- if Process.uid == 0
52
- @nginx.set({
53
- :www_user => CONFIG['normal_user_1'],
54
- :www_group => Etc.getgrgid(Etc.getpwnam(CONFIG['normal_user_1']).gid).name
55
- }.merge(options))
56
- end
57
- end
58
-
59
- def log(message)
60
- File.open("test.log", "a") do |f|
61
- f.puts "[#{Time.now}] Spec: #{message}"
62
- end
63
- end
64
-
65
- describe "a Ruby app running on the root URI" do
66
- before :all do
67
- create_nginx_controller
68
- @server = "http://1.passenger.test:#{@nginx.port}"
69
- @stub = RackStub.new('rack')
70
- @nginx.add_server do |server|
71
- server[:server_name] = "1.passenger.test"
72
- server[:root] = "#{@stub.full_app_root}/public"
73
- end
74
- @nginx.start
75
- end
76
-
77
- after :all do
78
- @stub.destroy
79
- @nginx.stop if @nginx
80
- end
81
-
82
- before :each do
83
- @stub.reset
84
- end
85
-
86
- it_should_behave_like "an example web app"
87
- end
88
-
89
- describe "a Ruby app running in a sub-URI" do
90
- before :all do
91
- create_nginx_controller
92
- @server = "http://1.passenger.test:#{@nginx.port}/subapp"
93
- @stub = RackStub.new('rack')
94
- @nginx.add_server do |server|
95
- server[:server_name] = "1.passenger.test"
96
- server[:root] = File.expand_path("stub")
97
- server << %Q{
98
- location ~ ^/subapp(/.*|$) {
99
- alias #{@stub.full_app_root}/public$1;
100
- passenger_base_uri /subapp;
101
- passenger_document_root #{@stub.full_app_root}/public;
102
- passenger_app_root #{@stub.full_app_root};
103
- passenger_enabled on;
104
- }
105
- }
106
- end
107
- @nginx.start
108
- end
109
-
110
- after :all do
111
- @stub.destroy
112
- @nginx.stop if @nginx
113
- end
114
-
115
- before :each do
116
- @stub.reset
117
- end
118
-
119
- it_should_behave_like "an example web app"
120
-
121
- it "does not interfere with the root website" do
122
- @server = "http://1.passenger.test:#{@nginx.port}"
123
- get('/').should == "This is the stub directory."
124
- end
125
- end
126
-
127
- describe "a Python app running on the root URI" do
128
- before :all do
129
- create_nginx_controller
130
- @server = "http://1.passenger.test:#{@nginx.port}"
131
- @stub = PythonStub.new('wsgi')
132
- @nginx.add_server do |server|
133
- server[:server_name] = "1.passenger.test"
134
- server[:root] = "#{@stub.full_app_root}/public"
135
- end
136
- @nginx.start
137
- end
138
-
139
- after :all do
140
- @stub.destroy
141
- @nginx.stop if @nginx
142
- end
143
-
144
- before :each do
145
- @stub.reset
146
- end
147
-
148
- it_should_behave_like "an example web app"
149
- end
150
-
151
- describe "a Python app running in a sub-URI" do
152
- before :all do
153
- create_nginx_controller
154
- @server = "http://1.passenger.test:#{@nginx.port}/subapp"
155
- @stub = PythonStub.new('wsgi')
156
- @nginx.add_server do |server|
157
- server[:server_name] = "1.passenger.test"
158
- server[:root] = File.expand_path("stub")
159
- server << %Q{
160
- location ~ ^/subapp(/.*|$) {
161
- alias #{@stub.full_app_root}/public$1;
162
- passenger_base_uri /subapp;
163
- passenger_app_root #{@stub.full_app_root};
164
- passenger_document_root #{@stub.full_app_root}/public;
165
- passenger_enabled on;
166
- }
167
- }
168
- end
169
- @nginx.start
170
- end
171
-
172
- after :all do
173
- @stub.destroy
174
- @nginx.stop if @nginx
175
- end
176
-
177
- before :each do
178
- @stub.reset
179
- end
180
-
181
- it_should_behave_like "an example web app"
182
-
183
- it "does not interfere with the root website" do
184
- @server = "http://1.passenger.test:#{@nginx.port}"
185
- get('/').should == "This is the stub directory."
186
- end
187
- end
188
-
189
- describe "a Node.js app running on the root URI" do
190
- before :all do
191
- create_nginx_controller
192
- @server = "http://1.passenger.test:#{@nginx.port}"
193
- @stub = NodejsStub.new('node')
194
- @nginx.add_server do |server|
195
- server[:server_name] = "1.passenger.test"
196
- server[:root] = "#{@stub.full_app_root}/public"
197
- end
198
- @nginx.start
199
- end
200
-
201
- after :all do
202
- @stub.destroy
203
- @nginx.stop if @nginx
204
- end
205
-
206
- before :each do
207
- @stub.reset
208
- end
209
-
210
- it_should_behave_like "an example web app"
211
- end
212
-
213
- describe "a Node.js app running in a sub-URI" do
214
- before :all do
215
- create_nginx_controller
216
- @server = "http://1.passenger.test:#{@nginx.port}/subapp"
217
- @stub = NodejsStub.new('node')
218
- @nginx.add_server do |server|
219
- server[:server_name] = "1.passenger.test"
220
- server[:root] = File.expand_path("stub")
221
- server[:passenger_friendly_error_pages] = 'on'
222
- server << %Q{
223
- location ~ ^/subapp(/.*|$) {
224
- alias #{@stub.full_app_root}/public$1;
225
- passenger_base_uri /subapp;
226
- passenger_document_root #{@stub.full_app_root}/public;
227
- passenger_app_root #{@stub.full_app_root};
228
- passenger_enabled on;
229
- }
230
- }
231
- end
232
- @nginx.start
233
- end
234
-
235
- after :all do
236
- @stub.destroy
237
- @nginx.stop if @nginx
238
- end
239
-
240
- before :each do
241
- @stub.reset
242
- end
243
-
244
- it_should_behave_like "an example web app"
245
-
246
- it "does not interfere with the root website" do
247
- @server = "http://1.passenger.test:#{@nginx.port}"
248
- get('/').should == "This is the stub directory."
249
- end
250
- end
251
-
252
- describe "various features" do
253
- before :all do
254
- create_nginx_controller
255
- @server = "http://1.passenger.test:#{@nginx.port}"
256
- @stub = RackStub.new('rack')
257
- @nginx.set(:stat_throttle_rate => 0)
258
- @nginx.add_server do |server|
259
- server[:server_name] = "1.passenger.test"
260
- server[:root] = "#{@stub.full_app_root}/public"
261
- server[:passenger_load_shell_envvars] = "off"
262
- server[:passenger_friendly_error_pages] = "on"
263
- server << %q{
264
- location /crash_without_friendly_error_page {
265
- passenger_enabled on;
266
- passenger_friendly_error_pages off;
267
- }
268
- }
269
- end
270
- @nginx.add_server do |server|
271
- server[:server_name] = "2.passenger.test"
272
- server[:root] = "#{@stub.full_app_root}/public"
273
- server[:passenger_app_group_name] = "secondary"
274
- server[:passenger_load_shell_envvars] = "off"
275
- end
276
- @nginx.add_server do |server|
277
- server[:server_name] = "3.passenger.test"
278
- server[:passenger_app_group_name] = "tertiary"
279
- server[:root] = "#{@stub.full_app_root}/public"
280
- server[:passenger_load_shell_envvars] = "off"
281
- server[:passenger_max_requests] = 3
282
- end
283
- @nginx.start
284
- end
285
-
286
- after :all do
287
- @stub.destroy
288
- @nginx.stop if @nginx
289
- end
290
-
291
- before :each do
292
- @stub.reset
293
- @error_page_signature = /<meta name="generator" content="Phusion Passenger">/
294
- File.touch("#{@stub.app_root}/tmp/restart.txt", 1 + rand(100000))
295
- end
296
-
297
- it "sets ENV['SERVER_SOFTWARE']" do
298
- File.write("#{@stub.app_root}/config.ru", %q{
299
- server_software = ENV['SERVER_SOFTWARE']
300
- app = lambda do |env|
301
- [200, { "Content-Type" => "text/plain" }, [server_software]]
302
- end
303
- run app
304
- })
305
- get('/').should =~ /nginx/i
306
- end
307
-
308
- it "displays a friendly error page if the application fails to spawn" do
309
- File.write("#{@stub.app_root}/config.ru", %q{
310
- raise "my error"
311
- })
312
- data = get('/')
313
- data.should =~ /#{@error_page_signature}/
314
- data.should =~ /my error/
315
- end
316
-
317
- it "doesn't display a friendly error page if the application fails to spawn but passenger_friendly_error_pages is off" do
318
- File.write("#{@stub.app_root}/config.ru", %q{
319
- raise "my error"
320
- })
321
- data = get('/crash_without_friendly_error_page')
322
- data.should_not =~ /#{@error_page_signature}/
323
- data.should_not =~ /my error/
324
- end
325
-
326
- it "appends an X-Powered-By header containing the Phusion Passenger version number" do
327
- response = get_response('/')
328
- response["X-Powered-By"].should include("Phusion Passenger")
329
- response["X-Powered-By"].should include(PhusionPassenger::VERSION_STRING)
330
- end
331
-
332
- it "respawns the app after handling max_requests requests" do
333
- @server = "http://3.passenger.test:#{@nginx.port}/"
334
- pid = get("/pid")
335
- get("/pid").should == pid
336
- get("/pid").should == pid
337
- get("/pid").should_not == pid
338
- end
339
- end
340
-
341
- describe "oob work" do
342
- before :all do
343
- create_nginx_controller
344
- @server = "http://passenger.test:#{@nginx.port}"
345
- @stub = RackStub.new('rack')
346
- @nginx.set(:max_pool_size => 2)
347
- @nginx.add_server do |server|
348
- server[:server_name] = "passenger.test"
349
- server[:root] = "#{@stub.full_app_root}/public"
350
- end
351
- end
352
-
353
- after :all do
354
- @stub.destroy
355
- @nginx.stop if @nginx
356
- end
357
-
358
- before :each do
359
- @stub.reset
360
-
361
- File.write("#{@stub.app_root}/config.ru", <<-RUBY)
362
- PhusionPassenger.on_event(:oob_work) do
363
- f = File.open("#{@stub.full_app_root}/oob_work.\#{$$}", 'w')
364
- f.close
365
- sleep 1
366
- end
367
- app = lambda do |env|
368
- if env['PATH_INFO'] == '/oobw'
369
- [200, { "Content-Type" => "text/html", "!~Request-OOB-Work" => 'true' }, [$$]]
370
- else
371
- [200, { "Content-Type" => "text/html" }, [$$]]
372
- end
373
- end
374
- run app
375
- RUBY
376
-
377
- @nginx.start
378
- end
379
-
380
- it "invokes oobw when requested by the app process" do
381
- pid = get("/oobw")
382
- sleep 0.5 # wait for oobw callback to be invoked
383
- File.exists?("#{@stub.app_root}/oob_work.#{pid}").should == true
384
- end
385
-
386
- it "does not block client while invoking oob work" do
387
- get("/") # ensure there are spawned app processes
388
- t0 = Time.now
389
- get("/oobw")
390
- secs = Time.now - t0
391
- secs.should <= 0.1
392
- end
393
- end
394
-
395
- ##### Helper methods #####
396
-
397
- def start_web_server_if_necessary
398
- if !@nginx.running?
399
- @nginx.start
400
- end
401
- end
402
- end
@@ -1,289 +0,0 @@
1
- require 'socket'
2
- require 'fileutils'
3
-
4
- shared_examples_for "an example web app" do
5
- it "responds to GET requests for static asset" do
6
- FileUtils.cp('stub/garbage1.dat', @stub.full_app_root + "/public/garbage1.dat")
7
- get('/garbage1.dat').should == @stub.public_file('garbage1.dat')
8
- end
9
-
10
- it "supports page caching on file URIs" do
11
- File.write(@stub.full_app_root + "/public/cached.html", "This is the cached version of /cached")
12
- get('/cached').should == "This is the cached version of /cached"
13
- end
14
-
15
- it "supports page caching on directory URIs" do
16
- File.write(@stub.full_app_root + "/public/cached.html", "This is the cached version of /cached")
17
- Dir.mkdir(@stub.full_app_root + "/public/cached")
18
- get('/cached').should == "This is the cached version of /cached"
19
- end
20
-
21
- it "supports page caching on root/base URIs" do
22
- File.write(@stub.full_app_root + "/public/index.html", "This is index.html")
23
- get('/').should == "This is index.html"
24
- end
25
-
26
- it "doesn't use page caching if the HTTP request is not GET" do
27
- File.write(@stub.full_app_root + "/public/cached.html", "This is the cached version of /cached")
28
- post('/cached').should == "This is the uncached version of /cached"
29
- end
30
-
31
- it "responds to GET requests on dynamic pages" do
32
- get('/').should == "front page"
33
- end
34
-
35
- it "properly receives GET parameters" do
36
- result = get('/parameters?first=one&second=two')
37
- result.should == "Method: GET\n" +
38
- "First: one\n" +
39
- "Second: two\n"
40
- end
41
-
42
- it "responds to POST requests on dynamic pages" do
43
- result = post('/parameters',
44
- "first" => "one",
45
- "second" => "two"
46
- )
47
- result.should == "Method: POST\n" +
48
- "First: one\n" +
49
- "Second: two\n"
50
- end
51
-
52
- it "properly handles file uploads" do
53
- static_file = File.open('stub/garbage1.dat', 'rb')
54
- params = {
55
- 'name1' => 'Kotonoha',
56
- 'name2' => 'Sekai',
57
- 'data' => static_file
58
- }
59
- begin
60
- # For some reason the WSGI stub app does not accept the multipart data generated by
61
- # post(), so we use curl instead.
62
- command = "curl --silent --fail -F name1=Kotonoha -F name2=Sekai -F data=@stub/garbage1.dat " +
63
- "#{@server}/upload_with_params"
64
- response = IO.popen(command, "rb") do |io|
65
- io.read
66
- end
67
- response.should ==
68
- binary_string("name 1 = Kotonoha\n") <<
69
- binary_string("name 2 = Sekai\n") <<
70
- binary_string("data = ") << static_file.read
71
- ensure
72
- static_file.close
73
- end
74
- end
75
-
76
- describe "when handling POST requests with 'chunked' transfer encoding" do
77
- before :each do
78
- @uri = URI.parse(@server)
79
- end
80
-
81
- it "correctly forwards the request body to the app" do
82
- socket = TCPSocket.new(@uri.host, @uri.port)
83
- begin
84
- socket.write("POST #{base_uri}/raw_upload_to_file HTTP/1.1\r\n")
85
- socket.write("Host: #{@uri.host}:#{@uri.port}\r\n")
86
- socket.write("Transfer-Encoding: chunked\r\n")
87
- socket.write("Content-Type: text/plain\r\n")
88
- socket.write("Connection: close\r\n")
89
- socket.write("X-Output: output.txt\r\n")
90
- socket.write("\r\n")
91
-
92
- chunk = "foo=bar!"
93
- socket.write("%X\r\n%s\r\n" % [chunk.size, chunk])
94
- socket.write("0\r\n\r\n")
95
- socket.flush
96
-
97
- socket.read.should =~ /\r\nok\Z/
98
- ensure
99
- socket.close
100
- end
101
-
102
- File.read(@stub.full_app_root + "/output.txt").should == "foo=bar!"
103
- end
104
-
105
- if WEB_SERVER_DECHUNKS_REQUESTS
106
- it "sets Content-Length and removes Transfer-Encoding in the request" do
107
- socket = TCPSocket.new(@uri.host, @uri.port)
108
- begin
109
- socket.write("POST #{base_uri}/env HTTP/1.1\r\n")
110
- socket.write("Host: #{@uri.host}:#{@uri.port}\r\n")
111
- socket.write("Transfer-Encoding: chunked\r\n")
112
- socket.write("Content-Type: text/plain\r\n")
113
- socket.write("Connection: close\r\n")
114
- socket.write("\r\n")
115
-
116
- chunk = "foo=bar!"
117
- socket.write("%X\r\n%s\r\n" % [chunk.size, chunk])
118
- socket.write("0\r\n\r\n")
119
- socket.flush
120
-
121
- response = socket.read
122
- response.should include("CONTENT_LENGTH = 8\n")
123
- response.should_not include("HTTP_TRANSFER_ENCODING = ")
124
- ensure
125
- socket.close
126
- end
127
- end
128
- end
129
- end
130
-
131
- it "supports responses with the 'chunked' transfer encoding" do
132
- response = get_response('/chunked')
133
- response["Transfer-Encoding"].should == "chunked"
134
- response.body.should ==
135
- "chunk1\n" +
136
- "chunk2\n" +
137
- "chunk3\n"
138
- end
139
-
140
- it "supports custom headers in responses" do
141
- response = get_response('/extra_header')
142
- response["X-Foo"].should == "Bar"
143
- end
144
-
145
- it "sets the 'Status' header in responses" do
146
- response = get_response('/nonexistant')
147
- response["Status"].should == "404 Not Found"
148
- end
149
-
150
- specify "REQUEST_URI contains the request URI including query string" do
151
- cgi_envs = get('/env?foo=escaped%20string')
152
- cgi_envs.should include("REQUEST_URI = #{base_uri}/env?foo=escaped%20string\n")
153
- end
154
-
155
- specify "REQUEST_URI contains the original escaped URI" do
156
- cgi_envs = get('/env/%C3%BC?foo=escaped%20string')
157
- cgi_envs.downcase.should include("request_uri = #{base_uri}/env/%c3%bc?foo=escaped%20string\n")
158
- end
159
-
160
- specify "PATH_INFO contains the request URI without the base URI and without the query string" do
161
- cgi_envs = get('/env?foo=escaped%20string')
162
- cgi_envs.should include("PATH_INFO = /env\n")
163
- end
164
-
165
- specify "PATH_INFO contains the original escaped URI" do
166
- cgi_envs = get('/env/%C3%BC')
167
- cgi_envs.downcase.should include("path_info = /env/%c3%bc\n")
168
- end
169
-
170
- specify "QUERY_STRING contains the query string" do
171
- cgi_envs = get('/env?foo=escaped%20string')
172
- cgi_envs.should include("QUERY_STRING = foo=escaped%20string\n")
173
- end
174
-
175
- specify "QUERY_STRING must be present even when there's no query string" do
176
- cgi_envs = get('/env')
177
- cgi_envs.should include("QUERY_STRING = \n")
178
- end
179
-
180
- specify "SCRIPT_NAME contains the base URI, or the empty string if the app is deployed on the root URI" do
181
- cgi_envs = get('/env')
182
- cgi_envs.should include("SCRIPT_NAME = #{base_uri}\n")
183
- end
184
-
185
- it "appends an X-Powered-By header containing the Phusion Passenger version number" do
186
- response = get_response('/')
187
- response["X-Powered-By"].should include("Phusion Passenger")
188
- response["X-Powered-By"].should include(PhusionPassenger::VERSION_STRING)
189
- end
190
-
191
- it "buffers uploads" do
192
- get('/') # Force spawning so that the timeout below is enough.
193
-
194
- uri = URI.parse(@server)
195
- socket = TCPSocket.new(uri.host, uri.port)
196
- begin
197
- upload_data = File.read("stub/upload_data.txt")
198
- size_of_first_half = upload_data.size / 2
199
-
200
- socket.write("POST #{base_uri}/raw_upload_to_file HTTP/1.1\r\n")
201
- socket.write("Host: #{uri.host}:#{uri.port}\r\n")
202
- socket.write("Content-Type: multipart/form-data\r\n")
203
- socket.write("Content-Length: #{upload_data.size}\r\n")
204
- socket.write("Connection: close\r\n")
205
- socket.write("X-Output: /dev/null\r\n")
206
- socket.write("\r\n")
207
-
208
- socket.write(upload_data[0 .. size_of_first_half - 1])
209
- socket.flush
210
-
211
- Timeout.timeout(10) do
212
- get('/').should == "front page"
213
- end
214
-
215
- socket.write(upload_data[0 .. size_of_first_half])
216
- socket.flush
217
- socket.read.should =~ /ok\Z/
218
- ensure
219
- socket.close rescue nil
220
- end
221
- end
222
-
223
- it "buffers any number of concurrent uploads" do
224
- get('/') # Force spawning so that the timeout below is enough.
225
- sockets = []
226
-
227
- uri = URI.parse(@server)
228
- upload_data = File.read("stub/upload_data.txt")
229
- size_of_first_half = upload_data.size / 2
230
-
231
- begin
232
- 5.times do |i|
233
- log "Begin sending request #{i}"
234
- socket = TCPSocket.new(uri.host, uri.port)
235
- sockets << socket
236
- socket.write("POST #{base_uri}/raw_upload_to_file HTTP/1.1\r\n")
237
- socket.write("Host: #{uri.host}:#{uri.port}\r\n")
238
- socket.write("Content-Type: multipart/form-data\r\n")
239
- socket.write("Content-Length: #{upload_data.size}\r\n")
240
- socket.write("Connection: close\r\n")
241
- socket.write("X-Index: #{i}\r\n")
242
- socket.write("X-Output: /dev/null\r\n")
243
- socket.write("\r\n")
244
- socket.write(upload_data[0 .. size_of_first_half - 1])
245
- socket.flush
246
- end
247
- log "Reading front page"
248
- Timeout.timeout(10) do
249
- get('/').should == "front page"
250
- end
251
- sockets.each_with_index do |socket, i|
252
- log "Resuming request #{i}"
253
- socket.write(upload_data[size_of_first_half .. -1])
254
- socket.flush
255
- log "Completely sent request #{i}; reading response"
256
- content = socket.read
257
- if content !~ /ok\Z/
258
- raise "Connection #{i} did not send a correct response:\n#{content}"
259
- end
260
- end
261
- ensure
262
- sockets.each do |socket|
263
- socket.close rescue nil
264
- end
265
- end
266
- end
267
-
268
- it "supports restarting via restart.txt" do
269
- get('/').should == "front page"
270
- File.write(@stub.full_app_root + "/front_page.txt", "new front page")
271
- File.touch(@stub.full_app_root + "/tmp/restart.txt", 2)
272
- get('/').should == "new front page"
273
- end
274
-
275
- it "runs as an unprivileged user" do
276
- get('/touch_file?file=file.txt').should == "ok"
277
- stat = File.stat(@stub.full_app_root + "/file.txt")
278
- stat.uid.should_not == 0
279
- stat.gid.should_not == 0
280
- end
281
-
282
- ############
283
-
284
- private
285
- def base_uri
286
- uri = URI.parse(@server)
287
- return uri.path.sub(%r(/$), '')
288
- end
289
- end