Sha256: d9d12ff4b763ce105cb3b855af4e9e93d0f5332ee5cda3277301f0fcf4ec0d84

Contents?: true

Size: 1.88 KB

Versions: 4

Compression:

Stored size: 1.88 KB

Contents

require 'eventmachine'
require 'thin'
require 'faraday'

module Thin::Backends
  class TcpServer
    def get_port
      # seriously, eventmachine, how hard does getting a port have to be?
      Socket.unpack_sockaddr_in(EM.get_sockname(@signature)).first
    end
  end
end

module Billy
  module TestServer
    def initialize
      Thin::Logging.silent = true
    end

    def start_test_servers
      q = Queue.new
      Thread.new do
        EM.run do
          echo = echo_app_setup

          http_server = start_server(echo)
          q.push http_server.backend.get_port

          https_server = start_server(echo, true)
          q.push https_server.backend.get_port

          echo_error = echo_app_setup(500)
          error_server = start_server(echo_error)
          q.push error_server.backend.get_port
        end
      end

      @http_url  = "http://localhost:#{q.pop}"
      @https_url = "https://localhost:#{q.pop}"
      @error_url = "http://localhost:#{q.pop}"
    end

    def echo_app_setup(response_code = 200)
      counter = 0
      Proc.new do |env|
        req_body = env['rack.input'].read
        request_info = "#{env['REQUEST_METHOD']} #{env['PATH_INFO']}"
        res_body = request_info
        res_body += "\n#{req_body}" unless req_body.empty?
        counter += 1
        [
          response_code,
          { 'HTTP-X-EchoServer' => request_info,
            'HTTP-X-EchoCount' => "#{counter}" },
          [res_body]
        ]
      end
    end

    def start_server(echo, ssl = false)
      http_server = Thin::Server.new '127.0.0.1', 0, echo
      if ssl
        http_server.ssl = true
        http_server.ssl_options = {
          :private_key_file => File.expand_path('../../fixtures/test-server.key', __FILE__),
          :cert_chain_file => File.expand_path('../../fixtures/test-server.crt', __FILE__)
        }
      end
      http_server.start
      http_server
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
puffing-billy-0.4.1 spec/support/test_server.rb
puffing-billy-0.4.0 spec/support/test_server.rb
puffing-billy-0.3.0 spec/support/test_server.rb
puffing-billy-0.2.3 spec/support/test_server.rb