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]:
 <#<struct Struct::Group name="_pcastagent", passwd="*", gid=101, mem=[]>> expected but was
 <#<struct Struct::Group
  name="com.apple.sharepoint.group.1",
  passwd="*",
  gid=101,
  mem=["hiroshi"]>>.


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/