154 lines
3.6 KiB
Ruby
154 lines
3.6 KiB
Ruby
|
require 'test/spec'
|
||
|
require 'testrequest'
|
||
|
require 'rack/server'
|
||
|
require 'open3'
|
||
|
|
||
|
begin
|
||
|
require "mongrel"
|
||
|
|
||
|
context "rackup" do
|
||
|
include TestRequest::Helpers
|
||
|
|
||
|
def run_rackup(*args)
|
||
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
||
|
flags = args.first
|
||
|
@host = options[:host] || "0.0.0.0"
|
||
|
@port = options[:port] || 9292
|
||
|
|
||
|
Dir.chdir("#{root}/test/rackup") do
|
||
|
@in, @rackup, @err = Open3.popen3("#{Gem.ruby} -S #{rackup} #{flags}")
|
||
|
end
|
||
|
|
||
|
return if options[:port] == false
|
||
|
|
||
|
# Wait until the server is available
|
||
|
begin
|
||
|
GET("/")
|
||
|
rescue
|
||
|
sleep 0.05
|
||
|
retry
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def output
|
||
|
@rackup.read
|
||
|
end
|
||
|
|
||
|
after do
|
||
|
# This doesn't actually return a response, so we rescue
|
||
|
GET "/die" rescue nil
|
||
|
|
||
|
Dir["#{root}/**/*.pid"].each do |file|
|
||
|
File.delete(file)
|
||
|
end
|
||
|
|
||
|
File.delete("#{root}/log_output") if File.exist?("#{root}/log_output")
|
||
|
end
|
||
|
|
||
|
specify "rackup" do
|
||
|
run_rackup
|
||
|
response["PATH_INFO"].should.equal '/'
|
||
|
response["test.$DEBUG"].should.be false
|
||
|
response["test.$EVAL"].should.be nil
|
||
|
response["test.$VERBOSE"].should.be false
|
||
|
response["test.Ping"].should.be nil
|
||
|
response["SERVER_SOFTWARE"].should.not =~ /webrick/
|
||
|
end
|
||
|
|
||
|
specify "rackup --help" do
|
||
|
run_rackup "--help", :port => false
|
||
|
output.should.match /--port/
|
||
|
end
|
||
|
|
||
|
specify "rackup --port" do
|
||
|
run_rackup "--port 9000", :port => 9000
|
||
|
response["SERVER_PORT"].should.equal "9000"
|
||
|
end
|
||
|
|
||
|
specify "rackup --debug" do
|
||
|
run_rackup "--debug"
|
||
|
response["test.$DEBUG"].should.be true
|
||
|
end
|
||
|
|
||
|
specify "rackup --eval" do
|
||
|
run_rackup %{--eval "BUKKIT = 'BUKKIT'"}
|
||
|
response["test.$EVAL"].should.equal "BUKKIT"
|
||
|
end
|
||
|
|
||
|
specify "rackup --warn" do
|
||
|
run_rackup %{--warn}
|
||
|
response["test.$VERBOSE"].should.be true
|
||
|
end
|
||
|
|
||
|
specify "rackup --include" do
|
||
|
run_rackup %{--include /foo/bar}
|
||
|
response["test.$LOAD_PATH"].should.include "/foo/bar"
|
||
|
end
|
||
|
|
||
|
specify "rackup --require" do
|
||
|
run_rackup %{--require ping}
|
||
|
response["test.Ping"].should.equal "constant"
|
||
|
end
|
||
|
|
||
|
specify "rackup --server" do
|
||
|
run_rackup %{--server webrick}
|
||
|
response["SERVER_SOFTWARE"].should =~ /webrick/i
|
||
|
end
|
||
|
|
||
|
specify "rackup --host" do
|
||
|
run_rackup %{--host 127.0.0.1}, :host => "127.0.0.1"
|
||
|
response["REMOTE_ADDR"].should.equal "127.0.0.1"
|
||
|
end
|
||
|
|
||
|
specify "rackup --daemonize --pid" do
|
||
|
run_rackup %{--daemonize --pid testing.pid}
|
||
|
status.should.be 200
|
||
|
@rackup.should.be.eof?
|
||
|
Dir["#{root}/**/testing.pid"].should.not.be.empty?
|
||
|
end
|
||
|
|
||
|
specify "rackup --pid" do
|
||
|
run_rackup %{--pid testing.pid}
|
||
|
status.should.be 200
|
||
|
Dir["#{root}/**/testing.pid"].should.not.be.empty?
|
||
|
end
|
||
|
|
||
|
specify "rackup --version" do
|
||
|
run_rackup %{--version}, :port => false
|
||
|
output.should =~ /1.0/
|
||
|
end
|
||
|
|
||
|
specify "rackup --env development includes lint" do
|
||
|
run_rackup
|
||
|
GET("/broken_lint")
|
||
|
status.should.be 500
|
||
|
end
|
||
|
|
||
|
specify "rackup --env deployment does not include lint" do
|
||
|
run_rackup %{--env deployment}
|
||
|
GET("/broken_lint")
|
||
|
status.should.be 200
|
||
|
end
|
||
|
|
||
|
specify "rackup --env none does not include lint" do
|
||
|
run_rackup %{--env none}
|
||
|
GET("/broken_lint")
|
||
|
status.should.be 200
|
||
|
end
|
||
|
|
||
|
specify "rackup --env deployment does log" do
|
||
|
run_rackup %{--env deployment}
|
||
|
log = File.read(response["test.stderr"])
|
||
|
log.should.be.empty?
|
||
|
end
|
||
|
|
||
|
specify "rackup --env none does not log" do
|
||
|
run_rackup %{--env none}
|
||
|
GET("/")
|
||
|
log = File.read(response["test.stderr"])
|
||
|
log.should.be.empty?
|
||
|
end
|
||
|
end
|
||
|
rescue LoadError
|
||
|
$stderr.puts "Skipping rackup --server tests (mongrel is required). `gem install thin` and try again."
|
||
|
end
|