passenger_dudemeister 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1565) hide show
  1. data/DEVELOPERS.TXT +113 -0
  2. data/INSTALL +6 -0
  3. data/LICENSE +19 -0
  4. data/NEWS +429 -0
  5. data/PACKAGING.TXT +25 -0
  6. data/README +45 -0
  7. data/Rakefile +56 -0
  8. data/bin/passenger +32 -0
  9. data/bin/passenger-config +46 -0
  10. data/bin/passenger-install-apache2-module +237 -0
  11. data/bin/passenger-install-nginx-module +476 -0
  12. data/bin/passenger-make-enterprisey +82 -0
  13. data/bin/passenger-memory-stats +171 -0
  14. data/bin/passenger-status +211 -0
  15. data/build/agents.rb +80 -0
  16. data/build/apache2.rb +168 -0
  17. data/build/basics.rb +105 -0
  18. data/build/common_library.rb +268 -0
  19. data/build/config.rb +42 -0
  20. data/build/cplusplus_support.rb +61 -0
  21. data/build/cxx_tests.rb +219 -0
  22. data/build/documentation.rb +84 -0
  23. data/build/gempackagetask.rb +99 -0
  24. data/build/integration_tests.rb +64 -0
  25. data/build/misc.rb +153 -0
  26. data/build/nginx.rb +72 -0
  27. data/build/oxt_tests.rb +59 -0
  28. data/build/packagetask.rb +186 -0
  29. data/build/packaging.rb +194 -0
  30. data/build/rake_extensions.rb +182 -0
  31. data/build/rdoctask.rb +209 -0
  32. data/build/rpm.rb +98 -0
  33. data/build/ruby_extension.rb +52 -0
  34. data/build/ruby_tests.rb +49 -0
  35. data/build/test_basics.rb +43 -0
  36. data/debian/README.Debian +15 -0
  37. data/debian/changelog +185 -0
  38. data/debian/compat +1 -0
  39. data/debian/control +49 -0
  40. data/debian/copyright +20 -0
  41. data/debian/libapache2-mod-passenger.install +1 -0
  42. data/debian/libapache2-mod-passenger.postinst +36 -0
  43. data/debian/libapache2-mod-passenger.prerm +15 -0
  44. data/debian/passenger-common.install +4 -0
  45. data/debian/passenger.conf +4 -0
  46. data/debian/passenger.load +1 -0
  47. data/debian/prerm +2 -0
  48. data/debian/rules +37 -0
  49. data/debian/watch +3 -0
  50. data/dev/copy_boost_headers.rb +155 -0
  51. data/dev/find_owner_pipe_leaks.rb +128 -0
  52. data/dev/render_error_pages.rb +116 -0
  53. data/doc/ApplicationPool algorithm.txt +615 -0
  54. data/doc/Architectural overview.html +1 -0
  55. data/doc/Architectural overview.txt +334 -0
  56. data/doc/Doxyfile +241 -0
  57. data/doc/Security of user switching support.html +1 -0
  58. data/doc/Security of user switching support.txt +197 -0
  59. data/doc/Users guide Apache.html +1 -0
  60. data/doc/Users guide Apache.txt +2208 -0
  61. data/doc/Users guide Nginx.html +1 -0
  62. data/doc/Users guide Nginx.txt +1394 -0
  63. data/doc/Users guide Standalone.html +1 -0
  64. data/doc/Users guide Standalone.txt +40 -0
  65. data/doc/definitions.h +5 -0
  66. data/doc/images/by_sa.png +0 -0
  67. data/doc/images/conservative_spawning.png +0 -0
  68. data/doc/images/conservative_spawning.svg +248 -0
  69. data/doc/images/icons/README +5 -0
  70. data/doc/images/icons/callouts/1.png +0 -0
  71. data/doc/images/icons/callouts/10.png +0 -0
  72. data/doc/images/icons/callouts/11.png +0 -0
  73. data/doc/images/icons/callouts/12.png +0 -0
  74. data/doc/images/icons/callouts/13.png +0 -0
  75. data/doc/images/icons/callouts/14.png +0 -0
  76. data/doc/images/icons/callouts/15.png +0 -0
  77. data/doc/images/icons/callouts/2.png +0 -0
  78. data/doc/images/icons/callouts/3.png +0 -0
  79. data/doc/images/icons/callouts/4.png +0 -0
  80. data/doc/images/icons/callouts/5.png +0 -0
  81. data/doc/images/icons/callouts/6.png +0 -0
  82. data/doc/images/icons/callouts/7.png +0 -0
  83. data/doc/images/icons/callouts/8.png +0 -0
  84. data/doc/images/icons/callouts/9.png +0 -0
  85. data/doc/images/icons/caution.png +0 -0
  86. data/doc/images/icons/example.png +0 -0
  87. data/doc/images/icons/home.png +0 -0
  88. data/doc/images/icons/important.png +0 -0
  89. data/doc/images/icons/next.png +0 -0
  90. data/doc/images/icons/note.png +0 -0
  91. data/doc/images/icons/prev.png +0 -0
  92. data/doc/images/icons/tip.png +0 -0
  93. data/doc/images/icons/up.png +0 -0
  94. data/doc/images/icons/warning.png +0 -0
  95. data/doc/images/passenger_architecture.png +0 -0
  96. data/doc/images/passenger_architecture.svg +401 -0
  97. data/doc/images/phusion_banner.png +0 -0
  98. data/doc/images/smart-lv2.png +0 -0
  99. data/doc/images/smart-lv2.svg +320 -0
  100. data/doc/images/spawn_server_architecture.png +0 -0
  101. data/doc/images/spawn_server_architecture.svg +655 -0
  102. data/doc/images/typical_isolated_web_application.png +0 -0
  103. data/doc/images/typical_isolated_web_application.svg +213 -0
  104. data/doc/rdoc/classes/ConditionVariable.html +215 -0
  105. data/doc/rdoc/classes/Exception.html +120 -0
  106. data/doc/rdoc/classes/GC.html +113 -0
  107. data/doc/rdoc/classes/IO.html +221 -0
  108. data/doc/rdoc/classes/PhusionPassenger.html +397 -0
  109. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +180 -0
  110. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +647 -0
  111. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +654 -0
  112. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +92 -0
  113. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
  114. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
  115. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
  116. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
  117. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +619 -0
  118. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +142 -0
  119. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +368 -0
  120. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +231 -0
  121. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +588 -0
  122. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +92 -0
  123. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +92 -0
  124. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +147 -0
  125. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +279 -0
  126. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +92 -0
  127. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +92 -0
  128. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +123 -0
  129. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +92 -0
  130. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +341 -0
  131. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +294 -0
  132. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +199 -0
  133. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +155 -0
  134. data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +367 -0
  135. data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +95 -0
  136. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +351 -0
  137. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +98 -0
  138. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +200 -0
  139. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +410 -0
  140. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +98 -0
  141. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +156 -0
  142. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +115 -0
  143. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +202 -0
  144. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
  145. data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +273 -0
  146. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
  147. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +162 -0
  148. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
  149. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  150. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +673 -0
  151. data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +92 -0
  152. data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +415 -0
  153. data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +134 -0
  154. data/doc/rdoc/classes/PhusionPassenger/Packaging.html +129 -0
  155. data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +1972 -0
  156. data/doc/rdoc/classes/PhusionPassenger/Plugin.html +237 -0
  157. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  158. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +312 -0
  159. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +98 -0
  160. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +218 -0
  161. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +114 -0
  162. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +259 -0
  163. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +139 -0
  164. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +118 -0
  165. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +135 -0
  166. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +378 -0
  167. data/doc/rdoc/classes/PhusionPassenger/Standalone.html +111 -0
  168. data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +252 -0
  169. data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +161 -0
  170. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +368 -0
  171. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +132 -0
  172. data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +151 -0
  173. data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +189 -0
  174. data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +177 -0
  175. data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +341 -0
  176. data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +203 -0
  177. data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +156 -0
  178. data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +168 -0
  179. data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +86 -0
  180. data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +135 -0
  181. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
  182. data/doc/rdoc/classes/PhusionPassenger/Utils.html +1543 -0
  183. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +204 -0
  184. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +171 -0
  185. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +140 -0
  186. data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +260 -0
  187. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +169 -0
  188. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +265 -0
  189. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +120 -0
  190. data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +561 -0
  191. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
  192. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  193. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +182 -0
  194. data/doc/rdoc/classes/Process.html +115 -0
  195. data/doc/rdoc/classes/Signal.html +139 -0
  196. data/doc/rdoc/created.rid +1 -0
  197. data/doc/rdoc/files/DEVELOPERS_TXT.html +280 -0
  198. data/doc/rdoc/files/README.html +157 -0
  199. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +130 -0
  200. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +135 -0
  201. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
  202. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +128 -0
  203. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +126 -0
  204. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +132 -0
  205. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
  206. data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +129 -0
  207. data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +127 -0
  208. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +141 -0
  209. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +126 -0
  210. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +146 -0
  211. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +125 -0
  212. data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +132 -0
  213. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
  214. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
  215. data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +122 -0
  216. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +147 -0
  217. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
  218. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +127 -0
  219. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +120 -0
  220. data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +127 -0
  221. data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +132 -0
  222. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
  223. data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +127 -0
  224. data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +129 -0
  225. data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +127 -0
  226. data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +126 -0
  227. data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +126 -0
  228. data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +126 -0
  229. data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +127 -0
  230. data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +128 -0
  231. data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +126 -0
  232. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +122 -0
  233. data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +127 -0
  234. data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +127 -0
  235. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +137 -0
  236. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +125 -0
  237. data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +127 -0
  238. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
  239. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +160 -0
  240. data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +127 -0
  241. data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +136 -0
  242. data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +126 -0
  243. data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +126 -0
  244. data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +126 -0
  245. data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +127 -0
  246. data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +133 -0
  247. data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +136 -0
  248. data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +126 -0
  249. data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +126 -0
  250. data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +126 -0
  251. data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +127 -0
  252. data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +126 -0
  253. data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +120 -0
  254. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +100 -0
  255. data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +122 -0
  256. data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +126 -0
  257. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +179 -0
  258. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +132 -0
  259. data/doc/rdoc/fr_class_index.html +138 -0
  260. data/doc/rdoc/fr_file_index.html +108 -0
  261. data/doc/rdoc/fr_method_index.html +433 -0
  262. data/doc/rdoc/index.html +26 -0
  263. data/doc/rdoc/rdoc-style.css +187 -0
  264. data/doc/template/horo.rb +613 -0
  265. data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +201 -0
  266. data/doc/users_guide_snippets/appendix_a_about.txt +13 -0
  267. data/doc/users_guide_snippets/appendix_b_terminology.txt +63 -0
  268. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +303 -0
  269. data/doc/users_guide_snippets/global_queueing_explained.txt +74 -0
  270. data/doc/users_guide_snippets/passenger_spawn_method.txt +49 -0
  271. data/doc/users_guide_snippets/rackup_specifications.txt +71 -0
  272. data/doc/users_guide_snippets/tips.txt +207 -0
  273. data/doc/users_guide_snippets/under_the_hood/page_caching_support.txt +22 -0
  274. data/ext/apache2/Bucket.cpp +190 -0
  275. data/ext/apache2/Bucket.h +87 -0
  276. data/ext/apache2/Configuration.cpp +717 -0
  277. data/ext/apache2/Configuration.h +51 -0
  278. data/ext/apache2/Configuration.hpp +462 -0
  279. data/ext/apache2/DirectoryMapper.h +280 -0
  280. data/ext/apache2/HelperAgent.cpp +365 -0
  281. data/ext/apache2/Hooks.cpp +1757 -0
  282. data/ext/apache2/Hooks.h +45 -0
  283. data/ext/apache2/mod_passenger.c +44 -0
  284. data/ext/boost/algorithm/string/case_conv.hpp +176 -0
  285. data/ext/boost/algorithm/string/compare.hpp +199 -0
  286. data/ext/boost/algorithm/string/concept.hpp +83 -0
  287. data/ext/boost/algorithm/string/config.hpp +28 -0
  288. data/ext/boost/algorithm/string/constants.hpp +36 -0
  289. data/ext/boost/algorithm/string/detail/case_conv.hpp +121 -0
  290. data/ext/boost/algorithm/string/detail/find_format.hpp +204 -0
  291. data/ext/boost/algorithm/string/detail/find_format_all.hpp +273 -0
  292. data/ext/boost/algorithm/string/detail/find_format_store.hpp +89 -0
  293. data/ext/boost/algorithm/string/detail/finder.hpp +646 -0
  294. data/ext/boost/algorithm/string/detail/formatter.hpp +94 -0
  295. data/ext/boost/algorithm/string/detail/replace_storage.hpp +159 -0
  296. data/ext/boost/algorithm/string/detail/sequence.hpp +200 -0
  297. data/ext/boost/algorithm/string/detail/util.hpp +106 -0
  298. data/ext/boost/algorithm/string/erase.hpp +844 -0
  299. data/ext/boost/algorithm/string/find_format.hpp +287 -0
  300. data/ext/boost/algorithm/string/finder.hpp +270 -0
  301. data/ext/boost/algorithm/string/formatter.hpp +103 -0
  302. data/ext/boost/algorithm/string/replace.hpp +928 -0
  303. data/ext/boost/algorithm/string/sequence_traits.hpp +193 -0
  304. data/ext/boost/algorithm/string/yes_no_type.hpp +33 -0
  305. data/ext/boost/assert.hpp +50 -0
  306. data/ext/boost/bind.hpp +24 -0
  307. data/ext/boost/bind/arg.hpp +62 -0
  308. data/ext/boost/bind/bind.hpp +1751 -0
  309. data/ext/boost/bind/bind_cc.hpp +117 -0
  310. data/ext/boost/bind/bind_mf2_cc.hpp +228 -0
  311. data/ext/boost/bind/bind_mf_cc.hpp +227 -0
  312. data/ext/boost/bind/bind_template.hpp +345 -0
  313. data/ext/boost/bind/mem_fn.hpp +389 -0
  314. data/ext/boost/bind/mem_fn_cc.hpp +103 -0
  315. data/ext/boost/bind/mem_fn_template.hpp +1047 -0
  316. data/ext/boost/bind/placeholders.hpp +69 -0
  317. data/ext/boost/bind/storage.hpp +475 -0
  318. data/ext/boost/call_traits.hpp +24 -0
  319. data/ext/boost/checked_delete.hpp +69 -0
  320. data/ext/boost/concept/assert.hpp +46 -0
  321. data/ext/boost/concept/detail/backward_compatibility.hpp +16 -0
  322. data/ext/boost/concept/detail/concept_def.hpp +51 -0
  323. data/ext/boost/concept/detail/concept_undef.hpp +5 -0
  324. data/ext/boost/concept/detail/general.hpp +75 -0
  325. data/ext/boost/concept/detail/has_constraints.hpp +50 -0
  326. data/ext/boost/concept/usage.hpp +44 -0
  327. data/ext/boost/concept_check.hpp +1007 -0
  328. data/ext/boost/config.hpp +70 -0
  329. data/ext/boost/config/abi/borland_prefix.hpp +27 -0
  330. data/ext/boost/config/abi/borland_suffix.hpp +12 -0
  331. data/ext/boost/config/abi/msvc_prefix.hpp +22 -0
  332. data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
  333. data/ext/boost/config/abi_prefix.hpp +25 -0
  334. data/ext/boost/config/abi_suffix.hpp +27 -0
  335. data/ext/boost/config/auto_link.hpp +420 -0
  336. data/ext/boost/config/compiler/borland.hpp +275 -0
  337. data/ext/boost/config/compiler/clang.hpp +62 -0
  338. data/ext/boost/config/compiler/codegear.hpp +177 -0
  339. data/ext/boost/config/compiler/comeau.hpp +59 -0
  340. data/ext/boost/config/compiler/common_edg.hpp +99 -0
  341. data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
  342. data/ext/boost/config/compiler/digitalmars.hpp +93 -0
  343. data/ext/boost/config/compiler/gcc.hpp +243 -0
  344. data/ext/boost/config/compiler/gcc_xml.hpp +55 -0
  345. data/ext/boost/config/compiler/greenhills.hpp +28 -0
  346. data/ext/boost/config/compiler/hp_acc.hpp +127 -0
  347. data/ext/boost/config/compiler/intel.hpp +196 -0
  348. data/ext/boost/config/compiler/kai.hpp +33 -0
  349. data/ext/boost/config/compiler/metrowerks.hpp +139 -0
  350. data/ext/boost/config/compiler/mpw.hpp +81 -0
  351. data/ext/boost/config/compiler/nvcc.hpp +86 -0
  352. data/ext/boost/config/compiler/pgi.hpp +77 -0
  353. data/ext/boost/config/compiler/sgi_mipspro.hpp +29 -0
  354. data/ext/boost/config/compiler/sunpro_cc.hpp +144 -0
  355. data/ext/boost/config/compiler/vacpp.hpp +96 -0
  356. data/ext/boost/config/compiler/visualc.hpp +274 -0
  357. data/ext/boost/config/no_tr1/cmath.hpp +28 -0
  358. data/ext/boost/config/no_tr1/complex.hpp +28 -0
  359. data/ext/boost/config/no_tr1/functional.hpp +28 -0
  360. data/ext/boost/config/no_tr1/memory.hpp +28 -0
  361. data/ext/boost/config/no_tr1/utility.hpp +28 -0
  362. data/ext/boost/config/platform/aix.hpp +33 -0
  363. data/ext/boost/config/platform/amigaos.hpp +15 -0
  364. data/ext/boost/config/platform/beos.hpp +26 -0
  365. data/ext/boost/config/platform/bsd.hpp +86 -0
  366. data/ext/boost/config/platform/cygwin.hpp +48 -0
  367. data/ext/boost/config/platform/hpux.hpp +87 -0
  368. data/ext/boost/config/platform/irix.hpp +31 -0
  369. data/ext/boost/config/platform/linux.hpp +98 -0
  370. data/ext/boost/config/platform/macos.hpp +86 -0
  371. data/ext/boost/config/platform/qnxnto.hpp +31 -0
  372. data/ext/boost/config/platform/solaris.hpp +28 -0
  373. data/ext/boost/config/platform/symbian.hpp +94 -0
  374. data/ext/boost/config/platform/vxworks.hpp +31 -0
  375. data/ext/boost/config/platform/win32.hpp +65 -0
  376. data/ext/boost/config/posix_features.hpp +95 -0
  377. data/ext/boost/config/requires_threads.hpp +92 -0
  378. data/ext/boost/config/select_compiler_config.hpp +129 -0
  379. data/ext/boost/config/select_platform_config.hpp +98 -0
  380. data/ext/boost/config/select_stdlib_config.hpp +77 -0
  381. data/ext/boost/config/stdlib/dinkumware.hpp +148 -0
  382. data/ext/boost/config/stdlib/libcomo.hpp +72 -0
  383. data/ext/boost/config/stdlib/libstdcpp3.hpp +128 -0
  384. data/ext/boost/config/stdlib/modena.hpp +56 -0
  385. data/ext/boost/config/stdlib/msl.hpp +84 -0
  386. data/ext/boost/config/stdlib/roguewave.hpp +180 -0
  387. data/ext/boost/config/stdlib/sgi.hpp +137 -0
  388. data/ext/boost/config/stdlib/stlport.hpp +237 -0
  389. data/ext/boost/config/stdlib/vacpp.hpp +44 -0
  390. data/ext/boost/config/suffix.hpp +639 -0
  391. data/ext/boost/config/user.hpp +124 -0
  392. data/ext/boost/config/warning_disable.hpp +47 -0
  393. data/ext/boost/cstdint.hpp +504 -0
  394. data/ext/boost/current_function.hpp +67 -0
  395. data/ext/boost/date_time/adjust_functors.hpp +178 -0
  396. data/ext/boost/date_time/c_time.hpp +107 -0
  397. data/ext/boost/date_time/compiler_config.hpp +171 -0
  398. data/ext/boost/date_time/constrained_value.hpp +121 -0
  399. data/ext/boost/date_time/date.hpp +208 -0
  400. data/ext/boost/date_time/date_clock_device.hpp +77 -0
  401. data/ext/boost/date_time/date_defs.hpp +26 -0
  402. data/ext/boost/date_time/date_duration.hpp +146 -0
  403. data/ext/boost/date_time/date_duration_types.hpp +269 -0
  404. data/ext/boost/date_time/date_facet.hpp +764 -0
  405. data/ext/boost/date_time/date_format_simple.hpp +159 -0
  406. data/ext/boost/date_time/date_formatting.hpp +127 -0
  407. data/ext/boost/date_time/date_formatting_limited.hpp +121 -0
  408. data/ext/boost/date_time/date_formatting_locales.hpp +233 -0
  409. data/ext/boost/date_time/date_generator_formatter.hpp +265 -0
  410. data/ext/boost/date_time/date_generator_parser.hpp +330 -0
  411. data/ext/boost/date_time/date_generators.hpp +509 -0
  412. data/ext/boost/date_time/date_iterator.hpp +101 -0
  413. data/ext/boost/date_time/date_names_put.hpp +320 -0
  414. data/ext/boost/date_time/date_parsing.hpp +316 -0
  415. data/ext/boost/date_time/dst_rules.hpp +391 -0
  416. data/ext/boost/date_time/filetime_functions.hpp +170 -0
  417. data/ext/boost/date_time/format_date_parser.hpp +743 -0
  418. data/ext/boost/date_time/gregorian/conversion.hpp +68 -0
  419. data/ext/boost/date_time/gregorian/formatters.hpp +162 -0
  420. data/ext/boost/date_time/gregorian/formatters_limited.hpp +81 -0
  421. data/ext/boost/date_time/gregorian/greg_calendar.hpp +48 -0
  422. data/ext/boost/date_time/gregorian/greg_date.hpp +136 -0
  423. data/ext/boost/date_time/gregorian/greg_day.hpp +57 -0
  424. data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +38 -0
  425. data/ext/boost/date_time/gregorian/greg_duration.hpp +134 -0
  426. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +43 -0
  427. data/ext/boost/date_time/gregorian/greg_month.hpp +105 -0
  428. data/ext/boost/date_time/gregorian/greg_weekday.hpp +66 -0
  429. data/ext/boost/date_time/gregorian/greg_year.hpp +53 -0
  430. data/ext/boost/date_time/gregorian/greg_ymd.hpp +33 -0
  431. data/ext/boost/date_time/gregorian/gregorian.hpp +38 -0
  432. data/ext/boost/date_time/gregorian/gregorian_io.hpp +784 -0
  433. data/ext/boost/date_time/gregorian/gregorian_types.hpp +109 -0
  434. data/ext/boost/date_time/gregorian/parsers.hpp +91 -0
  435. data/ext/boost/date_time/gregorian_calendar.hpp +70 -0
  436. data/ext/boost/date_time/gregorian_calendar.ipp +219 -0
  437. data/ext/boost/date_time/int_adapter.hpp +509 -0
  438. data/ext/boost/date_time/iso_format.hpp +303 -0
  439. data/ext/boost/date_time/locale_config.hpp +31 -0
  440. data/ext/boost/date_time/microsec_time_clock.hpp +127 -0
  441. data/ext/boost/date_time/parse_format_base.hpp +29 -0
  442. data/ext/boost/date_time/period.hpp +377 -0
  443. data/ext/boost/date_time/period_formatter.hpp +196 -0
  444. data/ext/boost/date_time/period_parser.hpp +198 -0
  445. data/ext/boost/date_time/posix_time/conversion.hpp +94 -0
  446. data/ext/boost/date_time/posix_time/date_duration_operators.hpp +114 -0
  447. data/ext/boost/date_time/posix_time/posix_time.hpp +39 -0
  448. data/ext/boost/date_time/posix_time/posix_time_config.hpp +178 -0
  449. data/ext/boost/date_time/posix_time/posix_time_duration.hpp +82 -0
  450. data/ext/boost/date_time/posix_time/posix_time_io.hpp +239 -0
  451. data/ext/boost/date_time/posix_time/posix_time_system.hpp +68 -0
  452. data/ext/boost/date_time/posix_time/posix_time_types.hpp +55 -0
  453. data/ext/boost/date_time/posix_time/ptime.hpp +65 -0
  454. data/ext/boost/date_time/posix_time/time_formatters.hpp +289 -0
  455. data/ext/boost/date_time/posix_time/time_parsers.hpp +44 -0
  456. data/ext/boost/date_time/posix_time/time_period.hpp +29 -0
  457. data/ext/boost/date_time/special_defs.hpp +25 -0
  458. data/ext/boost/date_time/special_values_formatter.hpp +96 -0
  459. data/ext/boost/date_time/special_values_parser.hpp +159 -0
  460. data/ext/boost/date_time/string_convert.hpp +33 -0
  461. data/ext/boost/date_time/string_parse_tree.hpp +278 -0
  462. data/ext/boost/date_time/strings_from_facet.hpp +125 -0
  463. data/ext/boost/date_time/time.hpp +191 -0
  464. data/ext/boost/date_time/time_clock.hpp +83 -0
  465. data/ext/boost/date_time/time_defs.hpp +43 -0
  466. data/ext/boost/date_time/time_duration.hpp +282 -0
  467. data/ext/boost/date_time/time_facet.hpp +1367 -0
  468. data/ext/boost/date_time/time_formatting_streams.hpp +122 -0
  469. data/ext/boost/date_time/time_iterator.hpp +52 -0
  470. data/ext/boost/date_time/time_parsing.hpp +321 -0
  471. data/ext/boost/date_time/time_resolution_traits.hpp +144 -0
  472. data/ext/boost/date_time/time_system_counted.hpp +254 -0
  473. data/ext/boost/date_time/time_system_split.hpp +207 -0
  474. data/ext/boost/date_time/wrapping_int.hpp +169 -0
  475. data/ext/boost/date_time/year_month_day.hpp +45 -0
  476. data/ext/boost/detail/call_traits.hpp +164 -0
  477. data/ext/boost/detail/endian.hpp +76 -0
  478. data/ext/boost/detail/indirect_traits.hpp +487 -0
  479. data/ext/boost/detail/iterator.hpp +494 -0
  480. data/ext/boost/detail/lcast_precision.hpp +184 -0
  481. data/ext/boost/detail/limits.hpp +449 -0
  482. data/ext/boost/detail/no_exceptions_support.hpp +87 -0
  483. data/ext/boost/detail/reference_content.hpp +141 -0
  484. data/ext/boost/detail/sp_typeinfo.hpp +129 -0
  485. data/ext/boost/detail/workaround.hpp +267 -0
  486. data/ext/boost/enable_shared_from_this.hpp +18 -0
  487. data/ext/boost/exception/current_exception_cast.hpp +43 -0
  488. data/ext/boost/exception/detail/attribute_noreturn.hpp +17 -0
  489. data/ext/boost/exception/detail/error_info_impl.hpp +75 -0
  490. data/ext/boost/exception/detail/exception_ptr.hpp +431 -0
  491. data/ext/boost/exception/detail/is_output_streamable.hpp +60 -0
  492. data/ext/boost/exception/detail/object_hex_dump.hpp +50 -0
  493. data/ext/boost/exception/detail/type_info.hpp +83 -0
  494. data/ext/boost/exception/diagnostic_information.hpp +184 -0
  495. data/ext/boost/exception/exception.hpp +436 -0
  496. data/ext/boost/exception/get_error_info.hpp +130 -0
  497. data/ext/boost/exception/info.hpp +200 -0
  498. data/ext/boost/exception/to_string.hpp +83 -0
  499. data/ext/boost/exception/to_string_stub.hpp +109 -0
  500. data/ext/boost/exception_ptr.hpp +11 -0
  501. data/ext/boost/function.hpp +66 -0
  502. data/ext/boost/function/detail/function_iterate.hpp +16 -0
  503. data/ext/boost/function/detail/maybe_include.hpp +267 -0
  504. data/ext/boost/function/detail/prologue.hpp +26 -0
  505. data/ext/boost/function/function_base.hpp +904 -0
  506. data/ext/boost/function/function_fwd.hpp +70 -0
  507. data/ext/boost/function/function_template.hpp +1158 -0
  508. data/ext/boost/function_equal.hpp +28 -0
  509. data/ext/boost/get_pointer.hpp +33 -0
  510. data/ext/boost/implicit_cast.hpp +29 -0
  511. data/ext/boost/integer.hpp +257 -0
  512. data/ext/boost/integer_fwd.hpp +180 -0
  513. data/ext/boost/integer_traits.hpp +261 -0
  514. data/ext/boost/io/ios_state.hpp +439 -0
  515. data/ext/boost/io_fwd.hpp +67 -0
  516. data/ext/boost/is_placeholder.hpp +31 -0
  517. data/ext/boost/iterator.hpp +59 -0
  518. data/ext/boost/iterator/detail/config_def.hpp +137 -0
  519. data/ext/boost/iterator/detail/config_undef.hpp +25 -0
  520. data/ext/boost/iterator/detail/enable_if.hpp +86 -0
  521. data/ext/boost/iterator/detail/facade_iterator_category.hpp +200 -0
  522. data/ext/boost/iterator/detail/minimum_category.hpp +116 -0
  523. data/ext/boost/iterator/interoperable.hpp +50 -0
  524. data/ext/boost/iterator/iterator_adaptor.hpp +371 -0
  525. data/ext/boost/iterator/iterator_categories.hpp +188 -0
  526. data/ext/boost/iterator/iterator_concepts.hpp +284 -0
  527. data/ext/boost/iterator/iterator_facade.hpp +878 -0
  528. data/ext/boost/iterator/iterator_traits.hpp +92 -0
  529. data/ext/boost/iterator/reverse_iterator.hpp +69 -0
  530. data/ext/boost/iterator/transform_iterator.hpp +187 -0
  531. data/ext/boost/lexical_cast.hpp +1213 -0
  532. data/ext/boost/limits.hpp +146 -0
  533. data/ext/boost/make_shared.hpp +17 -0
  534. data/ext/boost/mem_fn.hpp +24 -0
  535. data/ext/boost/memory_order.hpp +53 -0
  536. data/ext/boost/mpl/always.hpp +39 -0
  537. data/ext/boost/mpl/and.hpp +60 -0
  538. data/ext/boost/mpl/apply.hpp +229 -0
  539. data/ext/boost/mpl/apply_fwd.hpp +107 -0
  540. data/ext/boost/mpl/apply_wrap.hpp +234 -0
  541. data/ext/boost/mpl/arg.hpp +131 -0
  542. data/ext/boost/mpl/arg_fwd.hpp +28 -0
  543. data/ext/boost/mpl/assert.hpp +370 -0
  544. data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
  545. data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
  546. data/ext/boost/mpl/aux_/arity.hpp +39 -0
  547. data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
  548. data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
  549. data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
  550. data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
  551. data/ext/boost/mpl/aux_/config/bcc.hpp +28 -0
  552. data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
  553. data/ext/boost/mpl/aux_/config/compiler.hpp +66 -0
  554. data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
  555. data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
  556. data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
  557. data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
  558. data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
  559. data/ext/boost/mpl/aux_/config/has_xxx.hpp +34 -0
  560. data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
  561. data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
  562. data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
  563. data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
  564. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
  565. data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
  566. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
  567. data/ext/boost/mpl/aux_/config/pp_counter.hpp +26 -0
  568. data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
  569. data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
  570. data/ext/boost/mpl/aux_/config/ttp.hpp +41 -0
  571. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
  572. data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
  573. data/ext/boost/mpl/aux_/full_lambda.hpp +354 -0
  574. data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
  575. data/ext/boost/mpl/aux_/has_type.hpp +23 -0
  576. data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
  577. data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
  578. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
  579. data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
  580. data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
  581. data/ext/boost/mpl/aux_/na.hpp +95 -0
  582. data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
  583. data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
  584. data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
  585. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
  586. data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
  587. data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
  588. data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
  589. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
  590. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
  591. data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
  592. data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
  593. data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
  594. data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
  595. data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
  596. data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
  597. data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
  598. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +97 -0
  599. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
  600. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
  601. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
  602. data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
  603. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
  604. data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
  605. data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
  606. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
  607. data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
  608. data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
  609. data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
  610. data/ext/boost/mpl/bind.hpp +551 -0
  611. data/ext/boost/mpl/bind_fwd.hpp +99 -0
  612. data/ext/boost/mpl/bool.hpp +39 -0
  613. data/ext/boost/mpl/bool_fwd.hpp +33 -0
  614. data/ext/boost/mpl/eval_if.hpp +71 -0
  615. data/ext/boost/mpl/has_xxx.hpp +640 -0
  616. data/ext/boost/mpl/identity.hpp +45 -0
  617. data/ext/boost/mpl/if.hpp +135 -0
  618. data/ext/boost/mpl/int.hpp +22 -0
  619. data/ext/boost/mpl/int_fwd.hpp +27 -0
  620. data/ext/boost/mpl/integral_c.hpp +51 -0
  621. data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
  622. data/ext/boost/mpl/integral_c_tag.hpp +26 -0
  623. data/ext/boost/mpl/lambda.hpp +29 -0
  624. data/ext/boost/mpl/lambda_fwd.hpp +57 -0
  625. data/ext/boost/mpl/limits/arity.hpp +21 -0
  626. data/ext/boost/mpl/logical.hpp +21 -0
  627. data/ext/boost/mpl/next.hpp +19 -0
  628. data/ext/boost/mpl/next_prior.hpp +49 -0
  629. data/ext/boost/mpl/not.hpp +51 -0
  630. data/ext/boost/mpl/or.hpp +61 -0
  631. data/ext/boost/mpl/placeholders.hpp +100 -0
  632. data/ext/boost/mpl/protect.hpp +55 -0
  633. data/ext/boost/mpl/quote.hpp +151 -0
  634. data/ext/boost/mpl/size_t.hpp +25 -0
  635. data/ext/boost/mpl/size_t_fwd.hpp +28 -0
  636. data/ext/boost/mpl/void.hpp +76 -0
  637. data/ext/boost/mpl/void_fwd.hpp +26 -0
  638. data/ext/boost/next_prior.hpp +51 -0
  639. data/ext/boost/non_type.hpp +27 -0
  640. data/ext/boost/noncopyable.hpp +36 -0
  641. data/ext/boost/none.hpp +28 -0
  642. data/ext/boost/none_t.hpp +24 -0
  643. data/ext/boost/operators.hpp +976 -0
  644. data/ext/boost/optional.hpp +18 -0
  645. data/ext/boost/optional/optional.hpp +924 -0
  646. data/ext/boost/optional/optional_fwd.hpp +22 -0
  647. data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
  648. data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
  649. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  650. data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
  651. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  652. data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
  653. data/ext/boost/preprocessor/array/data.hpp +28 -0
  654. data/ext/boost/preprocessor/array/elem.hpp +29 -0
  655. data/ext/boost/preprocessor/array/size.hpp +28 -0
  656. data/ext/boost/preprocessor/cat.hpp +35 -0
  657. data/ext/boost/preprocessor/comma_if.hpp +17 -0
  658. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  659. data/ext/boost/preprocessor/config/config.hpp +70 -0
  660. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  661. data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
  662. data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
  663. data/ext/boost/preprocessor/control/if.hpp +30 -0
  664. data/ext/boost/preprocessor/control/iif.hpp +34 -0
  665. data/ext/boost/preprocessor/control/while.hpp +312 -0
  666. data/ext/boost/preprocessor/debug/error.hpp +33 -0
  667. data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
  668. data/ext/boost/preprocessor/detail/check.hpp +48 -0
  669. data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
  670. data/ext/boost/preprocessor/empty.hpp +17 -0
  671. data/ext/boost/preprocessor/enum.hpp +17 -0
  672. data/ext/boost/preprocessor/enum_params.hpp +17 -0
  673. data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
  674. data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
  675. data/ext/boost/preprocessor/identity.hpp +17 -0
  676. data/ext/boost/preprocessor/inc.hpp +17 -0
  677. data/ext/boost/preprocessor/iterate.hpp +17 -0
  678. data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
  679. data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
  680. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
  681. data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
  682. data/ext/boost/preprocessor/list/adt.hpp +73 -0
  683. data/ext/boost/preprocessor/list/append.hpp +40 -0
  684. data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
  685. data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
  686. data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
  687. data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
  688. data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
  689. data/ext/boost/preprocessor/list/reverse.hpp +40 -0
  690. data/ext/boost/preprocessor/list/transform.hpp +49 -0
  691. data/ext/boost/preprocessor/logical/and.hpp +30 -0
  692. data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
  693. data/ext/boost/preprocessor/logical/bool.hpp +288 -0
  694. data/ext/boost/preprocessor/logical/compl.hpp +36 -0
  695. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  696. data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
  697. data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
  698. data/ext/boost/preprocessor/repeat.hpp +17 -0
  699. data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
  700. data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
  701. data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
  702. data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
  703. data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
  704. data/ext/boost/preprocessor/repetition/for.hpp +306 -0
  705. data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
  706. data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
  707. data/ext/boost/preprocessor/seq/cat.hpp +48 -0
  708. data/ext/boost/preprocessor/seq/elem.hpp +304 -0
  709. data/ext/boost/preprocessor/seq/enum.hpp +288 -0
  710. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  711. data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
  712. data/ext/boost/preprocessor/seq/seq.hpp +44 -0
  713. data/ext/boost/preprocessor/seq/size.hpp +548 -0
  714. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  715. data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
  716. data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
  717. data/ext/boost/preprocessor/slot/slot.hpp +32 -0
  718. data/ext/boost/preprocessor/stringize.hpp +33 -0
  719. data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
  720. data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
  721. data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
  722. data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
  723. data/ext/boost/range/algorithm/equal.hpp +188 -0
  724. data/ext/boost/range/as_literal.hpp +127 -0
  725. data/ext/boost/range/begin.hpp +132 -0
  726. data/ext/boost/range/concepts.hpp +331 -0
  727. data/ext/boost/range/config.hpp +54 -0
  728. data/ext/boost/range/const_iterator.hpp +67 -0
  729. data/ext/boost/range/detail/common.hpp +117 -0
  730. data/ext/boost/range/detail/extract_optional_type.hpp +52 -0
  731. data/ext/boost/range/detail/implementation_help.hpp +103 -0
  732. data/ext/boost/range/detail/misc_concept.hpp +33 -0
  733. data/ext/boost/range/detail/sfinae.hpp +77 -0
  734. data/ext/boost/range/detail/str_types.hpp +38 -0
  735. data/ext/boost/range/difference_type.hpp +29 -0
  736. data/ext/boost/range/distance.hpp +34 -0
  737. data/ext/boost/range/empty.hpp +34 -0
  738. data/ext/boost/range/end.hpp +131 -0
  739. data/ext/boost/range/functions.hpp +27 -0
  740. data/ext/boost/range/iterator.hpp +72 -0
  741. data/ext/boost/range/iterator_range.hpp +16 -0
  742. data/ext/boost/range/iterator_range_core.hpp +542 -0
  743. data/ext/boost/range/iterator_range_io.hpp +93 -0
  744. data/ext/boost/range/mutable_iterator.hpp +67 -0
  745. data/ext/boost/range/rbegin.hpp +65 -0
  746. data/ext/boost/range/rend.hpp +65 -0
  747. data/ext/boost/range/reverse_iterator.hpp +40 -0
  748. data/ext/boost/range/size.hpp +36 -0
  749. data/ext/boost/range/size_type.hpp +79 -0
  750. data/ext/boost/range/value_type.hpp +34 -0
  751. data/ext/boost/ref.hpp +189 -0
  752. data/ext/boost/scoped_array.hpp +16 -0
  753. data/ext/boost/scoped_ptr.hpp +16 -0
  754. data/ext/boost/shared_array.hpp +19 -0
  755. data/ext/boost/shared_ptr.hpp +19 -0
  756. data/ext/boost/smart_ptr/bad_weak_ptr.hpp +59 -0
  757. data/ext/boost/smart_ptr/detail/atomic_count.hpp +119 -0
  758. data/ext/boost/smart_ptr/detail/atomic_count_gcc.hpp +72 -0
  759. data/ext/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +77 -0
  760. data/ext/boost/smart_ptr/detail/atomic_count_pthreads.hpp +96 -0
  761. data/ext/boost/smart_ptr/detail/atomic_count_solaris.hpp +59 -0
  762. data/ext/boost/smart_ptr/detail/atomic_count_sync.hpp +61 -0
  763. data/ext/boost/smart_ptr/detail/atomic_count_win32.hpp +63 -0
  764. data/ext/boost/smart_ptr/detail/operator_bool.hpp +56 -0
  765. data/ext/boost/smart_ptr/detail/shared_count.hpp +444 -0
  766. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +76 -0
  767. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +70 -0
  768. data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +150 -0
  769. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +170 -0
  770. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +158 -0
  771. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +157 -0
  772. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +172 -0
  773. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +181 -0
  774. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +166 -0
  775. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +173 -0
  776. data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +107 -0
  777. data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +135 -0
  778. data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +113 -0
  779. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +131 -0
  780. data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +155 -0
  781. data/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp +130 -0
  782. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +231 -0
  783. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +49 -0
  784. data/ext/boost/smart_ptr/detail/spinlock.hpp +53 -0
  785. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +85 -0
  786. data/ext/boost/smart_ptr/detail/spinlock_nt.hpp +89 -0
  787. data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +87 -0
  788. data/ext/boost/smart_ptr/detail/spinlock_pt.hpp +79 -0
  789. data/ext/boost/smart_ptr/detail/spinlock_sync.hpp +87 -0
  790. data/ext/boost/smart_ptr/detail/yield_k.hpp +149 -0
  791. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +79 -0
  792. data/ext/boost/smart_ptr/make_shared.hpp +508 -0
  793. data/ext/boost/smart_ptr/scoped_array.hpp +107 -0
  794. data/ext/boost/smart_ptr/scoped_ptr.hpp +131 -0
  795. data/ext/boost/smart_ptr/shared_array.hpp +147 -0
  796. data/ext/boost/smart_ptr/shared_ptr.hpp +701 -0
  797. data/ext/boost/smart_ptr/weak_ptr.hpp +230 -0
  798. data/ext/boost/src/pthread/once.cpp +51 -0
  799. data/ext/boost/src/pthread/thread.cpp +616 -0
  800. data/ext/boost/src/pthread/timeconv.inl +133 -0
  801. data/ext/boost/src/tss_null.cpp +34 -0
  802. data/ext/boost/static_assert.hpp +132 -0
  803. data/ext/boost/thread.hpp +26 -0
  804. data/ext/boost/thread/barrier.hpp +64 -0
  805. data/ext/boost/thread/condition.hpp +16 -0
  806. data/ext/boost/thread/condition_variable.hpp +21 -0
  807. data/ext/boost/thread/detail/config.hpp +100 -0
  808. data/ext/boost/thread/detail/force_cast.hpp +39 -0
  809. data/ext/boost/thread/detail/move.hpp +60 -0
  810. data/ext/boost/thread/detail/platform.hpp +71 -0
  811. data/ext/boost/thread/detail/singleton.hpp +59 -0
  812. data/ext/boost/thread/detail/thread.hpp +540 -0
  813. data/ext/boost/thread/detail/thread_group.hpp +108 -0
  814. data/ext/boost/thread/detail/thread_heap_alloc.hpp +23 -0
  815. data/ext/boost/thread/detail/thread_interruption.hpp +35 -0
  816. data/ext/boost/thread/detail/tss_hooks.hpp +65 -0
  817. data/ext/boost/thread/exceptions.hpp +223 -0
  818. data/ext/boost/thread/future.hpp +1375 -0
  819. data/ext/boost/thread/locks.hpp +1585 -0
  820. data/ext/boost/thread/mutex.hpp +21 -0
  821. data/ext/boost/thread/once.hpp +33 -0
  822. data/ext/boost/thread/pthread/condition_variable.hpp +179 -0
  823. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +102 -0
  824. data/ext/boost/thread/pthread/mutex.hpp +236 -0
  825. data/ext/boost/thread/pthread/once.hpp +95 -0
  826. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +54 -0
  827. data/ext/boost/thread/pthread/recursive_mutex.hpp +345 -0
  828. data/ext/boost/thread/pthread/shared_mutex.hpp +303 -0
  829. data/ext/boost/thread/pthread/thread_data.hpp +129 -0
  830. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +242 -0
  831. data/ext/boost/thread/pthread/timespec.hpp +36 -0
  832. data/ext/boost/thread/recursive_mutex.hpp +21 -0
  833. data/ext/boost/thread/shared_mutex.hpp +21 -0
  834. data/ext/boost/thread/thread.hpp +27 -0
  835. data/ext/boost/thread/thread_time.hpp +50 -0
  836. data/ext/boost/thread/tss.hpp +113 -0
  837. data/ext/boost/thread/xtime.hpp +92 -0
  838. data/ext/boost/throw_exception.hpp +91 -0
  839. data/ext/boost/token_functions.hpp +641 -0
  840. data/ext/boost/token_iterator.hpp +128 -0
  841. data/ext/boost/tokenizer.hpp +98 -0
  842. data/ext/boost/type.hpp +18 -0
  843. data/ext/boost/type_traits/add_const.hpp +47 -0
  844. data/ext/boost/type_traits/add_pointer.hpp +72 -0
  845. data/ext/boost/type_traits/add_reference.hpp +107 -0
  846. data/ext/boost/type_traits/add_volatile.hpp +47 -0
  847. data/ext/boost/type_traits/alignment_of.hpp +128 -0
  848. data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
  849. data/ext/boost/type_traits/composite_traits.hpp +29 -0
  850. data/ext/boost/type_traits/config.hpp +76 -0
  851. data/ext/boost/type_traits/conversion_traits.hpp +17 -0
  852. data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
  853. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
  854. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
  855. data/ext/boost/type_traits/detail/false_result.hpp +28 -0
  856. data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
  857. data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
  858. data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
  859. data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
  860. data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
  861. data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
  862. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
  863. data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
  864. data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
  865. data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
  866. data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
  867. data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
  868. data/ext/boost/type_traits/function_traits.hpp +236 -0
  869. data/ext/boost/type_traits/has_nothrow_copy.hpp +39 -0
  870. data/ext/boost/type_traits/has_trivial_copy.hpp +49 -0
  871. data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
  872. data/ext/boost/type_traits/ice.hpp +20 -0
  873. data/ext/boost/type_traits/integral_constant.hpp +53 -0
  874. data/ext/boost/type_traits/intrinsics.hpp +240 -0
  875. data/ext/boost/type_traits/is_abstract.hpp +153 -0
  876. data/ext/boost/type_traits/is_arithmetic.hpp +51 -0
  877. data/ext/boost/type_traits/is_array.hpp +91 -0
  878. data/ext/boost/type_traits/is_base_and_derived.hpp +254 -0
  879. data/ext/boost/type_traits/is_base_of.hpp +51 -0
  880. data/ext/boost/type_traits/is_class.hpp +140 -0
  881. data/ext/boost/type_traits/is_const.hpp +165 -0
  882. data/ext/boost/type_traits/is_convertible.hpp +430 -0
  883. data/ext/boost/type_traits/is_enum.hpp +189 -0
  884. data/ext/boost/type_traits/is_float.hpp +27 -0
  885. data/ext/boost/type_traits/is_function.hpp +106 -0
  886. data/ext/boost/type_traits/is_fundamental.hpp +45 -0
  887. data/ext/boost/type_traits/is_integral.hpp +78 -0
  888. data/ext/boost/type_traits/is_lvalue_reference.hpp +118 -0
  889. data/ext/boost/type_traits/is_member_function_pointer.hpp +136 -0
  890. data/ext/boost/type_traits/is_member_pointer.hpp +116 -0
  891. data/ext/boost/type_traits/is_pod.hpp +135 -0
  892. data/ext/boost/type_traits/is_pointer.hpp +162 -0
  893. data/ext/boost/type_traits/is_reference.hpp +45 -0
  894. data/ext/boost/type_traits/is_rvalue_reference.hpp +29 -0
  895. data/ext/boost/type_traits/is_same.hpp +103 -0
  896. data/ext/boost/type_traits/is_scalar.hpp +55 -0
  897. data/ext/boost/type_traits/is_signed.hpp +135 -0
  898. data/ext/boost/type_traits/is_union.hpp +49 -0
  899. data/ext/boost/type_traits/is_unsigned.hpp +130 -0
  900. data/ext/boost/type_traits/is_void.hpp +38 -0
  901. data/ext/boost/type_traits/is_volatile.hpp +152 -0
  902. data/ext/boost/type_traits/make_unsigned.hpp +137 -0
  903. data/ext/boost/type_traits/remove_const.hpp +90 -0
  904. data/ext/boost/type_traits/remove_cv.hpp +83 -0
  905. data/ext/boost/type_traits/remove_pointer.hpp +43 -0
  906. data/ext/boost/type_traits/remove_reference.hpp +70 -0
  907. data/ext/boost/type_traits/type_with_alignment.hpp +393 -0
  908. data/ext/boost/units/detail/utility.hpp +104 -0
  909. data/ext/boost/utility.hpp +20 -0
  910. data/ext/boost/utility/addressof.hpp +102 -0
  911. data/ext/boost/utility/base_from_member.hpp +87 -0
  912. data/ext/boost/utility/binary.hpp +708 -0
  913. data/ext/boost/utility/compare_pointees.hpp +68 -0
  914. data/ext/boost/utility/enable_if.hpp +119 -0
  915. data/ext/boost/visit_each.hpp +29 -0
  916. data/ext/boost/weak_ptr.hpp +18 -0
  917. data/ext/common/AbstractSpawnManager.h +110 -0
  918. data/ext/common/Account.h +175 -0
  919. data/ext/common/AccountsDatabase.cpp +81 -0
  920. data/ext/common/AccountsDatabase.h +130 -0
  921. data/ext/common/AgentBase.cpp +323 -0
  922. data/ext/common/AgentBase.h +39 -0
  923. data/ext/common/AgentsStarter.cpp +154 -0
  924. data/ext/common/AgentsStarter.h +81 -0
  925. data/ext/common/AgentsStarter.hpp +646 -0
  926. data/ext/common/ApplicationPool/Client.h +796 -0
  927. data/ext/common/ApplicationPool/Interface.h +295 -0
  928. data/ext/common/ApplicationPool/Pool.h +1327 -0
  929. data/ext/common/ApplicationPool/Server.h +475 -0
  930. data/ext/common/BCrypt.cpp +343 -0
  931. data/ext/common/BCrypt.h +73 -0
  932. data/ext/common/Blowfish.c +685 -0
  933. data/ext/common/Blowfish.h +103 -0
  934. data/ext/common/Constants.h +48 -0
  935. data/ext/common/EventedClient.h +702 -0
  936. data/ext/common/EventedMessageServer.h +327 -0
  937. data/ext/common/EventedServer.h +295 -0
  938. data/ext/common/Exceptions.h +348 -0
  939. data/ext/common/FileDescriptor.h +293 -0
  940. data/ext/common/HelperAgent/BacktracesServer.h +59 -0
  941. data/ext/common/IniFile.h +488 -0
  942. data/ext/common/Logging.cpp +64 -0
  943. data/ext/common/Logging.h +695 -0
  944. data/ext/common/LoggingAgent/ChangeNotifier.h +63 -0
  945. data/ext/common/LoggingAgent/DataStoreId.h +177 -0
  946. data/ext/common/LoggingAgent/LoggingServer.h +1343 -0
  947. data/ext/common/LoggingAgent/Main.cpp +278 -0
  948. data/ext/common/LoggingAgent/RemoteSender.h +468 -0
  949. data/ext/common/MessageChannel.h +737 -0
  950. data/ext/common/MessageClient.h +297 -0
  951. data/ext/common/MessageReadersWriters.h +508 -0
  952. data/ext/common/MessageServer.h +581 -0
  953. data/ext/common/PoolOptions.h +518 -0
  954. data/ext/common/Process.h +255 -0
  955. data/ext/common/RandomGenerator.h +160 -0
  956. data/ext/common/ResourceLocator.h +134 -0
  957. data/ext/common/SafeLibev.h +149 -0
  958. data/ext/common/ServerInstanceDir.h +347 -0
  959. data/ext/common/Session.h +470 -0
  960. data/ext/common/SpawnManager.h +616 -0
  961. data/ext/common/StaticString.h +298 -0
  962. data/ext/common/StringListCreator.h +83 -0
  963. data/ext/common/Utils.cpp +972 -0
  964. data/ext/common/Utils.h +428 -0
  965. data/ext/common/Utils/Base64.cpp +143 -0
  966. data/ext/common/Utils/Base64.h +83 -0
  967. data/ext/common/Utils/BlockingQueue.h +136 -0
  968. data/ext/common/Utils/BufferedIO.h +196 -0
  969. data/ext/common/Utils/CachedFileStat.cpp +62 -0
  970. data/ext/common/Utils/CachedFileStat.h +51 -0
  971. data/ext/common/Utils/CachedFileStat.hpp +243 -0
  972. data/ext/common/Utils/FileChangeChecker.h +209 -0
  973. data/ext/common/Utils/IOUtils.cpp +913 -0
  974. data/ext/common/Utils/IOUtils.h +370 -0
  975. data/ext/common/Utils/MD5.cpp +406 -0
  976. data/ext/common/Utils/MD5.h +98 -0
  977. data/ext/common/Utils/MemZeroGuard.h +103 -0
  978. data/ext/common/Utils/ProcessMetricsCollector.h +590 -0
  979. data/ext/common/Utils/ScopeGuard.h +72 -0
  980. data/ext/common/Utils/StrIntUtils.cpp +363 -0
  981. data/ext/common/Utils/StrIntUtils.h +231 -0
  982. data/ext/common/Utils/SystemTime.cpp +37 -0
  983. data/ext/common/Utils/SystemTime.h +201 -0
  984. data/ext/common/Utils/Timer.h +152 -0
  985. data/ext/common/Utils/VariantMap.h +363 -0
  986. data/ext/common/Utils/utf8.h +35 -0
  987. data/ext/common/Utils/utf8/checked.h +324 -0
  988. data/ext/common/Utils/utf8/core.h +359 -0
  989. data/ext/common/Utils/utf8/unchecked.h +229 -0
  990. data/ext/common/Watchdog.cpp +1001 -0
  991. data/ext/google/COPYING +28 -0
  992. data/ext/google/ChangeLog +167 -0
  993. data/ext/google/dense_hash_map +310 -0
  994. data/ext/google/dense_hash_set +287 -0
  995. data/ext/google/sparse_hash_map +294 -0
  996. data/ext/google/sparse_hash_set +275 -0
  997. data/ext/google/sparsehash/densehashtable.h +1062 -0
  998. data/ext/google/sparsehash/sparseconfig.h +55 -0
  999. data/ext/google/sparsehash/sparsehashtable.h +1015 -0
  1000. data/ext/google/sparsetable +1468 -0
  1001. data/ext/google/type_traits.h +250 -0
  1002. data/ext/libev/Changes +302 -0
  1003. data/ext/libev/LICENSE +36 -0
  1004. data/ext/libev/Makefile.am +18 -0
  1005. data/ext/libev/Makefile.in +685 -0
  1006. data/ext/libev/README +58 -0
  1007. data/ext/libev/aclocal.m4 +7549 -0
  1008. data/ext/libev/autogen.sh +6 -0
  1009. data/ext/libev/config.guess +1526 -0
  1010. data/ext/libev/config.h.in +121 -0
  1011. data/ext/libev/config.sub +1658 -0
  1012. data/ext/libev/configure +22156 -0
  1013. data/ext/libev/configure.ac +18 -0
  1014. data/ext/libev/ev++.h +800 -0
  1015. data/ext/libev/ev.c +3694 -0
  1016. data/ext/libev/ev.h +705 -0
  1017. data/ext/libev/ev_epoll.c +228 -0
  1018. data/ext/libev/ev_kqueue.c +196 -0
  1019. data/ext/libev/ev_poll.c +144 -0
  1020. data/ext/libev/ev_port.c +165 -0
  1021. data/ext/libev/ev_select.c +308 -0
  1022. data/ext/libev/ev_vars.h +187 -0
  1023. data/ext/libev/ev_win32.c +153 -0
  1024. data/ext/libev/ev_wrap.h +178 -0
  1025. data/ext/libev/event.c +401 -0
  1026. data/ext/libev/event.h +158 -0
  1027. data/ext/libev/install-sh +294 -0
  1028. data/ext/libev/libev.m4 +38 -0
  1029. data/ext/libev/ltmain.sh +6871 -0
  1030. data/ext/libev/missing +336 -0
  1031. data/ext/libev/mkinstalldirs +111 -0
  1032. data/ext/nginx/Configuration.c +1454 -0
  1033. data/ext/nginx/Configuration.h +94 -0
  1034. data/ext/nginx/ContentHandler.c +1360 -0
  1035. data/ext/nginx/ContentHandler.h +64 -0
  1036. data/ext/nginx/HelperAgent.cpp +988 -0
  1037. data/ext/nginx/HttpStatusExtractor.h +351 -0
  1038. data/ext/nginx/ScgiRequestParser.h +375 -0
  1039. data/ext/nginx/StaticContentHandler.c +256 -0
  1040. data/ext/nginx/StaticContentHandler.h +37 -0
  1041. data/ext/nginx/config +56 -0
  1042. data/ext/nginx/ngx_http_passenger_module.c +499 -0
  1043. data/ext/nginx/ngx_http_passenger_module.h +63 -0
  1044. data/ext/oxt/backtrace.cpp +185 -0
  1045. data/ext/oxt/backtrace.hpp +135 -0
  1046. data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
  1047. data/ext/oxt/detail/backtrace_enabled.hpp +156 -0
  1048. data/ext/oxt/detail/spin_lock_darwin.hpp +69 -0
  1049. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +81 -0
  1050. data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
  1051. data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
  1052. data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
  1053. data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
  1054. data/ext/oxt/dynamic_thread_group.hpp +195 -0
  1055. data/ext/oxt/macros.hpp +58 -0
  1056. data/ext/oxt/spin_lock.hpp +57 -0
  1057. data/ext/oxt/system_calls.cpp +477 -0
  1058. data/ext/oxt/system_calls.hpp +260 -0
  1059. data/ext/oxt/thread.cpp +32 -0
  1060. data/ext/oxt/thread.hpp +370 -0
  1061. data/ext/oxt/tracable_exception.cpp +87 -0
  1062. data/ext/oxt/tracable_exception.hpp +35 -0
  1063. data/ext/ruby/extconf.rb +41 -0
  1064. data/ext/ruby/passenger_native_support.c +1037 -0
  1065. data/helper-scripts/passenger-spawn-server +106 -0
  1066. data/helper-scripts/prespawn +63 -0
  1067. data/lib/phusion_passenger.rb +107 -0
  1068. data/lib/phusion_passenger/abstract_installer.rb +234 -0
  1069. data/lib/phusion_passenger/abstract_request_handler.rb +738 -0
  1070. data/lib/phusion_passenger/abstract_server.rb +372 -0
  1071. data/lib/phusion_passenger/abstract_server_collection.rb +335 -0
  1072. data/lib/phusion_passenger/admin_tools.rb +48 -0
  1073. data/lib/phusion_passenger/admin_tools/memory_stats.rb +299 -0
  1074. data/lib/phusion_passenger/admin_tools/server_instance.rb +334 -0
  1075. data/lib/phusion_passenger/analytics_logger.rb +342 -0
  1076. data/lib/phusion_passenger/app_process.rb +162 -0
  1077. data/lib/phusion_passenger/classic_rails/application_spawner.rb +344 -0
  1078. data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +68 -0
  1079. data/lib/phusion_passenger/classic_rails/framework_spawner.rb +311 -0
  1080. data/lib/phusion_passenger/classic_rails/request_handler.rb +75 -0
  1081. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +65 -0
  1082. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +48 -0
  1083. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +59 -0
  1084. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb +54 -0
  1085. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +130 -0
  1086. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +47 -0
  1087. data/lib/phusion_passenger/classic_rails_extensions/init.rb +123 -0
  1088. data/lib/phusion_passenger/console_text_template.rb +66 -0
  1089. data/lib/phusion_passenger/constants.rb +35 -0
  1090. data/lib/phusion_passenger/debug_logging.rb +104 -0
  1091. data/lib/phusion_passenger/dependencies.rb +633 -0
  1092. data/lib/phusion_passenger/exceptions.rb +103 -0
  1093. data/lib/phusion_passenger/html_template.rb +107 -0
  1094. data/lib/phusion_passenger/message_channel.rb +387 -0
  1095. data/lib/phusion_passenger/message_client.rb +173 -0
  1096. data/lib/phusion_passenger/native_support.rb +166 -0
  1097. data/lib/phusion_passenger/packaging.rb +108 -0
  1098. data/lib/phusion_passenger/platform_info.rb +248 -0
  1099. data/lib/phusion_passenger/platform_info/apache.rb +332 -0
  1100. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +175 -0
  1101. data/lib/phusion_passenger/platform_info/compiler.rb +183 -0
  1102. data/lib/phusion_passenger/platform_info/curl.rb +61 -0
  1103. data/lib/phusion_passenger/platform_info/documentation_tools.rb +35 -0
  1104. data/lib/phusion_passenger/platform_info/linux.rb +77 -0
  1105. data/lib/phusion_passenger/platform_info/operating_system.rb +158 -0
  1106. data/lib/phusion_passenger/platform_info/ruby.rb +338 -0
  1107. data/lib/phusion_passenger/platform_info/zlib.rb +38 -0
  1108. data/lib/phusion_passenger/plugin.rb +96 -0
  1109. data/lib/phusion_passenger/public_api.rb +112 -0
  1110. data/lib/phusion_passenger/rack/application_spawner.rb +227 -0
  1111. data/lib/phusion_passenger/rack/request_handler.rb +145 -0
  1112. data/lib/phusion_passenger/rails3_extensions/init.rb +207 -0
  1113. data/lib/phusion_passenger/simple_benchmarking.rb +52 -0
  1114. data/lib/phusion_passenger/spawn_manager.rb +359 -0
  1115. data/lib/phusion_passenger/standalone/app_finder.rb +153 -0
  1116. data/lib/phusion_passenger/standalone/command.rb +241 -0
  1117. data/lib/phusion_passenger/standalone/config_file.rb +119 -0
  1118. data/lib/phusion_passenger/standalone/help_command.rb +57 -0
  1119. data/lib/phusion_passenger/standalone/main.rb +101 -0
  1120. data/lib/phusion_passenger/standalone/package_runtime_command.rb +92 -0
  1121. data/lib/phusion_passenger/standalone/runtime_installer.rb +479 -0
  1122. data/lib/phusion_passenger/standalone/start_command.rb +514 -0
  1123. data/lib/phusion_passenger/standalone/status_command.rb +62 -0
  1124. data/lib/phusion_passenger/standalone/stop_command.rb +74 -0
  1125. data/lib/phusion_passenger/standalone/utils.rb +46 -0
  1126. data/lib/phusion_passenger/standalone/version_command.rb +42 -0
  1127. data/lib/phusion_passenger/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +9 -0
  1128. data/lib/phusion_passenger/templates/apache2/config_snippets.txt.erb +13 -0
  1129. data/lib/phusion_passenger/templates/apache2/deployment_example.txt.erb +23 -0
  1130. data/lib/phusion_passenger/templates/apache2/no_write_permission_to_passenger_root.txt.erb +9 -0
  1131. data/lib/phusion_passenger/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  1132. data/lib/phusion_passenger/templates/apache2/run_installer_as_root.txt.erb +8 -0
  1133. data/lib/phusion_passenger/templates/apache2/welcome.txt.erb +15 -0
  1134. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
  1135. data/lib/phusion_passenger/templates/app_init_error.html.erb +64 -0
  1136. data/lib/phusion_passenger/templates/database_error.html.erb +66 -0
  1137. data/lib/phusion_passenger/templates/error_layout.css +97 -0
  1138. data/lib/phusion_passenger/templates/error_layout.html.erb +39 -0
  1139. data/lib/phusion_passenger/templates/framework_init_error.html.erb +39 -0
  1140. data/lib/phusion_passenger/templates/general_error.html.erb +22 -0
  1141. data/lib/phusion_passenger/templates/load_error.html.erb +46 -0
  1142. data/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb +8 -0
  1143. data/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb +11 -0
  1144. data/lib/phusion_passenger/templates/nginx/config_snippets.txt.erb +17 -0
  1145. data/lib/phusion_passenger/templates/nginx/config_snippets_inserted.txt.erb +20 -0
  1146. data/lib/phusion_passenger/templates/nginx/confirm_extra_configure_flags.txt.erb +5 -0
  1147. data/lib/phusion_passenger/templates/nginx/deployment_example.txt.erb +22 -0
  1148. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_downloaded.txt.erb +11 -0
  1149. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_extracted.txt.erb +11 -0
  1150. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  1151. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +20 -0
  1152. data/lib/phusion_passenger/templates/nginx/query_download_and_install.txt.erb +21 -0
  1153. data/lib/phusion_passenger/templates/nginx/run_installer_as_root.txt.erb +8 -0
  1154. data/lib/phusion_passenger/templates/nginx/welcome.txt.erb +15 -0
  1155. data/lib/phusion_passenger/templates/standalone/cannot_write_to_dir.txt.erb +11 -0
  1156. data/lib/phusion_passenger/templates/standalone/config.erb +94 -0
  1157. data/lib/phusion_passenger/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +17 -0
  1158. data/lib/phusion_passenger/templates/standalone/run_installer_as_root.txt.erb +8 -0
  1159. data/lib/phusion_passenger/templates/standalone/welcome.txt.erb +8 -0
  1160. data/lib/phusion_passenger/templates/standalone_default_root/index.html +1 -0
  1161. data/lib/phusion_passenger/templates/version_not_found.html.erb +34 -0
  1162. data/lib/phusion_passenger/utils.rb +1080 -0
  1163. data/lib/phusion_passenger/utils/file_system_watcher.rb +186 -0
  1164. data/lib/phusion_passenger/utils/hosts_file_parser.rb +130 -0
  1165. data/lib/phusion_passenger/utils/rewindable_input.rb +125 -0
  1166. data/lib/phusion_passenger/utils/tmpdir.rb +70 -0
  1167. data/lib/phusion_passenger/utils/unseekable_socket.rb +196 -0
  1168. data/lib/phusion_passenger/wsgi/application_spawner.rb +108 -0
  1169. data/lib/phusion_passenger/wsgi/request_handler.py +199 -0
  1170. data/man/passenger-config.1 +29 -0
  1171. data/man/passenger-make-enterprisey.8 +23 -0
  1172. data/man/passenger-memory-stats.8 +33 -0
  1173. data/man/passenger-status.8 +43 -0
  1174. data/man/passenger-stress-test.1 +43 -0
  1175. data/resources/mime.types +73 -0
  1176. data/resources/union_station_gateway.crt +32 -0
  1177. data/test/config.yml.example +41 -0
  1178. data/test/cxx/ApplicationPool_PoolTest.cpp +33 -0
  1179. data/test/cxx/ApplicationPool_PoolTestCases.cpp +1029 -0
  1180. data/test/cxx/ApplicationPool_ServerTest.cpp +308 -0
  1181. data/test/cxx/ApplicationPool_Server_PoolTest.cpp +80 -0
  1182. data/test/cxx/Base64Test.cpp +50 -0
  1183. data/test/cxx/BufferedIOTest.cpp +364 -0
  1184. data/test/cxx/CachedFileStatTest.cpp +402 -0
  1185. data/test/cxx/CxxTestMain.cpp +122 -0
  1186. data/test/cxx/EventedClientTest.cpp +523 -0
  1187. data/test/cxx/FileChangeCheckerTest.cpp +329 -0
  1188. data/test/cxx/FileDescriptorTest.cpp +69 -0
  1189. data/test/cxx/HttpStatusExtractorTest.cpp +198 -0
  1190. data/test/cxx/IOUtilsTest.cpp +796 -0
  1191. data/test/cxx/LoggingTest.cpp +914 -0
  1192. data/test/cxx/MessageChannelTest.cpp +557 -0
  1193. data/test/cxx/MessageReadersWritersTest.cpp +574 -0
  1194. data/test/cxx/MessageServerTest.cpp +383 -0
  1195. data/test/cxx/PoolOptionsTest.cpp +116 -0
  1196. data/test/cxx/ProcessMetricsCollectorTest.cpp +121 -0
  1197. data/test/cxx/ScgiRequestParserTest.cpp +389 -0
  1198. data/test/cxx/ServerInstanceDirTest.cpp +186 -0
  1199. data/test/cxx/SpawnManagerTest.cpp +161 -0
  1200. data/test/cxx/StaticStringTest.cpp +220 -0
  1201. data/test/cxx/SystemTimeTest.cpp +37 -0
  1202. data/test/cxx/TestSupport.cpp +166 -0
  1203. data/test/cxx/TestSupport.h +254 -0
  1204. data/test/cxx/UtilsTest.cpp +491 -0
  1205. data/test/cxx/VariantMapTest.cpp +179 -0
  1206. data/test/integration_tests/apache2_tests.rb +666 -0
  1207. data/test/integration_tests/cgi_environment_spec.rb +26 -0
  1208. data/test/integration_tests/hello_world_rack_spec.rb +36 -0
  1209. data/test/integration_tests/hello_world_wsgi_spec.rb +41 -0
  1210. data/test/integration_tests/mycook_spec.rb +166 -0
  1211. data/test/integration_tests/nginx_tests.rb +260 -0
  1212. data/test/integration_tests/spec_helper.rb +19 -0
  1213. data/test/oxt/backtrace_test.cpp +88 -0
  1214. data/test/oxt/counter.hpp +55 -0
  1215. data/test/oxt/dynamic_thread_group_test.cpp +131 -0
  1216. data/test/oxt/oxt_test_main.cpp +25 -0
  1217. data/test/oxt/spin_lock_test.cpp +59 -0
  1218. data/test/oxt/syscall_interruption_test.cpp +38 -0
  1219. data/test/ruby/abstract_request_handler_spec.rb +406 -0
  1220. data/test/ruby/abstract_server_collection_spec.rb +247 -0
  1221. data/test/ruby/abstract_server_spec.rb +61 -0
  1222. data/test/ruby/admin_tools_spec.rb +362 -0
  1223. data/test/ruby/analytics_logger_spec.rb +253 -0
  1224. data/test/ruby/app_process_spec.rb +43 -0
  1225. data/test/ruby/classic_rails/application_spawner_spec.rb +89 -0
  1226. data/test/ruby/classic_rails/framework_spawner_spec.rb +92 -0
  1227. data/test/ruby/debug_logging_spec.rb +141 -0
  1228. data/test/ruby/message_channel_spec.rb +196 -0
  1229. data/test/ruby/rack/application_spawner_spec.rb +116 -0
  1230. data/test/ruby/shared/abstract_server_spec.rb +23 -0
  1231. data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +375 -0
  1232. data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +38 -0
  1233. data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +19 -0
  1234. data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +15 -0
  1235. data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +27 -0
  1236. data/test/ruby/shared/spawners/preloading_spawner_spec.rb +29 -0
  1237. data/test/ruby/shared/spawners/reload_all_spec.rb +36 -0
  1238. data/test/ruby/shared/spawners/reload_single_spec.rb +52 -0
  1239. data/test/ruby/shared/spawners/spawn_server_spec.rb +28 -0
  1240. data/test/ruby/shared/spawners/spawner_spec.rb +273 -0
  1241. data/test/ruby/shared/utils/pseudo_io_spec.rb +60 -0
  1242. data/test/ruby/spawn_manager_spec.rb +134 -0
  1243. data/test/ruby/spec_helper.rb +104 -0
  1244. data/test/ruby/utils/file_system_watcher_spec.rb +221 -0
  1245. data/test/ruby/utils/hosts_file_parser.rb +258 -0
  1246. data/test/ruby/utils/unseekable_socket_spec.rb +66 -0
  1247. data/test/ruby/utils_spec.rb +748 -0
  1248. data/test/ruby/wsgi/application_spawner_spec.rb +50 -0
  1249. data/test/stub/apache2/httpd.conf.erb +86 -0
  1250. data/test/stub/apache2/mime.types +748 -0
  1251. data/test/stub/garbage1.dat +0 -0
  1252. data/test/stub/garbage2.dat +0 -0
  1253. data/test/stub/garbage3.dat +0 -0
  1254. data/test/stub/http_request.yml +23 -0
  1255. data/test/stub/message_channel.rb +11 -0
  1256. data/test/stub/message_channel_2.rb +12 -0
  1257. data/test/stub/message_channel_3.rb +19 -0
  1258. data/test/stub/nginx/koi-utf +109 -0
  1259. data/test/stub/nginx/koi-win +103 -0
  1260. data/test/stub/nginx/mime.types +70 -0
  1261. data/test/stub/nginx/nginx.conf.erb +58 -0
  1262. data/test/stub/nginx/win-utf +126 -0
  1263. data/test/stub/rack/config.ru +4 -0
  1264. data/test/stub/rack/public/rack.jpg +0 -0
  1265. data/test/stub/rails_apps/1.2/empty/Rakefile +10 -0
  1266. data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +7 -0
  1267. data/test/stub/rails_apps/1.2/empty/app/helpers/application_helper.rb +3 -0
  1268. data/test/stub/rails_apps/1.2/empty/config/boot.rb +108 -0
  1269. data/test/stub/rails_apps/1.2/empty/config/database.yml +31 -0
  1270. data/test/stub/rails_apps/1.2/empty/config/environment.rb +66 -0
  1271. data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +21 -0
  1272. data/test/stub/rails_apps/1.2/empty/config/environments/production.rb +18 -0
  1273. data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +18 -0
  1274. data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +19 -0
  1275. data/test/stub/rails_apps/1.2/empty/config/routes.rb +23 -0
  1276. data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +2 -0
  1277. data/test/stub/rails_apps/1.2/empty/public/404.html +30 -0
  1278. data/test/stub/rails_apps/1.2/empty/public/500.html +30 -0
  1279. data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +10 -0
  1280. data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +24 -0
  1281. data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +10 -0
  1282. data/test/stub/rails_apps/1.2/empty/public/favicon.ico +0 -0
  1283. data/test/stub/rails_apps/1.2/empty/public/images/rails.png +0 -0
  1284. data/test/stub/rails_apps/1.2/empty/public/robots.txt +1 -0
  1285. data/test/stub/rails_apps/1.2/empty/script/about +3 -0
  1286. data/test/stub/rails_apps/1.2/empty/script/breakpointer +3 -0
  1287. data/test/stub/rails_apps/1.2/empty/script/console +3 -0
  1288. data/test/stub/rails_apps/1.2/empty/script/destroy +3 -0
  1289. data/test/stub/rails_apps/1.2/empty/script/generate +3 -0
  1290. data/test/stub/rails_apps/1.2/empty/script/performance/benchmarker +3 -0
  1291. data/test/stub/rails_apps/1.2/empty/script/performance/profiler +3 -0
  1292. data/test/stub/rails_apps/1.2/empty/script/plugin +3 -0
  1293. data/test/stub/rails_apps/1.2/empty/script/process/inspector +3 -0
  1294. data/test/stub/rails_apps/1.2/empty/script/process/reaper +3 -0
  1295. data/test/stub/rails_apps/1.2/empty/script/process/spawner +3 -0
  1296. data/test/stub/rails_apps/1.2/empty/script/runner +3 -0
  1297. data/test/stub/rails_apps/1.2/empty/script/server +3 -0
  1298. data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +28 -0
  1299. data/test/stub/rails_apps/2.0/empty/Rakefile +10 -0
  1300. data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +10 -0
  1301. data/test/stub/rails_apps/2.0/empty/app/helpers/application_helper.rb +3 -0
  1302. data/test/stub/rails_apps/2.0/empty/config/boot.rb +108 -0
  1303. data/test/stub/rails_apps/2.0/empty/config/database.yml +31 -0
  1304. data/test/stub/rails_apps/2.0/empty/config/environment.rb +59 -0
  1305. data/test/stub/rails_apps/2.0/empty/config/environments/development.rb +18 -0
  1306. data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +18 -0
  1307. data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +18 -0
  1308. data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +22 -0
  1309. data/test/stub/rails_apps/2.0/empty/config/initializers/inflections.rb +10 -0
  1310. data/test/stub/rails_apps/2.0/empty/config/initializers/mime_types.rb +5 -0
  1311. data/test/stub/rails_apps/2.0/empty/config/routes.rb +35 -0
  1312. data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +2 -0
  1313. data/test/stub/rails_apps/2.0/empty/public/404.html +30 -0
  1314. data/test/stub/rails_apps/2.0/empty/public/422.html +30 -0
  1315. data/test/stub/rails_apps/2.0/empty/public/500.html +30 -0
  1316. data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +10 -0
  1317. data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +24 -0
  1318. data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +10 -0
  1319. data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
  1320. data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
  1321. data/test/stub/rails_apps/2.0/empty/public/robots.txt +5 -0
  1322. data/test/stub/rails_apps/2.0/empty/script/about +3 -0
  1323. data/test/stub/rails_apps/2.0/empty/script/console +3 -0
  1324. data/test/stub/rails_apps/2.0/empty/script/destroy +3 -0
  1325. data/test/stub/rails_apps/2.0/empty/script/generate +3 -0
  1326. data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +3 -0
  1327. data/test/stub/rails_apps/2.0/empty/script/performance/profiler +3 -0
  1328. data/test/stub/rails_apps/2.0/empty/script/performance/request +3 -0
  1329. data/test/stub/rails_apps/2.0/empty/script/plugin +3 -0
  1330. data/test/stub/rails_apps/2.0/empty/script/process/inspector +3 -0
  1331. data/test/stub/rails_apps/2.0/empty/script/process/reaper +3 -0
  1332. data/test/stub/rails_apps/2.0/empty/script/process/spawner +3 -0
  1333. data/test/stub/rails_apps/2.0/empty/script/runner +3 -0
  1334. data/test/stub/rails_apps/2.0/empty/script/server +3 -0
  1335. data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +38 -0
  1336. data/test/stub/rails_apps/2.2/empty/Rakefile +10 -0
  1337. data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +15 -0
  1338. data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +3 -0
  1339. data/test/stub/rails_apps/2.2/empty/config/boot.rb +109 -0
  1340. data/test/stub/rails_apps/2.2/empty/config/database.yml +31 -0
  1341. data/test/stub/rails_apps/2.2/empty/config/environment.rb +75 -0
  1342. data/test/stub/rails_apps/2.2/empty/config/environments/development.rb +17 -0
  1343. data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +24 -0
  1344. data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +24 -0
  1345. data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +22 -0
  1346. data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +10 -0
  1347. data/test/stub/rails_apps/2.2/empty/config/initializers/mime_types.rb +5 -0
  1348. data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +17 -0
  1349. data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +5 -0
  1350. data/test/stub/rails_apps/2.2/empty/config/routes.rb +43 -0
  1351. data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +5 -0
  1352. data/test/stub/rails_apps/2.2/empty/public/404.html +30 -0
  1353. data/test/stub/rails_apps/2.2/empty/public/422.html +30 -0
  1354. data/test/stub/rails_apps/2.2/empty/public/500.html +33 -0
  1355. data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +10 -0
  1356. data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +24 -0
  1357. data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +10 -0
  1358. data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
  1359. data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
  1360. data/test/stub/rails_apps/2.2/empty/public/robots.txt +5 -0
  1361. data/test/stub/rails_apps/2.2/empty/script/about +4 -0
  1362. data/test/stub/rails_apps/2.2/empty/script/console +3 -0
  1363. data/test/stub/rails_apps/2.2/empty/script/dbconsole +3 -0
  1364. data/test/stub/rails_apps/2.2/empty/script/destroy +3 -0
  1365. data/test/stub/rails_apps/2.2/empty/script/generate +3 -0
  1366. data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +3 -0
  1367. data/test/stub/rails_apps/2.2/empty/script/performance/profiler +3 -0
  1368. data/test/stub/rails_apps/2.2/empty/script/performance/request +3 -0
  1369. data/test/stub/rails_apps/2.2/empty/script/plugin +3 -0
  1370. data/test/stub/rails_apps/2.2/empty/script/process/inspector +3 -0
  1371. data/test/stub/rails_apps/2.2/empty/script/process/reaper +3 -0
  1372. data/test/stub/rails_apps/2.2/empty/script/process/spawner +3 -0
  1373. data/test/stub/rails_apps/2.2/empty/script/runner +3 -0
  1374. data/test/stub/rails_apps/2.2/empty/script/server +3 -0
  1375. data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +9 -0
  1376. data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +38 -0
  1377. data/test/stub/rails_apps/2.3/empty/Rakefile +10 -0
  1378. data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +10 -0
  1379. data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +3 -0
  1380. data/test/stub/rails_apps/2.3/empty/config/boot.rb +110 -0
  1381. data/test/stub/rails_apps/2.3/empty/config/database.yml +31 -0
  1382. data/test/stub/rails_apps/2.3/empty/config/environment.rb +41 -0
  1383. data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +17 -0
  1384. data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +28 -0
  1385. data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +28 -0
  1386. data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +28 -0
  1387. data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +7 -0
  1388. data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +10 -0
  1389. data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +5 -0
  1390. data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +21 -0
  1391. data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +15 -0
  1392. data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +5 -0
  1393. data/test/stub/rails_apps/2.3/empty/config/routes.rb +43 -0
  1394. data/test/stub/rails_apps/2.3/empty/db/seeds.rb +7 -0
  1395. data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +2 -0
  1396. data/test/stub/rails_apps/2.3/empty/public/404.html +30 -0
  1397. data/test/stub/rails_apps/2.3/empty/public/422.html +30 -0
  1398. data/test/stub/rails_apps/2.3/empty/public/500.html +30 -0
  1399. data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
  1400. data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
  1401. data/test/stub/rails_apps/2.3/empty/public/robots.txt +5 -0
  1402. data/test/stub/rails_apps/2.3/empty/script/about +4 -0
  1403. data/test/stub/rails_apps/2.3/empty/script/console +3 -0
  1404. data/test/stub/rails_apps/2.3/empty/script/dbconsole +3 -0
  1405. data/test/stub/rails_apps/2.3/empty/script/destroy +3 -0
  1406. data/test/stub/rails_apps/2.3/empty/script/generate +3 -0
  1407. data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +3 -0
  1408. data/test/stub/rails_apps/2.3/empty/script/performance/profiler +3 -0
  1409. data/test/stub/rails_apps/2.3/empty/script/plugin +3 -0
  1410. data/test/stub/rails_apps/2.3/empty/script/runner +3 -0
  1411. data/test/stub/rails_apps/2.3/empty/script/server +3 -0
  1412. data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +9 -0
  1413. data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +38 -0
  1414. data/test/stub/rails_apps/2.3/foobar/Rakefile +10 -0
  1415. data/test/stub/rails_apps/2.3/foobar/app/controllers/application_controller.rb +12 -0
  1416. data/test/stub/rails_apps/2.3/foobar/app/controllers/bar_controller_1.rb +5 -0
  1417. data/test/stub/rails_apps/2.3/foobar/app/controllers/bar_controller_2.rb +5 -0
  1418. data/test/stub/rails_apps/2.3/foobar/app/controllers/foo_controller.rb +21 -0
  1419. data/test/stub/rails_apps/2.3/foobar/app/helpers/application_helper.rb +3 -0
  1420. data/test/stub/rails_apps/2.3/foobar/config/boot.rb +110 -0
  1421. data/test/stub/rails_apps/2.3/foobar/config/database.yml +19 -0
  1422. data/test/stub/rails_apps/2.3/foobar/config/environment.rb +59 -0
  1423. data/test/stub/rails_apps/2.3/foobar/config/environments/development.rb +17 -0
  1424. data/test/stub/rails_apps/2.3/foobar/config/environments/production.rb +18 -0
  1425. data/test/stub/rails_apps/2.3/foobar/config/environments/staging.rb +18 -0
  1426. data/test/stub/rails_apps/2.3/foobar/config/initializers/inflections.rb +10 -0
  1427. data/test/stub/rails_apps/2.3/foobar/config/initializers/mime_types.rb +5 -0
  1428. data/test/stub/rails_apps/2.3/foobar/config/routes.rb +35 -0
  1429. data/test/stub/rails_apps/2.3/foobar/script/about +3 -0
  1430. data/test/stub/rails_apps/2.3/foobar/script/console +3 -0
  1431. data/test/stub/rails_apps/2.3/foobar/script/dbconsole +3 -0
  1432. data/test/stub/rails_apps/2.3/foobar/script/destroy +3 -0
  1433. data/test/stub/rails_apps/2.3/foobar/script/generate +3 -0
  1434. data/test/stub/rails_apps/2.3/foobar/script/performance/benchmarker +3 -0
  1435. data/test/stub/rails_apps/2.3/foobar/script/performance/profiler +3 -0
  1436. data/test/stub/rails_apps/2.3/foobar/script/performance/request +3 -0
  1437. data/test/stub/rails_apps/2.3/foobar/script/plugin +3 -0
  1438. data/test/stub/rails_apps/2.3/foobar/script/process/inspector +3 -0
  1439. data/test/stub/rails_apps/2.3/foobar/script/process/reaper +3 -0
  1440. data/test/stub/rails_apps/2.3/foobar/script/process/spawner +3 -0
  1441. data/test/stub/rails_apps/2.3/foobar/script/runner +3 -0
  1442. data/test/stub/rails_apps/2.3/foobar/script/server +3 -0
  1443. data/test/stub/rails_apps/2.3/mycook/Rakefile +10 -0
  1444. data/test/stub/rails_apps/2.3/mycook/app/controllers/application_controller.rb +12 -0
  1445. data/test/stub/rails_apps/2.3/mycook/app/controllers/recipes_controller.rb +5 -0
  1446. data/test/stub/rails_apps/2.3/mycook/app/controllers/uploads_controller.rb +15 -0
  1447. data/test/stub/rails_apps/2.3/mycook/app/controllers/welcome_controller.rb +71 -0
  1448. data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +3 -0
  1449. data/test/stub/rails_apps/2.3/mycook/app/views/layouts/default.rhtml +26 -0
  1450. data/test/stub/rails_apps/2.3/mycook/app/views/recipes/create.rhtml +13 -0
  1451. data/test/stub/rails_apps/2.3/mycook/app/views/recipes/index.rhtml +3 -0
  1452. data/test/stub/rails_apps/2.3/mycook/app/views/recipes/new.rhtml +8 -0
  1453. data/test/stub/rails_apps/2.3/mycook/app/views/uploads/index.rhtml +1 -0
  1454. data/test/stub/rails_apps/2.3/mycook/app/views/uploads/new.html.erb +8 -0
  1455. data/test/stub/rails_apps/2.3/mycook/app/views/welcome/cached.rhtml +1 -0
  1456. data/test/stub/rails_apps/2.3/mycook/app/views/welcome/index.rhtml +20 -0
  1457. data/test/stub/rails_apps/2.3/mycook/config/boot.rb +110 -0
  1458. data/test/stub/rails_apps/2.3/mycook/config/database.yml +19 -0
  1459. data/test/stub/rails_apps/2.3/mycook/config/environment.rb +61 -0
  1460. data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +18 -0
  1461. data/test/stub/rails_apps/2.3/mycook/config/environments/production.rb +19 -0
  1462. data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +10 -0
  1463. data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +5 -0
  1464. data/test/stub/rails_apps/2.3/mycook/config/routes.rb +38 -0
  1465. data/test/stub/rails_apps/2.3/mycook/log/useless.txt +1 -0
  1466. data/test/stub/rails_apps/2.3/mycook/public/404.html +30 -0
  1467. data/test/stub/rails_apps/2.3/mycook/public/422.html +30 -0
  1468. data/test/stub/rails_apps/2.3/mycook/public/500.html +30 -0
  1469. data/test/stub/rails_apps/2.3/mycook/public/dispatch.cgi +10 -0
  1470. data/test/stub/rails_apps/2.3/mycook/public/dispatch.fcgi +24 -0
  1471. data/test/stub/rails_apps/2.3/mycook/public/dispatch.rb +10 -0
  1472. data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
  1473. data/test/stub/rails_apps/2.3/mycook/public/images/angrywizard.gif +0 -0
  1474. data/test/stub/rails_apps/2.3/mycook/public/images/cookbook.gif +0 -0
  1475. data/test/stub/rails_apps/2.3/mycook/public/images/header.png +0 -0
  1476. data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
  1477. data/test/stub/rails_apps/2.3/mycook/public/javascripts/application.js +2 -0
  1478. data/test/stub/rails_apps/2.3/mycook/public/javascripts/controls.js +963 -0
  1479. data/test/stub/rails_apps/2.3/mycook/public/javascripts/dragdrop.js +973 -0
  1480. data/test/stub/rails_apps/2.3/mycook/public/javascripts/effects.js +1128 -0
  1481. data/test/stub/rails_apps/2.3/mycook/public/javascripts/prototype.js +4320 -0
  1482. data/test/stub/rails_apps/2.3/mycook/public/robots.txt +5 -0
  1483. data/test/stub/rails_apps/2.3/mycook/public/uploads.html +26 -0
  1484. data/test/stub/rails_apps/2.3/mycook/public/welcome/cached.html +26 -0
  1485. data/test/stub/rails_apps/2.3/mycook/script/about +3 -0
  1486. data/test/stub/rails_apps/2.3/mycook/script/console +3 -0
  1487. data/test/stub/rails_apps/2.3/mycook/script/dbconsole +3 -0
  1488. data/test/stub/rails_apps/2.3/mycook/script/destroy +3 -0
  1489. data/test/stub/rails_apps/2.3/mycook/script/generate +3 -0
  1490. data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +3 -0
  1491. data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +3 -0
  1492. data/test/stub/rails_apps/2.3/mycook/script/performance/request +3 -0
  1493. data/test/stub/rails_apps/2.3/mycook/script/plugin +3 -0
  1494. data/test/stub/rails_apps/2.3/mycook/script/process/inspector +3 -0
  1495. data/test/stub/rails_apps/2.3/mycook/script/process/reaper +3 -0
  1496. data/test/stub/rails_apps/2.3/mycook/script/process/spawner +3 -0
  1497. data/test/stub/rails_apps/2.3/mycook/script/runner +3 -0
  1498. data/test/stub/rails_apps/2.3/mycook/script/server +3 -0
  1499. data/test/stub/rails_apps/2.3/mycook/sites/some.site/public/uploads.html +26 -0
  1500. data/test/stub/rails_apps/2.3/mycook/sites/some.site/public/welcome/cached.html +26 -0
  1501. data/test/stub/rails_apps/2.3/mycook/tmp/cache/useless.txt +1 -0
  1502. data/test/stub/rails_apps/2.3/mycook/tmp/pids/useless.txt +1 -0
  1503. data/test/stub/rails_apps/2.3/mycook/tmp/sessions/useless.txt +1 -0
  1504. data/test/stub/rails_apps/2.3/mycook/tmp/sockets/useless.txt +1 -0
  1505. data/test/stub/rails_apps/3.0/empty/Gemfile +22 -0
  1506. data/test/stub/rails_apps/3.0/empty/Gemfile.lock +73 -0
  1507. data/test/stub/rails_apps/3.0/empty/Rakefile +10 -0
  1508. data/test/stub/rails_apps/3.0/empty/app/controllers/application_controller.rb +4 -0
  1509. data/test/stub/rails_apps/3.0/empty/app/helpers/application_helper.rb +2 -0
  1510. data/test/stub/rails_apps/3.0/empty/app/views/layouts/application.html.erb +14 -0
  1511. data/test/stub/rails_apps/3.0/empty/config.ru +4 -0
  1512. data/test/stub/rails_apps/3.0/empty/config/application.rb +48 -0
  1513. data/test/stub/rails_apps/3.0/empty/config/boot.rb +13 -0
  1514. data/test/stub/rails_apps/3.0/empty/config/database.yml +22 -0
  1515. data/test/stub/rails_apps/3.0/empty/config/environment.rb +5 -0
  1516. data/test/stub/rails_apps/3.0/empty/config/environments/development.rb +19 -0
  1517. data/test/stub/rails_apps/3.0/empty/config/environments/production.rb +48 -0
  1518. data/test/stub/rails_apps/3.0/empty/config/environments/test.rb +32 -0
  1519. data/test/stub/rails_apps/3.0/empty/config/initializers/backtrace_silencers.rb +7 -0
  1520. data/test/stub/rails_apps/3.0/empty/config/initializers/inflections.rb +10 -0
  1521. data/test/stub/rails_apps/3.0/empty/config/initializers/mime_types.rb +5 -0
  1522. data/test/stub/rails_apps/3.0/empty/config/initializers/passenger.rb +1 -0
  1523. data/test/stub/rails_apps/3.0/empty/config/initializers/secret_token.rb +7 -0
  1524. data/test/stub/rails_apps/3.0/empty/config/initializers/session_store.rb +8 -0
  1525. data/test/stub/rails_apps/3.0/empty/config/locales/en.yml +5 -0
  1526. data/test/stub/rails_apps/3.0/empty/config/routes.rb +58 -0
  1527. data/test/stub/rails_apps/3.0/empty/db/seeds.rb +7 -0
  1528. data/test/stub/rails_apps/3.0/empty/doc/README_FOR_APP +2 -0
  1529. data/test/stub/rails_apps/3.0/empty/public/404.html +26 -0
  1530. data/test/stub/rails_apps/3.0/empty/public/422.html +26 -0
  1531. data/test/stub/rails_apps/3.0/empty/public/500.html +26 -0
  1532. data/test/stub/rails_apps/3.0/empty/public/favicon.ico +0 -0
  1533. data/test/stub/rails_apps/3.0/empty/public/index.html +279 -0
  1534. data/test/stub/rails_apps/3.0/empty/public/robots.txt +5 -0
  1535. data/test/stub/rails_apps/3.0/empty/script/rails +9 -0
  1536. data/test/stub/rails_apps/3.0/empty/test/performance/browsing_test.rb +9 -0
  1537. data/test/stub/rails_apps/3.0/empty/test/test_helper.rb +13 -0
  1538. data/test/stub/spawn_server.rb +22 -0
  1539. data/test/stub/upload_data.txt +494 -0
  1540. data/test/stub/vendor_rails/minimal/README +1 -0
  1541. data/test/stub/vendor_rails/minimal/actionmailer/lib/action_mailer.rb +0 -0
  1542. data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +22 -0
  1543. data/test/stub/vendor_rails/minimal/actionpack/lib/action_pack.rb +0 -0
  1544. data/test/stub/vendor_rails/minimal/actionpack/lib/action_view.rb +0 -0
  1545. data/test/stub/vendor_rails/minimal/activerecord/lib/active_record.rb +7 -0
  1546. data/test/stub/vendor_rails/minimal/activeresource/lib/active_resource.rb +0 -0
  1547. data/test/stub/vendor_rails/minimal/activesupport/lib/active_support.rb +17 -0
  1548. data/test/stub/vendor_rails/minimal/activesupport/lib/active_support/whiny_nil.rb +0 -0
  1549. data/test/stub/vendor_rails/minimal/railties/lib/dispatcher.rb +0 -0
  1550. data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +57 -0
  1551. data/test/stub/vendor_rails/minimal/railties/lib/ruby_version_check.rb +1 -0
  1552. data/test/stub/wsgi/passenger_wsgi.py +3 -0
  1553. data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
  1554. data/test/stub/zsfa/header.png +0 -0
  1555. data/test/stub/zsfa/index.html +14 -0
  1556. data/test/stub/zsfa/zsfa.png +0 -0
  1557. data/test/support/allocate_memory.c +14 -0
  1558. data/test/support/apache2_controller.rb +258 -0
  1559. data/test/support/multipart.rb +62 -0
  1560. data/test/support/nginx_controller.rb +99 -0
  1561. data/test/support/test_helper.rb +448 -0
  1562. data/test/support/valgrind.h +2539 -0
  1563. data/test/tut/tut.h +1240 -0
  1564. data/test/tut/tut_reporter.h +256 -0
  1565. metadata +1703 -0
@@ -0,0 +1,29 @@
1
+ .TH "passenger-config" "1" "2.0" "Phusion Passenger" "User Commands"
2
+ .SH "NAME"
3
+ .LP
4
+ passenger\-config \- Show configuration settings for Phusion Passenger
5
+ .SH "SYNOPSIS"
6
+ .LP
7
+ \fBpassenger\-config\fR \fI\-\-root\fR | \fI\-\-version\fR
8
+ .SH "DESCRIPTION"
9
+ .LP
10
+ \fBpassenger\-config\fR shows the current configuration settings for Phusion Passenger. You need to select one of the following options.
11
+ .SH "OPTIONS"
12
+ .TP
13
+ \fB\-\-root\fR
14
+ Shows the Phusion Passenger root directory
15
+ .TP
16
+ \fB\-\-version\fR
17
+ Shows the current Phusion Passenger version number
18
+ .SH "SEE ALSO"
19
+ .LP
20
+ passenger\-memory\-stats(1), passenger\-stress\-test(1), passenger\-status(8)
21
+ .LP
22
+ User guide at http://www.modrails.com/documentation.html
23
+ .SH "AUTHOR"
24
+ .LP
25
+ Phusion Passenger is written by Phusion (http://www.phusion.nl)
26
+ .LP
27
+ "Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
28
+ .LP
29
+ This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
@@ -0,0 +1,23 @@
1
+ .TH "passenger-make-enterprisey" "8" "2.0" "Phusion Passenger" "Adminstration Commands"
2
+ .SH "NAME"
3
+ .LP
4
+ passenger\-make-enterprisey \- activate your Phusion passenger enterprise licence
5
+ .SH "SYNOPSIS"
6
+ .LP
7
+ \fBpassenger\-make\-enterprisey
8
+ .SH "DESCRIPTION"
9
+ .LP
10
+ \fBpassenger\-make\-enterprisey\fR changes your ordinary everyday version of Phusion Passenger into a special enterprise version just as soon as you type in your licence key.
11
+ .LP
12
+ As everybody working at enterprise level knows, enterprise software is so much better in every possible way. So make sure you pick up your licence key today.
13
+ .SH "SEE ALSO"
14
+ Phusion Passenger Enterprise Programme (http://www.modrails.com/enterprise.html)
15
+ .SH "AUTHOR"
16
+ .LP
17
+ Phusion Passenger is written by Phusion (http://www.phusion.nl)
18
+ .LP
19
+ "Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
20
+ .LP
21
+ This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
22
+ .SH "CAVEATS"
23
+ Whatever you do don't look at the source code.
@@ -0,0 +1,33 @@
1
+ .TH "passenger-memory-stats" "8" "2.0" "Phusion Passenger" "Administration Commands"
2
+ .SH "NAME"
3
+ .LP
4
+ passenger\-memory\-stats \- reports a snapshot of the Apache and Phusion Passenger memory statistcs
5
+ .SH "SYNOPSIS"
6
+ .LP
7
+ \fBpassenger\-memory\-stats\fR
8
+ .SH "DESCRIPTION"
9
+ .LP
10
+ \fBpassenger\-memory\-stats\fR allows you to easily analyze the real memory usage of Phusion Passenger and Apache.
11
+ .LP
12
+ Process inspection tools such as \fIps\fR and \fItop\fR are useful, but they rarely show the correct memory usage. The real memory usage is usually lower than what \fIps\fR and \fItop\fR report.
13
+ .LP
14
+ There are many technical reasons why this is so, but an explanation is beyond the scope of this page. We refer the interested reader to operating systems literature about virtual memory and copy\-on\-write.
15
+ .LP
16
+ When you run this tool the \fIPrivate\fR or \fIprivate dirty RSS\fR field shows the real memory usage of processes.
17
+ .SH "ENVIRONMENT VARIABLES"
18
+ .LP
19
+ .TP
20
+ \fBHTTPD\fR
21
+ The full filename to the Apache executable. By default, Passenger will attempt to autodetect the Apache executable. If autodetection fails for whatever reason, then Apache processes will not be shown in the memory statistics. In that case, you may manually specify the location to the Apache executable using this environment variable.
22
+ .SH "SEE ALSO"
23
+ .LP
24
+ passenger\-status(8), ps(1), top(1),
25
+ .LP
26
+ User guide at http://www.modrails.com/documentation.html
27
+ .SH "AUTHOR"
28
+ .LP
29
+ Phusion Passenger is written by Phusion (http://www.phusion.nl)
30
+ .LP
31
+ "Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
32
+ .LP
33
+ This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
@@ -0,0 +1,43 @@
1
+ .TH "passenger-status" "8" "2.0" "Phusion Passenger" "Adminstration Commands"
2
+ .SH "NAME"
3
+ .LP
4
+ passenger\-status \- inspect Phusion Passenger's internal status
5
+ .SH "SYNOPSIS"
6
+ .LP
7
+ \fBpassenger\-status\fR [\fIpid\fR]
8
+ .SH "DESCRIPTION"
9
+ .LP
10
+ \fBpassenger\-status\fR looks at the current status of a Phusion Passenger installation. It will locate Phusion Passenger automatically if it is running and will give you a list of instances if there is more than one Phusion Passenger instance running. You can then select the instance by specifying the relevant PID on the command line.
11
+ .LP
12
+ The \fIgeneral information\fR section shows the following details:
13
+ .TP
14
+ max
15
+ The maximum number of application instances that Phusion Passenger will spawn. This equals the value given for \fIPassengerMaxPoolSize\fR in the configuration.
16
+ .TP
17
+ count
18
+ The number of application instances that are currently alive. This value is always less than or equal to \fImax\fR.
19
+ .TP
20
+ active
21
+ The number of application instances that are currently processing requests. This value is always less than or equal to \fIcount\fR.
22
+ .TP
23
+ inactive
24
+ The number of application instances that are currently not processing requests, i.e. are idle. Idle application instances will be shutdown after a while, as can be specified with \fIPassengerPoolIdleTime\fR in the configuration. The value of \fIinactive\fR equals \fIcount\fR \- \fIactive\fR.
25
+ .LP
26
+ The \fIapplications\fR section shows each application instance, which directory it belongs to. The \fIsessions\fR field shows how many HTTP client are currently being processed by that application instance.
27
+ .SH "OPTIONS"
28
+ .LP
29
+ .TP
30
+ \fBpid\fR
31
+ The process ID of the Phusion Passenger instance you want to look at
32
+ .SH "SEE ALSO"
33
+ .LP
34
+ passenger\-memory\-stats(8), ps(1), top(1)
35
+ .LP
36
+ User guide at http://www.modrails.com/documentation.html
37
+ .SH "AUTHOR"
38
+ .LP
39
+ Phusion Passenger is written by Phusion (http://www.phusion.nl)
40
+ .LP
41
+ "Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
42
+ .LP
43
+ This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
@@ -0,0 +1,43 @@
1
+ .TH "passenger-stress-test" "1" "2.0" "Phusion Passenger" "User Commands"
2
+ .SH "NAME"
3
+ .LP
4
+ passenger\-stress\-test \- stress tests a Phusion Passenger powered website.
5
+ .SH "SYNOPSIS"
6
+ .LP
7
+ \fBpassenger\-stress\-test\fR <\fIhostname\fR> <\fIapp_roo\fRt> [\fIoptions\fR]
8
+ .SH "DESCRIPTION"
9
+ .LP
10
+ Stress test the given (Phusion Passenger\-powered) website by
11
+ .LP
12
+ \- crawling it with multiple concurrently running crawlers.
13
+ .LP
14
+ \- gracefully restarting Apache at random times
15
+ .LP
16
+ \- restarting the target (Phusion Passenger\-powered) application at random times
17
+ .SH "OPTIONS"
18
+ .LP
19
+ .TP
20
+ \fB\-c, \-\-concurrency\fR <\fInumber\fR>
21
+ Number of crawlers to start (default = 20)
22
+ .TP
23
+ \fB\-p, \-\-apache\-restart\-interval\fR <\fIinterval\fR>
24
+ Gracefully restart Apache after <\fIinterval\fR> minutes (default = 1440)
25
+ .TP
26
+ \fB\-a, \-\-app\-restart\-interval\fR <\fIinterval\fR>
27
+ Restart the application after <\fIinterval\fR> minutes (default = 55)
28
+ .TP
29
+ \fB\-h, \-\-help\fR
30
+ Output help information and exit.
31
+
32
+ .SH "SEE ALSO"
33
+ .LP
34
+ passenger\-config(1), passenger\-memory\-stats(8), passenger\-status(8)
35
+ .LP
36
+ User guide at http://www.modrails.com/documentation.html
37
+ .SH "AUTHOR"
38
+ .LP
39
+ Phusion Passenger is written by Phusion (http://www.phusion.nl)
40
+ .LP
41
+ "Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
42
+ .LP
43
+ This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
@@ -0,0 +1,73 @@
1
+
2
+ types {
3
+ text/html html htm shtml;
4
+ text/css css;
5
+ text/xml xml;
6
+ image/gif gif;
7
+ image/jpeg jpeg jpg;
8
+ application/x-javascript js;
9
+ application/atom+xml atom;
10
+ application/rss+xml rss;
11
+
12
+ text/mathml mml;
13
+ text/plain txt;
14
+ text/vnd.sun.j2me.app-descriptor jad;
15
+ text/vnd.wap.wml wml;
16
+ text/x-component htc;
17
+
18
+ image/png png;
19
+ image/tiff tif tiff;
20
+ image/vnd.wap.wbmp wbmp;
21
+ image/x-icon ico;
22
+ image/x-jng jng;
23
+ image/x-ms-bmp bmp;
24
+ image/svg+xml svg;
25
+
26
+ application/java-archive jar war ear;
27
+ application/mac-binhex40 hqx;
28
+ application/msword doc;
29
+ application/pdf pdf;
30
+ application/postscript ps eps ai;
31
+ application/rtf rtf;
32
+ application/vnd.ms-excel xls;
33
+ application/vnd.ms-powerpoint ppt;
34
+ application/vnd.wap.wmlc wmlc;
35
+ application/vnd.wap.xhtml+xml xhtml;
36
+ application/vnd.google-earth.kml+xml kml;
37
+ application/vnd.google-earth.kmz kmz;
38
+ application/x-cocoa cco;
39
+ application/x-java-archive-diff jardiff;
40
+ application/x-java-jnlp-file jnlp;
41
+ application/x-makeself run;
42
+ application/x-perl pl pm;
43
+ application/x-pilot prc pdb;
44
+ application/x-rar-compressed rar;
45
+ application/x-redhat-package-manager rpm;
46
+ application/x-sea sea;
47
+ application/x-shockwave-flash swf;
48
+ application/x-stuffit sit;
49
+ application/x-tcl tcl tk;
50
+ application/x-x509-ca-cert der pem crt;
51
+ application/x-xpinstall xpi;
52
+ application/zip zip;
53
+
54
+ application/octet-stream bin exe dll;
55
+ application/octet-stream deb;
56
+ application/octet-stream dmg;
57
+ application/octet-stream eot;
58
+ application/octet-stream iso img;
59
+ application/octet-stream msi msp msm;
60
+
61
+ audio/midi mid midi kar;
62
+ audio/mpeg mp3;
63
+ audio/x-realaudio ra;
64
+
65
+ video/3gpp 3gpp 3gp;
66
+ video/mpeg mpeg mpg;
67
+ video/quicktime mov;
68
+ video/x-flv flv;
69
+ video/x-mng mng;
70
+ video/x-ms-asf asx asf;
71
+ video/x-ms-wmv wmv;
72
+ video/x-msvideo avi;
73
+ }
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFbjCCA1YCCQCd2BBmpGM9zDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJO
3
+ TDESMBAGA1UECBMJTmVkZXJsYW5kMRAwDgYDVQQKEwdQaHVzaW9uMSQwIgYDVQQD
4
+ ExtnYXRld2F5LnVuaW9uc3RhdGlvbmFwcC5jb20xHjAcBgkqhkiG9w0BCQEWD2lu
5
+ Zm9AcGh1c2lvbi5ubDAeFw0xMDA4MDkwOTU2MzVaFw0zNzEyMjQwOTU2MzVaMHkx
6
+ CzAJBgNVBAYTAk5MMRIwEAYDVQQIEwlOZWRlcmxhbmQxEDAOBgNVBAoTB1BodXNp
7
+ b24xJDAiBgNVBAMTG2dhdGV3YXkudW5pb25zdGF0aW9uYXBwLmNvbTEeMBwGCSqG
8
+ SIb3DQEJARYPaW5mb0BwaHVzaW9uLm5sMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
9
+ MIICCgKCAgEAvUjNLupLtz8IIQINJ1XaLmR+ttTOvrGx/Y++BggI3LqAHwMsWjG4
10
+ KIFhIpLfURViotthfbIYin3sPhC3WwvMfIoxezjAOnsXVcYB8ynxopu8WM4QSYLC
11
+ 64uAKyYlaHckxmppqGCBHtA+hHBLEDM/GO8hyJUn+Tjf0LEoranpfTLnZex9eMEo
12
+ Ggx08saKZ6A2JLQbMEPOf62DQciwI8ToK8eV1WSrg6O7fVuLe9YPXVeqT3hFGhYX
13
+ UXEFBFQs8EZDtEZvNCGyD3W3wnanQL/IGTm5BAiVVJoXnvXZoHMgX8ar2xQk1+t6
14
+ Wvd0nMF/3tWVPW3mQTDYErRpXx7m+ySwYp72yidk7IlFkFW/OIJIiHLMUnwlu9fv
15
+ PWlmNLVuubR5eu1/8Qb3hVPlqYFS/2nQRs4bYoO3r0enGY9V7deWtEeUuDlY5Y5C
16
+ Bf/bSf0Kt6vSt0Y9obu2xQDIwl6OBnIXpuxSSVinh+31ECymolUFUbWEuEqkRKPY
17
+ 6UYjyex6az2dIMnrr9WF1lfT+GTq4rZa4wmymT00sVofceI/TPFoglhkq93rnLix
18
+ TdUMnrywk3JUpGj1fsOI+PzGReUaJfR+4Gbau5Kab3ZKURQnY6toCQafaSGYJnO8
19
+ rdpWbhJOTLO82K71W7+Dqw4bzpWyU2PJAiEO5w6mD3G/es+iAPrt64ECAwEAATAN
20
+ BgkqhkiG9w0BAQUFAAOCAgEAQ2lkVAHv5SjCTeuKl93wSanxLL8zrvyh2DVYQc/b
21
+ v/PSCL3Afoidlvjc1qVCB93WfIHTPGG/xOI0EVi8W96Zg9D6P8Kjc79Vfs6MM8h/
22
+ vuHh4pS/PFTzmFd9nRI26iWMZl2DMQnXflSNJbxqWr0AtGZTnT9w/MR+2Kxu74AD
23
+ E0r3P11WoYpfWVc6SiEBJ9WnMlSoAT+xShIiXAsLuzoXQOMGfg5M3JIsXwQZtRGN
24
+ n58bq+prHroI1cU96xbmCw0fRgLuJYhdoU3uWE7usSutYaW7LT4T2oGR5x2ZPzy/
25
+ vr7jX8AbUJDWK3FbZ0//Zpkt9ldF60NJ/l42U6F5frQ+FSCDTX1k32RcG1vRIfM5
26
+ TZgBgT0D3AJoNPbNaEGWsBrxG3wZGxxvnamPM0S01WmxwL2PNM1UnUKG+y/ALfoc
27
+ JJeXyuY3HFt3DyYE4odyPOHye/fP1qLl1ZrJIzyAT0pUo38UB8uQ4HZUWD/LljJm
28
+ V0fUFWKWk6OawwIM4sYc90WezYgDfAT1RUDy0TnvKlG4FC1Oodnnm2rQFu+zDOWH
29
+ Fj0lBkzVUOlt2nWhLIW/uN3bjM9TsXaw8qUGWhvn4z3FHGHEdnLy3wMzwCSVq1tg
30
+ QilKaQe+8Y4SePo110Tmkfls6vyEhcN6KpRWdpQSXUXmMY7IxjfNJnKTeGvWd1Y9
31
+ CaY=
32
+ -----END CERTIFICATE-----
@@ -0,0 +1,41 @@
1
+ ### This file contains system-specific configuration options that the test suite needs.
2
+ ### Please customize it for your system.
3
+
4
+ # These are the usernames and group names of normal, non-administrator
5
+ # users and groups. Preferably, these are user and group accounts that
6
+ # are normally not used.
7
+ #
8
+ # These users and groups MUST be able to access this 'test' directory,
9
+ # otherwise the tests will fail.
10
+
11
+ ### Good values for Linux and FreeBSD:
12
+ normal_user_1: games
13
+ normal_user_2: daemon
14
+ # Must not be "nobody".
15
+ default_user: man
16
+ # Must not be normal_user_1's primary group.
17
+ normal_group_1: daemon
18
+ # Must not be normal_user_2's primary group.
19
+ normal_group_2: man
20
+ # Must not be default_user's primary group. Must not be "nobody".
21
+ default_group: games
22
+
23
+ ### Good values for OS X. Same restrictions apply.
24
+ # normal_user_1: _www
25
+ # normal_user_2: daemon
26
+ # default_user: _sandbox
27
+ # normal_group_1: daemon
28
+ # normal_group_2: _sandbox
29
+ # default_group: _www
30
+
31
+ # A nonexistant username, group name, user ID and group ID.
32
+ nonexistant_user: xxxxxxxxxxxxxxxxxxx
33
+ nonexistant_group: xxxxxxxxxxxxxxxxxxx
34
+ nonexistant_uid: 9999
35
+ nonexistant_gid: 9999
36
+
37
+
38
+ # If you want to run the Nginx integration tests, then set the following
39
+ # config option to the full path of the Nginx binary. This Nginx binary *must*
40
+ # be compiled with Phusion Passenger support!
41
+ # nginx: /usr/local/sbin/nginx
@@ -0,0 +1,33 @@
1
+ #include "TestSupport.h"
2
+ #include "ApplicationPool/Pool.h"
3
+ #include "Utils.h"
4
+
5
+ using namespace Passenger;
6
+
7
+ namespace tut {
8
+ struct ApplicationPool_PoolTest {
9
+ ServerInstanceDirPtr serverInstanceDir;
10
+ ServerInstanceDir::GenerationPtr generation;
11
+ ApplicationPool::Ptr pool, pool2;
12
+
13
+ ApplicationPool_PoolTest() {
14
+ createServerInstanceDirAndGeneration(serverInstanceDir, generation);
15
+ pool = ptr(new ApplicationPool::Pool("../helper-scripts/passenger-spawn-server", generation));
16
+ pool2 = pool;
17
+ }
18
+
19
+ ApplicationPool::Ptr newPoolConnection() {
20
+ return pool;
21
+ }
22
+
23
+ void reinitializeWithSpawnManager(AbstractSpawnManagerPtr spawnManager) {
24
+ pool = ptr(new ApplicationPool::Pool(spawnManager));
25
+ pool2 = pool;
26
+ }
27
+ };
28
+
29
+ DEFINE_TEST_GROUP(ApplicationPool_PoolTest);
30
+
31
+ #define USE_TEMPLATE
32
+ #include "ApplicationPool_PoolTestCases.cpp"
33
+ }
@@ -0,0 +1,1029 @@
1
+ #include <sys/types.h>
2
+ #include <sys/stat.h>
3
+ #include <unistd.h>
4
+ #include <cstring>
5
+ #include <cstdlib>
6
+ #include <cerrno>
7
+ #include <sys/types.h>
8
+ #include <signal.h>
9
+ #include <utime.h>
10
+
11
+ /**
12
+ * This file is used as a template to test the different ApplicationPool::Interface implementations.
13
+ * It is #included in ApplicationPool_PoolTest.cpp and ApplicationPool_Server_PoolTest.cpp
14
+ */
15
+ #ifdef USE_TEMPLATE
16
+ static void sendTestRequest(SessionPtr &session, const char *uri = "/foo/new") {
17
+ string headers;
18
+ #define ADD_HEADER(name, value) \
19
+ headers.append(name); \
20
+ headers.append(1, '\0'); \
21
+ headers.append(value); \
22
+ headers.append(1, '\0')
23
+ ADD_HEADER("HTTP_HOST", "www.test.com");
24
+ ADD_HEADER("QUERY_STRING", "");
25
+ ADD_HEADER("REQUEST_URI", uri);
26
+ ADD_HEADER("REQUEST_METHOD", "GET");
27
+ ADD_HEADER("REMOTE_ADDR", "localhost");
28
+ ADD_HEADER("SCRIPT_NAME", "");
29
+ ADD_HEADER("PATH_INFO", uri);
30
+ ADD_HEADER("PASSENGER_CONNECT_PASSWORD", session->getConnectPassword());
31
+ session->sendHeaders(headers);
32
+ }
33
+
34
+ static SessionPtr spawnRackApp(ApplicationPool::Ptr pool, const char *appRoot) {
35
+ PoolOptions options;
36
+ options.appRoot = appRoot;
37
+ options.appType = "rack";
38
+ return pool->get(options);
39
+ }
40
+
41
+ static SessionPtr spawnWsgiApp(ApplicationPool::Ptr pool, const char *appRoot) {
42
+ PoolOptions options;
43
+ options.appRoot = appRoot;
44
+ options.appType = "wsgi";
45
+ return pool->get(options);
46
+ }
47
+
48
+ namespace {
49
+ class ReloadLoggingSpawnManager: public SpawnManager {
50
+ public:
51
+ vector<string> reloadLog;
52
+
53
+ ReloadLoggingSpawnManager(const string &spawnServerCommand,
54
+ const ServerInstanceDir::GenerationPtr &generation,
55
+ const AccountsDatabasePtr &accountsDatabase = AccountsDatabasePtr(),
56
+ const string &rubyCommand = "ruby")
57
+ : SpawnManager(spawnServerCommand, generation, accountsDatabase, rubyCommand)
58
+ { }
59
+
60
+ virtual void reload(const string &appRoot) {
61
+ reloadLog.push_back(appRoot);
62
+ SpawnManager::reload(appRoot);
63
+ }
64
+ };
65
+
66
+ struct SpawnRackAppFunction {
67
+ ApplicationPool::Ptr pool;
68
+ bool *done;
69
+ SessionPtr *session;
70
+
71
+ SpawnRackAppFunction() {
72
+ done = NULL;
73
+ session = NULL;
74
+ }
75
+
76
+ void operator()() {
77
+ PoolOptions options;
78
+ options.appRoot = "stub/rack";
79
+ options.appType = "rack";
80
+ options.useGlobalQueue = true;
81
+ SessionPtr session = pool->get(options);
82
+ *done = true;
83
+ if (this->session != NULL) {
84
+ *this->session = session;
85
+ }
86
+ }
87
+ };
88
+ }
89
+
90
+ TEST_METHOD(1) {
91
+ // Calling ApplicationPool.get() once should return a valid Session.
92
+ SessionPtr session(spawnRackApp(pool, "stub/rack"));
93
+ sendTestRequest(session);
94
+ session->shutdownWriter();
95
+
96
+ int reader = session->getStream();
97
+ string result(readAll(reader));
98
+ session->closeStream();
99
+ ensure(result.find("hello <b>world</b>") != string::npos);
100
+ }
101
+
102
+ TEST_METHOD(2) {
103
+ // Verify that the pool spawns a new app, and that
104
+ // after the session is closed, the app is kept around.
105
+ SessionPtr session(spawnRackApp(pool, "stub/rack"));
106
+ ensure_equals("Before the session was closed, the app was busy", pool->getActive(), 1u);
107
+ ensure_equals("Before the session was closed, the app was in the pool", pool->getCount(), 1u);
108
+ session.reset();
109
+ ensure_equals("After the session is closed, the app is no longer busy", pool->getActive(), 0u);
110
+ ensure_equals("After the session is closed, the app is kept around", pool->getCount(), 1u);
111
+ }
112
+
113
+ TEST_METHOD(3) {
114
+ // If we call get() with an application root, then we close the session,
115
+ // and then we call get() again with the same app group name,
116
+ // then the pool should not have spawned more than 1 app in total.
117
+ SessionPtr session(spawnRackApp(pool, "stub/rack"));
118
+ session.reset();
119
+ session = spawnRackApp(pool, "stub/rack");
120
+ ensure_equals(pool->getCount(), 1u);
121
+ }
122
+
123
+ TEST_METHOD(4) {
124
+ // If we call get() with an app group name, then we call get() again before closing
125
+ // the session, then the pool will eventually have spawned 2 apps in total.
126
+ SessionPtr session(spawnRackApp(pool, "stub/rack"));
127
+ SessionPtr session2(spawnRackApp(pool2, "stub/rack"));
128
+ EVENTUALLY(5,
129
+ result = pool->getCount() == 2u;
130
+ );
131
+ }
132
+
133
+ TEST_METHOD(5) {
134
+ // If we call get() twice with different app group names,
135
+ // then the pool should spawn two different apps.
136
+ TempDirCopy c1("stub/rack", "rackapp1.tmp");
137
+ TempDirCopy c2("stub/rack", "rackapp2.tmp");
138
+ replaceStringInFile("rackapp2.tmp/config.ru", "world", "world 2");
139
+ SessionPtr session = spawnRackApp(pool, "rackapp1.tmp");
140
+ SessionPtr session2 = spawnRackApp(pool2, "rackapp2.tmp");
141
+ ensure_equals("Before the sessions were closed, both apps were busy", pool->getActive(), 2u);
142
+ ensure_equals("Before the sessions were closed, both apps were in the pool", pool->getCount(), 2u);
143
+
144
+ sendTestRequest(session);
145
+ string result = readAll(session->getStream());
146
+ ensure("Session 1 belongs to the correct app", result.find("hello <b>world</b>") != string::npos);
147
+ session.reset();
148
+
149
+ sendTestRequest(session2);
150
+ result = readAll(session2->getStream());
151
+ ensure("Session 2 belongs to the correct app", result.find("hello <b>world 2</b>") != string::npos);
152
+ session2.reset();
153
+ }
154
+
155
+ TEST_METHOD(6) {
156
+ // If we call get() twice with different app group names,
157
+ // and we close both sessions, then both 2 apps should still
158
+ // be in the pool.
159
+ TempDirCopy c1("stub/rack", "rackapp1.tmp");
160
+ TempDirCopy c2("stub/rack", "rackapp2.tmp");
161
+ SessionPtr session(spawnRackApp(pool, "rackapp1.tmp"));
162
+ SessionPtr session2(spawnRackApp(pool, "rackapp2.tmp"));
163
+ session.reset();
164
+ session2.reset();
165
+ ensure_equals("There are 0 active apps", pool->getActive(), 0u);
166
+ ensure_equals("There are 2 apps in total", pool->getCount(), 2u);
167
+ }
168
+
169
+ TEST_METHOD(7) {
170
+ // If we call get() even though the pool is already full
171
+ // (active == max), and the app group name is already
172
+ // in the pool, then the pool must wait until there's an
173
+ // inactive application.
174
+ pool->setMax(1);
175
+ // TODO: How do we test this?
176
+ }
177
+
178
+ TEST_METHOD(8) {
179
+ // If ApplicationPool spawns a new instance,
180
+ // and we kill it, then the next get() with the
181
+ // same application root should not throw an exception:
182
+ // ApplicationPool should spawn a new instance
183
+ // after detecting that the original one died.
184
+ SessionPtr session = spawnRackApp(pool, "stub/rack");
185
+ kill(session->getPid(), SIGKILL);
186
+ session.reset();
187
+ usleep(20000); // Give the process some time to exit.
188
+ spawnRackApp(pool, "stub/rack"); // should not throw
189
+ }
190
+
191
+ struct PoolWaitTestThread {
192
+ ApplicationPool::Ptr pool;
193
+ SessionPtr &m_session;
194
+ bool &m_done;
195
+
196
+ PoolWaitTestThread(const ApplicationPool::Ptr &pool,
197
+ SessionPtr &session,
198
+ bool &done)
199
+ : m_session(session), m_done(done) {
200
+ this->pool = pool;
201
+ done = false;
202
+ }
203
+
204
+ void operator()() {
205
+ m_session = spawnWsgiApp(pool, "stub/wsgi");
206
+ m_done = true;
207
+ }
208
+ };
209
+
210
+ TEST_METHOD(9) {
211
+ // If we call get() even though the pool is already full
212
+ // (active == max), and the app group name is *not* already
213
+ // in the pool, then the pool will wait until enough sessions
214
+ // have been closed.
215
+
216
+ // Make the pool full.
217
+ pool->setMax(2);
218
+ SessionPtr session1 = spawnRackApp(pool, "stub/rack");
219
+ SessionPtr session2 = spawnRackApp(pool2, "stub/rack");
220
+ EVENTUALLY(5,
221
+ result = pool->getCount() == 2u;
222
+ );
223
+ session1.reset();
224
+ session2.reset();
225
+ EVENTUALLY(5,
226
+ result = pool->getActive() == 0u;
227
+ );
228
+ session1 = spawnRackApp(pool, "stub/rack");
229
+ session2 = spawnRackApp(pool2, "stub/rack");
230
+ ensure_equals(pool->getActive(), 2u);
231
+
232
+ // Now spawn an app with a different app root.
233
+ SessionPtr session3;
234
+ bool done;
235
+ TempThread thr(PoolWaitTestThread(pool2, session3, done));
236
+ usleep(500000);
237
+ ensure("ApplicationPool is still waiting", !done);
238
+ ensure_equals(pool->getActive(), 2u);
239
+ ensure_equals(pool->getCount(), 2u);
240
+
241
+ // Now release one slot from the pool.
242
+ session1.reset();
243
+
244
+ // Session 3 should eventually be opened.
245
+ EVENTUALLY(10,
246
+ result = done;
247
+ );
248
+ ensure_equals(pool->getActive(), 2u);
249
+ ensure_equals(pool->getCount(), 2u);
250
+ }
251
+
252
+ TEST_METHOD(10) {
253
+ // If we call get(), and:
254
+ // * the pool is already full, but there are inactive apps
255
+ // (active < count && count == max)
256
+ // and
257
+ // * the app group name for this get() is *not* already in the pool
258
+ // then the an inactive app should be killed in order to
259
+ // satisfy this get() command.
260
+ TempDirCopy c1("stub/rack", "rackapp1.tmp");
261
+ TempDirCopy c2("stub/rack", "rackapp2.tmp");
262
+
263
+ // Make the pool full.
264
+ pool->setMax(2);
265
+ SessionPtr session1 = spawnRackApp(pool, "rackapp1.tmp");
266
+ SessionPtr session2 = spawnRackApp(pool2, "rackapp1.tmp");
267
+ EVENTUALLY(5,
268
+ result = pool->getCount() == 2u;
269
+ );
270
+ session1.reset();
271
+ session2.reset();
272
+ EVENTUALLY(5,
273
+ result = pool->getActive() == 0u;
274
+ );
275
+
276
+ // Now spawn a different app.
277
+ session1 = spawnRackApp(pool, "rackapp2.tmp");
278
+ ensure_equals(pool->getActive(), 1u);
279
+ ensure_equals(pool->getCount(), 2u);
280
+ }
281
+
282
+ TEST_METHOD(11) {
283
+ // A Session should still be usable after the pool has been destroyed.
284
+ SessionPtr session = spawnRackApp(pool, "stub/rack");
285
+ pool->clear();
286
+ pool.reset();
287
+ pool2.reset();
288
+
289
+ sendTestRequest(session);
290
+ session->shutdownWriter();
291
+
292
+ int reader = session->getStream();
293
+ string result = readAll(reader);
294
+ session->closeStream();
295
+ ensure(result.find("hello <b>world</b>") != string::npos);
296
+ }
297
+
298
+ TEST_METHOD(12) {
299
+ // If tmp/restart.txt didn't exist but has now been created,
300
+ // then the applications under app_root should be restarted.
301
+ struct stat buf;
302
+ TempDirCopy c("stub/rack", "rackapp.tmp");
303
+ SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
304
+ SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
305
+ session1.reset();
306
+ session2.reset();
307
+ EVENTUALLY(5,
308
+ result = pool->getCount() == 2u;
309
+ );
310
+
311
+ touchFile("rackapp.tmp/tmp/restart.txt");
312
+ spawnRackApp(pool, "rackapp.tmp");
313
+
314
+ ensure_equals("No apps are active", pool->getActive(), 0u);
315
+ ensure_equals("Both apps are killed, and a new one was spawned",
316
+ pool->getCount(), 1u);
317
+ ensure("Restart file still exists",
318
+ stat("rackapp.tmp/tmp/restart.txt", &buf) == 0);
319
+ }
320
+
321
+ TEST_METHOD(13) {
322
+ // If tmp/restart.txt was present, and its timestamp changed
323
+ // since the last check, then the applications under the app group name
324
+ // should still be restarted. However, a subsequent get()
325
+ // should not result in a restart.
326
+ pid_t old_pid;
327
+ TempDirCopy c("stub/rack", "rackapp.tmp");
328
+ TempDir d("rackapp.tmp/tmp/restart.txt");
329
+ SessionPtr session = spawnRackApp(pool, "rackapp.tmp");
330
+ old_pid = session->getPid();
331
+ session.reset();
332
+ EVENTUALLY(5,
333
+ result = pool->getActive() == 0u;
334
+ );
335
+
336
+ touchFile("rackapp.tmp/tmp/restart.txt", 10);
337
+
338
+ session = spawnRackApp(pool, "rackapp.tmp");
339
+ ensure("The app was restarted", session->getPid() != old_pid);
340
+ old_pid = session->getPid();
341
+ session.reset();
342
+ EVENTUALLY(5,
343
+ result = pool->getActive() == 0u;
344
+ );
345
+
346
+ session = spawnRackApp(pool, "rackapp.tmp");
347
+ ensure_equals("The app was not restarted",
348
+ old_pid, session->getPid());
349
+ }
350
+
351
+ TEST_METHOD(15) {
352
+ // Test whether restarting with restart.txt really results in code reload.
353
+ TempDirCopy c("stub/rack", "rackapp.tmp");
354
+ SessionPtr session = spawnRackApp(pool, "rackapp.tmp");
355
+ sendTestRequest(session);
356
+ string result = readAll(session->getStream());
357
+ ensure(result.find("hello <b>world</b>") != string::npos);
358
+ session.reset();
359
+ EVENTUALLY(5,
360
+ result = pool->getActive() == 0u;
361
+ );
362
+
363
+ touchFile("rackapp.tmp/tmp/restart.txt");
364
+ replaceStringInFile("rackapp.tmp/config.ru", "world", "world 2");
365
+
366
+ session = spawnRackApp(pool, "rackapp.tmp");
367
+ sendTestRequest(session);
368
+ result = readAll(session->getStream());
369
+ ensure("App code has been reloaded", result.find("hello <b>world 2</b>") != string::npos);
370
+ }
371
+
372
+ TEST_METHOD(16) {
373
+ // If tmp/always_restart.txt is present and is a file,
374
+ // then the application under app_root should be always restarted.
375
+ struct stat buf;
376
+ pid_t old_pid;
377
+ TempDirCopy c("stub/rack", "rackapp.tmp");
378
+ SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
379
+ SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
380
+ session1.reset();
381
+ session2.reset();
382
+ EVENTUALLY(5,
383
+ result = pool->getActive() == 0u && pool->getCount() == 2u;
384
+ );
385
+
386
+ touchFile("rackapp.tmp/tmp/always_restart.txt");
387
+
388
+ // This get() results in a restart.
389
+ session1 = spawnRackApp(pool, "rackapp.tmp");
390
+ old_pid = session1->getPid();
391
+ session1.reset();
392
+ EVENTUALLY(5,
393
+ // First restart: no apps are active
394
+ result = pool->getActive() == 0u;
395
+ );
396
+ ensure_equals("First restart: the first 2 apps were killed, and a new one was spawned",
397
+ pool->getCount(), 1u);
398
+ ensure("always_restart file has not been deleted",
399
+ stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
400
+
401
+ // This get() results in a restart as well.
402
+ session1 = spawnRackApp(pool, "rackapp.tmp");
403
+ ensure(old_pid != session1->getPid());
404
+ session1.reset();
405
+ EVENTUALLY(5,
406
+ // Second restart: no apps are active
407
+ result = pool->getActive() == 0u;
408
+ );
409
+ ensure_equals("Second restart: the last app was killed, and a new one was spawned",
410
+ pool->getCount(), 1u);
411
+ ensure("always_restart file has not been deleted",
412
+ stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
413
+ }
414
+
415
+ TEST_METHOD(17) {
416
+ // If tmp/always_restart.txt is present and is a directory,
417
+ // then the application under app_root should be always restarted.
418
+ struct stat buf;
419
+ pid_t old_pid;
420
+ TempDirCopy c("stub/rack", "rackapp.tmp");
421
+ SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
422
+ SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
423
+ session1.reset();
424
+ session2.reset();
425
+ EVENTUALLY(5,
426
+ result = pool->getActive() == 0u && pool->getCount() == 2u;
427
+ );
428
+
429
+ TempDir d("rackapp.tmp/tmp/always_restart.txt");
430
+
431
+ // This get() results in a restart.
432
+ session1 = spawnRackApp(pool, "rackapp.tmp");
433
+ old_pid = session1->getPid();
434
+ session1.reset();
435
+ EVENTUALLY(5,
436
+ // First restart: no apps are active
437
+ result = pool->getActive() == 0u;
438
+ );
439
+ ensure_equals("First restart: the first 2 apps were killed, and a new one was spawned",
440
+ pool->getCount(), 1u);
441
+ ensure("always_restart directory has not been deleted",
442
+ stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
443
+
444
+ // This get() results in a restart as well.
445
+ session1 = spawnRackApp(pool, "rackapp.tmp");
446
+ ensure(old_pid != session1->getPid());
447
+ session1.reset();
448
+ EVENTUALLY(5,
449
+ // Second restart: no apps are active
450
+ result = pool->getActive() == 0u;
451
+ );
452
+ ensure_equals("Second restart: the last app was killed, and a new one was spawned",
453
+ pool->getCount(), 1u);
454
+ ensure("always_restart directory has not been deleted",
455
+ stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
456
+ }
457
+
458
+ TEST_METHOD(18) {
459
+ // Test whether restarting with tmp/always_restart.txt really results in code reload.
460
+ TempDirCopy c("stub/rack", "rackapp.tmp");
461
+ SessionPtr session = spawnRackApp(pool, "rackapp.tmp");
462
+ sendTestRequest(session);
463
+ string result = readAll(session->getStream());
464
+ ensure(result.find("hello <b>world</b>") != string::npos);
465
+ session.reset();
466
+
467
+ touchFile("rackapp.tmp/tmp/always_restart.txt");
468
+ replaceStringInFile("rackapp.tmp/config.ru", "world", "world 2");
469
+
470
+ session = spawnRackApp(pool, "rackapp.tmp");
471
+ sendTestRequest(session);
472
+ result = readAll(session->getStream());
473
+ ensure("App code has been reloaded (1)", result.find("hello <b>world 2</b>") != string::npos);
474
+ session.reset();
475
+ EVENTUALLY(5,
476
+ result = pool->getActive() == 0u;
477
+ );
478
+
479
+ replaceStringInFile("rackapp.tmp/config.ru", "world 2", "world 3");
480
+ session = spawnRackApp(pool, "rackapp.tmp");
481
+ sendTestRequest(session);
482
+ result = readAll(session->getStream());
483
+ ensure("App code has been reloaded (2)", result.find("hello <b>world 3</b>") != string::npos);
484
+ session.reset();
485
+ }
486
+
487
+ TEST_METHOD(19) {
488
+ // If tmp/restart.txt and tmp/always_restart.txt are present,
489
+ // the application under app_root should still be restarted and
490
+ // both files must be kept.
491
+ pid_t old_pid, pid;
492
+ struct stat buf;
493
+ TempDirCopy c("stub/rack", "rackapp.tmp");
494
+ SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
495
+ SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
496
+ session1.reset();
497
+ session2.reset();
498
+ EVENTUALLY(5,
499
+ result = pool->getActive() == 0u && pool->getCount() == 2u;
500
+ );
501
+
502
+ touchFile("rackapp.tmp/tmp/restart.txt");
503
+ touchFile("rackapp.tmp/tmp/always_restart.txt");
504
+
505
+ old_pid = spawnRackApp(pool, "rackapp.tmp")->getPid();
506
+ ensure("always_restart.txt file has not been deleted",
507
+ stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
508
+ ensure("restart.txt file has not been deleted",
509
+ stat("rackapp.tmp/tmp/restart.txt", &buf) == 0);
510
+ EVENTUALLY(5,
511
+ result = pool->getActive() == 0u;
512
+ );
513
+
514
+ pid = spawnRackApp(pool, "rackapp.tmp")->getPid();
515
+ ensure("The app was restarted", pid != old_pid);
516
+ }
517
+
518
+ TEST_METHOD(20) {
519
+ // It should look for restart.txt in the directory given by
520
+ // the restartDir option, if available.
521
+ struct stat buf;
522
+ char path[1024];
523
+ PoolOptions options("stub/rack");
524
+ options.appType = "rack";
525
+ options.restartDir = string(getcwd(path, sizeof(path))) + "/stub/rack";
526
+
527
+ SessionPtr session1 = pool->get(options);
528
+ SessionPtr session2 = pool2->get(options);
529
+ session1.reset();
530
+ session2.reset();
531
+ EVENTUALLY(5,
532
+ result = pool->getActive() == 0u && pool->getCount() == 2u;
533
+ );
534
+
535
+ DeleteFileEventually f("stub/rack/restart.txt");
536
+ touchFile("stub/rack/restart.txt");
537
+
538
+ pool->get(options);
539
+
540
+ ensure_equals("No apps are active", pool->getActive(), 0u);
541
+ ensure_equals("Both apps are killed, and a new one was spawned",
542
+ pool->getCount(), 1u);
543
+ ensure("Restart file still exists",
544
+ stat("stub/rack/restart.txt", &buf) == 0);
545
+ }
546
+
547
+ TEST_METHOD(21) {
548
+ // restartDir may also be a directory relative to the
549
+ // application root.
550
+ struct stat buf;
551
+ PoolOptions options("stub/rack");
552
+ options.appType = "rack";
553
+ options.restartDir = "public";
554
+
555
+ SessionPtr session1 = pool->get(options);
556
+ SessionPtr session2 = pool2->get(options);
557
+ session1.reset();
558
+ session2.reset();
559
+ EVENTUALLY(5,
560
+ result = pool->getActive() == 0u && pool->getCount() == 2u;
561
+ );
562
+
563
+ DeleteFileEventually f("stub/rack/public/restart.txt");
564
+ touchFile("stub/rack/public/restart.txt");
565
+
566
+ pool->get(options);
567
+
568
+ ensure_equals("No apps are active", pool->getActive(), 0u);
569
+ ensure_equals("Both apps are killed, and a new one was spawned",
570
+ pool->getCount(), 1u);
571
+ ensure("Restart file still exists",
572
+ stat("stub/rack/public/restart.txt", &buf) == 0);
573
+ }
574
+
575
+ TEST_METHOD(22) {
576
+ // The cleaner thread should clean idle applications.
577
+ pool->setMaxIdleTime(1);
578
+ spawnRackApp(pool, "stub/rack");
579
+ EVENTUALLY(10,
580
+ result = pool->getCount() == 0u;
581
+ );
582
+
583
+ time_t begin = time(NULL);
584
+ while (pool->getCount() == 1u && time(NULL) - begin < 10) {
585
+ usleep(100000);
586
+ }
587
+ ensure_equals("App should have been cleaned up", pool->getCount(), 0u);
588
+ }
589
+
590
+ TEST_METHOD(23) {
591
+ // MaxPerApp is respected.
592
+ pool->setMax(3);
593
+ pool->setMaxPerApp(1);
594
+
595
+ // We connect to stub/rack while it already has an instance with
596
+ // 1 request in its queue. Assert that the pool doesn't spawn
597
+ // another instance.
598
+ SessionPtr session1 = spawnRackApp(pool, "stub/rack");
599
+ SessionPtr session2 = spawnRackApp(pool2, "stub/rack");
600
+
601
+ // We connect to stub/wsgi. Assert that the pool spawns a new
602
+ // instance for this app.
603
+ TempDirCopy c("stub/wsgi", "wsgiapp.tmp");
604
+ ApplicationPool::Ptr pool3 = newPoolConnection();
605
+ SessionPtr session3 = spawnWsgiApp(pool3, "wsgiapp.tmp");
606
+ ensure_equals(pool->getCount(), 2u);
607
+ }
608
+
609
+ TEST_METHOD(24) {
610
+ // Application instance is shutdown after 'maxRequests' requests.
611
+ PoolOptions options("stub/rack");
612
+ int reader;
613
+ pid_t originalPid;
614
+ SessionPtr session;
615
+
616
+ options.appType = "rack";
617
+ options.maxRequests = 4;
618
+ pool->setMax(1);
619
+ session = pool->get(options);
620
+ originalPid = session->getPid();
621
+ session.reset();
622
+ EVENTUALLY(5,
623
+ result = pool->getActive() == 0u;
624
+ );
625
+
626
+ for (unsigned int i = 0; i < 4; i++) {
627
+ session = pool->get(options);
628
+ sendTestRequest(session);
629
+ session->shutdownWriter();
630
+ reader = session->getStream();
631
+ readAll(reader);
632
+ // Must explicitly call reset() here because we
633
+ // want to close the session right now.
634
+ session.reset();
635
+ EVENTUALLY(5,
636
+ result = pool->getActive() == 0u;
637
+ );
638
+ }
639
+
640
+ session = pool->get(options);
641
+ ensure(session->getPid() != originalPid);
642
+ }
643
+
644
+ TEST_METHOD(25) {
645
+ // If global queueing mode is enabled, then get() waits until
646
+ // there's at least one idle backend process for this application
647
+ // domain.
648
+ pool->setMax(1);
649
+
650
+ PoolOptions options;
651
+ options.appRoot = "stub/rack";
652
+ options.appType = "rack";
653
+ options.useGlobalQueue = true;
654
+ SessionPtr session = pool->get(options);
655
+
656
+ bool done = false;
657
+ SpawnRackAppFunction func;
658
+ func.pool = pool2;
659
+ func.done = &done;
660
+ TempThread thr(func);
661
+
662
+ // Previous session hasn't been closed yet, so pool should still
663
+ // be waiting.
664
+ usleep(100000);
665
+ ensure("(1)", !done);
666
+ ensure_equals("(2)", pool->getGlobalQueueSize(), 1u);
667
+ ensure_equals("(3)", pool->getActive(), 1u);
668
+ ensure_equals("(4)", pool->getCount(), 1u);
669
+
670
+ // Close the previous session. The thread should now finish.
671
+ session.reset();
672
+ EVENTUALLY(5,
673
+ result = done;
674
+ );
675
+ }
676
+
677
+ TEST_METHOD(26) {
678
+ // When a previous application group spinned down, and we touched
679
+ // restart.txt and try to spin up a new process for this domain,
680
+ // then any ApplicationSpawner/FrameworkSpawner processes should be
681
+ // killed first.
682
+ SessionPtr session;
683
+ TempDirCopy c1("stub/rack", "rackapp1.tmp");
684
+ TempDirCopy c2("stub/rack", "rackapp2.tmp");
685
+ shared_ptr<ReloadLoggingSpawnManager> spawnManager(
686
+ new ReloadLoggingSpawnManager("../helper-scripts/passenger-spawn-server", generation)
687
+ );
688
+ reinitializeWithSpawnManager(spawnManager);
689
+
690
+ pool->setMax(1);
691
+ session = spawnRackApp(pool, "rackapp1.tmp");
692
+ session.reset();
693
+ session = spawnRackApp(pool, "rackapp2.tmp");
694
+ ensure_equals("rackapp2.tmp is not reloaded because restart.txt is not touched",
695
+ spawnManager->reloadLog.size(), 0u);
696
+ session.reset();
697
+ EVENTUALLY(5,
698
+ result = pool->getActive() == 0u;
699
+ );
700
+
701
+ touchFile("rackapp1.tmp/tmp/restart.txt");
702
+ session = spawnRackApp(pool, "rackapp1.tmp");
703
+ ensure_equals("rackapp1.tmp is reloaded because restart.txt is touched (1)",
704
+ spawnManager->reloadLog.size(), 1u);
705
+ ensure_equals("rackapp1.tmp is reloaded because restart.txt is touched (2)",
706
+ spawnManager->reloadLog[0], "rackapp1.tmp");
707
+ }
708
+
709
+ TEST_METHOD(27) {
710
+ // Test inspect()
711
+ SessionPtr session1 = spawnRackApp(pool, "stub/rack");
712
+ string str = pool->inspect();
713
+ ensure("Contains 'max = '", str.find("max ") != string::npos);
714
+ ensure("Contains PID", str.find("PID: " + toString(session1->getPid())) != string::npos);
715
+ }
716
+
717
+ TEST_METHOD(28) {
718
+ // Test toXml(true)
719
+ SessionPtr session1 = spawnRackApp(pool, "stub/rack");
720
+ string xml = pool->toXml();
721
+ ensure("Contains <process>", xml.find("<process>") != string::npos);
722
+ ensure("Contains PID", xml.find("<pid>" + toString(session1->getPid()) + "</pid>") != string::npos);
723
+ ensure("Contains sensitive information", xml.find("<server_sockets>") != string::npos);
724
+ }
725
+
726
+ TEST_METHOD(29) {
727
+ // Test toXml(false)
728
+ SessionPtr session1 = spawnRackApp(pool, "stub/rack");
729
+ string xml = pool->toXml(false);
730
+ ensure("Contains <process>", xml.find("<process>") != string::npos);
731
+ ensure("Contains PID", xml.find("<pid>" + toString(session1->getPid()) + "</pid>") != string::npos);
732
+ ensure("Does not contain sensitive information", xml.find("<server_sockets>") == string::npos);
733
+ }
734
+
735
+ TEST_METHOD(30) {
736
+ // Test detach().
737
+
738
+ // Create 2 processes, where only the first one is active.
739
+ SessionPtr session1 = spawnRackApp(pool, "stub/rack");
740
+ SessionPtr session2 = spawnRackApp(pool2, "stub/rack");
741
+ session2.reset();
742
+ EVENTUALLY(5,
743
+ result = pool->getActive() == 1u && pool->getCount() == 2u;
744
+ );
745
+
746
+ // Make sure session2 refers to a different process than session1.
747
+ session2 = spawnRackApp(pool2, "stub/rack");
748
+ string session2dk = session2->getDetachKey();
749
+ session2.reset();
750
+ EVENTUALLY(5,
751
+ result = pool->getActive() == 1u;
752
+ );
753
+
754
+ // First detach works. It was active so the 'active' property
755
+ // is decremented.
756
+ ensure("(10)", pool->detach(session1->getDetachKey()));
757
+ ensure_equals("(11)", pool->getActive(), 0u);
758
+ ensure_equals("(12)", pool->getCount(), 1u);
759
+
760
+ // Second detach with the same identifier doesn't do anything.
761
+ ensure("(20)", !pool->detach(session1->getDetachKey()));
762
+ ensure_equals("(21)", pool->getActive(), 0u);
763
+ ensure_equals("(22)", pool->getCount(), 1u);
764
+
765
+ // Detaching an inactive process works too.
766
+ ensure("(30)", pool->detach(session2dk));
767
+ ensure_equals("(31)", pool->getActive(), 0u);
768
+ ensure_equals("(32)", pool->getCount(), 0u);
769
+ }
770
+
771
+ TEST_METHOD(31) {
772
+ // If the app group does not yet exist, and options.minProcesses > 0,
773
+ // then get() will spawn 1 process immediately, return its session,
774
+ // and spawn more processes in the background until options.minProcesses
775
+ // is satisfied.
776
+ TempDirCopy c1("stub/rack", "rackapp.tmp");
777
+ PoolOptions options;
778
+ options.appRoot = "rackapp.tmp";
779
+ options.appType = "rack";
780
+ options.minProcesses = 3;
781
+ options.spawnMethod = "conservative";
782
+
783
+ writeFile("rackapp.tmp/config.ru",
784
+ "sleep 0.1\n"
785
+ "run lambda {}\n");
786
+
787
+ SessionPtr session1 = pool->get(options);
788
+ ensure_equals(pool->getActive(), 1u);
789
+ ensure_equals(pool->getCount(), 1u);
790
+
791
+ EVENTUALLY(5,
792
+ result = pool->getCount() == 3u;
793
+ );
794
+ }
795
+
796
+ TEST_METHOD(32) {
797
+ // If the app group already exists, all processes are active,
798
+ // count < max, options.minProcesses > 0 and global queuing turned off,
799
+ // then get() will check out an existing process immediately
800
+ // and spawn new ones in the background until options.minProcesses
801
+ // is satisfied.
802
+ TempDirCopy c1("stub/rack", "rackapp.tmp");
803
+ PoolOptions options;
804
+ options.appRoot = "rackapp.tmp";
805
+ options.appType = "rack";
806
+ options.spawnMethod = "conservative";
807
+ options.minProcesses = 3;
808
+ pool->setMax(3);
809
+
810
+ // Spawn a single process.
811
+ SessionPtr session1 = pool->get(options);
812
+ ensure_equals(pool->getActive(), 1u);
813
+ ensure_equals(pool->getCount(), 1u);
814
+
815
+ writeFile("rackapp.tmp/config.ru",
816
+ "sleep 0.1\n"
817
+ "run lambda {}\n");
818
+
819
+ // Now call get(); this one will use the previous process
820
+ // and spawn a new one in the background.
821
+ SessionPtr session2 = pool2->get(options);
822
+ ensure_equals(pool->getActive(), 1u);
823
+ ensure_equals(pool->getCount(), 1u);
824
+ ensure_equals(session1->getPid(), session2->getPid());
825
+
826
+ EVENTUALLY(5,
827
+ result = pool->getCount() == 3u;
828
+ );
829
+ }
830
+
831
+ /* If the app group already exists, all processes are active,
832
+ * count < max, options.minProcesses > 0 and global queuing turned on,
833
+ * then get() will wait until either
834
+ * (1) an existing process becomes inactive.
835
+ * or until
836
+ * (2) a new process has been spawned.
837
+ */
838
+
839
+ TEST_METHOD(33) {
840
+ // Here we test scenario (1).
841
+ PoolOptions options;
842
+ options.appRoot = "stub/rack";
843
+ options.appType = "rack";
844
+ options.minProcesses = 3;
845
+ options.useGlobalQueue = true;
846
+ pool->setMax(3);
847
+
848
+ ApplicationPool::Ptr pool3 = newPoolConnection();
849
+ ApplicationPool::Ptr pool4 = newPoolConnection();
850
+
851
+ // Spawn 3 processes.
852
+ SessionPtr session1 = pool->get(options);
853
+ SessionPtr session2 = pool2->get(options);
854
+ session2.reset();
855
+ EVENTUALLY(5,
856
+ result = pool->getCount() == 3u;
857
+ );
858
+
859
+ // Make sure all of them are active.
860
+ session2 = pool2->get(options);
861
+ SessionPtr session3 = pool3->get(options);
862
+ ensure_equals(pool->getActive(), 3u);
863
+ ensure_equals(pool->getCount(), 3u);
864
+
865
+ // Now call get() in a thread.
866
+ SpawnRackAppFunction func;
867
+ bool done = false;
868
+ func.pool = pool4;
869
+ func.done = &done;
870
+ TempThread thr(func);
871
+
872
+ usleep(20000);
873
+ ensure("Still waiting on global queue", !done);
874
+ ensure_equals(pool->getGlobalQueueSize(), 1u);
875
+
876
+ // Make 1 process available.
877
+ session1.reset();
878
+ EVENTUALLY(5,
879
+ result = done;
880
+ );
881
+ }
882
+
883
+ TEST_METHOD(34) {
884
+ // Here we test scenario (2).
885
+ PoolOptions options;
886
+ options.appRoot = "stub/rack";
887
+ options.appType = "rack";
888
+ options.minProcesses = 3;
889
+ options.useGlobalQueue = true;
890
+ pool->setMax(3);
891
+
892
+ ApplicationPool::Ptr pool3 = newPoolConnection();
893
+ ApplicationPool::Ptr pool4 = newPoolConnection();
894
+ ApplicationPool::Ptr pool5 = newPoolConnection();
895
+
896
+ // Spawn 3 processes.
897
+ SessionPtr session1 = pool->get(options);
898
+ SessionPtr session2 = pool2->get(options);
899
+ session2.reset();
900
+ EVENTUALLY(5,
901
+ result = pool->getCount() == 3u;
902
+ );
903
+
904
+ // Make sure all of them are active.
905
+ session2 = pool2->get(options);
906
+ SessionPtr session3 = pool3->get(options);
907
+ ensure_equals(pool->getActive(), 3u);
908
+ ensure_equals(pool->getCount(), 3u);
909
+
910
+ // Now call get() in a thread.
911
+ SpawnRackAppFunction func1;
912
+ SessionPtr session4;
913
+ bool done1 = false;
914
+ func1.pool = pool4;
915
+ func1.done = &done1;
916
+ func1.session = &session4;
917
+ TempThread thr1(func1);
918
+
919
+ // And again.
920
+ SpawnRackAppFunction func2;
921
+ SessionPtr session5;
922
+ bool done2 = false;
923
+ func2.pool = pool5;
924
+ func2.done = &done2;
925
+ func2.session = &session5;
926
+ TempThread thr2(func2);
927
+
928
+ // We should now arrive at a state where there are 3 processes, all
929
+ // busy, and 2 threads waiting on the global queue.
930
+ usleep(20000);
931
+ ensure("Still waiting on global queue", !done1 && !done2);
932
+ ensure_equals(pool->getGlobalQueueSize(), 2u);
933
+
934
+ // Increasing the max will cause one of the threads to wake
935
+ // up, start a spawn action in the background, and go to sleep
936
+ // again. Eventually the new process will be done spawning,
937
+ // causing one of the threads to wake up. The other one will
938
+ // continue to wait.
939
+ pool->setMax(4);
940
+ EVENTUALLY(5,
941
+ result = (done1 && !done2) || (!done1 && done2);
942
+ );
943
+ }
944
+
945
+ TEST_METHOD(35) {
946
+ // When spawning an app in the background, if it encountered an error
947
+ // it will remove the whole app group.
948
+ TempDirCopy c1("stub/rack", "rackapp.tmp");
949
+ PoolOptions options;
950
+ options.appRoot = "rackapp.tmp";
951
+ options.appType = "rack";
952
+ options.spawnMethod = "conservative";
953
+ options.printExceptions = false;
954
+
955
+ SessionPtr session1 = pool->get(options);
956
+
957
+ writeFile("rackapp.tmp/config.ru",
958
+ "raise 'foo'\n");
959
+ pool2->get(options);
960
+
961
+ EVENTUALLY(5,
962
+ result = pool->getCount() == 0u;
963
+ );
964
+ }
965
+
966
+ TEST_METHOD(36) {
967
+ // When cleaning, at least options.minProcesses processes should be kept around.
968
+ pool->setMaxIdleTime(0);
969
+ ApplicationPool::Ptr pool3 = newPoolConnection();
970
+ PoolOptions options;
971
+ options.appRoot = "stub/rack";
972
+ options.appType = "rack";
973
+ options.minProcesses = 2;
974
+
975
+ // Spawn 2 processes.
976
+ SessionPtr session1 = pool->get(options);
977
+ SessionPtr session2 = pool2->get(options);
978
+ session1.reset();
979
+ session2.reset();
980
+ EVENTUALLY(5,
981
+ result = pool->getActive() == 0u && pool->getCount() == 2u;
982
+ );
983
+
984
+ // Spawn another process, so we get 3.
985
+ session1 = pool->get(options);
986
+ session2 = pool2->get(options);
987
+ SessionPtr session3 = pool3->get(options);
988
+ session3.reset();
989
+ EVENTUALLY(5,
990
+ result = pool->getActive() == 2u && pool->getCount() == 3u;
991
+ );
992
+
993
+ // Now wait until one process is idle cleaned.
994
+ pool->setMaxIdleTime(1);
995
+ EVENTUALLY(10,
996
+ result = pool->getCount() == 2u;
997
+ );
998
+ }
999
+
1000
+ TEST_METHOD(37) {
1001
+ // Test whether processes are grouped together by appGroupName.
1002
+ TempDirCopy c1("stub/rack", "rackapp.tmp");
1003
+ PoolOptions options1;
1004
+ options1.appRoot = "rackapp.tmp";
1005
+ options1.appType = "rack";
1006
+ options1.appGroupName = "group A";
1007
+ SessionPtr session1 = pool->get(options1);
1008
+
1009
+ TempDirCopy c2("stub/rack", "rackapp2.tmp");
1010
+ PoolOptions options2;
1011
+ options2.appRoot = "rackapp2.tmp";
1012
+ options2.appType = "rack";
1013
+ options2.appGroupName = "group A";
1014
+ SessionPtr session2 = pool2->get(options2);
1015
+
1016
+ session1.reset();
1017
+ session2.reset();
1018
+ EVENTUALLY(5,
1019
+ result = pool->getCount() == 2u;
1020
+ );
1021
+
1022
+ touchFile("rackapp.tmp/tmp/restart.txt");
1023
+ session1 = pool->get(options1);
1024
+ ensure_equals(pool->getCount(), 1u);
1025
+ }
1026
+
1027
+ /*************************************/
1028
+
1029
+ #endif /* USE_TEMPLATE */