【追記】
解決した。遅いマシンなので、fork後のsleep時間が問題だった模様。
Server::Starterは、問題を解決した0.04がでています。
http://search.cpan.org/~kazuho/Server-Starter-0.04/
Gearmanも、0.10でなおっているんだけど、
@@ -54,8 +54,8 @@ foreach my $iter (1..5) {
}
$tasks->wait;
-is($completed, 2, 'number of success'); # One starts immediately and on the queue
-is($failed, 3, 'number of failure'); # All the rest
+ok($completed == 2 || $completed == 1, 'number of success'); # One in the queue, plus one that may start immediately
+ok($failed == 3 || $failed== 4, 'number of failure'); # All the rest
という、「ないわー」的な対応。
実際は、t/TestGearman.pmで書かれているstart_workr後のsleepが足りない感じ。
--- 30-maxqueue.t.orig 2009-10-11 14:12:31.000000000 +0900
+++ 30-maxqueue.t 2009-10-11 14:12:50.000000000 +0900
@@ -34,6 +34,7 @@
}
start_worker(PORT);
+sleep 1;
my $client = Gearman::Client->new;
isa_ok($client, 'Gearman::Client');
これでtest通りました。
kazuhoさんのESXiでは問題でてないようなので、僕のマシンだけ遅いのは仮想マシンの設定かなぁ。。
【/追記】
VMware ESXi上のUbuntu 9.04でServer::StarterとGearmanのテストが通らなくてちょっと悩んでいる。
両方とも、テストの中で、forkを使ってサーバやworkerをたてて、それに対して親プロセスから何か操作する形なので、原因は多分同じ気がしている。
だれか解決方法を知っていたら教えてください。
エラーはこんな感じ
■Server::Starter
% prove -Ilib t/01-starter.t
t/01-starter.t .. start_server (pid:3477) starting now...
starting new worker 3478
t/01-starter.t .. 5/9
# Failed test 'pid should have changed'
# at /usr/local/share/perl/5.10.0/Test/Builder.pm line 844.
# got: '3478:hello'
# expected: anything else
received HUP, spawning a new worker
starting new worker 3479
new worker is now running, sending TERM to old workers:3478
received TERM, sending TERM to all workers:3478,3479
worker 3478 died, status:0
worker 3479 died, status:0
exitting
# Looks like you failed 1 test of 9.
t/01-starter.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/9 subtests
Test Summary Report
-------------------
t/01-starter.t (Wstat: 256 Tests: 9 Failed: 1)
Failed test: 9
Non-zero exit status: 1
Files=1, Tests=9, 7 wallclock secs ( 0.03 usr 0.00 sys + 0.18 cusr 0.05 csys = 0.26 CPU)
Result: FAIL
■Gearman
[‾/develop/gearman/Gearman-1.09]% prove -Ilib t/30-maxqueue.t
t/30-maxqueue.t .. 5/6
# Failed test 'number of success'
# at t/30-maxqueue.t line 58.
# got: '1'
# expected: '2'
# Failed test 'number of failure'
# at t/30-maxqueue.t line 59.
# got: '4'
# expected: '3'
# Looks like you failed 2 tests of 6.
t/30-maxqueue.t .. Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/6 subtests
Test Summary Report
-------------------
t/30-maxqueue.t (Wstat: 512 Tests: 6 Failed: 2)
Failed tests: 5-6
Non-zero exit status: 2
Files=1, Tests=6, 5 wallclock secs ( 0.02 usr 0.00 sys + 0.10 cusr 0.02 csys = 0.14 CPU)
Result: FAIL
Gearmanのテストは必ず失敗するけど、Server::Starterの方は時々成功するってのもよくわからない。