rf-web/vendor/bundle/gems/eventmachine-1.2.7/tests/test_connection_write.rb
2019-10-21 10:18:17 +02:00

36 lines
1014 B
Ruby

require 'em_test_helper'
class TestConnectionWrite < Test::Unit::TestCase
# This test takes advantage of the fact that EM::_RunSelectOnce iterates over the connections twice:
# - once to determine which ones to call Write() on
# - and once to call Write() on each of them.
#
# But state may change in the meantime before Write() is finally called.
# And that is what we try to exploit to get Write() to be called when bWatchOnly is true, and bNotifyWritable is false,
# to cause an assertion failure.
module SimpleClient
def notify_writable
$conn2.notify_writable = false # Being naughty in callback
# If this doesn't crash anything, the test passed!
end
end
def test_with_naughty_callback
EM.run do
r1, _ = IO.pipe
r2, _ = IO.pipe
# Adding EM.watches
$conn1 = EM.watch(r1, SimpleClient)
$conn2 = EM.watch(r2, SimpleClient)
$conn1.notify_writable = true
$conn2.notify_writable = true
EM.stop
end
end
end