何するか悩んだらとりあえず make test-all しておくらしい。
drb, rinda, soap4r, webrick が全滅。 エラーを見ると、iconv か getaddrinfo を使うものがすべて失敗していた。 逆に言うとそれ以外はすべて成功しているわけで、 思ったよりちゃんと動くという印象を受けた。 もうちょっと詰めていけば問題なく使えそうだ。
とりあえず getaddrinfo のほうを見てみよう。
~/c/bin $ ruby -v getaddrinfo.rb localhost ruby 1.9.0 (2005-02-14) [rs6000-aix5.1.0.0] AF_INET 127.0.0.1 0 IP ~/c/bin $ ruby -v getaddrinfo.rb rs7012 ruby 1.9.0 (2005-02-14) [rs6000-aix5.1.0.0] AF_INET 192.168.1.43 0 IP
ええ? 何これ。 Linux だとこんな感じになるんだけどな。
~/c/bin % ruby -v getaddrinfo.rb localhost ruby 1.9.0 (2005-02-23) [i686-linux] AF_INET 127.0.0.1 STREAM TCP AF_INET 127.0.0.1 DGRAM UDP AF_INET 127.0.0.1 RAW IP
getnameinfo はさらに酷くて、何も通らない。
~/c/bin $ ruby -v getnameinfo.rb 127.0.0.1
ruby 1.9.0 (2005-02-14) [rs6000-aix5.1.0.0]
./getnameinfo.rb:12:in `getnameinfo': getnameinfo: Host not found (SocketError)
from ./getnameinfo.rb:12:in `getnameinfo'
from ./getnameinfo.rb:7:in `main'
from ./getnameinfo.rb:15
~/c/bin $ ruby -v getnameinfo.rb 192.168.1.43
ruby 1.9.0 (2005-02-14) [rs6000-aix5.1.0.0]
getnameinfo.rb:12:in `getnameinfo': getnameinfo: Host not found (SocketError)
from getnameinfo.rb:12:in `getnameinfo'
from getnameinfo.rb:7:in `main'
from getnameinfo.rb:15
何がどうなってるんだ。
いろいろ試した結果、IPv6 関係がダメダメなことがわかった。 --disable-ipv6 --with-lookup-order-hack=INET でようやく成功。
~ $ iconv -f us-ascii -t us-ascii iconv: 0791-004 コンバータがオープンできません ~ $ iconv -f US-ASCII -t US-ASCII iconv: 0791-004 コンバータがオープンできません ~ $ iconv -f ISO-8859 -t ISO-8859 iconv: 0791-004 コンバータがオープンできません ~ $ iconv -f ISO8859 -t ISO8859 iconv: 0791-004 コンバータがオープンできません ~ $ iconv -f ISO8859-1 -t ISO8859-1 ^C ~ $ iconv -f UTF-8 -t UTF-8 ^C ~ $ iconv -f eucJP -t eucJP iconv: 0791-004 コンバータがオープンできません
ついに eucJP もないプラットフォームを見付けてしまったか……。 でも ISO8859-1 とか UTF-8 はあるらしいことがわかる。
一覧が欲しいなあ。コンバータはどこにあるんだろ。 さんざん探した挙句、/usr/lib/nls/loc/iconv で発見した。
$ command ls /usr/lib/nls/loc/iconv | ruby -e 'ARGF.each{|s| puts s.strip.split("_") }' | sort -u
64
ASCII-GR
CNS11643.1986-1
CNS11643.1986-2
Conv
GB18030
GBK
IBM-1027
IBM-1046
IBM-1124
IBM-1129
IBM-1252
IBM-290
IBM-300
IBM-850
IBM-856
IBM-921
IBM-922
IBM-930
IBM-930-DOS
IBM-932
IBM-939
IBM-939-DOS
IBM-943
IBM-eucCN
IBM-eucJP
IBM-eucKR
IBM-eucTW
IBM-sbdTW
IBM-udcJP
IBM-udcJP-GL
IBM-udcJP-GR
IBM-udcTW
ISCII.1991
ISO8859-1
ISO8859-1-GL
ISO8859-1-GR
ISO8859-15
ISO8859-15-GL
ISO8859-15-GR
ISO8859-2
ISO8859-2-GL
ISO8859-2-GR
ISO8859-3
ISO8859-3-GL
ISO8859-3-GR
ISO8859-4
ISO8859-4-GL
ISO8859-4-GR
ISO8859-5
ISO8859-5-GL
ISO8859-5-GR
ISO8859-6
ISO8859-6-GL
ISO8859-6-GR
ISO8859-7
ISO8859-7-GL
ISO8859-7-GR
ISO8859-8
ISO8859-8-GL
ISO8859-8-GR
ISO8859-9
ISO8859-9-GL
ISO8859-9-GR
JISX0201.1976-0
JISX0201.1976-GL
JISX0201.1976-GR
JISX0208.1978-GL
JISX0208.1978-GR
JISX0208.1983-0
JISX0208.1983-GL
JISX0208.1983-GR
KSC5601.1987-0
TIS-620
UCS
UCS-2
UTF-8
Universal
big5
ct
fold7
fold8
uucode
EUC-JP は IBM-eucJP らしい。こんなの予想できるかっ。 で IBM-932 が shift_jis (というか CP932) のようだ。 とりあえず、エンコーディング名の差を吸収するラッパーをインストールしておく。
これでかなり通るようになったけど、 まだいくつか失敗する。まず drb で一つ。
~/src/ruby $ ruby test/runner.rb test/drb
Loaded suite drb
Started
...............................E...................................................
Finished in 32.556596 seconds.
1) Error:
test_10_yield_undumped(TestDRbCore):
NoMethodError: undefined method `unpack' for -279519369:Fixnum
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:569:in `load'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:602:in `recv_request'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:899:in `recv_request'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1495:in `init_with_client'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1507:in `setup_message'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1459:in `perform'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1554:in `main_loop'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1550:in `loop'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1550:in `main_loop'
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1546
(druby://rs7012:32900) /usr/local/pkg/ruby/lib/ruby/1.9/drb/drb.rb:1546
(druby://localhost:32973) /usr/local/pkg/ruby/lib/ruby/1.9/drb/invokemethod.rb:10:in `block_yield'
(druby://localhost:32973) /usr/local/pkg/ruby/lib/ruby/1.9/drb/invokemethod.rb:17:in `perform_with_block'
(druby://localhost:32973) /usr/local/pkg/ruby/lib/ruby/1.9/drb/invokemethod.rb:14:in `each'
/home/aamine/src/ruby/test/drb/drbtest.rb:234:in `test_10_yield_undumped'
83 tests, 401 assertions, 0 failures, 1 errors
soap でも一つ。
~/src/ruby $ ruby test/runner.rb test/soap
Loaded suite soap
Started
......................................................E..................................................................
Finished in 83.757822 seconds.
1) Error:
test_success_mu(SOAP::Header::TestAuthHeader):
XSD::NS::FormatError: Unknown namespace qualifier: env
/usr/local/pkg/ruby/lib/ruby/1.9/xsd/ns.rb:115:in `parse_local'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/encodingstyle/soapHandler.rb:543:in `decode_attrs'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/encodingstyle/soapHandler.rb:505:in `each'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/encodingstyle/soapHandler.rb:505:in `decode_attrs'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/encodingstyle/soapHandler.rb:162:in `decode_tag'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/parser.rb:180:in `decode_tag'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/parser.rb:128:in `start_element'
/usr/local/pkg/ruby/lib/ruby/1.9/xsd/xmlparser/parser.rb:67:in `start_element'
/usr/local/pkg/ruby/lib/ruby/1.9/xsd/xmlparser/rexmlparser.rb:34:in `tag_start'
/usr/local/pkg/ruby/lib/ruby/1.9/rexml/parsers/streamparser.rb:24:in `parse'
/usr/local/pkg/ruby/lib/ruby/1.9/rexml/document.rb:171:in `parse_stream'
/usr/local/pkg/ruby/lib/ruby/1.9/xsd/xmlparser/rexmlparser.rb:27:in `do_parse'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/parser.rb:90:in `parse'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/processor.rb:39:in `unmarshal'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/router.rb:156:in `unmarshal'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/router.rb:76:in `route'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/soaplet.rb:108:in `do_POST'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/soaplet.rb:103:in `with_headerhandler'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/soaplet.rb:103:in `do_POST'
/usr/local/pkg/ruby/lib/ruby/1.9/webrick/httpservlet/abstract.rb:35:in `__send__'
/usr/local/pkg/ruby/lib/ruby/1.9/webrick/httpservlet/abstract.rb:35:in `service'
/usr/local/pkg/ruby/lib/ruby/1.9/webrick/httpserver.rb:108:in `service'
/usr/local/pkg/ruby/lib/ruby/1.9/webrick/httpserver.rb:69:in `run'
/usr/local/pkg/ruby/lib/ruby/1.9/webrick/server.rb:158:in `start_thread'
/usr/local/pkg/ruby/lib/ruby/1.9/webrick/server.rb:147
/usr/local/pkg/ruby/lib/ruby/1.9/webrick/server.rb:147
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/proxy.rb:137:in `call'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/driver.rb:275:in `call'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/driver.rb:302:in `deposit'
/usr/local/pkg/ruby/lib/ruby/1.9/soap/rpc/driver.rb:297:in `deposit'
./test/soap/header/test_authheader.rb:228:in `do_transaction_check'
./test/soap/header/test_authheader.rb:205:in `test_success_mu'
121 tests, 1172 assertions, 0 failures, 1 errors
こんなエラーは見たことがないな。 インタプリタ内で何か変なことが起きてそうな感じだ。 嫌すぎ。
(20:46)