Issue #5132 has been updated by Ayumu AIZAWA.


=begin
すみません、大事な情報が漏れていました。
Makefileを作る際に、./configure --prefix=/home/ayumin/ruby のようにインストール先を指定しています。

エラーのログを消すために以下のようなパッチをあてて実行すると
 
 $ git diff
 diff --git a/lib/test/unit.rb b/lib/test/unit.rb
 index 09708d1..33301f9 100644
 --- a/lib/test/unit.rb
 +++ b/lib/test/unit.rb
 @@ -493,35 +493,38 @@ module Test
                  end
              end
            end
 -          @workers.each do |worker|
 +          if @workers
 +            @workers.each do |worker|
 +              begin
 +                timeout(1) do
 +                  worker.puts "quit"
 +                end
 +              rescue Errno::EPIPE
 +              rescue Timeout::Error
 +              end
 +              worker.close
 +            end
              begin
 -              timeout(1) do
 -                worker.puts "quit"
 +              timeout(0.2*@workers.size) do
 +                Process.waitall
                end
 -            rescue Errno::EPIPE
              rescue Timeout::Error
 -            end
 -            worker.close
 -          end
 -          begin
 -            timeout(0.2*@workers.size) do
 -              Process.waitall
 -            end
 -          rescue Timeout::Error
 -            @workers.each do |worker|
 -              begin
 -                Process.kill(:KILL,worker.pid)
 -              rescue Errno::ESRCH; end
 +              @workers.each do |worker|
 +                begin
 +                  Process.kill(:KILL,worker.pid)
 +                rescue Errno::ESRCH; end
 +              end
              end
            end
 -
            if @interrupt || @options[:no_retry] || @need_quit
 -            rep.each do |r|
 -              report.push(*r[:report])
 +            unless rep.empty?
 +              rep.each do |r|
 +                report.push(*r[:report])
 +              end
 +              @errors   += rep.map{|x| x[:result][0] }.inject(:+)
 +              @failures += rep.map{|x| x[:result][1] }.inject(:+)
 +              @skips    += rep.map{|x| x[:result][2] }.inject(:+)
              end
 -            @errors   += rep.map{|x| x[:result][0] }.inject(:+)
 -            @failures += rep.map{|x| x[:result][1] }.inject(:+)
 -            @skips    += rep.map{|x| x[:result][2] }.inject(:+)
            else
              puts ""
              puts "Retrying..."
 
以下のように出力されるようになり、(({lib/test/unit.rb:240})) の (({IO.popen})) の呼び出しの時に(({ miniruby})) ではなく インストール先のrubyを参照しようとしているように見えます。

 $ make test-all TESTS='-v  test/testunit/test_parallel.rb'
 ./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems "./test/runner.rb" --ruby="./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems" -v  test/testunit/test_parallel.rb
 Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems" -v
 
 # Running tests:
 
 TestParallel::TestParallel#test_ignore_jzero = 0.05 s = .
 TestParallel::TestParallel#test_jobs_status = 0.05 s = F
 TestParallel::TestParallel#test_no_retry_option = 0.05 s = F
 TestParallel::TestParallel#test_should_retry_failed_on_workers = 0.05 s = .
 TestParallel::TestParallel#test_should_run_all_without_any_leaks = 0.05 s = F
 TestParallel::TestParallelWorker#test_accept_run_command_multiple_times = 0.05 s = .
 TestParallel::TestParallelWorker#test_done = 0.06 s = .
 TestParallel::TestParallelWorker#test_p = 0.05 s = .
 TestParallel::TestParallelWorker#test_quit = 0.04 s = .
 TestParallel::TestParallelWorker#test_run = 0.05 s = .
 TestParallel::TestParallelWorker#test_run_multiple_testcase_in_one_file = 0.05 s = .
 
 
 Finished tests in 0.543272s, 20.2477 tests/s, 73.6279 assertions/s.
 
   1) Failure:
 test_jobs_status(TestParallel::TestParallel) [/home/ayumin/github/ruby/test/testunit/test_parallel.rb:174]:
 Expected /\d+=ptest_(first|second|third|forth) */ to match "Run options: -j t1 --jobs-status\n\n# Running tests:\n\n\nRetrying...\n\n\n\n/home/ayumin/github/ruby/lib/test/unit.rb:240:in `popen': No such file or directory - /home/ayumin/tmp/ruby/bin/ruby (Errno::ENOENT)\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:240:in `launch'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:405:in `block in _run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `times'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `each'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `map'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `_run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:564:in `_run_suites'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:746:in `_run_anything'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:909:in `run_tests'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:896:in `block in _run'\n\tfrom 
 /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `each'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `_run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:884:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:21:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:633:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:637:in `run'\n\tfrom /home/ayumin/github/ruby/test/testunit/tests_for_parallel/runner.rb:10:in `<main>'\n".
 
   2) Failure:
 test_no_retry_option(TestParallel::TestParallel) [/home/ayumin/github/ruby/test/testunit/test_parallel.rb:168]:
 Expected /^ +\d+\) Failure:\ntest_fail_at_worker\(TestD\)/ to match "Run options: -j t1 --no-retry\n\n# Running tests:\n\n\n\n/home/ayumin/github/ruby/lib/test/unit.rb:240:in `popen': No such file or directory - /home/ayumin/tmp/ruby/bin/ruby (Errno::ENOENT)\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:240:in `launch'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:405:in `block in _run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `times'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `each'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `map'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `_run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:564:in `_run_suites'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:746:in `_run_anything'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:909:in `run_tests'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:896:in `block in _run'\n\tfrom /home/ayumi
 n/github/ruby/lib/minitest/unit.rb:895:in `each'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `_run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:884:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:21:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:633:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:637:in `run'\n\tfrom /home/ayumin/github/ruby/test/testunit/tests_for_parallel/runner.rb:10:in `<main>'\n".
 
   3) Failure:
 test_should_run_all_without_any_leaks(TestParallel::TestParallel) [/home/ayumin/github/ruby/test/testunit/test_parallel.rb:155]:
 Expected /^[SF\.]{7}$/ to match "Run options: -j t1\n\n# Running tests:\n\n\nRetrying...\n\n\n\n/home/ayumin/github/ruby/lib/test/unit.rb:240:in `popen': No such file or directory - /home/ayumin/tmp/ruby/bin/ruby (Errno::ENOENT)\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:240:in `launch'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:405:in `block in _run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `times'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `each'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `map'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:404:in `_run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:564:in `_run_suites'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:746:in `_run_anything'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:909:in `run_tests'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:896:in `block in _run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/uni
 t.rb:895:in `each'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `_run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:884:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:21:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:633:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:637:in `run'\n\tfrom /home/ayumin/github/ruby/test/testunit/tests_for_parallel/runner.rb:10:in `<main>'\n".
 
 11 tests, 40 assertions, 3 failures, 0 errors, 0 skips
 make: *** [yes-test-all] エラー 3
 
=end

----------------------------------------
Bug #5132: test_parallel.rb fail when it run before 'make install'
http://redmine.ruby-lang.org/issues/5132

Author: Ayumu AIZAWA
Status: Open
Priority: Normal
Assignee: Shota Fukumori
Category: test
Target version: 1.9.x
ruby -v: 1.9


make install を実行する前にmake test-all をすると、test_parallel.rb が失敗します。
trunkとruby_1_9_3 で再現することまで確認しました。

$ uname -a
Linux Ubuntu11 2.6.38-10-generic #46-Ubuntu SMP Tue Jun 28 15:07:17 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux 
$ make test-all TESTS='-v test/testunit/test_parallel.rb'
./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems "./test/runner.rb" --ruby="./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems" -v test/testunit/test_parallel.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems" -v

# Running tests:

TestParallel::TestParallel#test_ignore_jzero = 0.05 s = .
TestParallel::TestParallel#test_jobs_status = 0.05 s = F
TestParallel::TestParallel#test_no_retry_option = 0.05 s = F
TestParallel::TestParallel#test_should_retry_failed_on_workers = 0.05 s = F
TestParallel::TestParallel#test_should_run_all_without_any_leaks = 0.05 s = F
TestParallel::TestParallelWorker#test_accept_run_command_multiple_times = 0.05 s = .
TestParallel::TestParallelWorker#test_done = 0.05 s = .
TestParallel::TestParallelWorker#test_p = 0.05 s = .
TestParallel::TestParallelWorker#test_quit = 0.05 s = .
TestParallel::TestParallelWorker#test_run = 0.05 s = .
TestParallel::TestParallelWorker#test_run_multiple_testcase_in_one_file = 0.05 s = .


Finished tests in 0.554289s, 19.8453 tests/s, 72.1646 assertions/s.

  1) Failure:
test_jobs_status(TestParallel::TestParallel) [/home/ayumin/github/ruby/test/testunit/test_parallel.rb:174]:
Expected /\d+=ptest_(first|second|third|forth) */ to match "Run options: -j t1 --jobs-status\n\n# Running tests:\n\n/home/ayumin/github/ruby/lib/test/unit.rb:496:in `ensure in _run_parallel': undefined method `each' for nil:NilClass (NoMethodError)\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:552:in `_run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:561:in `_run_suites'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:746:in `_run_anything'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:909:in `run_tests'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:896:in `block in _run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `each'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `_run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:884:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:21:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:630:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/
 unit.rb:634:in `run'\n\tfrom /home/ayumin/github/ruby/test/testunit/tests_for_parallel/runner.rb:10:in `<main>'\n".

  2) Failure:
test_no_retry_option(TestParallel::TestParallel) [/home/ayumin/github/ruby/test/testunit/test_parallel.rb:168]:
Expected /^ +\d+\) Failure:\ntest_fail_at_worker\(TestD\)/ to match "Run options: -j t1 --no-retry\n\n# Running tests:\n\n/home/ayumin/github/ruby/lib/test/unit.rb:496:in `ensure in _run_parallel': undefined method `each' for nil:NilClass (NoMethodError)\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:552:in `_run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:561:in `_run_suites'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:746:in `_run_anything'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:909:in `run_tests'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:896:in `block in _run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `each'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `_run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:884:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:21:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:630:in `run'\n\tfrom /home/ayumin/github/ruby/lib
 /test/unit.rb:634:in `run'\n\tfrom /home/ayumin/github/ruby/test/testunit/tests_for_parallel/runner.rb:10:in `<main>'\n".

  3) Failure:
test_should_retry_failed_on_workers(TestParallel::TestParallel) [/home/ayumin/github/ruby/test/testunit/test_parallel.rb:161]:
Expected /^Retrying\.+$/ to match "Run options: -j t1\n\n# Running tests:\n\n/home/ayumin/github/ruby/lib/test/unit.rb:496:in `ensure in _run_parallel': undefined method `each' for nil:NilClass (NoMethodError)\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:552:in `_run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:561:in `_run_suites'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:746:in `_run_anything'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:909:in `run_tests'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:896:in `block in _run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `each'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `_run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:884:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:21:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:630:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:634:in `run'\n\tfrom /home/ayum
 in/github/ruby/test/testunit/tests_for_parallel/runner.rb:10:in `<main>'\n".

  4) Failure:
test_should_run_all_without_any_leaks(TestParallel::TestParallel) [/home/ayumin/github/ruby/test/testunit/test_parallel.rb:155]:
Expected /^[SF\.]{7}$/ to match "Run options: -j t1\n\n# Running tests:\n\n/home/ayumin/github/ruby/lib/test/unit.rb:496:in `ensure in _run_parallel': undefined method `each' for nil:NilClass (NoMethodError)\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:552:in `_run_parallel'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:561:in `_run_suites'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:746:in `_run_anything'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:909:in `run_tests'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:896:in `block in _run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `each'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:895:in `_run'\n\tfrom /home/ayumin/github/ruby/lib/minitest/unit.rb:884:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:21:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:630:in `run'\n\tfrom /home/ayumin/github/ruby/lib/test/unit.rb:634:in `run'\n\tfrom /home/ayumin
 /github/ruby/test/testunit/tests_for_parallel/runner.rb:10:in `<main>'\n".

11 tests, 40 assertions, 4 failures, 0 errors, 0 skips
make: *** [yes-test-all] エラー 4



-- 
http://redmine.ruby-lang.org