ruby-trunk-changes r46144 - r46181

今日も主にテストでの File の後始末の強化がありました。 また freeze された IO オブジェクトで参照のみのメソッドでも例外が発生していたのを修正しています。

nobu: r46144 2014-05-26 23:36:22 +0900

rubygems のテストで Tempfile の後始末をするようにしています。

nobu: r46145 2014-05-26 23:36:26 +0900

rubygems のテストで Tempfile.open を Tempfile.create にして一時ファイルを削除するようにしています。

nobu: r46146 2014-05-26 23:36:36 +0900

rubygems の拡張ライブラリ用の extconf.rb のビルドで例外発生時に Tempfile の削除をするように修正しています。

nobu: r46147 2014-05-26 23:36:40 +0900

test/lib/test/unit.rb でテスト実行時のエラーメッセージを同じ内容のものを重複して出力しないようにしています。

akr: r46148 2014-05-26 23:45:51 +0900

File のテストで Tempfile.create を利用して終了時に一時ファイルの削除をするようにしています。

nobu: r46149 2014-05-27 00:00:23 +0900

insns.def の defineclass のコメントの typo 修正。 https://github.com/ruby/ruby/pull/618

svn: r46150 2014-05-27 00:00:28 +0900

version.h の日付更新。

nobu: r46151 2014-05-27 11:12:59 +0900

IO オブジェクトを freeze すると #fileno, #inspect など参照するだけのメソッドでも RuntimeError が発生していたのを修正しています。 GetOpenFile() マクロで取得するだけでもチェックされてしまうんですね。 [ruby-dev:48241] [Bug #9865]

akr: r46156 2014-05-27 12:24:52 +0900

test/lib/minitest/unit.rb でテストの前後で file descriptor も増減をチェックして leak している fd を表示するようにしています。 file descriptor は /proc/(pid)/fd/ を使ってチェックしているので、procfs や sysfs が使える Linux でのみチェックが有効になりますが、これで pipe や Socket などの閉じ忘れも検出できそうです。

hsbt: r46159 2014-05-27 17:00:19 +0900

標準添付ライブラリ timeout のテストでタイムアウトしないことを確認していたテストをタイムアウトするように書きかえています。 [Bug #8523]
うーん、でもテストに書かれてる [ruby-dev:38319] をみると、ここは Thread のスイッチがちゃんと発生して「タイムアウトしない」ことをチェックしたいのではないかという気がするので、こう変更してしまうのはまずいんではないでしょうか。テストメソッド名は test_timeout なので confusing だとは思いますが。

hsbt: r46160 2014-05-27 17:34:11 +0900

test/runner.rb に require_relative "ruby/envutil" を追加してあらかじめ envutil.rb を読み込んでおくようにしています。 おお、これ遂に入りましたか。 WEBrick のテストが落ちることがあるというものですが、読み込み順によって子プロセスを起動するために実行する ruby の指定が正しくならないというので気になってたんですけど、こういう解決方法があったんですね。 [ruby-core:45563] [Bug #6573]

hsbt: r46161 2014-05-27 18:33:54 +0900

拡張ライブラリ openssl の OpenSSL::HMAC のテストで UTF-8 なマルチバイト文字を含む文字列の署名のテストを追加しています。 [ruby-core:50559] [Bug #7512]

hsbt: r46162 2014-05-27 18:48:27 +0900

拡張ライブラリ openssl の OpenSSL::PKCS7#type= のテストを追加しています。 [ruby-core:49565] [Feature #7399]

svn: r46163 2014-05-27 18:48:30 +0900

r46162 の変更の行末の空白除去。

hsbt: r46164 2014-05-27 19:03:09 +0900

拡張ライブラリ openssl のテストで readpartial や sysread が途中で返ってきてしまう可能性があることを考慮して、期待したサイズまで読むまでループするようにしています。 [ruby-core:49563] [Bug #7398]

akr: r46165 2014-05-27 19:09:55 +0900

r46151 と同様に freeze された IO オブジェクトの IO#autoclose? メソッドを呼ぶと例外が発生していたのでエラーにならないようにしています。 また minitest での file descriptor の leak 検出で IO#autoclose? は IOError が発生する可能性があるので rescue でガードされているところで呼びだしてその結果を使いまわすようにしています。

akr: r46166 2014-05-27 19:21:10 +0900

標準添付ライブラリ rexml のテストクラスを全て REXML モジュールの下にネストさせるようにしています。これはなぜだろう…。

usa: r46167 2014-05-27 19:34:43 +0900

tool/merger.rb で Tempfile を明示的に削除するように close メソッドに true を渡すようにしています。

usa: r46168 2014-05-27 20:28:34 +0900

File オブジェクトが GC される時に flush されることを確認するテストで一時ファイルの削除がまだファイルが開かれている時に unlink が呼ばれていたのを GC を手動で起動して回収された後で呼ぶようにしています。 Windows では開いているファイルを削除できないのでエラーになる可能性があるのだと思います。
[追記]usa さんに教えていただいとところでは、エラーになってたのではなくて、Tempfile#unlink は EACCES で削除が失敗してもエラーにならずファイルが残ったままになっていたので、ゴミファイルが残っていたということです。なるほどこれも Tempfile の leak に絡んでたんですね。[/追記]

kou: r46169 2014-05-27 20:57:41 +0900

r46162 の OpenSSL::PKCS7 のテストの assertion の期待値と実際の値の引数の順番が逆になっていたのを修正しています。

kou: r46170 2014-05-27 21:01:25 +0900

r46166 の REXML のテストを REXML モジュール内にネストした変更のうち test/rexml/test_comment.rb は元々 REXMLTest モジュールで括っていたので REXML モジュールのスコープは削除しています。

kou: r46171 2014-05-27 21:07:40 +0900

同じく r46166 の REXML のテストを REXML モジュール内にネストしたのは REXMLTests というモジュールの下にネストさせるように修正しています。 test_comment.rb の REXMLTest も REXMLTests に改名しています。

naruse: r46172 2014-05-27 21:29:08 +0900

拡張ライブラリ socket の UDPServer のテストでローカルノードのアドレスを取得するために Socket.ip_address_list を利用していたのを Socket.getifaddrs を使ってインタフェースの情報も取得するように変更しています。

naruse: r46173 2014-05-27 21:29:19 +0900

拡張ライブラリ socket の Socket::Ifaddr#inspect に struct ifaddrs::ifa_flags の IFF_SIMPLEX フラグがあった時の表示を追加しています。

kou: r46174 2014-05-27 22:10:55 +0900

r46166 およびそれを受けての r46171 での REXML のテストを REXMLTests モジュールでネストするようにしたやつを、インデントするようにしています。

kou: r46175 2014-05-27 22:12:32 +0900

test/rexml/test_encoding_2.rb を削除しています。 このファイルのテストは拡張ライブラリ iconv がロードできた時にだけ実行されるもので、iconv は既に削除されているので実質このファイルのテストは動いていませんでした。

kou: r46176 2014-05-27 22:15:58 +0900

REXML のテスト test/rexml/test_document.rb では REXML::TestDocument というテストクラスが定義されていたのを REXMLTests モジュールの下にネストさせるように書き換えています。

kou: r46177 2014-05-27 22:24:39 +0900

r46176 のネストに追随して test/rexml/test_document.rb もインデントさせています。

akr: r46178 2014-05-27 22:45:04 +0900

REXML のテストで、主に File.new などで開きっぱなしの File オブジェクトによる file descriptor leak を修正しています。

nobu: r46179 2014-05-27 23:06:48 +0900

数値のリテラルで 0x0.1 や 0o0.1 のように10進数以外の表記のリテラルで小数点数を書いた時の SyntaxError のメッセージが、"." の前に 0 を明記しろというようなメッセージ(おそらく ".1" のようなドットの前に0が明示されない記法の時を想定したエラーなのでしょう)になっていたので "unexpected fraction" というメッセージになるように修正しています。

nobu: r46180 2014-05-27 23:43:15 +0900

test/lib/test/unit/parallel.rb で test-all の並列実行時に子プロセスからのメッセージに Temfile/Thread/fd などの leak 情報も含まれるようになったので readpartial でその部分を読み取るようにしています。

akr: r46181 2014-05-27 23:51:08 +0900

標準添付ライブラリ cgi で Tempfile#unlink で削除していたところを Tempfile#close に true を渡して閉じると同時に削除するようにしています。