From: "nobu (Nobuyoshi Nakada)" Date: 2012-08-27T02:34:14+09:00 Subject: [ruby-core:47314] [ruby-trunk - Bug #6935] TestEtc#test_getgrgid on OSX Issue #6935 has been updated by nobu (Nobuyoshi Nakada). No unixen systems guarantees that GID is unique. Please commit it. ---------------------------------------- Bug #6935: TestEtc#test_getgrgid on OSX https://bugs.ruby-lang.org/issues/6935#change-29051 Author: h.shirosaki (Hiroshi Shirosaki) Status: Open Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: ext Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-08-25 trunk 36821) [x86_64-darwin12.0.0] =begin I saw similar issue as #6831. Is GID also not unique on OSX? [ 69/110] TestEtc#test_getgrgid = 0.02 s 1) Failure: test_getgrgid(TestEtc) [/Users/hiroshi/src/ruby/test/etc/test_etc.rb:84]: <#> expected but was <#>. I confirmed this patch fixes the failure. diff --git a/test/etc/test_etc.rb b/test/etc/test_etc.rb index 5bc8db4..c105122 100644 --- a/test/etc/test_etc.rb +++ b/test/etc/test_etc.rb @@ -76,13 +76,18 @@ class TestEtc < Test::Unit::TestCase end def test_getgrgid - groups = {} - Etc.group do |s| - groups[s.gid] ||= s + # group database is not unique on GID, and which entry will be + # returned by getgrgid() is not specified. + groups = Hash.new {[]} + # on MacOSX, same entries are returned from /etc/group and Open + # Directory. + Etc.group {|s| groups[s.gid] |= [s]} + groups.each_pair do |gid, s| + assert_include(s, Etc.getgrgid(gid)) end - groups.each_value do |s| - assert_equal(s, Etc.getgrgid(s.gid)) - assert_equal(s, Etc.getgrgid) if Process.egid == s.gid + s = groups[Process.egid] + unless s.empty? + assert_include(s, Etc.getgrgid) end end =end -- http://bugs.ruby-lang.org/