class DummyServer

Attributes

address[R]
port[R]

Public Class Methods

new(port) click to toggle source
# File spec/dummy_server.rb, line 23
def initialize port
  @address = '127.0.0.1'
  @port = port.to_i
  @tcp_server = TCPServer.new(@address, @port)
  @socket_threads = []
  @sockets = []
  @fail_next = false
  reset_requests
end

Protected Class Methods

start(port) { |server| ... } click to toggle source
# File spec/dummy_server.rb, line 131
def start port, &block
  server = self.new(port)
  server.start
  if block_given?
    begin
      yield(server)
    ensure
      server.stop
    end
  else
    server
  end
end

Public Instance Methods

fail_next() click to toggle source
# File spec/dummy_server.rb, line 71
def fail_next
  @fail_next = true
end
requests() click to toggle source
# File spec/dummy_server.rb, line 85
def requests
  @requests
end
reset_requests() click to toggle source
# File spec/dummy_server.rb, line 81
def reset_requests
  @requests = []
end
start() click to toggle source
# File spec/dummy_server.rb, line 33
def start
  server = self

   @loop_thread = Thread.new do
     loop do
        @socket_threads << Thread.start(@tcp_server.accept) do |socket|
          @sockets << socket
          loop do

            request = read_request(socket)

            server.requests << request

             if server.should_fail?
               socket.shutdown
               server.failed!
               break
             end

            case request_uri(request)
            when %rsleep\/(.+)/ then sleep($1.to_f)
            when %rclose/       then socket.shutdown
            end

            respond(socket, 'ok') unless socket.closed?

          end
        end  
     end 
   end

  h = Net::HTTP.new(@address, @port)
  h.start
  h.request(Net::HTTP::Get.new('/ping'))
  h.finish

end
stop() click to toggle source
# File spec/dummy_server.rb, line 75
def stop
  @tcp_server.close
  @loop_thread.kill
  @socket_threads.each(&:kill)
end

Protected Instance Methods

failed!() click to toggle source
# File spec/dummy_server.rb, line 95
def failed!
  @fail_next = false
end
read_request(socket) click to toggle source
# File spec/dummy_server.rb, line 105
def read_request socket
  clength = 0
  request = ""
  while data = socket.gets
    request << data
    if data.index "Content-Length: "
      clength = data["Content-Length: ".length..data.length].to_i
    end
    break if data == "\r\n"
  end
  request << socket.read(clength) unless clength == 0
  request
end
request_uri(request) click to toggle source
# File spec/dummy_server.rb, line 100
def request_uri request
  request.split(%r /)[1]
end
respond(socket, content) click to toggle source
# File spec/dummy_server.rb, line 120
  def respond socket, content
    socket.write "HTTP/1.1 200 OK
Date: #{Time.now}
Content-Type: text/plain
Content-Length: 2

OK"
    socket.flush
  end
should_fail?() click to toggle source
# File spec/dummy_server.rb, line 90
def should_fail?
  @fail_next == true
end