From: Tomoyuki Chikanaga Date: 2009-02-03T19:31:17+09:00 Subject: [ruby-dev:37883] Re: test_etc.rb の修正提案 近永と申します。 たびたびすみません。 先刻はりつけたパッチに間違いがありましたので再送します。 失礼しました。 現在 trunk のソースツリーをチェックアウトして手元の環境で make test-all すると拡張ライブラリ etc のテストで 2 failures に なります(他にもありますがとりあえず)。 ldap を導入していて /etc/passwd と ldap で uid/gid や name が重複する エントリがあり、なおかつ gecos フィールドなどに差異があるためです。 そういう設定がよくないということもあるとは思いますが、 getpwnam(3) 等は最初にマッチしたエントリを返すようなのでテストも そのようにするのはどうでしょうか。 以上、ご検討ください。 以下 test_etc.rb のパッチです。 Index: test/etc/test_etc.rb =================================================================== --- test/etc/test_etc.rb (revision 22011) +++ test/etc/test_etc.rb (working copy) @@ -37,9 +37,9 @@ end def test_getpwnam - passwd = [] - Etc.passwd {|s| passwd << s } - passwd.each do |s| + passwd = {} + Etc.passwd {|s| passwd[s.name] = s unless passwd[s.name] } + passwd.values.each do |s| assert_equal(s, Etc.getpwnam(s.name)) end end @@ -67,22 +67,26 @@ end def test_getgrgid - groups = [] + groups = {} Etc.group do |s| - groups << s + unless groups[s.gid] + groups[s.gid] = s + end end - groups.each do |s| + groups.values.each do |s| assert_equal(s, Etc.getgrgid(s.gid)) assert_equal(s, Etc.getgrgid) if Process.egid == s.gid end end def test_getgrnam - groups = [] + groups = {} Etc.group do |s| - groups << s + unless groups[s.name] + groups[s.name] = s + end end - groups.each do |s| + groups.values.each do |s| assert_equal(s, Etc.getgrnam(s.name)) end end