Sha256: 8226d90934399c6bb6a8ca764ccc5ec5dc56404b93499da24ac9dbb2fa5daf3e

Contents?: true

Size: 1.9 KB

Versions: 10

Compression:

Stored size: 1.9 KB

Contents

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

module Thin
  module 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
end

module AgileProxy
  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 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

10 entries across 10 versions & 1 rubygems

Version Path
agile-proxy-0.1.11 spec/support/test_server.rb
agile-proxy-0.1.10 spec/support/test_server.rb
agile-proxy-0.1.9 spec/support/test_server.rb
agile-proxy-0.1.8 spec/support/test_server.rb
agile-proxy-0.1.7 spec/support/test_server.rb
agile-proxy-0.1.6 spec/support/test_server.rb
agile-proxy-0.1.5 spec/support/test_server.rb
agile-proxy-0.1.4 spec/support/test_server.rb
agile-proxy-0.1.2 spec/support/test_server.rb
agile-proxy-0.1.0 spec/support/test_server.rb