Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ce07c8a

Browse files
committed
Max OS X returns "*" as the password in grp.getgrall()
and "" in grep.getgrgid(). Adjust the test to work around this problem. This should fix SF bug #724771.
1 parent 2d1c846 commit ce07c8a

1 file changed

Lines changed: 37 additions & 22 deletions

File tree

Lib/test/test_grp.py

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,53 @@
44
import unittest
55
from test import test_support
66

7-
87
class GroupDatabaseTestCase(unittest.TestCase):
98

9+
def check_value(self, value):
10+
# check that a grp tuple has the entries and
11+
# attributes promised by the docs
12+
self.assertEqual(len(value), 4)
13+
self.assertEqual(value[0], value.gr_name)
14+
self.assert_(isinstance(value.gr_name, basestring))
15+
self.assertEqual(value[1], value.gr_passwd)
16+
self.assert_(isinstance(value.gr_passwd, basestring))
17+
self.assertEqual(value[2], value.gr_gid)
18+
self.assert_(isinstance(value.gr_gid, int))
19+
self.assertEqual(value[3], value.gr_mem)
20+
self.assert_(isinstance(value.gr_mem, list))
21+
22+
def valueseq(self, value1, value2):
23+
# are two grp tuples equal (don't compare passwords)
24+
return value1.gr_name==value2.gr_name and \
25+
value1.gr_gid==value2.gr_gid and value1.gr_mem==value2.gr_mem
26+
1027
def test_values(self):
1128
entries = grp.getgrall()
12-
entriesbyname = {}
1329
entriesbygid = {}
30+
entriesbyname = {}
31+
32+
# we can't use the same strategy as in test_pwd, because
33+
# we can't compare gr_passwd (Mac OS X returns
34+
# "*" in getgrall() and "" in getgrgid())
1435

1536
for e in entries:
16-
self.assertEqual(len(e), 4)
17-
self.assertEqual(e[0], e.gr_name)
18-
self.assert_(isinstance(e.gr_name, basestring))
19-
self.assertEqual(e[1], e.gr_passwd)
20-
self.assert_(isinstance(e.gr_passwd, basestring))
21-
self.assertEqual(e[2], e.gr_gid)
22-
self.assert_(isinstance(e.gr_gid, int))
23-
self.assertEqual(e[3], e.gr_mem)
24-
self.assert_(isinstance(e.gr_mem, list))
25-
26-
# The following won't work, because of duplicate entries
27-
# for one gid
28-
# self.assertEqual(grp.getgrgid(e.gr_gid), e)
29-
# instead of this collect all entries for one gid/name
30-
# and check afterwards
31-
entriesbyname.setdefault(e.gr_name, []).append(e)
37+
self.check_value(e)
3238
entriesbygid.setdefault(e.gr_gid, []).append(e)
39+
entriesbyname.setdefault(e.gr_name, []).append(e)
3340

34-
# check whether the entry returned by getgrgid()
35-
# for each uid is among those from getgrall() for this uid
3641
for e in entries:
37-
self.assert_(grp.getgrgid(e.gr_gid) in entriesbygid[e.gr_gid])
38-
self.assert_(grp.getgrnam(e.gr_name) in entriesbyname[e.gr_name])
42+
e2 = grp.getgrgid(e.gr_gid)
43+
self.check_value(e2)
44+
# make sure that at least one of the entries
45+
# for this gid compares equal to e2
46+
self.assert_(max([self.valueseq(e2, x) \
47+
for x in entriesbygid[e.gr_gid]]))
48+
e2 = grp.getgrnam(e.gr_name)
49+
self.check_value(e2)
50+
# make sure that at least one of the entries
51+
# for this name compares equal to e2
52+
self.assert_(max([self.valueseq(e2, x) \
53+
for x in entriesbyname[e.gr_name]]))
3954

4055
def test_errors(self):
4156
self.assertRaises(TypeError, grp.getgrgid)

0 commit comments

Comments
 (0)