Project

General

Profile

Actions

Bug #5822

closed

testunit に -j オプションを渡すと稀にテストを実行せずに終了する

Added by nagachika (Tomoyuki Chikanaga) over 12 years ago. Updated over 12 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.0.0dev (2011-12-28 trunk 34149) [i686-linux]
Backport:
[ruby-dev:45061]

Description

make test-all TESTS="-j2 ruby/test_require.rb"
のように test-all の引数に -j と1ファイルだけ与えると、稀にテストをひとつも実行せずに終了することがあります。

@tasks が空になった瞬間に worker が全て :prepare または :ready だと実行中の worker が居ないと判断して終了してしまうようです。

以下のような変更で一応発生しなくなりました。一応というのは status の状態遷移をちゃんと確認していないからです。

diff --git a/lib/test/unit.rb b/lib/test/unit.rb
index eb0666a..00313a3 100644
--- a/lib/test/unit.rb
+++ b/lib/test/unit.rb
@@ -457,7 +457,9 @@ module Test
bang = $1
worker.status = :ready
if @tasks.empty?

  •              break unless @workers.find{|x| x.status == :running }
    
  •              unless @workers.find{|x| [:running, :prepare].include? x.status}
    
  •                break
    
  •              end
               else
                 if @options[:separate] && bang.empty?
                   @workers_hash.delete worker.io
    
Actions #1

Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r34155.
Tomoyuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • lib/test/unit.rb (Test::Unit::Runner::Worker#_run_parallels): fix
    premature exit when all workers' status are :ready or :prepare.
    [ruby-dev:45061] [Bug #5822]
Actions

Also available in: Atom PDF

Like0
Like0