Bug #4683 » 0002-test_io-add-test-for-copy_stream-failing-on-EINTR.patch
test/ruby/test_io.rb | ||
---|---|---|
}
|
||
end
|
||
def trapping_usr1
|
||
@usr1_rcvd = 0
|
||
trap(:USR1) { @usr1_rcvd += 1 }
|
||
yield
|
||
ensure
|
||
trap(:USR1, "DEFAULT")
|
||
end
|
||
def test_pipe
|
||
r, w = IO.pipe
|
||
assert_instance_of(IO, r)
|
||
... | ... | |
result = t.value
|
||
assert_equal(megacontent, result)
|
||
}
|
||
with_socketpair {|s1, s2|
|
||
begin
|
||
s1.nonblock = true
|
||
rescue Errno::EBADF
|
||
skip "nonblocking IO for pipe is not implemented"
|
||
end
|
||
trapping_usr1 do
|
||
nr = 10
|
||
pid = fork do
|
||
s1.close
|
||
IO.select([s2])
|
||
Process.kill(:USR1, Process.ppid)
|
||
s2.read
|
||
end
|
||
s2.close
|
||
nr.times do
|
||
assert_equal megacontent.bytesize, IO.copy_stream("megasrc", s1)
|
||
end
|
||
assert_equal(1, @usr1_rcvd)
|
||
s1.close
|
||
_, status = Process.waitpid2(pid)
|
||
assert status.success?, status.inspect
|
||
end
|
||
}
|
||
end
|
||
}
|
||
end
|