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 | ||