2 from test
import support
4 pwd
= support
.import_module('pwd')
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__":