use S::Runner for integration tests.

This commit is contained in:
Nick Sutterer 2014-02-12 11:17:06 +11:00 committed by Zachary Scott
parent ded7827b83
commit accf5f0f93
1 changed files with 4 additions and 45 deletions

View File

@ -1,13 +1,12 @@
require 'sinatra/base'
require 'rbconfig'
require 'open-uri'
require 'net/http'
require 'timeout'
require 'sinatra/runner'
module IntegrationHelper
class BaseServer
class BaseServer < Sinatra::Runner
extend Enumerable
attr_accessor :server, :port, :pipe
attr_accessor :server, :port
alias name server
def self.all
@ -39,31 +38,10 @@ module IntegrationHelper
return unless installed?
kill
@log = ""
@pipe = IO.popen(command)
@started = Time.now
warn "#{server} up and running on port #{port}" if ping
super
at_exit { kill }
end
def ping(timeout = 30)
loop do
return if alive?
if Time.now - @started > timeout
$stderr.puts command, log
fail "timeout"
else
sleep 0.1
end
end
end
def alive?
3.times { get('/ping') }
true
rescue Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, SystemCallError, OpenURI::HTTPError, Timeout::Error
false
end
def get_stream(url = "/stream", &block)
Net::HTTP.start '127.0.0.1', port do |http|
request = Net::HTTP::Get.new url
@ -82,17 +60,6 @@ module IntegrationHelper
end
end
def get(url)
Timeout.timeout(1) { open("http://127.0.0.1:#{port}#{url}").read }
end
def log
@log ||= ""
loop { @log << @pipe.read_nonblock(1) }
rescue Exception
@log
end
def installed?
return @installed unless @installed.nil?
s = server == 'HTTP' ? 'net/http/server' : server
@ -120,14 +87,6 @@ module IntegrationHelper
end
end
def kill
return unless pipe
Process.kill("KILL", pipe.pid)
rescue NotImplementedError
system "kill -9 #{pipe.pid}"
rescue Errno::ESRCH
end
def webrick?
name.to_s == "webrick"
end