PHP 8.2.31
Preview: spec_server.rb Size: 5.57 KB
//proc/thread-self/root/opt/alt/ruby22/lib64/ruby/gems/2.2.0/gems/rack-1.6.4/test/spec_server.rb

require 'rack'
require 'rack/server'
require 'tempfile'
require 'socket'
require 'open-uri'

describe Rack::Server do

  def app
    lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['success']] }
  end

  def with_stderr
    old, $stderr = $stderr, StringIO.new
    yield $stderr
  ensure
    $stderr = old
  end

  it "overrides :config if :app is passed in" do
    server = Rack::Server.new(:app => "FOO")
    server.app.should.equal "FOO"
  end

  should "prefer to use :builder when it is passed in" do
    server = Rack::Server.new(:builder => "run lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['success']] }")
    server.app.class.should.equal Proc
    Rack::MockRequest.new(server.app).get("/").body.to_s.should.equal 'success'
  end

  should "allow subclasses to override middleware" do
    server = Class.new(Rack::Server).class_eval { def middleware; Hash.new [] end; self }
    server.middleware['deployment'].should.not.equal []
    server.new(:app => 'foo').middleware['deployment'].should.equal []
  end

  should "allow subclasses to override default middleware" do
    server = Class.new(Rack::Server).instance_eval { def default_middleware_by_environment; Hash.new [] end; self }
    server.middleware['deployment'].should.equal []
    server.new(:app => 'foo').middleware['deployment'].should.equal []
  end

  should "only provide default middleware for development and deployment environments" do
    Rack::Server.default_middleware_by_environment.keys.sort.should.equal %w(deployment development)
  end

  should "always return an empty array for unknown environments" do
    server = Rack::Server.new(:app => 'foo')
    server.middleware['production'].should.equal []
  end

  should "not include Rack::Lint in deployment environment" do
    server = Rack::Server.new(:app => 'foo')
    server.middleware['deployment'].flatten.should.not.include(Rack::Lint)
  end

  should "not include Rack::ShowExceptions in deployment environment" do
    server = Rack::Server.new(:app => 'foo')
    server.middleware['deployment'].flatten.should.not.include(Rack::ShowExceptions)
  end

  should "include Rack::TempfileReaper in deployment environment" do
    server = Rack::Server.new(:app => 'foo')
    server.middleware['deployment'].flatten.should.include(Rack::TempfileReaper)
  end

  should "support CGI" do
    begin
      o, ENV["REQUEST_METHOD"] = ENV["REQUEST_METHOD"], 'foo'
      server = Rack::Server.new(:app => 'foo')
      server.server.name =~ /CGI/
      Rack::Server.logging_middleware.call(server).should.eql(nil)
    ensure
      ENV['REQUEST_METHOD'] = o
    end
  end

  should "be quiet if said so" do
    server = Rack::Server.new(:app => "FOO", :quiet => true)
    Rack::Server.logging_middleware.call(server).should.eql(nil)
  end

  should "use a full path to the pidfile" do
    # avoids issues with daemonize chdir
    opts = Rack::Server.new.send(:parse_options, %w[--pid testing.pid])
    opts[:pid].should.eql(::File.expand_path('testing.pid'))
  end

  should "run a server" do
    pidfile = Tempfile.open('pidfile') { |f| break f }.path
    FileUtils.rm pidfile
    server = Rack::Server.new(
      :app         => app,
      :environment => 'none',
      :pid         => pidfile,
      :Port        => TCPServer.open('127.0.0.1', 0){|s| s.addr[1] },
      :Host        => '127.0.0.1',
      :daemonize   => false,
      :server      => 'webrick'
    )
    t = Thread.new { server.start { |s| Thread.current[:server] = s } }
    t.join(0.01) until t[:server] && t[:server].status != :Stop
    body = open("http://127.0.0.1:#{server.options[:Port]}/") { |f| f.read }
    body.should.eql('success')

    Process.kill(:INT, $$)
    t.join
    open(pidfile) { |f| f.read.should.eql $$.to_s }
  end

  should "check pid file presence and running process" do
    pidfile = Tempfile.open('pidfile') { |f| f.write($$); break f }.path
    server = Rack::Server.new(:pid => pidfile)
    server.send(:pidfile_process_status).should.eql :running
  end

  should "check pid file presence and dead process" do
    dead_pid = `echo $$`.to_i
    pidfile = Tempfile.open('pidfile') { |f| f.write(dead_pid); break f }.path
    server = Rack::Server.new(:pid => pidfile)
    server.send(:pidfile_process_status).should.eql :dead
  end

  should "check pid file presence and exited process" do
    pidfile = Tempfile.open('pidfile') { |f| break f }.path
    ::File.delete(pidfile)
    server = Rack::Server.new(:pid => pidfile)
    server.send(:pidfile_process_status).should.eql :exited
  end

  should "check pid file presence and not owned process" do
    pidfile = Tempfile.open('pidfile') { |f| f.write(1); break f }.path
    server = Rack::Server.new(:pid => pidfile)
    server.send(:pidfile_process_status).should.eql :not_owned
  end

  should "not write pid file when it is created after check" do
    pidfile = Tempfile.open('pidfile') { |f| break f }.path
    ::File.delete(pidfile)
    server = Rack::Server.new(:pid => pidfile)
    ::File.open(pidfile, 'w') { |f| f.write(1) }
    with_stderr do |err|
      should.raise(SystemExit) do
        server.send(:write_pid)
      end
      err.rewind
      output = err.read
      output.should.match(/already running/)
      output.should.include? pidfile
    end
  end

  should "inform the user about existing pidfiles with running processes" do
    pidfile = Tempfile.open('pidfile') { |f| f.write(1); break f }.path
    server = Rack::Server.new(:pid => pidfile)
    with_stderr do |err|
      should.raise(SystemExit) do
        server.start
      end
      err.rewind
      output = err.read
      output.should.match(/already running/)
      output.should.include? pidfile
    end
  end

end

Directory Contents

Dirs: 7 × Files: 51

Name Size Perms Modified Actions
builder DIR
- drwxr-xr-x 2024-03-03 22:53:16
Edit Download
cgi DIR
- drwxr-xr-x 2024-03-03 22:53:16
Edit Download
multipart DIR
- drwxr-xr-x 2024-03-03 22:53:16
Edit Download
rackup DIR
- drwxr-xr-x 2024-03-03 22:53:16
Edit Download
- drwxr-xr-x 2024-03-03 22:53:16
Edit Download
static DIR
- drwxr-xr-x 2024-03-03 22:53:16
Edit Download
- drwxr-xr-x 2024-03-03 22:53:16
Edit Download
298 B lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.26 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
8.08 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.20 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
6.20 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.11 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.92 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
3.87 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.37 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
3.28 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
544 B lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.80 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.47 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
10.04 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.19 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
3.84 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
3.08 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
6.32 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.87 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.36 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
19.23 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.23 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
4.33 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
622 B lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.38 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.81 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
9.34 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
5.73 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
23.62 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
514 B lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.83 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
42.52 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
10.08 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.78 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.53 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
4.12 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
5.57 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.29 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
12.94 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
11.12 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
6.53 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.01 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.74 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
4.60 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.57 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
2.55 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
8.82 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
24.89 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
504 B lrw-r--r-- 2019-12-05 22:56:09
Edit Download
5.50 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download
1.96 KB lrw-r--r-- 2019-12-05 22:56:09
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).