Bug #5151
closedtest/socket/test_socket.rb fail when udp connection failed
Description
=begin
test/socket/test_socket.rb の test_udp_server 内で Socket.ip_address_list で得られる
アドレスに対して接続できないときに RuntimeError でテストが失敗します。
同じテストファイルの中の test_ip_address_list は成功しているので、取得しているリスト
の中身自体は問題なさそうなので、接続できないときはスキップしてしまってよいのでは
ないかとおもいました。
以下実行結果です。
$ make test-all TESTS='test/socket/test_socket.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" test/socket/test_socket.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems"
Running tests:¶
..................E...
Finished tests in 10.225113s, 2.1516 tests/s, 7.2371 assertions/s.
- Error:
test_udp_server(TestSocket):
RuntimeError: no response from #<Addrinfo: fd5e:b7ac:aaf8:9f02:223:32ff:feb4:f300>
/Users/ayumin/github/ruby/test/socket/test_socket.rb:297:inblock (3 levels) in test_udp_server' /Users/ayumin/github/ruby/.ext/common/socket.rb:45:in
connect_internal'
/Users/ayumin/github/ruby/.ext/common/socket.rb:92:inconnect' /Users/ayumin/github/ruby/test/socket/test_socket.rb:293:in
block (2 levels) in test_udp_server'
/Users/ayumin/github/ruby/test/socket/test_socket.rb:292:ineach' /Users/ayumin/github/ruby/test/socket/test_socket.rb:292:in
block in test_udp_server'
/Users/ayumin/github/ruby/.ext/common/socket.rb:553:inudp_server_sockets' /Users/ayumin/github/ruby/test/socket/test_socket.rb:276:in
test_udp_server'
22 tests, 74 assertions, 0 failures, 1 errors, 0 skips
make: *** [yes-test-all] Error 1
スキップするパッチは https://gist.github.com/1121247 です。
パッチ適用後の実行結果は以下のとおりです。
$ make test-all TESTS='test/socket/test_socket.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" test/socket/test_socket.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems"
Running tests:¶
..................S...
Finished tests in 20.225713s, 1.0877 tests/s, 3.6587 assertions/s.
- Skipped:
test_udp_server(TestSocket) [/Users/ayumin/github/ruby/test/socket/test_socket.rb:307]:
need sendmsg and recvmsg
22 tests, 74 assertions, 0 failures, 0 errors, 1 skips
=end
Files
Updated by akr (Akira Tanaka) about 13 years ago
- ruby -v changed from ruby 1.9.3dev (2011-08-03 revision 32820) [x86_64-darwin10.8.0] to -
2011/8/3 Ayumu AIZAWA ayumu.aizawa@gmail.com:
test/socket/test_socket.rb の test_udp_server 内で Socket.ip_address_list で得られる
アドレスに対して接続できないときに RuntimeError でテストが失敗します。同じテストファイルの中の test_ip_address_list は成功しているので、取得しているリスト
の中身自体は問題なさそうなので、接続できないときはスキップしてしまってよいのでは
ないかとおもいました。
test_ip_address_list が成功することは
test_udp_server でスキップして良い理由にはならないと思います。
まず、なんで失敗するんでしょうか。
ちなみに、OpenBSD では (おそらく) OS のバグで失敗します。
[ruby-core:38603]
[田中 哲][たなか あきら][Tanaka Akira]
Updated by akr (Akira Tanaka) about 13 years ago
2011/8/3 Ayumu AIZAWA ayumu.aizawa@gmail.com:
test/socket/test_socket.rb の test_udp_server 内で Socket.ip_address_list で得られる
アドレスに対して接続できないときに RuntimeError でテストが失敗します。同じテストファイルの中の test_ip_address_list は成功しているので、取得しているリスト
の中身自体は問題なさそうなので、接続できないときはスキップしてしまってよいのでは
ないかとおもいました。
test_ip_address_list が成功することは
test_udp_server でスキップして良い理由にはならないと思います。
まず、なんで失敗するんでしょうか。
ちなみに、OpenBSD では (おそらく) OS のバグで失敗します。
[ruby-core:38603]
[田中 哲][たなか あきら][Tanaka Akira]
Updated by ayumin (Ayumu AIZAWA) about 13 years ago
あいざわです
まず、なんで失敗するんでしょうか。
ちなみに、OpenBSD では (おそらく) OS のバグで失敗します。
[ruby-core:38603]
わたしの環境の方の問題ですかね。
ちなみに Mac OS X 10.6.8 で実行しました。
ip_address_list でとってきているアドレスは
"::1",
"fe80::1%lo0",
"127.0.0.1",
"fd5e:b7ac:aaf8:9f02:223:32ff:feb4:f300",
"fe80::223:6cff:fe80:7ff5%en1",
"192.168.1.11",
"2001:c90:a8c:86c6:223:6cff:fe80:7ff5",
"172.16.20.1",
"172.16.126.1",
"fe80::223:32ff:feb4:f300%utun0",
"fd00:6587:52d7:f8d6:223:32ff:feb4:f300"
の11個で、4番目のアドレスに接続するときに失敗するようです。
接続先のポートはいずれも 65036 です。
会社に Ubuntuがあるのでそちらでも試してみます。
Updated by kosaki (Motohiro KOSAKI) about 13 years ago
- Status changed from Open to Feedback
Updated by ayumin (Ayumu AIZAWA) about 13 years ago
=begin
Ubuntu 11.04で試してみたところ再現しませんでした。
とりいそぎご報告まで。
ayumin@Ubuntu11:~/github/ruby$ 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
ayumin@Ubuntu11:~/github/ruby$ ./ruby -v
ruby 1.9.3dev (2011-08-08 revision 32887) [x86_64-linux]
ayumin@Ubuntu11:~/github/ruby$ make test-all TESTS='-v test/socket/test_socket.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/socket/test_socket.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems" -v
Running tests:¶
TestSocket#test_accept_loop = 0.00 s = .
TestSocket#test_accept_loop_multi_port = 0.00 s = .
TestSocket#test_accept_loop_with_unix = 0.00 s = .
TestSocket#test_bintime = 0.00 s = .
TestSocket#test_closed_read = 0.20 s = .
TestSocket#test_getaddrinfo = 0.00 s = .
TestSocket#test_getaddrinfo_raises_no_errors_on_port_argument_of_0 = 0.00 s = .
TestSocket#test_getnameinfo = 0.00 s = .
TestSocket#test_initialize = 0.00 s = .
TestSocket#test_ip_address_list = 0.00 s = .
TestSocket#test_linger = 0.00 s = .
TestSocket#test_socket_new = 0.00 s = .
TestSocket#test_sysaccept = 0.00 s = .
TestSocket#test_tcp = 0.00 s = .
TestSocket#test_tcp_server_sockets = 0.00 s = .
TestSocket#test_tcp_server_sockets_port0 = 0.00 s = .
TestSocket#test_timestamp = 0.00 s = .
TestSocket#test_timestampns = 0.00 s = .
TestSocket#test_udp_server = 0.00 s = .
TestSocket#test_unix = 0.00 s = .
TestSocket#test_unix_server_socket = 0.00 s = .
TestSocket#test_unpack_sockaddr = 0.00 s = .
Finished tests in 0.227361s, 96.7626 tests/s, 294.6861 assertions/s.
22 tests, 67 assertions, 0 failures, 0 errors, 0 skips
=end
Updated by kosaki (Motohiro KOSAKI) about 13 years ago
- Category set to ext
- Status changed from Feedback to Assigned
- Assignee set to mrkn (Kenta Murata)
Mac固有の問題のようなので、むらけんさんにassignします。
Updated by kosaki (Motohiro KOSAKI) almost 13 years ago
むらたさん
regressionではないようですし、見る時間がなさそうであれば1.9.4に送ってしまってください。僕は時間がないので当分見る予定ないです
Updated by mrkn (Kenta Murata) almost 13 years ago
むらたです。
On Saturday, August 20, 2011 at 19:07 , Motohiro KOSAKI wrote:
むらたさん
regressionではないようですし、見る時間がなさそうであれば1.9.4に送ってしまってください。僕は時間がないので当分見る予定ないです
わかりました。
--
Kenta Murata
Sent with Sparrow (http://www.sparrowmailapp.com)
Updated by mrkn (Kenta Murata) almost 13 years ago
- Target version changed from 1.9.3 to 1.9.4
Updated by ayumin (Ayumu AIZAWA) almost 13 years ago
あいざわです。
SnowLeopard に固有の問題かと思ったのですが、友人の協力を得て別のマシンでテストしたところ再現しませんでした。
何が原因なんだろうか ... チェックすべき設定などあったらご教示いただけませんでしょうか。
$ make test-all TESTS='-v test/socket/test_socket.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/socket/test_socket.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common
./tool/runruby.rb --extout=.ext -- --disable-gems" -v
Running tests:¶
TestSocket#test_accept_loop = 0.00 s = .
TestSocket#test_accept_loop_multi_port = 0.00 s = .
TestSocket#test_accept_loop_with_unix = 0.00 s = .
TestSocket#test_bintime = 0.00 s = .
TestSocket#test_closed_read = 0.20 s = .
TestSocket#test_connect_timeout = 0.00 s = .
TestSocket#test_getaddrinfo = 0.00 s = .
TestSocket#test_getaddrinfo_raises_no_errors_on_port_argument_of_0 = 0.00 s = .
TestSocket#test_getnameinfo = 0.00 s = .
TestSocket#test_initialize = 0.00 s = .
TestSocket#test_ip_address_list = 0.00 s = .
TestSocket#test_linger = 0.00 s = .
TestSocket#test_socket_new = 0.00 s = .
TestSocket#test_sysaccept = 0.00 s = .
TestSocket#test_tcp = 0.00 s = .
TestSocket#test_tcp_server_sockets = 0.00 s = .
TestSocket#test_tcp_server_sockets_port0 = 0.00 s = .
TestSocket#test_timestamp = 0.00 s = .
TestSocket#test_timestampns = 0.00 s = .
TestSocket#test_udp_server = 0.01 s = .
TestSocket#test_unix = 0.00 s = .
TestSocket#test_unix_server_socket = 0.00 s = .
TestSocket#test_unpack_sockaddr = 0.00 s = .
Finished tests in 0.236844s, 97.1103 tests/s, 422.2188 assertions/s.
23 tests, 100 assertions, 0 failures, 0 errors, 0 skips
ruby -v: ruby 1.9.4dev (2011-09-10 trunk 33245) [x86_64-darwin10.8.0]
$ ./ruby -v
ruby 1.9.4dev (2011-09-10 trunk 33245) [x86_64-darwin10.8.0]
$ uname -a
Darwin mbp-akitsukada.local 10.8.0 Darwin Kernel Version 10.8.0: Tue
Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
Updated by akr (Akira Tanaka) almost 13 years ago
2011/9/10 Ayumu AIZAWA ayumu.aizawa@gmail.com:
何が原因なんだろうか ... チェックすべき設定などあったらご教示いただけませんでしょうか。
boron での経験について述べれば、パケットフィルタとか。¶
[田中 哲][たなか あきら][Tanaka Akira]
Updated by mrkn (Kenta Murata) almost 13 years ago
- ruby -v changed from - to - (darwin)
Updated by ayumin (Ayumu AIZAWA) almost 13 years ago
Wifiをオフにしてスタンドアロン状態でテストしたら再現しなくなりました。
Updated by ayumin (Ayumu AIZAWA) over 12 years ago
Mac OSX Lion(Darwin Kernel Version 11.3.0) では、r35509 で再現しなくなっていました。
Updated by naruse (Yui NARUSE) over 12 years ago
- Status changed from Assigned to Closed
まず、原因の累計として、
- OS のバグ (CentOS 5.6 や OpenBSD)
- 通信が無効になっている (FreeBSD9 の IFDISABLED、POINTOPOINT など)
後者は ifconfig の結果を眺めつつ、man を読むとわかったりわからなかったりします。
r35610 や r35611 ではこの辺の対策を入れています。
元々の問題である "fd5e:b7ac:aaf8:9f02:223:32ff:feb4:f300" がなぜダメだったかは
わからないのですが、最近聞かない辺り、バグだったんですかねぇ。
とりあえず、getifaddrs で取ってきたやつに対して ioctl したり、
FreeBSD の ifconfig 眺めて色々着いてるオプションを眺めるという技は習得したんですが。