passenger 5.0.0.beta3 → 5.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (218) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +11 -5
  5. data/CHANGELOG +38 -0
  6. data/CONTRIBUTING.md +1 -4
  7. data/Gemfile +0 -1
  8. data/Gemfile.lock +0 -2
  9. data/Rakefile +33 -33
  10. data/bin/passenger +1 -1
  11. data/bin/passenger-config +1 -1
  12. data/bin/passenger-install-apache2-module +800 -800
  13. data/bin/passenger-install-nginx-module +592 -592
  14. data/bin/passenger-memory-stats +127 -127
  15. data/bin/passenger-status +216 -216
  16. data/build/agents.rb +127 -127
  17. data/build/apache2.rb +87 -87
  18. data/build/basics.rb +60 -60
  19. data/build/common_library.rb +165 -165
  20. data/build/cplusplus_support.rb +51 -51
  21. data/build/cxx_tests.rb +268 -268
  22. data/build/debian.rb +143 -143
  23. data/build/documentation.rb +58 -58
  24. data/build/integration_tests.rb +81 -81
  25. data/build/misc.rb +132 -132
  26. data/build/nginx.rb +20 -20
  27. data/build/node_tests.rb +7 -7
  28. data/build/oxt_tests.rb +14 -14
  29. data/build/packaging.rb +570 -570
  30. data/build/preprocessor.rb +260 -260
  31. data/build/rake_extensions.rb +71 -71
  32. data/build/ruby_extension.rb +29 -29
  33. data/build/ruby_tests.rb +6 -6
  34. data/build/test_basics.rb +37 -37
  35. data/debian.template/control.template +3 -5
  36. data/dev/copy_boost_headers +134 -134
  37. data/dev/install_scripts_bootstrap_code.rb +25 -25
  38. data/dev/list_tests +20 -20
  39. data/dev/ruby_server.rb +223 -223
  40. data/dev/runner +18 -18
  41. data/doc/ServerOptimizationGuide.txt.md +55 -2
  42. data/doc/Users guide Nginx.txt +0 -26
  43. data/doc/Users guide Standalone.txt +5 -1
  44. data/doc/users_guide_snippets/tips.txt +9 -0
  45. data/ext/common/ApplicationPool2/Group.h +23 -11
  46. data/ext/common/ApplicationPool2/Implementation.cpp +32 -7
  47. data/ext/common/ApplicationPool2/Pool.h +22 -17
  48. data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
  49. data/ext/common/ApplicationPool2/Spawner.h +1 -1
  50. data/ext/common/Constants.h +1 -1
  51. data/ext/common/agents/Base.cpp +35 -20
  52. data/ext/common/agents/HelperAgent/Main.cpp +8 -1
  53. data/ext/common/agents/HelperAgent/OptionParser.h +18 -4
  54. data/ext/common/agents/HelperAgent/RequestHandler.h +2 -83
  55. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +54 -1
  56. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +7 -4
  57. data/ext/common/agents/Main.cpp +1 -1
  58. data/ext/common/agents/Watchdog/Main.cpp +54 -19
  59. data/ext/nginx/Configuration.c +7 -0
  60. data/ext/nginx/ContentHandler.c +9 -1
  61. data/helper-scripts/backtrace-sanitizer.rb +106 -87
  62. data/helper-scripts/crash-watch.rb +32 -0
  63. data/helper-scripts/download_binaries/extconf.rb +38 -38
  64. data/helper-scripts/meteor-loader.rb +107 -107
  65. data/helper-scripts/prespawn +101 -101
  66. data/helper-scripts/rack-loader.rb +96 -96
  67. data/helper-scripts/rack-preloader.rb +137 -137
  68. data/lib/phusion_passenger.rb +292 -292
  69. data/lib/phusion_passenger/abstract_installer.rb +438 -438
  70. data/lib/phusion_passenger/active_support3_extensions/init.rb +168 -170
  71. data/lib/phusion_passenger/admin_tools.rb +20 -20
  72. data/lib/phusion_passenger/admin_tools/instance.rb +178 -178
  73. data/lib/phusion_passenger/admin_tools/instance_registry.rb +61 -61
  74. data/lib/phusion_passenger/admin_tools/memory_stats.rb +267 -267
  75. data/lib/phusion_passenger/apache2/config_options.rb +182 -182
  76. data/lib/phusion_passenger/common_library.rb +479 -485
  77. data/lib/phusion_passenger/config/about_command.rb +161 -161
  78. data/lib/phusion_passenger/config/admin_command_command.rb +129 -129
  79. data/lib/phusion_passenger/config/agent_compiler.rb +121 -121
  80. data/lib/phusion_passenger/config/build_native_support_command.rb +43 -43
  81. data/lib/phusion_passenger/config/command.rb +25 -25
  82. data/lib/phusion_passenger/config/compile_agent_command.rb +62 -62
  83. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +88 -73
  84. data/lib/phusion_passenger/config/detach_process_command.rb +72 -72
  85. data/lib/phusion_passenger/config/download_agent_command.rb +246 -227
  86. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +245 -224
  87. data/lib/phusion_passenger/config/install_agent_command.rb +144 -132
  88. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +205 -185
  89. data/lib/phusion_passenger/config/installation_utils.rb +204 -204
  90. data/lib/phusion_passenger/config/list_instances_command.rb +64 -64
  91. data/lib/phusion_passenger/config/main.rb +152 -152
  92. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +319 -300
  93. data/lib/phusion_passenger/config/reopen_logs_command.rb +67 -67
  94. data/lib/phusion_passenger/config/restart_app_command.rb +155 -155
  95. data/lib/phusion_passenger/config/system_metrics_command.rb +13 -13
  96. data/lib/phusion_passenger/config/utils.rb +95 -95
  97. data/lib/phusion_passenger/config/validate_install_command.rb +198 -198
  98. data/lib/phusion_passenger/console_text_template.rb +25 -25
  99. data/lib/phusion_passenger/constants.rb +90 -90
  100. data/lib/phusion_passenger/debug_logging.rb +106 -106
  101. data/lib/phusion_passenger/loader_shared_helpers.rb +447 -432
  102. data/lib/phusion_passenger/message_channel.rb +312 -312
  103. data/lib/phusion_passenger/message_client.rb +176 -176
  104. data/lib/phusion_passenger/native_support.rb +369 -369
  105. data/lib/phusion_passenger/nginx/config_options.rb +297 -297
  106. data/lib/phusion_passenger/packaging.rb +131 -131
  107. data/lib/phusion_passenger/platform_info.rb +360 -360
  108. data/lib/phusion_passenger/platform_info/apache.rb +767 -767
  109. data/lib/phusion_passenger/platform_info/apache_detector.rb +199 -199
  110. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +107 -107
  111. data/lib/phusion_passenger/platform_info/compiler.rb +570 -570
  112. data/lib/phusion_passenger/platform_info/curl.rb +32 -32
  113. data/lib/phusion_passenger/platform_info/cxx_portability.rb +188 -188
  114. data/lib/phusion_passenger/platform_info/depcheck.rb +372 -372
  115. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +109 -109
  116. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  117. data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -34
  118. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +101 -101
  119. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -5
  120. data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +13 -13
  121. data/lib/phusion_passenger/platform_info/linux.rb +55 -55
  122. data/lib/phusion_passenger/platform_info/operating_system.rb +149 -149
  123. data/lib/phusion_passenger/platform_info/ruby.rb +468 -448
  124. data/lib/phusion_passenger/platform_info/zlib.rb +9 -9
  125. data/lib/phusion_passenger/plugin.rb +66 -66
  126. data/lib/phusion_passenger/preloader_shared_helpers.rb +126 -126
  127. data/lib/phusion_passenger/public_api.rb +191 -191
  128. data/lib/phusion_passenger/rack/out_of_band_gc.rb +93 -94
  129. data/lib/phusion_passenger/rack/thread_handler_extension.rb +231 -227
  130. data/lib/phusion_passenger/request_handler.rb +567 -577
  131. data/lib/phusion_passenger/request_handler/thread_handler.rb +379 -381
  132. data/lib/phusion_passenger/ruby_core_enhancements.rb +86 -86
  133. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +74 -74
  134. data/lib/phusion_passenger/simple_benchmarking.rb +25 -25
  135. data/lib/phusion_passenger/standalone/app_finder.rb +153 -150
  136. data/lib/phusion_passenger/standalone/command.rb +44 -40
  137. data/lib/phusion_passenger/standalone/config_utils.rb +53 -53
  138. data/lib/phusion_passenger/standalone/control_utils.rb +38 -59
  139. data/lib/phusion_passenger/standalone/main.rb +73 -73
  140. data/lib/phusion_passenger/standalone/start_command.rb +697 -685
  141. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +193 -155
  142. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +162 -133
  143. data/lib/phusion_passenger/standalone/status_command.rb +64 -64
  144. data/lib/phusion_passenger/standalone/stop_command.rb +72 -72
  145. data/lib/phusion_passenger/standalone/version_command.rb +9 -9
  146. data/lib/phusion_passenger/union_station/connection.rb +32 -32
  147. data/lib/phusion_passenger/union_station/core.rb +251 -251
  148. data/lib/phusion_passenger/union_station/transaction.rb +126 -126
  149. data/lib/phusion_passenger/utils.rb +199 -167
  150. data/lib/phusion_passenger/utils/ansi_colors.rb +128 -128
  151. data/lib/phusion_passenger/utils/download.rb +196 -196
  152. data/lib/phusion_passenger/utils/file_system_watcher.rb +158 -158
  153. data/lib/phusion_passenger/utils/hosts_file_parser.rb +101 -101
  154. data/lib/phusion_passenger/utils/lock.rb +31 -31
  155. data/lib/phusion_passenger/utils/native_support_utils.rb +31 -31
  156. data/lib/phusion_passenger/utils/progress_bar.rb +26 -26
  157. data/lib/phusion_passenger/utils/shellwords.rb +20 -20
  158. data/lib/phusion_passenger/utils/terminal_choice_menu.rb +206 -206
  159. data/lib/phusion_passenger/utils/unseekable_socket.rb +272 -272
  160. data/lib/phusion_passenger/vendor/crash_watch/app.rb +129 -0
  161. data/lib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +341 -0
  162. data/lib/phusion_passenger/vendor/crash_watch/version.rb +24 -0
  163. data/lib/phusion_passenger/vendor/daemon_controller.rb +877 -0
  164. data/lib/phusion_passenger/vendor/daemon_controller/lock_file.rb +127 -0
  165. data/lib/phusion_passenger/vendor/daemon_controller/spawn.rb +26 -0
  166. data/lib/phusion_passenger/vendor/daemon_controller/version.rb +29 -0
  167. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -1
  168. data/passenger.gemspec +0 -1
  169. data/resources/templates/config/nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems.txt.erb +27 -0
  170. data/resources/templates/standalone/config.erb +19 -15
  171. data/test/integration_tests/apache2_tests.rb +566 -566
  172. data/test/integration_tests/downloaded_binaries_tests.rb +126 -125
  173. data/test/integration_tests/native_packaging_spec.rb +296 -296
  174. data/test/integration_tests/nginx_tests.rb +393 -393
  175. data/test/integration_tests/shared/example_webapp_tests.rb +282 -280
  176. data/test/integration_tests/source_packaging_test.rb +138 -138
  177. data/test/integration_tests/spec_helper.rb +5 -5
  178. data/test/integration_tests/standalone_tests.rb +367 -367
  179. data/test/ruby/debug_logging_spec.rb +133 -133
  180. data/test/ruby/message_channel_spec.rb +186 -186
  181. data/test/ruby/rack/loader_spec.rb +28 -28
  182. data/test/ruby/rack/preloader_spec.rb +34 -34
  183. data/test/ruby/rails3.0/loader_spec.rb +12 -12
  184. data/test/ruby/rails3.0/preloader_spec.rb +18 -18
  185. data/test/ruby/rails3.1/loader_spec.rb +12 -12
  186. data/test/ruby/rails3.1/preloader_spec.rb +18 -18
  187. data/test/ruby/rails3.2/loader_spec.rb +12 -12
  188. data/test/ruby/rails3.2/preloader_spec.rb +18 -18
  189. data/test/ruby/rails4.0/loader_spec.rb +12 -12
  190. data/test/ruby/rails4.0/preloader_spec.rb +18 -18
  191. data/test/ruby/rails4.1/loader_spec.rb +12 -12
  192. data/test/ruby/rails4.1/preloader_spec.rb +18 -18
  193. data/test/ruby/request_handler_spec.rb +730 -730
  194. data/test/ruby/shared/loader_sharedspec.rb +224 -224
  195. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +327 -327
  196. data/test/ruby/shared/ruby_loader_sharedspec.rb +47 -47
  197. data/test/ruby/spec_helper.rb +65 -65
  198. data/test/ruby/standalone/runtime_installer_spec.rb +384 -384
  199. data/test/ruby/union_station_spec.rb +276 -276
  200. data/test/ruby/utils/file_system_watcher_spec.rb +220 -220
  201. data/test/ruby/utils/hosts_file_parser.rb +248 -248
  202. data/test/ruby/utils/tee_input_spec.rb +215 -215
  203. data/test/ruby/utils/unseekable_socket_spec.rb +57 -57
  204. data/test/ruby/utils_spec.rb +21 -21
  205. data/test/stub/rack/config.ru +87 -87
  206. data/test/stub/rack/library.rb +8 -8
  207. data/test/stub/rack/start.rb +30 -30
  208. data/test/support/apache2_controller.rb +191 -191
  209. data/test/support/nginx_controller.rb +90 -99
  210. data/test/support/placebo-preloader.rb +57 -57
  211. data/test/support/test_helper.rb +435 -435
  212. metadata +11 -21
  213. metadata.gz.asc +7 -7
  214. data/lib/phusion_passenger/standalone/command2.rb +0 -292
  215. data/lib/phusion_passenger/standalone/start2_command.rb +0 -799
  216. data/resources/templates/standalone/download_tool_missing.txt.erb +0 -18
  217. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -17
  218. data/resources/templates/standalone/run_installer_as_root.txt.erb +0 -8
@@ -7,351 +7,351 @@ PhusionPassenger.require_passenger_lib 'union_station/core'
7
7
  module PhusionPassenger
8
8
 
9
9
  shared_examples_for "Union Station extensions for Rails" do
10
- before :each do
11
- @logging_agent_password = "1234"
12
- @us_tmpdir = Dir.mktmpdir
13
- @dump_file = "#{@us_tmpdir}/log.txt"
14
- @agent_pid, @socket_filename, @socket_address = spawn_logging_agent(@us_tmpdir,
15
- @dump_file, @logging_agent_password)
16
- @options = {
17
- "analytics" => true,
18
- "logging_agent_address" => @socket_address,
19
- "logging_agent_username" => "logging",
20
- "logging_agent_password" => "1234",
21
- "node_name" => "localhost",
22
- "app_group_name" => "foobar"
23
- }
24
- end
10
+ before :each do
11
+ @logging_agent_password = "1234"
12
+ @us_tmpdir = Dir.mktmpdir
13
+ @dump_file = "#{@us_tmpdir}/log.txt"
14
+ @agent_pid, @socket_filename, @socket_address = spawn_logging_agent(@us_tmpdir,
15
+ @dump_file, @logging_agent_password)
16
+ @options = {
17
+ "analytics" => true,
18
+ "logging_agent_address" => @socket_address,
19
+ "logging_agent_username" => "logging",
20
+ "logging_agent_password" => "1234",
21
+ "node_name" => "localhost",
22
+ "app_group_name" => "foobar"
23
+ }
24
+ end
25
25
 
26
- after :each do
27
- FileUtils.rm_rf(@us_tmpdir) if @us_tmpdir
28
- @connection.close if @connection && @connection.closed?
29
- Process.kill('KILL', @agent_pid)
30
- Process.waitpid(@agent_pid)
31
- end
26
+ after :each do
27
+ FileUtils.rm_rf(@us_tmpdir) if @us_tmpdir
28
+ @connection.close if @connection && @connection.closed?
29
+ Process.kill('KILL', @agent_pid)
30
+ Process.waitpid(@agent_pid)
31
+ end
32
32
 
33
- def send_request_to_app(headers)
34
- headers = {
35
- "PASSENGER_TXN_ID" => "1234-abcd"
36
- }.merge(headers)
37
- return perform_request(headers)
38
- end
33
+ def send_request_to_app(headers)
34
+ headers = {
35
+ "PASSENGER_TXN_ID" => "1234-abcd"
36
+ }.merge(headers)
37
+ return perform_request(headers)
38
+ end
39
39
 
40
- def read_log
41
- return File.read(@dump_file)
42
- end
40
+ def read_log
41
+ return File.read(@dump_file)
42
+ end
43
43
 
44
- def base64(data)
45
- return [data].pack('m').gsub("\n", "")
46
- end
44
+ def base64(data)
45
+ return [data].pack('m').gsub("\n", "")
46
+ end
47
47
 
48
- it "doesn't install Union Station extensions if analytics logging is turned off" do
49
- @options.delete("analytics")
50
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
51
- class FooController < ActionController::Base
52
- def index
53
- File.open("out.txt", "w") do |f|
54
- f.write(request.env["UNION_STATION_REQUEST_TRANSACTION"].class.to_s)
55
- end
56
- render :nothing => true
57
- end
58
- end
59
- })
60
- start!(@options)
61
- send_request_to_app("PATH_INFO" => "/foo")
62
- eventually(5) do
63
- filename = "#{@stub.app_root}/out.txt"
64
- File.exist?(filename) && File.read(filename) == "NilClass"
65
- end
66
- end
48
+ it "doesn't install Union Station extensions if analytics logging is turned off" do
49
+ @options.delete("analytics")
50
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
51
+ class FooController < ActionController::Base
52
+ def index
53
+ File.open("out.txt", "w") do |f|
54
+ f.write(request.env["UNION_STATION_REQUEST_TRANSACTION"].class.to_s)
55
+ end
56
+ render :nothing => true
57
+ end
58
+ end
59
+ })
60
+ start!(@options)
61
+ send_request_to_app("PATH_INFO" => "/foo")
62
+ eventually(5) do
63
+ filename = "#{@stub.app_root}/out.txt"
64
+ File.exist?(filename) && File.read(filename) == "NilClass"
65
+ end
66
+ end
67
67
 
68
- it "logs the controller and action name" do
69
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
70
- class FooController < ActionController::Base
71
- def index
72
- render :nothing => true
73
- end
74
- end
75
- })
76
- start!(@options)
77
- send_request_to_app("PATH_INFO" => "/foo")
78
- eventually(5) do
79
- flush_logging_agent(@logging_agent_password, @socket_address)
80
- log = read_log
81
- log.include?("Controller action: FooController#index\n")
82
- end
83
- end
68
+ it "logs the controller and action name" do
69
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
70
+ class FooController < ActionController::Base
71
+ def index
72
+ render :nothing => true
73
+ end
74
+ end
75
+ })
76
+ start!(@options)
77
+ send_request_to_app("PATH_INFO" => "/foo")
78
+ eventually(5) do
79
+ flush_logging_agent(@logging_agent_password, @socket_address)
80
+ log = read_log
81
+ log.include?("Controller action: FooController#index\n")
82
+ end
83
+ end
84
84
 
85
- it "logs uncaught exceptions in controller actions" do
86
- File.write("#{@stub.app_root}/app/controllers/crash_controller.rb", %Q{
87
- class CrashController < ActionController::Base
88
- def index
89
- raise "something went wrong"
90
- end
91
- end
92
- })
93
- start!(@options)
94
- send_request_to_app("PATH_INFO" => "/crash")
95
- eventually(5) do
96
- flush_logging_agent(@logging_agent_password, @socket_address)
97
- log = read_log
98
- log.include?("Request transaction ID: 1234-abcd\n") &&
99
- log.include?("Message: " + base64("something went wrong")) &&
100
- log.include?("Class: RuntimeError") &&
101
- log.include?("Backtrace: ") &&
102
- log.include?("Controller action: CrashController#index")
103
- end
104
- end
85
+ it "logs uncaught exceptions in controller actions" do
86
+ File.write("#{@stub.app_root}/app/controllers/crash_controller.rb", %Q{
87
+ class CrashController < ActionController::Base
88
+ def index
89
+ raise "something went wrong"
90
+ end
91
+ end
92
+ })
93
+ start!(@options)
94
+ send_request_to_app("PATH_INFO" => "/crash")
95
+ eventually(5) do
96
+ flush_logging_agent(@logging_agent_password, @socket_address)
97
+ log = read_log
98
+ log.include?("Request transaction ID: 1234-abcd\n") &&
99
+ log.include?("Message: " + base64("something went wrong")) &&
100
+ log.include?("Class: RuntimeError") &&
101
+ log.include?("Backtrace: ") &&
102
+ log.include?("Controller action: CrashController#index")
103
+ end
104
+ end
105
105
 
106
- it "logs ActionController benchmarks" do
107
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
108
- class FooController < ActionController::Base
109
- def index
110
- if respond_to?(:benchmark, true)
111
- benchmark("hello") do
112
- end
113
- else
114
- ActionController::Base.benchmark("hello") do
115
- end
116
- end
117
- render :nothing => true
118
- end
119
- end
120
- })
121
- start!(@options)
122
- send_request_to_app("PATH_INFO" => "/foo")
123
- eventually(5) do
124
- flush_logging_agent(@logging_agent_password, @socket_address)
125
- log = read_log
126
- log.include?('BEGIN: BENCHMARK: hello') &&
127
- log.include?('END: BENCHMARK: hello')
128
- end
129
- end
106
+ it "logs ActionController benchmarks" do
107
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
108
+ class FooController < ActionController::Base
109
+ def index
110
+ if respond_to?(:benchmark, true)
111
+ benchmark("hello") do
112
+ end
113
+ else
114
+ ActionController::Base.benchmark("hello") do
115
+ end
116
+ end
117
+ render :nothing => true
118
+ end
119
+ end
120
+ })
121
+ start!(@options)
122
+ send_request_to_app("PATH_INFO" => "/foo")
123
+ eventually(5) do
124
+ flush_logging_agent(@logging_agent_password, @socket_address)
125
+ log = read_log
126
+ log.include?('BEGIN: BENCHMARK: hello') &&
127
+ log.include?('END: BENCHMARK: hello')
128
+ end
129
+ end
130
130
 
131
- it "logs ActionView benchmarks" do
132
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
133
- class FooController < ActionController::Base
134
- end
135
- })
136
- FileUtils.mkdir_p("#{@stub.app_root}/app/views/foo")
137
- File.write("#{@stub.app_root}/app/views/foo/index.html.erb", %Q{
138
- <% benchmark("hello") do %>
139
- <% end %>
140
- })
141
- start!(@options)
142
- send_request_to_app("PATH_INFO" => "/foo")
143
- eventually(5) do
144
- flush_logging_agent(@logging_agent_password, @socket_address)
145
- log = read_log
146
- log.include?('BEGIN: BENCHMARK: hello') &&
147
- log.include?('END: BENCHMARK: hello')
148
- end
149
- end
131
+ it "logs ActionView benchmarks" do
132
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
133
+ class FooController < ActionController::Base
134
+ end
135
+ })
136
+ FileUtils.mkdir_p("#{@stub.app_root}/app/views/foo")
137
+ File.write("#{@stub.app_root}/app/views/foo/index.html.erb", %Q{
138
+ <% benchmark("hello") do %>
139
+ <% end %>
140
+ })
141
+ start!(@options)
142
+ send_request_to_app("PATH_INFO" => "/foo")
143
+ eventually(5) do
144
+ flush_logging_agent(@logging_agent_password, @socket_address)
145
+ log = read_log
146
+ log.include?('BEGIN: BENCHMARK: hello') &&
147
+ log.include?('END: BENCHMARK: hello')
148
+ end
149
+ end
150
150
 
151
- it "logs successful SQL queries" do
152
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
153
- class FooController < ActionController::Base
154
- def index
155
- db = ActiveRecord::Base.connection
156
- db.execute("CREATE TABLE foobar (id INT)")
157
- db.execute("INSERT INTO foobar VALUES (1)")
158
- render :nothing => true
159
- end
160
- end
161
- })
162
- start!(@options.merge("active_record" => true))
163
- send_request_to_app("PATH_INFO" => "/foo")
164
- extra_info_regex = Regexp.escape(base64("SQL\nCREATE TABLE foobar (id INT)"))
165
- eventually(5) do
166
- flush_logging_agent(@logging_agent_password, @socket_address)
167
- log = read_log
168
- log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
169
- log =~ /END: DB BENCHMARK: .* \(.*\)$/
170
- end
171
- end
151
+ it "logs successful SQL queries" do
152
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
153
+ class FooController < ActionController::Base
154
+ def index
155
+ db = ActiveRecord::Base.connection
156
+ db.execute("CREATE TABLE foobar (id INT)")
157
+ db.execute("INSERT INTO foobar VALUES (1)")
158
+ render :nothing => true
159
+ end
160
+ end
161
+ })
162
+ start!(@options.merge("active_record" => true))
163
+ send_request_to_app("PATH_INFO" => "/foo")
164
+ extra_info_regex = Regexp.escape(base64("SQL\nCREATE TABLE foobar (id INT)"))
165
+ eventually(5) do
166
+ flush_logging_agent(@logging_agent_password, @socket_address)
167
+ log = read_log
168
+ log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
169
+ log =~ /END: DB BENCHMARK: .* \(.*\)$/
170
+ end
171
+ end
172
172
 
173
- it "applies event preprocessor to log events" do
174
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
175
- class FooController < ActionController::Base
176
- def index
177
- db = ActiveRecord::Base.connection
178
- db.execute("CREATE TABLE foobar (id INT)--secret")
179
- db.execute("INSERT INTO foobar VALUES (1)")
180
- render :nothing => true
181
- end
182
- end
183
- })
184
- start!(@options.merge("active_record" => true))
185
- send_request_to_app("PATH_INFO" => "/foo")
186
- extra_info_regex = Regexp.escape(base64("SQL\nCREATE TABLE foobar (id INT)--PASSWORD"))
187
- eventually(5) do
188
- flush_logging_agent(@logging_agent_password, @socket_address)
189
- log = read_log
190
- log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
191
- log =~ /END: DB BENCHMARK: .* \(.*\)$/
192
- end
193
- end
173
+ it "applies event preprocessor to log events" do
174
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
175
+ class FooController < ActionController::Base
176
+ def index
177
+ db = ActiveRecord::Base.connection
178
+ db.execute("CREATE TABLE foobar (id INT)--secret")
179
+ db.execute("INSERT INTO foobar VALUES (1)")
180
+ render :nothing => true
181
+ end
182
+ end
183
+ })
184
+ start!(@options.merge("active_record" => true))
185
+ send_request_to_app("PATH_INFO" => "/foo")
186
+ extra_info_regex = Regexp.escape(base64("SQL\nCREATE TABLE foobar (id INT)--PASSWORD"))
187
+ eventually(5) do
188
+ flush_logging_agent(@logging_agent_password, @socket_address)
189
+ log = read_log
190
+ log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
191
+ log =~ /END: DB BENCHMARK: .* \(.*\)$/
192
+ end
193
+ end
194
194
 
195
- it "logs failed SQL queries" do
196
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
197
- class FooController < ActionController::Base
198
- def index
199
- db = ActiveRecord::Base.connection
200
- db.execute("INVALID QUERY")
201
- render :nothing => true
202
- end
203
- end
204
- })
205
- start!(@options.merge("active_record" => true))
206
- send_request_to_app("PATH_INFO" => "/foo")
207
- extra_info_regex = Regexp.escape(base64("SQL\nINVALID QUERY"))
208
- if rails_version >= '3.0'
209
- pending do
210
- eventually(5) do
211
- log = read_log
212
- log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
213
- log =~ /FAIL: DB BENCHMARK: .* \(.*\)$/
214
- end
215
- end
216
- else
217
- eventually(5) do
218
- flush_logging_agent(@logging_agent_password, @socket_address)
219
- log = read_log
220
- log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
221
- log =~ /FAIL: DB BENCHMARK: .* \(.*\)$/
222
- end
223
- end
224
- end
195
+ it "logs failed SQL queries" do
196
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
197
+ class FooController < ActionController::Base
198
+ def index
199
+ db = ActiveRecord::Base.connection
200
+ db.execute("INVALID QUERY")
201
+ render :nothing => true
202
+ end
203
+ end
204
+ })
205
+ start!(@options.merge("active_record" => true))
206
+ send_request_to_app("PATH_INFO" => "/foo")
207
+ extra_info_regex = Regexp.escape(base64("SQL\nINVALID QUERY"))
208
+ if rails_version >= '3.0'
209
+ pending do
210
+ eventually(5) do
211
+ log = read_log
212
+ log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
213
+ log =~ /FAIL: DB BENCHMARK: .* \(.*\)$/
214
+ end
215
+ end
216
+ else
217
+ eventually(5) do
218
+ flush_logging_agent(@logging_agent_password, @socket_address)
219
+ log = read_log
220
+ log =~ /BEGIN: DB BENCHMARK: .* \(.*\) #{extra_info_regex}$/ &&
221
+ log =~ /FAIL: DB BENCHMARK: .* \(.*\)$/
222
+ end
223
+ end
224
+ end
225
225
 
226
- it "logs controller processing time of successful actions" do
227
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
228
- class FooController < ActionController::Base
229
- def index
230
- render :nothing => true
231
- end
232
- end
233
- })
234
- start!(@options)
235
- send_request_to_app("PATH_INFO" => "/foo")
236
- eventually(5) do
237
- flush_logging_agent(@logging_agent_password, @socket_address)
238
- log = read_log
239
- log.include?("BEGIN: framework request processing") &&
240
- log.include?("END: framework request processing")
241
- end
242
- end
226
+ it "logs controller processing time of successful actions" do
227
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
228
+ class FooController < ActionController::Base
229
+ def index
230
+ render :nothing => true
231
+ end
232
+ end
233
+ })
234
+ start!(@options)
235
+ send_request_to_app("PATH_INFO" => "/foo")
236
+ eventually(5) do
237
+ flush_logging_agent(@logging_agent_password, @socket_address)
238
+ log = read_log
239
+ log.include?("BEGIN: framework request processing") &&
240
+ log.include?("END: framework request processing")
241
+ end
242
+ end
243
243
 
244
- it "logs controller processing time of failed actions" do
245
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
246
- class FooController < ActionController::Base
247
- def index
248
- raise "crash"
249
- end
250
- end
251
- })
252
- start!(@options)
253
- send_request_to_app("PATH_INFO" => "/foo")
254
- eventually(5) do
255
- flush_logging_agent(@logging_agent_password, @socket_address)
256
- log = read_log
257
- log.include?("BEGIN: framework request processing") &&
258
- log.include?("FAIL: framework request processing")
259
- end
260
- end
244
+ it "logs controller processing time of failed actions" do
245
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
246
+ class FooController < ActionController::Base
247
+ def index
248
+ raise "crash"
249
+ end
250
+ end
251
+ })
252
+ start!(@options)
253
+ send_request_to_app("PATH_INFO" => "/foo")
254
+ eventually(5) do
255
+ flush_logging_agent(@logging_agent_password, @socket_address)
256
+ log = read_log
257
+ log.include?("BEGIN: framework request processing") &&
258
+ log.include?("FAIL: framework request processing")
259
+ end
260
+ end
261
261
 
262
- it "logs view rendering time of successful actions" do
263
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
264
- class FooController < ActionController::Base
265
- def index
266
- end
267
- end
268
- })
269
- FileUtils.mkdir_p("#{@stub.app_root}/app/views/foo")
270
- File.write("#{@stub.app_root}/app/views/foo/index.html.erb", %Q{
271
- hello world
272
- })
273
- start!(@options)
274
- send_request_to_app("PATH_INFO" => "/foo")
275
- eventually(5) do
276
- flush_logging_agent(@logging_agent_password, @socket_address)
277
- log = read_log
278
- log.include?("BEGIN: view rendering") &&
279
- log.include?("END: view rendering") &&
280
- log =~ /View rendering time: \d+$/
281
- end
282
- end
262
+ it "logs view rendering time of successful actions" do
263
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
264
+ class FooController < ActionController::Base
265
+ def index
266
+ end
267
+ end
268
+ })
269
+ FileUtils.mkdir_p("#{@stub.app_root}/app/views/foo")
270
+ File.write("#{@stub.app_root}/app/views/foo/index.html.erb", %Q{
271
+ hello world
272
+ })
273
+ start!(@options)
274
+ send_request_to_app("PATH_INFO" => "/foo")
275
+ eventually(5) do
276
+ flush_logging_agent(@logging_agent_password, @socket_address)
277
+ log = read_log
278
+ log.include?("BEGIN: view rendering") &&
279
+ log.include?("END: view rendering") &&
280
+ log =~ /View rendering time: \d+$/
281
+ end
282
+ end
283
283
 
284
- it "logs view rendering time of failed actions" do
285
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
286
- class FooController < ActionController::Base
287
- def index
288
- end
289
- end
290
- })
291
- FileUtils.mkdir_p("#{@stub.app_root}/app/views/foo")
292
- File.write("#{@stub.app_root}/app/views/foo/index.html.erb", %Q{
293
- <% raise "crash!" %>
294
- })
295
- start!(@options)
296
- send_request_to_app("PATH_INFO" => "/foo")
297
- eventually(5) do
298
- flush_logging_agent(@logging_agent_password, @socket_address)
299
- log = read_log
300
- log.include?("BEGIN: view rendering") &&
301
- log.include?("FAIL: view rendering")
302
- end
303
- end
284
+ it "logs view rendering time of failed actions" do
285
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
286
+ class FooController < ActionController::Base
287
+ def index
288
+ end
289
+ end
290
+ })
291
+ FileUtils.mkdir_p("#{@stub.app_root}/app/views/foo")
292
+ File.write("#{@stub.app_root}/app/views/foo/index.html.erb", %Q{
293
+ <% raise "crash!" %>
294
+ })
295
+ start!(@options)
296
+ send_request_to_app("PATH_INFO" => "/foo")
297
+ eventually(5) do
298
+ flush_logging_agent(@logging_agent_password, @socket_address)
299
+ log = read_log
300
+ log.include?("BEGIN: view rendering") &&
301
+ log.include?("FAIL: view rendering")
302
+ end
303
+ end
304
304
 
305
- it "logs cache hits" do
306
- if rails_version >= '2.1'
307
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
308
- class FooController < ActionController::Base
309
- def index
310
- Rails.cache.write("key1", "foo")
311
- Rails.cache.write("key2", "foo")
312
- Rails.cache.write("key3", "foo")
313
- Rails.cache.read("key1")
314
- Rails.cache.fetch("key2")
315
- Rails.cache.fetch("key3") { "bar" }
316
- render :text => 'ok'
317
- end
318
- end
319
- })
320
- start!(@options)
321
- send_request_to_app("PATH_INFO" => "/foo")
322
- eventually(5) do
323
- flush_logging_agent(@logging_agent_password, @socket_address)
324
- log = read_log
325
- log.include?("Cache hit: key1") &&
326
- log.include?("Cache hit: key2") &&
327
- log.include?("Cache hit: key3")
328
- end
329
- end
330
- end
305
+ it "logs cache hits" do
306
+ if rails_version >= '2.1'
307
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
308
+ class FooController < ActionController::Base
309
+ def index
310
+ Rails.cache.write("key1", "foo")
311
+ Rails.cache.write("key2", "foo")
312
+ Rails.cache.write("key3", "foo")
313
+ Rails.cache.read("key1")
314
+ Rails.cache.fetch("key2")
315
+ Rails.cache.fetch("key3") { "bar" }
316
+ render :text => 'ok'
317
+ end
318
+ end
319
+ })
320
+ start!(@options)
321
+ send_request_to_app("PATH_INFO" => "/foo")
322
+ eventually(5) do
323
+ flush_logging_agent(@logging_agent_password, @socket_address)
324
+ log = read_log
325
+ log.include?("Cache hit: key1") &&
326
+ log.include?("Cache hit: key2") &&
327
+ log.include?("Cache hit: key3")
328
+ end
329
+ end
330
+ end
331
331
 
332
- it "logs cache misses" do
333
- if rails_version >= '2.1'
334
- File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
335
- class FooController < ActionController::Base
336
- def index
337
- Rails.cache.read("key1")
338
- Rails.cache.fetch("key2")
339
- Rails.cache.fetch("key3") { "bar" }
340
- render :text => 'ok'
341
- end
342
- end
343
- })
344
- start!(@options)
345
- send_request_to_app("PATH_INFO" => "/foo")
346
- eventually(5) do
347
- flush_logging_agent(@logging_agent_password, @socket_address)
348
- log = read_log
349
- log.include?("Cache miss: key1") &&
350
- log.include?("Cache miss: key2") &&
351
- log =~ /Cache miss \(\d+\): key3/
352
- end
353
- end
354
- end
332
+ it "logs cache misses" do
333
+ if rails_version >= '2.1'
334
+ File.write("#{@stub.app_root}/app/controllers/foo_controller.rb", %Q{
335
+ class FooController < ActionController::Base
336
+ def index
337
+ Rails.cache.read("key1")
338
+ Rails.cache.fetch("key2")
339
+ Rails.cache.fetch("key3") { "bar" }
340
+ render :text => 'ok'
341
+ end
342
+ end
343
+ })
344
+ start!(@options)
345
+ send_request_to_app("PATH_INFO" => "/foo")
346
+ eventually(5) do
347
+ flush_logging_agent(@logging_agent_password, @socket_address)
348
+ log = read_log
349
+ log.include?("Cache miss: key1") &&
350
+ log.include?("Cache miss: key2") &&
351
+ log =~ /Cache miss \(\d+\): key3/
352
+ end
353
+ end
354
+ end
355
355
  end
356
356
 
357
357
  end # module PhusionPassenger