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,523 +0,0 @@
1
- #include <TestSupport.h>
2
- #include <EventedClient.h>
3
- #include <Utils/ScopeGuard.h>
4
- #include <Utils/IOUtils.h>
5
-
6
- #include <oxt/thread.hpp>
7
-
8
- using namespace Passenger;
9
- using namespace std;
10
- using namespace boost;
11
- using namespace oxt;
12
-
13
- namespace tut {
14
- struct EventedClientTest {
15
- FileDescriptor fd1, fd2;
16
- ev::dynamic_loop eventLoop;
17
- ev::async exitWatcher;
18
- oxt::thread *thr;
19
- string lastErrorMessage;
20
- int lastErrorCode;
21
- AtomicInt integer;
22
- string data;
23
-
24
- EventedClientTest()
25
- : exitWatcher(eventLoop)
26
- {
27
- SocketPair sockets = createUnixSocketPair();
28
- fd1 = sockets.first;
29
- fd2 = sockets.second;
30
- setNonBlocking(fd2);
31
-
32
- exitWatcher.set<EventedClientTest, &EventedClientTest::unloop>(this);
33
- exitWatcher.start();
34
- thr = NULL;
35
- lastErrorCode = -1;
36
- }
37
-
38
- ~EventedClientTest() {
39
- stopEventLoop();
40
- }
41
-
42
- void startEventLoop() {
43
- thr = new oxt::thread(
44
- boost::bind(&EventedClientTest::runLoop, this)
45
- );
46
- }
47
-
48
- void stopEventLoop() {
49
- if (thr != NULL) {
50
- exitWatcher.send();
51
- waitUntilEventLoopExits();
52
- }
53
- }
54
-
55
- void waitUntilEventLoopExits() {
56
- if (thr != NULL) {
57
- thr->join();
58
- delete thr;
59
- thr = NULL;
60
- }
61
- }
62
-
63
- void runLoop() {
64
- eventLoop.loop();
65
- }
66
-
67
- void unloop(ev::async &watcher, int revents) {
68
- eventLoop.unloop();
69
- }
70
-
71
- static void setIntToOne(EventedClient *client) {
72
- EventedClientTest *test = (EventedClientTest *) client->userData;
73
- test->integer = 1;
74
- }
75
-
76
- static void setIntToTwo(EventedClient *client) {
77
- EventedClientTest *test = (EventedClientTest *) client->userData;
78
- test->integer = 2;
79
- }
80
-
81
- static void saveSystemError(EventedClient *client, const string &message, int code) {
82
- EventedClientTest *self = (EventedClientTest *) client->userData;
83
- self->lastErrorMessage = message;
84
- self->lastErrorCode = code;
85
- }
86
-
87
- static void exitEventLoop(EventedClient *client) {
88
- EventedClientTest *self = (EventedClientTest *) client->userData;
89
- self->eventLoop.unloop();
90
- }
91
-
92
- static void readAndExitOnEof(EventedClient *client) {
93
- EventedClientTest *self = (EventedClientTest *) client->userData;
94
- char buf[1024];
95
- ssize_t ret = read(client->fd, buf, sizeof(buf));
96
- if (ret <= 0) {
97
- self->eventLoop.unloop();
98
- } else {
99
- self->data.append(buf, ret);
100
- }
101
- }
102
- };
103
-
104
- DEFINE_TEST_GROUP(EventedClientTest);
105
-
106
- #define EVENT_LOOP_GUARD ScopeGuard g(boost::bind(&EventedClientTest::stopEventLoop, this))
107
-
108
- TEST_METHOD(1) {
109
- // It doesn't watch read events by default.
110
- EventedClient client(eventLoop, fd2);
111
- write(fd1, "x", 1);
112
- client.userData = this;
113
- client.onReadable = EventedClientTest::setIntToOne;
114
-
115
- EVENT_LOOP_GUARD;
116
- startEventLoop();
117
-
118
- SHOULD_NEVER_HAPPEN(100,
119
- result = integer == 1;
120
- );
121
- }
122
-
123
- TEST_METHOD(2) {
124
- // It watches read events after calling notifyReads(true).
125
- EventedClient client(eventLoop, fd2);
126
- write(fd1, "x", 1);
127
- client.userData = this;
128
- client.onReadable = EventedClientTest::setIntToOne;
129
- client.notifyReads(true);
130
-
131
- EVENT_LOOP_GUARD;
132
- startEventLoop();
133
-
134
- EVENTUALLY(1,
135
- result = integer == 1;
136
- );
137
- }
138
-
139
- TEST_METHOD(3) {
140
- // I/O is allowed in the initial state.
141
- EventedClient client(eventLoop, fd2);
142
- ensure(client.ioAllowed());
143
- }
144
-
145
- TEST_METHOD(4) {
146
- // EventedClientTest.write() writes all data to the socket
147
- // immediately whenever possible.
148
- StaticString data[] = { "hello ", "world" };
149
- EventedClient client(eventLoop, fd2);
150
- client.write(data, 2);
151
- ensure_equals(client.pendingWrites(), 0u);
152
-
153
- EVENT_LOOP_GUARD;
154
- startEventLoop();
155
-
156
- char buf[100];
157
- memset(buf, 0, sizeof(buf));
158
- ensure(readExact(fd1, buf, strlen("hello world")));
159
- ensure_equals(string(buf), "hello world");
160
- }
161
-
162
- TEST_METHOD(5) {
163
- // If EventedClientTest.write() cannot write out all data immediately,
164
- // and the remaining data is within the outbox limit, then it ensures
165
- // that all pending data is written to the socket eventually.
166
- // readWatcher will be active in the mean time.
167
- string str(1024 * 256, '\1');
168
- StaticString data = str;
169
- EventedClient client(eventLoop, fd2);
170
- client.setOutboxLimit(str.size() + 1);
171
- client.write(&data, 1);
172
- ensure(client.pendingWrites() > 0);
173
-
174
- client.userData = this;
175
- client.onReadable = EventedClientTest::setIntToOne;
176
- client.notifyReads(true);
177
- ensure(client.readWatcherActive());
178
-
179
- EVENT_LOOP_GUARD;
180
- startEventLoop();
181
-
182
- char buf[str.size()];
183
- memset(buf, 0, sizeof(buf));
184
- ensure(readExact(fd1, buf, str.size()));
185
- ensure(memcmp(buf, str.c_str(), str.size()) == 0);
186
- }
187
-
188
- TEST_METHOD(6) {
189
- // If EventedClientTest.write() cannot write out all data immediately,
190
- // and the remaining data is larger than the outbox limit, then it ensures
191
- // that all pending data is written to the socket eventually.
192
- // readWatcher will not be active in the mean time.
193
- string str(1024 * 256, '\1');
194
- StaticString data = str;
195
- EventedClient client(eventLoop, fd2);
196
- client.setOutboxLimit(1);
197
- client.userData = this;
198
- client.onReadable = EventedClientTest::setIntToOne;
199
-
200
- client.notifyReads(true);
201
- client.write(&data, 1);
202
- ensure("(1)", client.pendingWrites() > 0);
203
- ensure("(2)", !client.readWatcherActive());
204
- client.notifyReads(true);
205
- ensure("(3)", !client.readWatcherActive());
206
-
207
- startEventLoop();
208
- EVENT_LOOP_GUARD;
209
-
210
- char buf[str.size()];
211
- memset(buf, 0, sizeof(buf));
212
- ensure(readExact(fd1, buf, str.size()));
213
- ensure(memcmp(buf, str.c_str(), str.size()) == 0);
214
-
215
- // readWatcher will become active again after all pending data has been sent.
216
- stopEventLoop();
217
- ensure(client.readWatcherActive());
218
- }
219
-
220
- TEST_METHOD(7) {
221
- // disconnect() closes the connection and emits a disconnection event.
222
- EventedClient client(eventLoop, fd2);
223
- client.userData = this;
224
- client.onDisconnect = EventedClientTest::setIntToTwo;
225
- client.disconnect();
226
- ensure(!client.ioAllowed());
227
-
228
- char buf;
229
- ensure_equals(read(fd1, &buf, 1), (ssize_t) 0);
230
- ensure_equals(integer, 2);
231
- }
232
-
233
- TEST_METHOD(8) {
234
- // If there's pending outgoing data then disconnect(false) does
235
- // not disconnect immediately and does not discard pending
236
- // outgoing data. Pending outgoing data will eventually be sent out.
237
- // In the mean time readWatcher will be disabled.
238
- // Disconnection event will be emitted after all pending data
239
- // is sent out.
240
- string str(1024 * 256, '\1');
241
- StaticString data = str;
242
- EventedClient client(eventLoop, fd2);
243
- client.setOutboxLimit(str.size() + 1);
244
- client.userData = this;
245
- client.onReadable = EventedClientTest::setIntToOne;
246
- client.notifyReads(true);
247
- client.onDisconnect = EventedClientTest::setIntToTwo;
248
- client.write(&data, 1);
249
- client.disconnect();
250
-
251
- ensure(!client.ioAllowed());
252
- ensure(!client.readWatcherActive());
253
-
254
- char buf[str.size()];
255
- ensure(!client.ioAllowed());
256
- ensure_equals(read(fd1, buf, 1), (ssize_t) 1);
257
- ensure_equals(buf[0], '\1');
258
-
259
- startEventLoop();
260
- EVENT_LOOP_GUARD;
261
-
262
- // No disconnection event yet.
263
- SHOULD_NEVER_HAPPEN(100,
264
- result = integer == 2;
265
- );
266
-
267
- memset(buf, 0, sizeof(buf));
268
- ensure(readExact(fd1, buf, str.size() - 1));
269
- ensure(memcmp(buf, str.c_str() + 1, str.size() - 1) == 0);
270
-
271
- ensure_equals(read(fd1, buf, 1), (ssize_t) 0);
272
-
273
- stopEventLoop();
274
- // Disconnection event should now have fired.
275
- ensure_equals(integer, 2);
276
- }
277
-
278
- TEST_METHOD(9) {
279
- // If there's pending outgoing data then disconnect(true)
280
- // closes the connection immediately without sending out
281
- // pending data. Disconnection event is emitted immediately.
282
- string str(1024 * 256, '\1');
283
- StaticString data = str;
284
- EventedClient client(eventLoop, fd2);
285
- client.userData = this;
286
- client.onDisconnect = EventedClientTest::setIntToTwo;
287
- client.setOutboxLimit(str.size() + 1);
288
- client.write(&data, 1);
289
- client.disconnect(true);
290
-
291
- ensure(!client.ioAllowed());
292
- ensure(!client.readWatcherActive());
293
- ensure(client.pendingWrites() > 0);
294
- ensure_equals(integer, 2);
295
-
296
- string result = readAll(fd1);
297
- ensure_equals(result.size(), str.size() - client.pendingWrites());
298
- }
299
-
300
- TEST_METHOD(10) {
301
- // EventedClient.write() doesn't do anything if the client is
302
- // already disconnected.
303
- string str(1024 * 256, '\1');
304
- StaticString data = str;
305
- EventedClient client(eventLoop, fd2);
306
- client.disconnect();
307
- client.write(&data, 1);
308
-
309
- char buf;
310
- ensure_equals(read(fd1, &buf, 1), (ssize_t) 0);
311
- }
312
-
313
- TEST_METHOD(11) {
314
- // EventedClient.write() doesn't do anything if the client
315
- // is being disconnected after pending data is sent out.
316
- string str1(1024 * 256, '\1');
317
- string str2(1024 * 256, '\2');
318
- StaticString data;
319
- size_t pending;
320
-
321
- EventedClient client(eventLoop, fd2);
322
- client.setOutboxLimit(1);
323
- data = str1;
324
- client.write(&data, 1);
325
- pending = client.pendingWrites();
326
- client.disconnect();
327
- data = str2;
328
- client.write(&data, 1);
329
- ensure_equals(client.pendingWrites(), pending);
330
-
331
- startEventLoop();
332
- EVENT_LOOP_GUARD;
333
-
334
- string result = readAll(fd1);
335
- ensure_equals(result, str1);
336
- }
337
-
338
- TEST_METHOD(12) {
339
- // EventedClient.detach() returns the original file descriptor
340
- // and makes I/O to the file descriptor via its own object
341
- // impossible.
342
- EventedClient client(eventLoop, fd2);
343
- FileDescriptor fd3 = client.detach();
344
- ensure_equals(fd3, fd2);
345
- ensure_equals(client.fd, -1);
346
- ensure(!client.ioAllowed());
347
- ensure(!client.readWatcherActive());
348
-
349
- StaticString data = "hi";
350
- client.write(&data, 1);
351
-
352
- char buf[2];
353
- ssize_t ret;
354
- int e;
355
- setNonBlocking(fd1);
356
- ret = read(fd1, buf, 2);
357
- e = errno;
358
- ensure_equals(ret, -1);
359
- ensure_equals(e, EAGAIN);
360
- }
361
-
362
- TEST_METHOD(13) {
363
- // EventedClient.detach() emits a detach event.
364
- EventedClient client(eventLoop, fd2);
365
- client.userData = this;
366
- client.onDetach = &EventedClientTest::setIntToTwo;
367
- client.detach();
368
- ensure_equals(integer, 2);
369
- }
370
-
371
- TEST_METHOD(14) {
372
- // Subsequent calls to EventedClient.detach() return -1
373
- // and no longer emit detach events.
374
- EventedClient client(eventLoop, fd2);
375
- client.detach();
376
- client.userData = this;
377
- client.onDetach = &EventedClientTest::setIntToTwo;
378
- ensure_equals(client.detach(), -1);
379
- ensure_equals(integer, 0);
380
- }
381
-
382
- TEST_METHOD(15) {
383
- // EventedClient.write() emits a pending data flushed event
384
- // if no outgoing data needs to be scheduled for later.
385
- EventedClient client(eventLoop, fd2);
386
- client.userData = this;
387
- client.onPendingDataFlushed = &EventedClientTest::setIntToTwo;
388
- client.write("hi");
389
- ensure_equals(client.pendingWrites(), (size_t) 0);
390
- ensure_equals(integer, 2);
391
- }
392
-
393
- TEST_METHOD(16) {
394
- // EventedClient emits a pending data flushed event
395
- // after all pending outgoing data is flushed.
396
- string str(1024 * 256, '\1');
397
- EventedClient client(eventLoop, fd2);
398
- client.userData = this;
399
- client.onPendingDataFlushed = &EventedClientTest::setIntToTwo;
400
- client.write(str);
401
- ensure(client.pendingWrites() > 0);
402
- ensure_equals(integer, 0);
403
-
404
- startEventLoop();
405
- EVENT_LOOP_GUARD;
406
-
407
- char buf[str.size()];
408
- readExact(fd1, buf, str.size());
409
- EVENTUALLY(2,
410
- result = integer == 2;
411
- );
412
- }
413
-
414
- TEST_METHOD(17) {
415
- // EventedClient.write() ensures that the given data is written
416
- // after what's already in the outbox.
417
- EventedClient client(eventLoop, fd2);
418
- string header(1024 * 4, 'x');
419
- string body(1024 * 1024, 'y');
420
- char buf[header.size() + body.size() + 1024];
421
-
422
- client.write(header);
423
- client.write(body);
424
- ensure("(1)", client.pendingWrites() > 0);
425
-
426
- ensure_equals("(2)", readExact(fd1, buf, header.size()), (unsigned int) header.size());
427
- ensure_equals("(3)", StaticString(buf, header.size()), header);
428
-
429
- client.write("hello world");
430
-
431
- startEventLoop();
432
- EVENT_LOOP_GUARD;
433
-
434
- unsigned int len = body.size() + strlen("hello world");
435
- ensure_equals("(4)", readExact(fd1, buf, len), len);
436
- ensure_equals("(5)", StaticString(buf, len), body + "hello world");
437
- }
438
-
439
- TEST_METHOD(18) {
440
- // If writeErrorAction is DISCONNECT_FULL then
441
- // EventedClient.write(), upon encountering a write error,
442
- // will forcefully disconnect the connection.
443
- EventedClient client(eventLoop, fd2);
444
- client.userData = this;
445
- client.writeErrorAction = EventedClient::DISCONNECT_FULL;
446
- client.onSystemError = saveSystemError;
447
- fd1.close();
448
- client.write("hello");
449
- ensure_equals(lastErrorCode, EPIPE);
450
- ensure_equals(client.fd, -1);
451
- }
452
-
453
- TEST_METHOD(19) {
454
- // If writeErrorAction is DISCONNECT_FULL then
455
- // the background writer disconnects the connection
456
- // on write error.
457
- EventedClient client(eventLoop, fd2);
458
- client.userData = this;
459
- client.writeErrorAction = EventedClient::DISCONNECT_FULL;
460
- client.onSystemError = saveSystemError;
461
-
462
- string str(1024 * 1024, 'x');
463
- client.write(str);
464
- ensure("(1)", client.pendingWrites() > 0);
465
-
466
- fd1.close();
467
- client.onDisconnect = exitEventLoop;
468
- startEventLoop();
469
- waitUntilEventLoopExits();
470
-
471
- ensure_equals("(2)", lastErrorCode, EPIPE);
472
- ensure_equals("(3)", client.fd, -1);
473
- }
474
-
475
- TEST_METHOD(20) {
476
- // If writeErrorAction is DISCONNECT_WRITE then
477
- // EventedClient.write(), upon encountering a write error,
478
- // will forcefully disconnect the writer side of the
479
- // connection but continue allowing reading.
480
- EventedClient client(eventLoop, fd2);
481
- client.userData = this;
482
- client.writeErrorAction = EventedClient::DISCONNECT_WRITE;
483
- client.onSystemError = saveSystemError;
484
- client.onReadable = readAndExitOnEof;
485
- client.notifyReads(true);
486
-
487
- writeExact(fd1, "world", 5);
488
- fd1.close();
489
- client.write("hello");
490
-
491
- startEventLoop();
492
- waitUntilEventLoopExits();
493
-
494
- ensure(client.fd != -1);
495
- ensure_equals(data, "world");
496
- }
497
-
498
- TEST_METHOD(21) {
499
- // If writeErrorAction is DISCONNECT_WRITE then
500
- // the background writer, upon encountering a write error,
501
- // will forcefully disconnect the writer side of the
502
- // connection but continue allowing reading.
503
- EventedClient client(eventLoop, fd2);
504
- client.userData = this;
505
- client.writeErrorAction = EventedClient::DISCONNECT_WRITE;
506
- client.onSystemError = saveSystemError;
507
- client.onReadable = readAndExitOnEof;
508
- client.notifyReads(true);
509
-
510
- string str(1024 * 1024, 'x');
511
- client.write(str);
512
- ensure("(1)", client.pendingWrites() > 0);
513
-
514
- writeExact(fd1, "world", 5);
515
- fd1.close();
516
-
517
- startEventLoop();
518
- waitUntilEventLoopExits();
519
-
520
- ensure("(2)", client.fd != -1);
521
- ensure_equals("(3)", data, "world");
522
- }
523
- }