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,393 +0,0 @@
1
- #include "TestSupport.h"
2
-
3
- #include <boost/thread.hpp>
4
- #include <boost/bind.hpp>
5
-
6
- #include <MessageServer.h>
7
- #include <MessageClient.h>
8
- #include <Utils.h>
9
- #include <string>
10
- #include <cstring>
11
- #include <unistd.h>
12
- #include <errno.h>
13
-
14
- using namespace Passenger;
15
- using namespace boost;
16
- using namespace std;
17
-
18
- namespace tut {
19
- struct MessageServerTest {
20
- InstanceDirectoryPtr instanceDir;
21
- string socketFilename;
22
- string socketAddress;
23
- AccountsDatabasePtr accountsDatabase;
24
- AccountPtr clientAccount;
25
- boost::shared_ptr<MessageServer> server;
26
- boost::shared_ptr<oxt::thread> serverThread;
27
-
28
- MessageServerTest() {
29
- createInstanceDir(instanceDir);
30
- socketFilename = instanceDir->getPath() + "/socket";
31
- socketAddress = "unix:" + socketFilename;
32
- accountsDatabase = ptr(new AccountsDatabase());
33
- clientAccount = accountsDatabase->add("test", "12345", false);
34
-
35
- server = ptr(new MessageServer(socketFilename, accountsDatabase));
36
- serverThread = ptr(new oxt::thread(
37
- boost::bind(&MessageServer::mainLoop, server.get())
38
- ));
39
- }
40
-
41
- ~MessageServerTest() {
42
- if (serverThread != NULL) {
43
- serverThread->interrupt_and_join();
44
- }
45
- Passenger::setLogLevel(DEFAULT_LOG_LEVEL);
46
- }
47
-
48
- class SlowClient: public MessageClient {
49
- private:
50
- unsigned int timeToSendUsername;
51
- unsigned int timeToSendPassword;
52
-
53
- protected:
54
- virtual void sendUsername(int fd, const StaticString &username, unsigned long long *timeout) {
55
- if (timeToSendUsername > 0) {
56
- usleep(timeToSendUsername * 1000);
57
- }
58
- writeScalarMessage(fd, username);
59
- }
60
-
61
- virtual void sendPassword(int fd, const StaticString &userSuppliedPassword, unsigned long long *timeout) {
62
- if (timeToSendPassword > 0) {
63
- usleep(timeToSendPassword * 1000);
64
- }
65
- writeScalarMessage(fd, userSuppliedPassword);
66
- }
67
-
68
- public:
69
- SlowClient(unsigned int timeToSendUsername,
70
- unsigned int timeToSendPassword)
71
- : MessageClient()
72
- {
73
- this->timeToSendUsername = timeToSendUsername;
74
- this->timeToSendPassword = timeToSendPassword;
75
- }
76
- };
77
-
78
- class CustomClient: public MessageClient {
79
- public:
80
- CustomClient *sendText(const string &text) {
81
- write(text.c_str(), NULL);
82
- return this;
83
- }
84
- };
85
-
86
- class LoggingHandler: public MessageServer::Handler {
87
- public:
88
- struct SpecificContext: public MessageServer::ClientContext {
89
- int id;
90
-
91
- SpecificContext(int i) {
92
- id = i;
93
- }
94
- };
95
-
96
- typedef boost::shared_ptr<SpecificContext> SpecificContextPtr;
97
-
98
- boost::mutex mutex;
99
- volatile int clientsAccepted;
100
- volatile int clientsDisconnected;
101
- string receivedData;
102
- volatile int id;
103
- volatile int returnValue;
104
- SpecificContextPtr latestContext;
105
-
106
- LoggingHandler() {
107
- clientsAccepted = 0;
108
- clientsDisconnected = 0;
109
- returnValue = true;
110
- }
111
-
112
- virtual MessageServer::ClientContextPtr newClient(MessageServer::CommonClientContext &context) {
113
- boost::lock_guard<boost::mutex> l(mutex);
114
- clientsAccepted++;
115
- return ptr(new SpecificContext(id));
116
- }
117
-
118
- virtual void clientDisconnected(MessageServer::CommonClientContext &context,
119
- MessageServer::ClientContextPtr &handlerSpecificContext)
120
- {
121
- boost::lock_guard<boost::mutex> l(mutex);
122
- clientsDisconnected++;
123
- }
124
-
125
- virtual bool processMessage(MessageServer::CommonClientContext &commonContext,
126
- MessageServer::ClientContextPtr &handlerSpecificContext,
127
- const vector<string> &args)
128
- {
129
- boost::lock_guard<boost::mutex> l(mutex);
130
- latestContext = static_pointer_cast<SpecificContext>(handlerSpecificContext);
131
- receivedData.append(args[0]);
132
- return returnValue;
133
- }
134
- };
135
-
136
- typedef boost::shared_ptr<LoggingHandler> LoggingHandlerPtr;
137
-
138
- class ProcessMessageReturnsFalseHandler: public MessageServer::Handler {
139
- public:
140
- virtual bool processMessage(MessageServer::CommonClientContext &commonContext,
141
- MessageServer::ClientContextPtr &handlerSpecificContext,
142
- const vector<string> &args)
143
- {
144
- return false;
145
- }
146
- };
147
- };
148
-
149
- DEFINE_TEST_GROUP(MessageServerTest);
150
-
151
- TEST_METHOD(1) {
152
- // It rejects the connection if the an invalid username or password was sent.
153
- accountsDatabase->add("hashed_user", Account::createHash("67890"), true);
154
-
155
- try {
156
- MessageClient().connect(socketAddress, "testt", "12345");
157
- fail("SecurityException expected when invalid username is given");
158
- } catch (const SecurityException &) {
159
- // Pass.
160
- }
161
- try {
162
- MessageClient().connect(socketAddress, "test", "123456");
163
- fail("SecurityException expected when invalid password is given for an account with plain text password");
164
- } catch (const SecurityException &) {
165
- // Pass.
166
- }
167
- try {
168
- MessageClient().connect(socketAddress, "test", "678900");
169
- fail("SecurityException expected when invalid password is given for an account with hashed password");
170
- } catch (const SecurityException &) {
171
- // Pass.
172
- }
173
- }
174
-
175
- TEST_METHOD(2) {
176
- // It supports hashed passwords.
177
- accountsDatabase->add("hashed_user", Account::createHash("67890"), true);
178
- MessageClient().connect(socketAddress, "hashed_user", "67890"); // Should not throw exception.
179
- }
180
-
181
- TEST_METHOD(3) {
182
- // It disconnects the client if the client does not supply a username and
183
- // password within a time limit.
184
- Passenger::setLogLevel(LVL_ERROR);
185
- server->setLoginTimeout(30000);
186
-
187
- /* These can throw either an IOException or SystemException:
188
- * - An IOException is raised when connect() encounters EOF.
189
- * - But when connect() fails during the middle of a read()
190
- * or write() (e.g. because the server disconnects before
191
- * connect() is done writing), then SystemException is raised.
192
- */
193
-
194
- try {
195
- // This client takes too much time on sending the username.
196
- SlowClient(50, 0).connect(socketAddress, "test", "12345");
197
- fail("IOException or SystemException expected (1).");
198
- } catch (const IOException &e) {
199
- // Pass.
200
- } catch (const SystemException &e) {
201
- // Pass.
202
- }
203
-
204
- try {
205
- // This client takes too much time on sending the password.
206
- SlowClient(0, 50).connect(socketAddress, "test", "12345");
207
- fail("IOException or SystemException expected (2).");
208
- } catch (const IOException &e) {
209
- // Pass.
210
- } catch (const SystemException &e) {
211
- // Pass.
212
- }
213
-
214
- try {
215
- // This client is fast enough at sending the username and
216
- // password individually, but the combined time is too long.
217
- SlowClient(25, 25).connect(socketAddress, "test", "12345");
218
- fail("IOException or SystemException expected (3).");
219
- } catch (const IOException &e) {
220
- // Pass.
221
- } catch (const SystemException &e) {
222
- // Pass.
223
- }
224
- }
225
-
226
- TEST_METHOD(4) {
227
- // It disconnects the client if it provides a username that's too large.
228
- char username[1024];
229
- memset(username, 'x', sizeof(username));
230
- username[sizeof(username) - 1] = '\0';
231
- try {
232
- MessageClient().connect(socketAddress, username, "1234");
233
- fail("SecurityException expected");
234
- } catch (const SecurityException &e) {
235
- // Pass.
236
- } catch (const SystemException &e) {
237
- if (e.code() != EPIPE) {
238
- fail(("Unexpected SystemException: " + string(e.what())).c_str());
239
- }
240
- }
241
- }
242
-
243
- TEST_METHOD(5) {
244
- // It disconnects the client if it provides a password that's too large.
245
- char password[1024];
246
- memset(password, 'x', sizeof(password));
247
- password[sizeof(password) - 1] = '\0';
248
- try {
249
- MessageClient().connect(socketAddress, "test", password);
250
- fail("SecurityException expected");
251
- } catch (const SecurityException &e) {
252
- // Pass.
253
- } catch (const SystemException &e) {
254
- if (e.code() != EPIPE) {
255
- fail(("Unexpected SystemException: " + string(e.what())).c_str());
256
- }
257
- }
258
- }
259
-
260
- TEST_METHOD(6) {
261
- // It notifies all handlers when a new client has connected.
262
- LoggingHandlerPtr handler1(new LoggingHandler());
263
- LoggingHandlerPtr handler2(new LoggingHandler());
264
- server->addHandler(handler1);
265
- server->addHandler(handler2);
266
- MessageClient().connect(socketAddress, "test", "12345");
267
- MessageClient().connect(socketAddress, "test", "12345");
268
-
269
- usleep(10000); // Give the threads some time to do work.
270
- ensure_equals(handler1->clientsAccepted, 2);
271
- ensure_equals(handler2->clientsAccepted, 2);
272
- }
273
-
274
- TEST_METHOD(7) {
275
- // It notifies all handlers when a message is sent, but stops
276
- // at the first handler that returns true.
277
- LoggingHandlerPtr handler1(new LoggingHandler());
278
- LoggingHandlerPtr handler2(new LoggingHandler());
279
- LoggingHandlerPtr handler3(new LoggingHandler());
280
- server->addHandler(handler1);
281
- server->addHandler(handler2);
282
- server->addHandler(handler3);
283
- handler1->returnValue = false;
284
-
285
- CustomClient c1, c2;
286
- c1.connect(socketAddress, "test", "12345");
287
- c1.sendText("hello");
288
- c1.sendText(" ");
289
- usleep(10000); // Give the thread some time to do work.
290
-
291
- c2.connect(socketAddress, "test", "12345");
292
- c2.sendText("world");
293
- usleep(10000); // Give the thread some time to do work.
294
-
295
- ensure_equals("(1)", handler1->receivedData, "hello world");
296
- ensure_equals("(2)", handler2->receivedData, "hello world");
297
- ensure_equals("(3)", handler3->receivedData, "");
298
- }
299
-
300
- TEST_METHOD(8) {
301
- // It does not close the connection if some, but not all of the handlers'
302
- // processMessage() methods return false.
303
- MessageServer::HandlerPtr handler1(new LoggingHandler());
304
- MessageServer::HandlerPtr handler2(new ProcessMessageReturnsFalseHandler());
305
- server->addHandler(handler1);
306
- server->addHandler(handler2);
307
-
308
- CustomClient c;
309
- c.connect(socketAddress, "test", "12345");
310
- c.sendText("hi");
311
- usleep(10000); // Give the thread some time to do work.
312
-
313
- c.sendText("hi"); // Connection should still be valid.
314
- }
315
-
316
- TEST_METHOD(9) {
317
- // It closes the connection if all of the handlers'
318
- // processMessage() methods return false.
319
- MessageServer::HandlerPtr handler1(new ProcessMessageReturnsFalseHandler());
320
- MessageServer::HandlerPtr handler2(new ProcessMessageReturnsFalseHandler());
321
- server->addHandler(handler1);
322
- server->addHandler(handler2);
323
-
324
- CustomClient c;
325
- c.connect(socketAddress, "test", "12345");
326
- c.sendText("hi");
327
- usleep(10000); // Give the thread some time to do work.
328
-
329
- try {
330
- c.sendText("hi");
331
- fail("SystemException expected.");
332
- } catch (const SystemException &e) {
333
- ensure_equals(e.code(), EPIPE);
334
- }
335
- }
336
-
337
- TEST_METHOD(10) {
338
- // The specific context as returned by the handler's newClient()
339
- // method is passed to processMessage().
340
- LoggingHandlerPtr handler1(new LoggingHandler());
341
- LoggingHandlerPtr handler2(new LoggingHandler());
342
- LoggingHandlerPtr handler3(new LoggingHandler());
343
- server->addHandler(handler1);
344
- server->addHandler(handler2);
345
- server->addHandler(handler3);
346
- handler1->returnValue = false;
347
- handler2->returnValue = false;
348
-
349
- CustomClient c1, c2;
350
-
351
- handler1->id = 100;
352
- handler2->id = 101;
353
- c1.connect(socketAddress, "test", "12345");
354
- c1.sendText("hi");
355
- usleep(10000); // Give the thread some time to do work.
356
- ensure_equals(handler1->latestContext->id, 100);
357
- ensure_equals(handler2->latestContext->id, 101);
358
-
359
- handler1->id = 200;
360
- handler2->id = 201;
361
- c2.connect(socketAddress, "test", "12345");
362
- c2.sendText("hi");
363
- usleep(10000); // Give the thread some time to do work.
364
- ensure_equals(handler1->latestContext->id, 200);
365
- ensure_equals(handler2->latestContext->id, 201);
366
-
367
- c1.sendText("hi");
368
- usleep(10000); // Give the thread some time to do work.
369
- ensure_equals(handler1->latestContext->id, 100);
370
- ensure_equals(handler2->latestContext->id, 101);
371
- }
372
-
373
- TEST_METHOD(11) {
374
- // It notifies all handlers when a client is disconnected.
375
- LoggingHandlerPtr handler1(new LoggingHandler());
376
- LoggingHandlerPtr handler2(new LoggingHandler());
377
- server->addHandler(handler1);
378
- server->addHandler(handler2);
379
- {
380
- {
381
- MessageClient().connect(socketAddress, "test", "12345");
382
- }
383
- usleep(10000); // Give the threads some time to do work.
384
- ensure_equals(handler1->clientsDisconnected, 1);
385
- ensure_equals(handler2->clientsDisconnected, 1);
386
-
387
- MessageClient().connect(socketAddress, "test", "12345");
388
- }
389
- usleep(10000); // Give the threads some time to do work.
390
- ensure_equals(handler1->clientsDisconnected, 2);
391
- ensure_equals(handler2->clientsDisconnected, 2);
392
- }
393
- }
@@ -1,123 +0,0 @@
1
- #include <sys/wait.h>
2
- #include <signal.h>
3
- #include <unistd.h>
4
- #include <cstdio>
5
- #include <cerrno>
6
- #include "TestSupport.h"
7
- #include "Utils/StrIntUtils.h"
8
- #include "Utils/ProcessMetricsCollector.h"
9
-
10
- using namespace Passenger;
11
-
12
- namespace tut {
13
- struct ProcessMetricsCollectorTest {
14
- ProcessMetricsCollector collector;
15
- pid_t child;
16
-
17
- ProcessMetricsCollectorTest() {
18
- child = -1;
19
- }
20
-
21
- ~ProcessMetricsCollectorTest() {
22
- if (child != -1) {
23
- kill(child, SIGKILL);
24
- waitpid(child, NULL, 0);
25
- }
26
- }
27
-
28
- pid_t spawnChild(int memory) {
29
- string memoryStr = toString(memory);
30
- pid_t pid = fork();
31
- if (pid == 0) {
32
- execlp("support/allocate_memory",
33
- "support/allocate_memory",
34
- memoryStr.c_str(),
35
- (char *) 0);
36
-
37
- int e = errno;
38
- fprintf(stderr, "Cannot execute support/allocate_memory: %s\n",
39
- strerror(e));
40
- fflush(stderr);
41
- _exit(1);
42
- } else {
43
- return pid;
44
- }
45
- }
46
- };
47
-
48
- DEFINE_TEST_GROUP(ProcessMetricsCollectorTest);
49
-
50
- TEST_METHOD(1) {
51
- // It collects the metrics for the given PIDs.
52
- collector.setPsOutput(
53
- " PID PPID %CPU RSS VSZ PGID UID COMMAND\n"
54
- " 1 0 0.0 1276 2456836 1 0 /sbin/launchd\n"
55
- "34678 1265 95.2 4128 2437812 34677 123 /bin/bash -li\n"
56
- );
57
- vector<pid_t> pids;
58
- pids.push_back(1);
59
- pids.push_back(34678);
60
- ProcessMetricMap result = collector.collect(pids);
61
-
62
- ensure_equals(result.size(), 2u);
63
-
64
- ensure_equals(result[1].pid, (pid_t) 1);
65
- ensure_equals(result[1].ppid, (pid_t) 0);
66
- ensure_equals(result[1].cpu, 0u);
67
- ensure_equals(result[1].rss, 1276u);
68
- ensure_equals(result[1].processGroupId, (pid_t) 1);
69
- ensure_equals(result[1].uid, (uid_t) 0);
70
- ensure_equals(result[1].command, "/sbin/launchd");
71
-
72
- ensure_equals(result[34678].pid, (pid_t) 34678);
73
- ensure_equals(result[34678].ppid, (pid_t) 1265);
74
- ensure_equals(result[34678].cpu, 95u);
75
- ensure_equals(result[34678].rss, 4128u);
76
- ensure_equals(result[34678].processGroupId, (pid_t) 34677);
77
- ensure_equals(result[34678].uid, (uid_t) 123);
78
- ensure_equals(result[34678].command, "/bin/bash -li");
79
- }
80
-
81
- TEST_METHOD(2) {
82
- // It does not collect the metrics for PIDs that don't exist.
83
- collector.setPsOutput(
84
- " PID PPID %CPU RSS VSZ PGID COMMAND\n"
85
- " 1 0 0.0 1276 2456836 1 /sbin/launchd\n"
86
- );
87
- vector<pid_t> pids;
88
- pids.push_back(1);
89
- pids.push_back(34678);
90
- ProcessMetricMap result = collector.collect(pids);
91
-
92
- ensure_equals(result.size(), 1u);
93
- ensure(result.find(1) != result.end());
94
- ensure(result.find(34678) == result.end());
95
- }
96
-
97
- TEST_METHOD(3) {
98
- // Measuring real memory usage works.
99
- ssize_t pss, privateDirty, swap;
100
- child = spawnChild(50);
101
- usleep(500000);
102
- collector.measureRealMemory(child, pss, privateDirty, swap);
103
- #ifdef __APPLE__
104
- if (geteuid() == 0) {
105
- ensure(pss > 50000 && pss < 60000);
106
- ensure(privateDirty > 50000 && privateDirty < 60000);
107
- ensure_equals(swap, (ssize_t) -1);
108
- } else {
109
- ensure_equals(pss, (ssize_t) -1);
110
- ensure_equals(privateDirty, (ssize_t) -1);
111
- ensure_equals(swap, (ssize_t) -1);
112
- }
113
- #elif defined(__linux__)
114
- ensure("PSS is correct", (pss > 50000 && pss < 60000) || pss == -1);
115
- ensure("Private dirty is correct", privateDirty > 50000 && privateDirty < 60000);
116
- ensure("Swap is correct", swap < 10000);
117
- #else
118
- ensure((pss > 50000 && pss < 60000) || pss == -1);
119
- ensure((privateDirty > 50000 && privateDirty < 60000) || privateDirty == -1);
120
- ensure(swap < 10000 || swap == -1);
121
- #endif
122
- }
123
- }