test/integration_tests/apache2_tests.rb in passenger-3.9.2.beta vs test/integration_tests/apache2_tests.rb in passenger-4.0.0.rc4
- old
+ new
@@ -9,64 +9,69 @@
require 'integration_tests/mycook_spec'
require 'integration_tests/cgi_environment_spec'
require 'integration_tests/hello_world_rack_spec'
require 'integration_tests/hello_world_wsgi_spec'
-# TODO: test the 'RailsUserSwitching' and 'RailsDefaultUser' option.
+# TODO: test the 'PassengerUserSwitching' and 'PassengerDefaultUser' option.
# TODO: test custom page caching directory
describe "Apache 2 module" do
before :all do
check_hosts_configuration
- @apache2 = Apache2Controller.new
@passenger_temp_dir = "/tmp/passenger-test.#{$$}"
Dir.mkdir(@passenger_temp_dir)
ENV['PASSENGER_TEMP_DIR'] = @passenger_temp_dir
- @apache2.set(:passenger_temp_dir => @passenger_temp_dir)
- if Process.uid == 0
- @apache2.set(
- :www_user => CONFIG['normal_user_1'],
- :www_group => Etc.getgrgid(Etc.getpwnam(CONFIG['normal_user_1']).gid).name
- )
- end
end
after :all do
- @apache2.stop
+ @apache2.stop if @apache2
FileUtils.chmod_R(0777, @passenger_temp_dir)
FileUtils.rm_rf(@passenger_temp_dir)
end
before :each do
File.open("test.log", "a") do |f|
# Make sure that all Apache log output is prepended by the test description
# so that we know which messages are associated with which tests.
- f.puts "\n#### #{self.class.description} : #{description}"
+ f.puts "\n#### #{Time.now}: #{example.full_description}"
end
end
+
+ def create_apache2_controller
+ @apache2 = Apache2Controller.new
+ @apache2.set(:passenger_temp_dir => @passenger_temp_dir)
+ if Process.uid == 0
+ @apache2.set(
+ :www_user => CONFIG['normal_user_1'],
+ :www_group => Etc.getgrgid(Etc.getpwnam(CONFIG['normal_user_1']).gid).name
+ )
+ end
+ end
describe ": MyCook(tm) beta running on root URI" do
before :all do
+ create_apache2_controller
@web_server_supports_chunked_transfer_encoding = true
@base_uri = ""
@server = "http://passenger.test:#{@apache2.port}"
@apache2 << "RailsMaxPoolSize 1"
- @stub = RailsStub.new('2.3/mycook')
+ @stub = ClassicRailsStub.new('rails_apps/2.3/mycook')
@apache2.set_vhost("passenger.test", "#{@stub.full_app_root}/public")
@apache2.start
end
after :all do
@stub.destroy
+ @apache2.stop if @apache2
end
before :each do
@stub.reset
end
it_should_behave_like "MyCook(tm) beta"
- include_shared_example_group "CGI environment variables compliance"
+ include_examples "CGI environment variables compliance"
it "doesn't block Rails while an upload is in progress" do
get('/') # Force spawning so that the timeout below is enough.
socket = TCPSocket.new('passenger.test', @apache2.port)
@@ -121,13 +126,14 @@
end
end
describe ": MyCook(tm) beta running in a sub-URI" do
before :all do
+ create_apache2_controller
@web_server_supports_chunked_transfer_encoding = true
@base_uri = "/mycook"
- @stub = RailsStub.new('2.3/mycook')
+ @stub = ClassicRailsStub.new('rails_apps/2.3/mycook')
FileUtils.rm_rf('tmp.webdir')
FileUtils.mkdir_p('tmp.webdir')
FileUtils.cp_r('stub/zsfa/.', 'tmp.webdir')
FileUtils.ln_sf(@stub.full_app_root + "/public", 'tmp.webdir/mycook')
@@ -138,31 +144,33 @@
end
after :all do
FileUtils.rm_rf('tmp.webdir')
@stub.destroy
+ @apache2.stop if @apache2
end
before :each do
@server = "http://passenger.test:#{@apache2.port}/mycook"
@stub.reset
end
it_should_behave_like "MyCook(tm) beta"
- include_shared_example_group "CGI environment variables compliance"
+ include_examples "CGI environment variables compliance"
it "does not interfere with the root website" do
@server = "http://passenger.test:#{@apache2.port}"
get('/').should =~ /Zed, you rock\!/
end
end
describe "compatibility with other modules" do
before :all do
+ create_apache2_controller
@apache2 << "RailsMaxPoolSize 1"
- @mycook = RailsStub.new('2.3/mycook')
+ @mycook = ClassicRailsStub.new('rails_apps/2.3/mycook')
@mycook_url_root = "http://1.passenger.test:#{@apache2.port}"
@apache2.set_vhost("1.passenger.test", "#{@mycook.full_app_root}/public") do |vhost|
vhost << "RewriteEngine on"
vhost << "RewriteRule ^/rewritten_welcome$ /welcome [PT,QSA,L]"
vhost << "RewriteRule ^/rewritten_cgi_environment$ /welcome/cgi_environment [PT,QSA,L]"
@@ -170,10 +178,11 @@
@apache2.start
end
after :all do
@mycook.destroy
+ @apache2.stop if @apache2
end
before :each do
@mycook.reset
@server = @mycook_url_root
@@ -206,98 +215,57 @@
end
end
describe "configuration options" do
before :all do
+ create_apache2_controller
@apache2 << "PassengerMaxPoolSize 3"
- @mycook = RailsStub.new('2.3/mycook')
+ @mycook = ClassicRailsStub.new('rails_apps/2.3/mycook')
@mycook_url_root = "http://1.passenger.test:#{@apache2.port}"
@apache2.set_vhost('1.passenger.test', "#{@mycook.full_app_root}/public") do |vhost|
vhost << "AllowEncodedSlashes on"
end
- @apache2.set_vhost('2.passenger.test', "#{@mycook.full_app_root}/public") do |vhost|
- vhost << "RailsAutoDetect off"
- end
- @foobar = RailsStub.new('2.3/foobar')
+ @foobar = ClassicRailsStub.new('rails2.3')
@foobar_url_root = "http://3.passenger.test:#{@apache2.port}"
@apache2.set_vhost('3.passenger.test', "#{@foobar.full_app_root}/public") do |vhost|
vhost << "RailsEnv development"
vhost << "PassengerSpawnMethod conservative"
vhost << "PassengerRestartDir #{@foobar.full_app_root}/public"
end
- @mycook2 = RailsStub.new('2.3/mycook')
+ @mycook2 = ClassicRailsStub.new('rails_apps/2.3/mycook')
@mycook2_url_root = "http://4.passenger.test:#{@apache2.port}"
@apache2.set_vhost('4.passenger.test', "#{@mycook2.full_app_root}/sites/some.site/public") do |vhost|
vhost << "PassengerAppRoot #{@mycook2.full_app_root}"
end
- # These are used by global queueing tests.
- @mycook3 = RailsStub.new('2.3/mycook')
- @mycook3_url_root = "http://5.passenger.test:#{@apache2.port}"
- @apache2.set_vhost('5.passenger.test', "#{@mycook3.full_app_root}/sites/some.site/public") do |vhost|
- vhost << "PassengerAppRoot #{@mycook3.full_app_root}"
- vhost << "PassengerMinInstances 3"
- end
- @mycook4 = RailsStub.new('2.3/mycook')
- @mycook4_url_root = "http://6.passenger.test:#{@apache2.port}"
- @apache2.set_vhost('6.passenger.test', "#{@mycook4.full_app_root}/public") do |vhost|
- vhost << "PassengerUseGlobalQueue on"
- vhost << "PassengerMinInstances 3"
- end
-
@apache2.start
end
after :all do
@mycook.destroy
@foobar.destroy
@mycook2.destroy
- @mycook3.destroy
- @mycook4.destroy
+ @apache2.stop if @apache2
end
before :each do
@mycook.reset
@foobar.reset
@mycook2.reset
- @mycook3.reset
- @mycook4.reset
end
- it "ignores the Rails application if RailsAutoDetect is off" do
- @server = "http://2.passenger.test:#{@apache2.port}"
- get('/').should_not =~ /MyCook/
- end
-
- specify "setting RailsAutoDetect for one virtual host should not interfere with others" do
- @server = @mycook_url_root
- get('/').should =~ /MyCook/
- end
-
specify "RailsEnv is per-virtual host" do
@server = @mycook_url_root
get('/welcome/rails_env').should == "production"
@server = @foobar_url_root
get('/foo/rails_env').should == "development"
end
- it "supports conservative spawning" do
- @server = @foobar_url_root
- # TODO: I think this assertion is no longer valid now that
- # smart-lv2 is the default spawn method...
- get('/foo/backtrace').should_not =~ /framework_spawner/
- end
-
- specify "PassengerSpawnMethod spawning is per-virtual host" do
- @server = @mycook_url_root
- get('/welcome/backtrace').should =~ /application_spawner/
- end
-
it "looks for restart.txt in the directory specified by PassengerRestartDir" do
@server = @foobar_url_root
controller = "#{@foobar.app_root}/app/controllers/bar_controller.rb"
restart_file = "#{@foobar.app_root}/public/restart.txt"
@@ -323,92 +291,10 @@
File.touch(restart_file, now - 10)
get('/bar').should == "oh hai"
end
- describe "PassengerUseGlobalQueue" do
- before :each do
-
- end
-
- after :each do
- # Restart Apache in order to reset the application pool's state.
- @apache2.stop
- end
-
- it "works and is per-virtual host" do
- @server = @mycook4_url_root
-
- # Spawn 3 application processes.
- get('/')
- eventually do
- inspect_server(:processes).size == 3
- end
-
- # Reserve all application pool slots.
- threads = []
- 3.times do |i|
- thread = Thread.new do
- File.unlink("#{@mycook4.app_root}/#{i}.txt") rescue nil
- get("/welcome/sleep_until_exists?name=#{i}.txt")
- end
- threads << thread
- end
-
- # Wait until all application instances are waiting
- # for the quit file.
- eventually(5) do
- File.exist?("#{@mycook4.app_root}/waiting_0.txt") &&
- File.exist?("#{@mycook4.app_root}/waiting_1.txt") &&
- File.exist?("#{@mycook4.app_root}/waiting_2.txt")
- end
- processes = inspect_server(:processes)
- processes.should have(3).items
- processes.each do |process|
- process.sessions.should == 1
- end
- inspect_server(:global_queue_size).should == 0
-
- # While all slots are reserved, make two more requests.
- first_request_done = false
- second_request_done = false
- thread = Thread.new do
- get("/")
- first_request_done = true
- end
- threads << thread
- thread = Thread.new do
- get("/")
- second_request_done = true
- end
- threads << thread
-
- # These requests should both be waiting on the global queue.
- sleep 1
- processes = inspect_server(:processes)
- processes.should have(3).items
- processes.each do |process|
- process.sessions.should == 1
- end
- inspect_server(:global_queue_size).should == 2
-
- # Both requests should be processed if one application instance frees up.
- File.touch("#{@mycook4.app_root}/2.txt")
- eventually(5) do
- first_request_done && second_request_done
- end
- inspect_server(:global_queue_size).should == 0
-
- File.touch("#{@mycook4.app_root}/0.txt")
- File.touch("#{@mycook4.app_root}/1.txt")
- File.touch("#{@mycook4.app_root}/2.txt")
- threads.each do |thread|
- thread.join
- end
- end
- end
-
describe "PassengerAppRoot" do
before :each do
@server = @mycook2_url_root
end
@@ -452,66 +338,56 @@
####################################
end
describe "error handling" do
before :all do
+ create_apache2_controller
FileUtils.rm_rf('tmp.webdir')
FileUtils.mkdir_p('tmp.webdir')
@webdir = File.expand_path('tmp.webdir')
@apache2.set_vhost('1.passenger.test', @webdir) do |vhost|
vhost << "RailsBaseURI /app-with-nonexistant-rails-version/public"
vhost << "RailsBaseURI /app-that-crashes-during-startup/public"
- vhost << "RailsBaseURI /app-with-crashing-vendor-rails/public"
end
- @mycook = RailsStub.new('2.3/mycook')
+ @mycook = ClassicRailsStub.new('rails_apps/2.3/mycook')
@mycook_url_root = "http://2.passenger.test:#{@apache2.port}"
@apache2.set_vhost('2.passenger.test', "#{@mycook.full_app_root}/public")
@apache2.start
end
after :all do
FileUtils.rm_rf('tmp.webdir')
@mycook.destroy
+ @apache2.stop if @apache2
end
before :each do
@server = "http://1.passenger.test:#{@apache2.port}"
@error_page_signature = /<meta name="generator" content="Phusion Passenger">/
@mycook.reset
end
it "displays an error page if the Rails application requires a nonexistant Rails version" do
- RailsStub.use('2.3/foobar', "#{@webdir}/app-with-nonexistant-rails-version") do |stub|
+ ClassicRailsStub.use('rails2.3', "#{@webdir}/app-with-nonexistant-rails-version") do |stub|
File.write(stub.environment_rb) do |content|
content.sub(/^RAILS_GEM_VERSION = .*$/, "RAILS_GEM_VERSION = '1.9.1234'")
end
get("/app-with-nonexistant-rails-version/public").should =~ @error_page_signature
end
end
it "displays an error page if the Rails application crashes during startup" do
- RailsStub.use('2.3/foobar', "#{@webdir}/app-that-crashes-during-startup") do |stub|
+ ClassicRailsStub.use('rails2.3', "#{@webdir}/app-that-crashes-during-startup") do |stub|
File.prepend(stub.environment_rb, "raise 'app crash'")
result = get("/app-that-crashes-during-startup/public")
result.should =~ @error_page_signature
result.should =~ /app crash/
end
end
- it "displays an error page if the Rails application's vendor'ed Rails crashes" do
- RailsStub.use('2.3/foobar', "#{@webdir}/app-with-crashing-vendor-rails") do |stub|
- stub.use_vendor_rails('minimal')
- File.append("#{stub.app_root}/vendor/rails/railties/lib/initializer.rb",
- "raise 'vendor crash'")
- result = get("/app-with-crashing-vendor-rails/public")
- result.should =~ @error_page_signature
- result.should =~ /vendor crash/
- end
- end
-
it "displays an error if a filesystem permission error was encountered while autodetecting the application type" do
@server = @mycook_url_root
# This test used to fail because we were improperly blocking mod_autoindex,
# resulting in it displaying a directory index before we could display an
# error message.
@@ -520,11 +396,11 @@
File.unlink("#{@mycook.app_root}/public/.htaccess")
get('/').should =~ /Please fix the relevant file permissions/
end
it "doesn't display a Ruby spawn error page if PassengerFriendlyErrorPages is off" do
- RailsStub.use('2.3/foobar', "#{@webdir}/app-that-crashes-during-startup") do |stub|
+ ClassicRailsStub.use('rails2.3', "#{@webdir}/app-that-crashes-during-startup") do |stub|
File.write("#{stub.app_root}/public/.htaccess", "PassengerFriendlyErrorPages off")
File.prepend(stub.environment_rb, "raise 'app crash'")
result = get("/app-that-crashes-during-startup/public")
result.should_not =~ @error_page_signature
result.should_not =~ /app crash/
@@ -534,19 +410,21 @@
describe "HelperServer" do
AdminTools = PhusionPassenger::AdminTools
before :all do
- @mycook = RailsStub.new('2.3/mycook')
+ create_apache2_controller
+ @mycook = ClassicRailsStub.new('rails_apps/2.3/mycook')
@mycook_url_root = "http://1.passenger.test:#{@apache2.port}"
@apache2.set_vhost('1.passenger.test', "#{@mycook.full_app_root}/public")
@apache2.start
@server = "http://1.passenger.test:#{@apache2.port}"
end
after :all do
@mycook.destroy
+ @apache2.stop if @apache2
end
before :each do
@mycook.reset
end
@@ -582,32 +460,35 @@
processes = instance.connect(:passenger_status) do
instance.processes
end
processes.should have(1).item
- processes[0].group.name.should == @mycook.full_app_root
+ processes[0].group.name.should == @mycook.full_app_root + "#default"
processes[0].processed.should == 1
end
end
describe "Rack application running in root URI" do
before :all do
+ create_apache2_controller
@stub = RackStub.new('rack')
@apache2.set_vhost('passenger.test', @stub.full_app_root + "/public")
@apache2.start
@server = "http://passenger.test:#{@apache2.port}"
end
after :all do
@stub.destroy
+ @apache2.stop if @apache2
end
it_should_behave_like "HelloWorld Rack application"
end
describe "Rack application running in sub-URI" do
before :all do
+ create_apache2_controller
FileUtils.rm_rf('tmp.webdir')
FileUtils.mkdir_p('tmp.webdir')
@stub = RackStub.new('rack')
@apache2.set_vhost('passenger.test', File.expand_path('tmp.webdir')) do |vhost|
FileUtils.ln_s(@stub.full_app_root + "/public", 'tmp.webdir/rack')
@@ -618,40 +499,45 @@
end
after :all do
@stub.destroy
FileUtils.rm_rf('tmp.webdir')
+ @apache2.stop if @apache2
end
it_should_behave_like "HelloWorld Rack application"
end
describe "Rack application running within Rails directory structure" do
before :all do
- @stub = RailsStub.new('2.3/mycook')
+ create_apache2_controller
+ @stub = ClassicRailsStub.new('rails_apps/2.3/mycook')
FileUtils.cp_r("stub/rack/.", @stub.app_root)
@apache2.set_vhost('passenger.test', @stub.full_app_root + "/public")
@apache2.start
@server = "http://passenger.test:#{@apache2.port}"
end
after :all do
@stub.destroy
+ @apache2.stop if @apache2
end
it_should_behave_like "HelloWorld Rack application"
end
describe "WSGI application running in root URI" do
before :all do
+ create_apache2_controller
@stub = Stub.new('wsgi')
@apache2.set_vhost('passenger.test', @stub.full_app_root + "/public")
@apache2.start
@server = "http://passenger.test:#{@apache2.port}"
end
after :all do
@stub.destroy
+ @apache2.stop if @apache2
end
it_should_behave_like "HelloWorld WSGI application"
end