summaryrefslogtreecommitdiff
path: root/test/ruby/test_sleep.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_sleep.rb')
-rw-r--r--test/ruby/test_sleep.rb35
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