[ruby-trunk - Bug #5822][Open] testunit に -j オプションを渡すと稀にテストを実行せずに終了する

Issue #5822 has been reported by Tomoyuki C…


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

Author: Tomoyuki C.
Status: Open
Priority: Normal
Assignee: Shota F.
Category: lib
Target version:
ruby -v: ruby 2.0.0dev (2011-12-28 trunk 34149) [i686-linux]

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