Sha256: 3c3c600e128ba5f289623ef3528f9e91d315c967d58063a3d356ba8f50f0f4ed

Contents?: true

Size: 1.64 KB

Versions: 82

Compression:

Stored size: 1.64 KB

Contents

require 'socket'
require 'json'

class FakeWireServer
  def initialize(port, protocol_table)
    @port, @protocol_table = port, protocol_table
    @delays = {}
  end

  def run
    @server = TCPServer.open(@port)
    loop { handle_connections }
  end
  
  def delay_response(message, delay)
    @delays[message] = delay
  end

  private

  def handle_connections
    Thread.start(@server.accept) { |socket| open_session_on socket }
  end

  def open_session_on(socket)
    begin
      SocketSession.new(socket, @protocol_table, @delays).start
    rescue Exception => e
      raise e
    ensure
      socket.close
    end
  end
  
  class SocketSession
    def initialize(socket, protocol, delays)
      @socket = socket
      @protocol = protocol
      @delays = delays
    end

    def start
      while message = @socket.gets
        handle(message)
      end
    end

    private
    
    def handle(data)
      if protocol_entry = response_to(data.strip)
        sleep delay(data)
        send_response(protocol_entry['response'])
      else
        serialized_exception = { :message => "Not understood: #{data}", :backtrace => [] }
        send_response(['fail', serialized_exception ].to_json)
      end
    rescue => e
      send_response(['fail', { :message => e.message, :backtrace => e.backtrace, :exception => e.class } ].to_json)
    end

    def response_to(data)
      @protocol.detect do |entry| 
        JSON.parse(entry['request']) == JSON.parse(data)
      end
    end

    def send_response(response)
      @socket.puts response + "\n"
    end
    
    def delay(data)
      message = JSON.parse(data.strip)[0]
      @delays[message.to_sym] || 0
    end
  end
end

Version data entries

82 entries across 80 versions & 12 rubygems

Version Path
candlepin-api-0.4.0 bundle/ruby/1.9.1/gems/cucumber-1.2.1/legacy_features/support/fake_wire_server.rb
candlepin-api-0.4.0 bundle/ruby/1.8/gems/cucumber-1.2.1/legacy_features/support/fake_wire_server.rb
candlepin-api-0.4.0 bundle/ruby/gems/cucumber-1.2.1/legacy_features/support/fake_wire_server.rb
librarian-puppet-0.9.9 vendor/gems/ruby/1.9.1/gems/cucumber-1.2.1/legacy_features/support/fake_wire_server.rb
librarian-puppet-0.9.8 vendor/gems/ruby/1.9.1/gems/cucumber-1.2.1/legacy_features/support/fake_wire_server.rb
librarian-puppet-0.9.4 vendor/gems/ruby/1.8/gems/cucumber-1.2.1/legacy_features/support/fake_wire_server.rb
casecumber-1.0.2.1 legacy_features/support/fake_wire_server.rb
casecumber-1.2.1.cb2 legacy_features/support/fake_wire_server.rb
librarian-puppet-0.9.3 vendor/gems/ruby/1.8/gems/cucumber-1.2.1/legacy_features/support/fake_wire_server.rb
cucumber-1.2.1 legacy_features/support/fake_wire_server.rb
resque-pool-0.3.0 vendor/bundle/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb
ftl-0.2.0 vendor/bundle/gems/cucumber-1.2.0/legacy_features/support/fake_wire_server.rb
cucumber-1.2.0 legacy_features/support/fake_wire_server.rb
frameworks-capybara-0.2.0.rc6 vendor/bundle/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb
frameworks-capybara-0.2.0.rc5 vendor/bundle/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb
frameworks-capybara-0.2.0.rc4 vendor/bundle/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb
frameworks-capybara-0.2.0.rc3 vendor/bundle/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb
frameworks-capybara-0.2.0.rc2 vendor/bundle/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb
resque-pool-0.3.0.beta.2 vendor/bundle/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb
radiant-1.0.0 ruby-debug/ruby/1.8/gems/cucumber-1.1.9/legacy_features/support/fake_wire_server.rb