HP-UX 11.11 (PA-RISC) でのテスト結果です。
make test-all で 2 つ問題がありますが些細なものです。
== 環境
+ uname -srm
HP-UX B.11.11 9000/861
+ what /usr/bin/cc
/usr/bin/cc:
LINT B.11.11.24830.GP CXREF B.11.11.24830.GP
HP92453-01 B.11.11.24830.GP HP C Compiler
$ Sep 8 2000 23:13:51 $
+ openssl version
OpenSSL 0.9.7d 17 Mar 2004
== make
+ mkdir build; cd build
+ ../configure --prefix=/home/miyamuko/opt/ruby185
--program-suffix=185 --disable-ipv6
+ make
+ make test
test succeeded
+ make test-all
./miniruby ../runruby.rb --extout=.ext -- -C "../test"
runner.rb --runner=console
Loaded suite .
Started
...............(略)
../test/ruby/test_process.rb:26:in `setrlimit': Invalid argument -
setrlimit (Errno::EINVAL)
from ../test/ruby/test_process.rb:26:in `test_rlimit_nofile'
from ../test/ruby/test_process.rb:24:in `fork'
from ../test/ruby/test_process.rb:24:in `test_rlimit_nofile'
from /home/miyamuko/src/ruby_1_8/lib/test/unit/testcase.rb:70:in
`__send__'
from /home/miyamuko/src/ruby_1_8/lib/test/unit/testcase.rb:70:in `run'
from /home/miyamuko/src/ruby_1_8/lib/test/unit/testsuite.rb:32:in `run'
from /home/miyamuko/src/ruby_1_8/lib/test/unit/testsuite.rb:31:in `each'
from /home/miyamuko/src/ruby_1_8/lib/test/unit/testsuite.rb:31:in `run'
... 6 levels...
from
/home/miyamuko/src/ruby_1_8/lib/test/unit/ui/testrunnerutilities.rb:27:in
`run'
from /home/miyamuko/src/ruby_1_8/lib/test/unit/autorunner.rb:200:in
`run'
from /home/miyamuko/src/ruby_1_8/lib/test/unit/autorunner.rb:13:in `run'
from runner.rb:7
F...............(略)
1) Failure:
test_03(TestDRbUNIXCore) [/home/miyamuko/src/ruby_1_8/test/drb/drbtest.rb:143]:
<ArgumentError> exception expected but was
Class: <Errno::EINVAL>
Message: <"Invalid argument">
---Backtrace---
/home/miyamuko/src/ruby_1_8/lib/drb/unix.rb:91:in `path'
/home/miyamuko/src/ruby_1_8/lib/drb/unix.rb:91:in `close'
/home/miyamuko/src/ruby_1_8/lib/drb/drb.rb:1199:in `close'
/home/miyamuko/src/ruby_1_8/lib/drb/drb.rb:1181:in `open'
/home/miyamuko/src/ruby_1_8/lib/drb/drb.rb:1085:in `method_missing'
/home/miyamuko/src/ruby_1_8/lib/drb/drb.rb:1103:in `with_friend'
/home/miyamuko/src/ruby_1_8/lib/drb/drb.rb:1084:in `method_missing'
/home/miyamuko/src/ruby_1_8/test/drb/drbtest.rb:144:in `test_03'
/home/miyamuko/src/ruby_1_8/test/drb/drbtest.rb:143:in `test_03'
---------------
同じエラーがあと 7 個。
9) Failure:
test_rlimit_nofile(TestProcess) [../test/ruby/test_process.rb:35]:
<0> expected but was
<256>.
== Invalid argument - setrlimit (Errno::EINVAL)
test_rlimit_nofile ですが、これは HP-UX の setrlimit(2) は指定した値より
現在の使用量のほうが多い場合 EINVAL になります。
% ruby185 -e "p Process.setrlimit(Process::RLIMIT_NOFILE, 2, 100)"
-e:1:in `setrlimit': Invalid argument - setrlimit (Errno::EINVAL)
from -e:1
% ruby185 -e "p Process.setrlimit(Process::RLIMIT_NOFILE, 3, 100)"
nil
% ruby185 -e "IO.pipe; p Process.setrlimit(Process::RLIMIT_NOFILE, 3, 100)"
-e:1:in `setrlimit': Invalid argument - setrlimit (Errno::EINVAL)
from -e:1
man setrlimit
setrlimit() 関数は次の場合に失敗します。
[EINVAL] 指定した値よりも現在の使用量がすでに超えているため、
制限値を指定した値に設定することができない場合
http://docs.hp.com/ja/B2355-60104-05/getrlimit.2.html
そのため test_process.rb でテストの setup として実行している以下の部分で
エラーになっています。
Process.setrlimit(Process::RLIMIT_NOFILE, 0, max_nofile)
これは HP-UX の場合スキップしちゃえばいいんですかねぇ。。。
== test_03(TestDRbUNIXCore)
drb のほうは close したソケットに対して path (getsockname) を呼んでいるため
です。この場合 HP-UX では EINVAL になります。
% ruby185 -rsocket -ve "s = UNIXSocket.pair; s[0].close; p s[1].path"
ruby 1.8.5 (2006-07-28) [hppa2.0n-hpux11.11]
-e:1:in `path': Invalid argument (Errno::EINVAL)
from -e:1
% ruby185 -rsocket -ve "s = UNIXSocket.pair; s[0].close; p s[1].path"
ruby 1.8.5 (2006-07-28) [ia64-linux]
""
man getsockname
getsockname() は、次の条件のどれかの場合に失敗します。
[EINVAL] ソケットが、シャットダウンされている場合
http://docs.hp.com/ja/B2355-60104-05/getsockname.2.html
とりあえず以下で直りますがどうでしょう。
#挙動が一致するように path のほうを直したほうがいいのかもしれません。
Index: lib/drb/unix.rb
===================================================================
RCS file: /src/ruby/lib/drb/unix.rb,v
retrieving revision 1.5.2.2
diff -u -r1.5.2.2 unix.rb
--- lib/drb/unix.rb 22 Jan 2005 13:37:37 -0000 1.5.2.2
+++ lib/drb/unix.rb 28 Jul 2006 20:16:08 -0000
@@ -88,9 +88,13 @@
public
def close
return unless @socket
- path = @socket.path
- @socket.close
- File.unlink(path) if @server_mode
+ if @server_mode
+ path = @socket.path
+ @socket.close
+ File.unlink(path)
+ else
+ @socket.close
+ end
@socket = nil
end
|
|