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.rb32
1 files changed, 28 insertions, 4 deletions
diff --git a/test/ruby/test_sleep.rb b/test/ruby/test_sleep.rb
index 675fdc9747..7ef962db4a 100644
--- a/test/ruby/test_sleep.rb
+++ b/test/ruby/test_sleep.rb
@@ -1,10 +1,34 @@
+# frozen_string_literal: false
require 'test/unit'
+require 'etc'
+require 'timeout'
class TestSleep < Test::Unit::TestCase
def test_sleep_5sec
- start = Time.now
- sleep 5
- slept = Time.now-start
- assert_in_delta(5.0, slept, 0.1, "[ruby-core:18015]: longer than expected")
+ 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