Project

General

Profile

Bug #5151

test/socket/test_socket.rb fail when udp connection failed

Added by ayumin (Ayumu AIZAWA) over 6 years ago. Updated almost 6 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
- (darwin)
[ruby-dev:44329]

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.

1) Error:
test_udp_server(TestSocket):
RuntimeError: no response from #
/Users/ayumin/github/ruby/test/socket/test_socket.rb:297:in block (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:in connect'
/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:in each'
/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:in udp_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.

1) 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

test_socket.rb.diff (682 Bytes) test_socket.rb.diff ayumin (Ayumu AIZAWA), 08/03/2011 06:23 AM

Related issues

Related to Ruby trunk - Bug #6692: TestSocket::test_udp_server always fails on OS X with Back to my Mac enabledClosed2012-07-04

History

#1 [ruby-dev:44330] Updated by akr (Akira Tanaka) over 6 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 のバグで失敗します。

--
[田中 哲][たなか あきら][Tanaka Akira]

#2 [ruby-dev:44331] Updated by akr (Akira Tanaka) over 6 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 のバグで失敗します。

--
[田中 哲][たなか あきら][Tanaka Akira]

#3 [ruby-dev:44332] Updated by ayumin (Ayumu AIZAWA) over 6 years ago

あいざわです

まず、なんで失敗するんでしょうか。

ちなみに、OpenBSD では (おそらく) OS のバグで失敗します。

わたしの環境の方の問題ですかね。
ちなみに 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があるのでそちらでも試してみます。

#4 [ruby-dev:44358] Updated by kosaki (Motohiro KOSAKI) over 6 years ago

  • Status changed from Open to Feedback

#5 [ruby-dev:44359] Updated by ayumin (Ayumu AIZAWA) over 6 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

#6 [ruby-dev:44360] Updated by kosaki (Motohiro KOSAKI) over 6 years ago

  • Category set to ext
  • Status changed from Feedback to Assigned
  • Assignee set to mrkn (Kenta Murata)

Mac固有の問題のようなので、むらけんさんにassignします。

#7 [ruby-dev:44402] Updated by kosaki (Motohiro KOSAKI) over 6 years ago

むらたさん

regressionではないようですし、見る時間がなさそうであれば1.9.4に送ってしまってください。僕は時間がないので当分見る予定ないです

#8 [ruby-dev:44406] Updated by mrkn (Kenta Murata) over 6 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)

#9 [ruby-dev:44407] Updated by mrkn (Kenta Murata) over 6 years ago

  • Target version changed from 1.9.3 to 1.9.4

#10 [ruby-dev:44487] Updated by ayumin (Ayumu AIZAWA) over 6 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

#11 [ruby-dev:44488] Updated by akr (Akira Tanaka) over 6 years ago

2011/9/10 Ayumu AIZAWA ayumu.aizawa@gmail.com:

何が原因なんだろうか ... チェックすべき設定などあったらご教示いただけませんでしょうか。

boron での経験について述べれば、パケットフィルタとか。
--
[田中 哲][たなか あきら][Tanaka Akira]

#12 [ruby-dev:44489] Updated by mrkn (Kenta Murata) over 6 years ago

  • ruby -v changed from - to - (darwin)

#13 [ruby-dev:44490] Updated by ayumin (Ayumu AIZAWA) over 6 years ago

Wifiをオフにしてスタンドアロン状態でテストしたら再現しなくなりました。

#14 [ruby-dev:45597] Updated by ayumin (Ayumu AIZAWA) almost 6 years ago

Mac OSX Lion(Darwin Kernel Version 11.3.0) では、r35509 で再現しなくなっていました。

#15 [ruby-dev:45632] Updated by naruse (Yui NARUSE) almost 6 years ago

  • Status changed from Assigned to Closed

まず、原因の累計として、

  • OS のバグ (CentOS 5.6 や OpenBSD)
  • 通信が無効になっている (FreeBSD9 の IFDISABLED、POINTOPOINT など)

後者は ifconfig の結果を眺めつつ、man を読むとわかったりわからなかったりします。
r35610r35611 ではこの辺の対策を入れています。

元々の問題である "fd5e:b7ac:aaf8:9f02:223:32ff:feb4:f300" がなぜダメだったかは
わからないのですが、最近聞かない辺り、バグだったんですかねぇ。
とりあえず、getifaddrs で取ってきたやつに対して ioctl したり、
FreeBSD の ifconfig 眺めて色々着いてるオプションを眺めるという技は習得したんですが。

Also available in: Atom PDF