diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-06-03 01:04:30 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-06-03 01:04:30 +0000 |
commit | eab03f35ccc90fee976c6d7742890c51ecd04086 (patch) | |
tree | 9fce9541156b6adb9176ee0a7d6ac2f5a68ad505 /test | |
parent | 33cfc7250bbad67938b9852ca277c047395fda9e (diff) | |
download | ruby-eab03f35ccc90fee976c6d7742890c51ecd04086.tar.gz |
test: attempt to reduce failures in assert_cpu_usage_low
Try to make this test less fragile by taking into account
the worst case kernel timing resolution.
[ruby-core:81540]
* test/lib/test/unit/assertions.rb (assert_cpu_usage_low):
clamp measurement to minimum measurable time and warn
about tests being too short to measure
* test/ruby/test_io.rb (test_copy_stream_no_busy_wait):
remove pct kwarg and rely on assert_cpu_usage_low defaults
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/lib/test/unit/assertions.rb | 16 | ||||
-rw-r--r-- | test/ruby/test_io.rb | 2 |
2 files changed, 16 insertions, 2 deletions
diff --git a/test/lib/test/unit/assertions.rb b/test/lib/test/unit/assertions.rb index fcd9795402..34dbe18738 100644 --- a/test/lib/test/unit/assertions.rb +++ b/test/lib/test/unit/assertions.rb @@ -715,10 +715,24 @@ eom skip end - def assert_cpu_usage_low(msg = nil, pct: 0.015) + def assert_cpu_usage_low(msg = nil, pct: 0.01) require 'benchmark' + tms = Benchmark.measure(msg || '') { yield } max = pct * tms.real + if tms.real < 0.1 # TIME_QUANTUM_USEC in thread_pthread.c + warn "test #{msg || 'assert_cpu_usage_low'} too short to be accurate" + end + + # kernel resolution can limit the minimum time we can measure + # [ruby-core:81540] + min_hz = windows? ? 67 : 100 + min_measurable = 1.0 / min_hz + min_measurable *= 1.10 # add a little (10%) to account for misc. overheads + if max < min_measurable + max = min_measurable + end + assert_operator tms.total, :<=, max, msg end diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 5c98a59be0..2cd60a4fca 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -536,7 +536,7 @@ class TestIO < Test::Unit::TestCase msg = 'r58534 [ruby-core:80969] [Backport #13533]' IO.pipe do |r,w| r.nonblock = true - assert_cpu_usage_low(msg, pct: 0.11) do + assert_cpu_usage_low(msg) do th = Thread.new { IO.copy_stream(r, IO::NULL) } sleep 0.1 w.close |