Sha256: 8bf69e27f8af8a98a829a8441827470deeeab7f3684e6450e12cfc7651dd5715

Contents?: true

Size: 1.3 KB

Versions: 17

Compression:

Stored size: 1.3 KB

Contents

require "socket"
require "timeout"
require "webrick"

module Teabag
  class Server

    def initialize
      @port = find_available_port
      Thin::Logging.silent = true if defined?(Thin)
    end

    def start
      @thread = Thread.new do
        server = Rack::Server.new(rack_options)
        server.start
      end
      wait_until_started
    rescue => e
      raise "Cannot start server: #{e.message}"
    end

    def wait_until_started
      Timeout.timeout(Teabag.configuration.server_timeout) { @thread.join(0.1) until responsive? }
    rescue Timeout::Error
      raise "Server failed to start. You may need to increase the timeout configuration."
    end

    def responsive?
      return false if @thread && @thread.join(0)
      TCPSocket.new("127.0.0.1", port).close
      return true
    rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
      return false
    end

    def url
      "http://127.0.0.1:#{port}"
    end

    def port
      @port
    end

    protected

    def rack_options
      {
        app: Rails.application,
        Port: port,
        environment: "test",
        AccessLog: [],
        Logger: WEBrick::Log::new(nil, 0)
      }
    end

    def find_available_port
      server = TCPServer.new("127.0.0.1", 0)
      server.addr[1]
    ensure
      server.close if server
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
teabag-0.5.2 lib/teabag/server.rb
teabag-0.5.1 lib/teabag/server.rb
teabag-0.5.0 lib/teabag/server.rb
teabag-0.4.6 lib/teabag/server.rb
teabag-0.4.5 lib/teabag/server.rb
teabag-0.4.4 lib/teabag/server.rb
teabag-0.4.3 lib/teabag/server.rb
teabag-0.4.2 lib/teabag/server.rb
teabag-0.4.1 lib/teabag/server.rb
teabag-0.4.0 lib/teabag/server.rb
teabag-0.3.6 lib/teabag/server.rb
teabag-0.3.5 lib/teabag/server.rb
teabag-0.3.4 lib/teabag/server.rb
teabag-0.3.3 lib/teabag/server.rb
teabag-0.3.2 lib/teabag/server.rb
teabag-0.3.1 lib/teabag/server.rb
teabag-0.3.0 lib/teabag/server.rb