2
from test import support
6
class PwdTest(unittest.TestCase):
9
entries = pwd.getpwall()
14
self.assertEqual(len(e), 7)
15
self.assertEqual(e[0], e.pw_name)
16
self.assert_(isinstance(e.pw_name, str))
17
self.assertEqual(e[1], e.pw_passwd)
18
self.assert_(isinstance(e.pw_passwd, str))
19
self.assertEqual(e[2], e.pw_uid)
20
self.assert_(isinstance(e.pw_uid, int))
21
self.assertEqual(e[3], e.pw_gid)
22
self.assert_(isinstance(e.pw_gid, int))
23
self.assertEqual(e[4], e.pw_gecos)
24
self.assert_(isinstance(e.pw_gecos, str))
25
self.assertEqual(e[5], e.pw_dir)
26
self.assert_(isinstance(e.pw_dir, str))
27
self.assertEqual(e[6], e.pw_shell)
28
self.assert_(isinstance(e.pw_shell, str))
30
# The following won't work, because of duplicate entries
32
# self.assertEqual(pwd.getpwuid(e.pw_uid), e)
33
# instead of this collect all entries for one uid
34
# and check afterwards
35
entriesbyname.setdefault(e.pw_name, []).append(e)
36
entriesbyuid.setdefault(e.pw_uid, []).append(e)
38
if len(entries) > 1000: # Huge passwd file (NIS?) -- skip the rest
41
# check whether the entry returned by getpwuid()
42
# for each uid is among those from getpwall() for this uid
44
if not e[0] or e[0] == '+':
45
continue # skip NIS entries etc.
46
self.assert_(pwd.getpwnam(e.pw_name) in entriesbyname[e.pw_name])
47
self.assert_(pwd.getpwuid(e.pw_uid) in entriesbyuid[e.pw_uid])
49
def test_errors(self):
50
self.assertRaises(TypeError, pwd.getpwuid)
51
self.assertRaises(TypeError, pwd.getpwnam)
52
self.assertRaises(TypeError, pwd.getpwall, 42)
54
# try to get some errors
57
for (n, p, u, g, gecos, d, s) in pwd.getpwall():
61
allnames = list(bynames.keys())
63
fakename = allnames[namei]
64
while fakename in bynames:
65
chars = list(fakename)
66
for i in range(len(chars)):
73
chars[i] = chr(ord(chars[i]) + 1)
78
fakename = allnames[namei]
80
# should never happen... if so, just forget it
82
fakename = ''.join(chars)
84
self.assertRaises(KeyError, pwd.getpwnam, fakename)
86
# Choose a non-existent uid.
88
while fakeuid in byuids:
89
fakeuid = (fakeuid * 3) % 0x10000
91
self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
94
support.run_unittest(PwdTest)
96
if __name__ == "__main__":