My team cut out a Rack application to simulate errors from the server. It works quite well (in Firefox). Here are some excerpts from the code:
class NoResponseRack
attr_reader :requests
def initialize disconnected_mode
@disconnected_mode = disconnected_mode
@requests = []
@sleeping_threads = []
end
def call(env)
@requests.push(env)
case @disconnected_mode
when :elb_pool_empty
@sleeping_threads << Thread.current
sleep 65
@sleeping_threads.delete Thread.current
[504, {}, ['']]
when :server_maintenance
[200, {}, ['status_message=Atlas is down for maintenance.']]
else
[999, {}, [""]]
end
end
def wakeup_sleeping_threads
@sleeping_threads.each &:wakeup
@sleeping_threads.clear
end
end
def go_disconnected_with_proxy disconnected_mode=:server_error
if $proxy_server_disconnected
puts 'going DISconnected'
$current_proxy = NoResponseRack.new disconnected_mode
rack_mappings.unshift([nil, "", /^(.*)/n, $current_proxy])
$proxy_server_disconnected = false
end
end
def rack_app
Capybara::current_session.driver.app
end
def rack_mappings
rack_app.instance_variable_get(:@mapping)
end
source
share