features/support/fake_wire_server.rb in cucumber-0.5.1 vs features/support/fake_wire_server.rb in cucumber-0.5.2

- old
+ new

@@ -2,37 +2,43 @@ 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).start + SocketSession.new(socket, @protocol_table, @delays).start rescue Exception => e raise e ensure socket.close end end class SocketSession - def initialize(socket, protocol) + def initialize(socket, protocol, delays) @socket = socket @protocol = protocol + @delays = delays end def start while message = @socket.gets handle(message) @@ -41,23 +47,31 @@ 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 \ No newline at end of file