1 """Test script for the grp module."""
5 from test
import test_support
7 class GroupDatabaseTestCase(unittest
.TestCase
):
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))
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
27 def test_values(self
):
28 entries
= grp
.getgrall()
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())
38 entriesbygid
.setdefault(e
.gr_gid
, []).append(e
)
39 entriesbyname
.setdefault(e
.gr_name
, []).append(e
)
42 e2
= grp
.getgrgid(e
.gr_gid
)
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
)
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
]]))
55 def test_errors(self
):
56 self
.assertRaises(TypeError, grp
.getgrgid
)
57 self
.assertRaises(TypeError, grp
.getgrnam
)
58 self
.assertRaises(TypeError, grp
.getgrall
, 42)
60 # try to get some errors
63 for (n
, p
, g
, mem
) in grp
.getgrall():
67 allnames
= bynames
.keys()
69 fakename
= allnames
[namei
]
70 while fakename
in bynames
:
71 chars
= map(None, fakename
)
72 for i
in xrange(len(chars
)):
79 chars
[i
] = chr(ord(chars
[i
]) + 1)
84 fakename
= allnames
[namei
]
86 # should never happen... if so, just forget it
88 fakename
= ''.join(map(None, chars
))
90 self
.assertRaises(KeyError, grp
.getgrnam
, fakename
)
92 # Choose a non-existent gid.
94 while fakegid
in bygids
:
95 fakegid
= (fakegid
* 3) % 0x10000
97 self
.assertRaises(KeyError, grp
.getgrgid
, fakegid
)
100 suite
= unittest
.TestSuite()
101 suite
.addTest(unittest
.makeSuite(GroupDatabaseTestCase
))
102 test_support
.run_suite(suite
)
104 if __name__
== "__main__":