# Phusion Passenger - https://www.phusionpassenger.com/ # Copyright (c) 2010-2017 Phusion Holding B.V. # # "Passenger", "Phusion Passenger" and "Union Station" are registered # trademarks of Phusion Holding B.V. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. ### Integration tests ### def integration_test_dependencies(runtime_target_name) if string_option('PASSENGER_LOCATION_CONFIGURATION_FILE') return [] else return [runtime_target_name, NATIVE_SUPPORT_TARGET].compact end end desc "Run all integration tests" task 'test:integration' => ['test:integration:apache2', 'test:integration:nginx'] do end dependencies = integration_test_dependencies(:_apache2) desc "Run Apache 2 integration tests" task 'test:integration:apache2' => dependencies do command = "bundle exec rspec -c -f d --tty integration_tests/apache2_tests.rb" if boolean_option('SUDO') command = "#{PlatformInfo.ruby_sudo_command} -E #{command}" end if grep = string_option('E') command << " -e #{shesc grep}" end sh "cd test && exec #{command}" end dependencies = integration_test_dependencies(:_nginx) desc "Run Nginx integration tests" task 'test:integration:nginx' => dependencies do command = "bundle exec rspec -c -f d --tty integration_tests/nginx_tests.rb" if boolean_option('SUDO') command = "#{PlatformInfo.ruby_sudo_command} -E #{command}" end if grep = string_option('E') command << " -e #{shesc grep}" end repeat = true while repeat sh "cd test && exec #{command}" repeat = boolean_option('REPEAT') end end dependencies = integration_test_dependencies(:_nginx) desc "Run Passenger Standalone integration tests" task 'test:integration:standalone' => dependencies do command = "bundle exec rspec -c -f d --tty integration_tests/standalone_tests.rb" if grep = string_option('E') command << " -e #{shesc grep}" end sh "cd test && exec #{command}" end desc "Run native packaging tests" task 'test:integration:native_packaging' do command = "bundle exec rspec -c -f d --tty integration_tests/native_packaging_spec.rb" if boolean_option('SUDO') command = "#{PlatformInfo.ruby_sudo_command} -E #{command}" end if grep = string_option('E') command << " -e #{shesc grep}" end case PlatformInfo.os_name_simple when "linux" if PlatformInfo.linux_distro_tags.include?(:debian) rubylibdir = RbConfig::CONFIG["vendordir"] command = "env NATIVE_PACKAGING_METHOD=deb " + "LOCATIONS_INI=#{rubylibdir}/phusion_passenger/locations.ini " + command elsif PlatformInfo.linux_distro_tags.include?(:redhat) vendorlibdir = RbConfig::CONFIG["vendorlibdir"] locations_ini = File.join(vendorlibdir, "phusion_passenger/locations.ini") command = "env NATIVE_PACKAGING_METHOD=rpm " + "LOCATIONS_INI=#{locations_ini} " + command else abort "Unsupported Linux distribution" end when "macosx" # The tests put /usr/bin and /usr/sbin first in PATH, causing /usr/bin/ruby to be used. # We should run the tests in /usr/bin/ruby too, so that native_support is compiled for # the same Ruby. brew_prefix = `env -P /usr/local/bin:/opt/homebrew/bin brew --prefix` prefix = "env NATIVE_PACKAGING_METHOD=homebrew " + "LOCATIONS_INI=#{brew_prefix}/Cellar/passenger/#{PhusionPassenger::VERSION_STRING}/libexec/src/ruby_supportlib/phusion_passenger/locations.ini" if PlatformInfo.in_rvm? prefix << " rvm-exec system /usr/bin/ruby -S" end command = "#{prefix} #{command}" else abort "Unsupported operating system" end sh "cd test && exec #{command}" end dependencies = integration_test_dependencies(:_apache2) desc "Run the 'apache2' integration test infinitely, and abort if/when it fails" task 'test:restart' => dependencies do color_code_start = "\e[33m\e[44m\e[1m" color_code_end = "\e[0m" i = 1 while true do puts "#{color_code_start}Test run #{i} (press Ctrl-C multiple times to abort)#{color_code_end}" command = "bundle exec rspec -c -f d --tty integration_tests/apache2_tests.rb" if grep = string_option('E') command << " -e #{shesc grep}" end sh "cd test && exec #{command}" i += 1 end end desc "Run source packaging tests" task 'test:source_packaging' do command = 'bundle exec rspec -f d -c test/integration_tests/source_packaging_test.rb' if grep = string_option('E') command << " -e #{shesc grep}" end sh(command) end