diaspora/features/support/server.rb

73 lines
1.5 KiB
Ruby

ENV["RAILS_ENV"] ||= "test"
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') unless defined?(Rails)
require 'timeout'
require 'socket'
require 'singleton'
require 'capybara/rails'
require 'capybara/cucumber'
require 'capybara/session'
class TestServerFixture
# simple interface to script/server
def self.is_port_open(host, port, tries)
for i in (1..tries)
begin
Timeout::timeout(2) do
begin
s = TCPSocket.new(host, port)
s.close
return true
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
sleep( 2)
end
end
rescue Timeout::Error
return false
end
end
return false
end
def self.start_if_needed
unless TestServerFixture.is_port_open( "localhost", 3000, 2)
system( "script/server -d")
if TestServerFixture.is_port_open( "localhost", 3000, 30)
puts "script/server started"
else
puts "Error: can't start script/server"
end
end
end
end
class CapybaraSettings
# simple save/restore for Capybara
include Singleton
def save
begin
@run_server = Capybara.run_server
@driver = Capybara.current_driver
@host = Capybara.app_host
rescue => e
puts "Saving exception: " + e.inspect
end
end
def restore
begin
Capybara.current_driver = @driver
Capybara.app_host = @host
Capybara.run_server = @run_server
rescue => e
puts "Restore exception: " + e.inspect
end
end
end