Sha256: 7a5f8f6dac36fff58665d5d372e5de4f8340fa4a1fbb1ace2d0ff4529e2fa0f6

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

require "webrick"
require "webrick/httpproxy"
require "webrick/https"

class StubHTTPServer
  def initialize
    @port = 50000
    begin
      @server = create_server(@port)
    rescue Errno::EADDRINUSE
      @port += 1
      retry
    end
  end

  def create_server(port)
    WEBrick::HTTPServer.new(
      BindAddress: '127.0.0.1',
      Port: port,
      AccessLog: [],
      Logger: NullLogger.new
    )
  end

  def start
    Thread.new { @server.start }
  end

  def stop
    @server.shutdown
  end

  def base_uri
    URI("http://127.0.0.1:#{@port}")
  end

  def setup_response(uri_path, &action)
    @server.mount_proc(uri_path, action)
  end
end

class StubProxyServer < StubHTTPServer
  attr_reader :request_count
  attr_accessor :connect_status

  def initialize
    super
    @request_count = 0
  end

  def create_server(port)
    WEBrick::HTTPProxyServer.new(
      BindAddress: '127.0.0.1',
      Port: port,
      AccessLog: [],
      Logger: NullLogger.new,
      ProxyContentHandler: proc do |req,res|
        if !@connect_status.nil?
          res.status = @connect_status
        end
        @request_count += 1
      end
    )
  end
end

class NullLogger
  def method_missing(*)
    self
  end
end

def with_server(server = nil)
  server = StubHTTPServer.new if server.nil?
  begin
    server.start
    yield server
  ensure
    server.stop
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ld-eventsource-1.0.3 spec/http_stub.rb
ld-eventsource-1.0.2 spec/http_stub.rb
ld-eventsource-1.0.1 spec/http_stub.rb
ld-eventsource-1.0.0 spec/http_stub.rb