blob: 85a52c1f2c60830049e08ba57f7fa2c418215e1a [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()
Fred Drake5b811be2001-05-18 21:38:52 +000012
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000013 for e in entries:
14 self.assertEqual(len(e), 4)
15 self.assertEqual(e[0], e.gr_name)
16 self.assert_(isinstance(e.gr_name, basestring))
17 self.assertEqual(e[1], e.gr_passwd)
18 self.assert_(isinstance(e.gr_passwd, basestring))
19 self.assertEqual(e[2], e.gr_gid)
20 self.assert_(isinstance(e.gr_gid, int))
21 self.assertEqual(e[3], e.gr_mem)
22 self.assert_(isinstance(e.gr_mem, list))
Fred Drake5b811be2001-05-18 21:38:52 +000023
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000024 self.assertEqual(grp.getgrnam(e.gr_name), e)
25 self.assertEqual(grp.getgrgid(e.gr_gid), e)
Fred Drake5b811be2001-05-18 21:38:52 +000026
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000027 def test_errors(self):
28 self.assertRaises(TypeError, grp.getgrgid)
29 self.assertRaises(TypeError, grp.getgrnam)
30 self.assertRaises(TypeError, grp.getgrall, 42)
31
32 # try to get some errors
33 bynames = {}
34 bygids = {}
35 for (n, p, g, mem) in grp.getgrall():
36 bynames[n] = g
37 bygids[g] = n
38
39 allnames = bynames.keys()
40 namei = 0
41 fakename = allnames[namei]
42 while fakename in bynames:
43 chars = map(None, fakename)
44 for i in xrange(len(chars)):
45 if chars[i] == 'z':
46 chars[i] = 'A'
47 break
48 elif chars[i] == 'Z':
49 continue
50 else:
51 chars[i] = chr(ord(chars[i]) + 1)
52 break
53 else:
54 namei = namei + 1
55 try:
56 fakename = allnames[namei]
57 except IndexError:
58 # should never happen... if so, just forget it
59 break
60 fakename = ''.join(map(None, chars))
61
62 self.assertRaises(KeyError, grp.getgrnam, fakename)
63
64 # Choose a non-existent gid.
65 fakegid = 4127
66 while fakegid in bygids:
67 fakegid = (fakegid * 3) % 0x10000
68
69 self.assertRaises(KeyError, grp.getgrgid, fakegid)
Fred Drake5b811be2001-05-18 21:38:52 +000070
Fred Drake2e2be372001-09-20 21:33:42 +000071def test_main():
Walter Dörwaldb1ded1e2003-04-15 11:10:33 +000072 suite = unittest.TestSuite()
73 suite.addTest(unittest.makeSuite(GroupDatabaseTestCase))
74 test_support.run_suite(suite)
Fred Drake2e2be372001-09-20 21:33:42 +000075
76if __name__ == "__main__":
77 test_main()