blob: f27ef8cf1e52816999cd061181ab612931077738 [file] [log] [blame]
Fred Drake5b811be2001-05-18 21:38:52 +00001"""Test script for the grp module."""
2
Roger E. Masse749cc6b1996-12-18 19:36:34 +00003import grp
Fred Drake5b811be2001-05-18 21:38:52 +00004import unittest
Barry Warsaw04f357c2002-07-23 19:04:11 +00005from test import test_support
Roger E. Masse749cc6b1996-12-18 19:36:34 +00006
Roger E. Masse749cc6b1996-12-18 19:36:34 +00007
Fred Drake5b811be2001-05-18 21:38:52 +00008class GroupDatabaseTestCase(unittest.TestCase):
Roger E. Masse749cc6b1996-12-18 19:36:34 +00009
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000010 def test_values(self):
11 entries = grp.getgrall()
Walter Dörwald43bc1f12003-04-15 15:59:36 +000012 entriesbygid = {}
Fred Drake5b811be2001-05-18 21:38:52 +000013
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000014 for e in entries:
15 self.assertEqual(len(e), 4)
16 self.assertEqual(e[0], e.gr_name)
17 self.assert_(isinstance(e.gr_name, basestring))
18 self.assertEqual(e[1], e.gr_passwd)
19 self.assert_(isinstance(e.gr_passwd, basestring))
20 self.assertEqual(e[2], e.gr_gid)
21 self.assert_(isinstance(e.gr_gid, int))
22 self.assertEqual(e[3], e.gr_mem)
23 self.assert_(isinstance(e.gr_mem, list))
Fred Drake5b811be2001-05-18 21:38:52 +000024
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000025 self.assertEqual(grp.getgrnam(e.gr_name), e)
Walter Dörwald43bc1f12003-04-15 15:59:36 +000026 # 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 uid
30 # and check afterwards
31 entriesbygid.setdefault(e.gr_gid, []).append(e)
32
33 # check whether the entry returned by getgrgid()
34 # for each uid is among those from getgrall() for this uid
35 for e in entries:
36 self.assert_(grp.getgrgid(e.gr_gid) in entriesbygid[e.gr_gid])
Fred Drake5b811be2001-05-18 21:38:52 +000037
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000038 def test_errors(self):
39 self.assertRaises(TypeError, grp.getgrgid)
40 self.assertRaises(TypeError, grp.getgrnam)
41 self.assertRaises(TypeError, grp.getgrall, 42)
42
43 # try to get some errors
44 bynames = {}
45 bygids = {}
46 for (n, p, g, mem) in grp.getgrall():
47 bynames[n] = g
48 bygids[g] = n
49
50 allnames = bynames.keys()
51 namei = 0
52 fakename = allnames[namei]
53 while fakename in bynames:
54 chars = map(None, fakename)
55 for i in xrange(len(chars)):
56 if chars[i] == 'z':
57 chars[i] = 'A'
58 break
59 elif chars[i] == 'Z':
60 continue
61 else:
62 chars[i] = chr(ord(chars[i]) + 1)
63 break
64 else:
65 namei = namei + 1
66 try:
67 fakename = allnames[namei]
68 except IndexError:
69 # should never happen... if so, just forget it
70 break
71 fakename = ''.join(map(None, chars))
72
73 self.assertRaises(KeyError, grp.getgrnam, fakename)
74
75 # Choose a non-existent gid.
76 fakegid = 4127
77 while fakegid in bygids:
78 fakegid = (fakegid * 3) % 0x10000
79
80 self.assertRaises(KeyError, grp.getgrgid, fakegid)
Fred Drake5b811be2001-05-18 21:38:52 +000081
Fred Drake2e2be372001-09-20 21:33:42 +000082def test_main():
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000083 suite = unittest.TestSuite()
84 suite.addTest(unittest.makeSuite(GroupDatabaseTestCase))
85 test_support.run_suite(suite)
Fred Drake2e2be372001-09-20 21:33:42 +000086
87if __name__ == "__main__":
88 test_main()