diff options
Diffstat (limited to 'test/ruby/test_sleep.rb')
| -rw-r--r-- | test/ruby/test_sleep.rb | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/test/ruby/test_sleep.rb b/test/ruby/test_sleep.rb index 61002b8b18..7ef962db4a 100644 --- a/test/ruby/test_sleep.rb +++ b/test/ruby/test_sleep.rb @@ -1,17 +1,34 @@ # frozen_string_literal: false require 'test/unit' require 'etc' +require 'timeout' class TestSleep < Test::Unit::TestCase def test_sleep_5sec - GC.disable - start = Process.clock_gettime(Process::CLOCK_MONOTONIC) - sleep 5 - slept = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start - bottom = 5.0 - assert_operator(slept, :>=, bottom) - assert_operator(slept, :<=, 6.0, "[ruby-core:18015]: longer than expected") - ensure - GC.enable + EnvUtil.without_gc do + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) + sleep 5 + slept = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start + bottom = 5.0 + assert_operator(slept, :>=, bottom) + assert_operator(slept, :<=, 6.0, "[ruby-core:18015]: longer than expected") + end + end + + def test_sleep_forever_not_woken_by_sigchld + begin + t = Thread.new do + sleep 0.5 + `echo hello` + end + + assert_raise Timeout::Error do + Timeout.timeout 2 do + sleep # Should block forever + end + end + ensure + t.join + end end end |
