bb07c2b699898c8d473ffa73684bd0570d271774
from test
import test_support
class PwdTest(unittest
.TestCase
):
self
.assertEqual(len(e
), 7)
self
.assertEqual(e
[0], e
.pw_name
)
self
.assert_(isinstance(e
.pw_name
, basestring
))
self
.assertEqual(e
[1], e
.pw_passwd
)
self
.assert_(isinstance(e
.pw_passwd
, basestring
))
self
.assertEqual(e
[2], e
.pw_uid
)
self
.assert_(isinstance(e
.pw_uid
, int))
self
.assertEqual(e
[3], e
.pw_gid
)
self
.assert_(isinstance(e
.pw_gid
, int))
self
.assertEqual(e
[4], e
.pw_gecos
)
self
.assert_(isinstance(e
.pw_gecos
, basestring
))
self
.assertEqual(e
[5], e
.pw_dir
)
self
.assert_(isinstance(e
.pw_dir
, basestring
))
self
.assertEqual(e
[6], e
.pw_shell
)
self
.assert_(isinstance(e
.pw_shell
, basestring
))
# The following won't work, because of duplicate entries
# self.assertEqual(pwd.getpwuid(e.pw_uid), e)
# instead of this collect all entries for one uid
entriesbyname
.setdefault(e
.pw_name
, []).append(e
)
entriesbyuid
.setdefault(e
.pw_uid
, []).append(e
)
# check whether the entry returned by getpwuid()
# for each uid is among those from getpwall() for this uid
self
.assert_(pwd
.getpwnam(e
.pw_name
) in entriesbyname
[e
.pw_name
])
self
.assert_(pwd
.getpwuid(e
.pw_uid
) in entriesbyuid
[e
.pw_uid
])
self
.assertRaises(TypeError, pwd
.getpwuid
)
self
.assertRaises(TypeError, pwd
.getpwnam
)
self
.assertRaises(TypeError, pwd
.getpwall
, 42)
for (n
, p
, u
, g
, gecos
, d
, s
) in pwd
.getpwall():
allnames
= bynames
.keys()
fakename
= allnames
[namei
]
while fakename
in bynames
:
chars
= map(None, fakename
)
for i
in xrange(len(chars
)):
chars
[i
] = chr(ord(chars
[i
]) + 1)
fakename
= allnames
[namei
]
# should never happen... if so, just forget it
fakename
= ''.join(map(None, chars
))
self
.assertRaises(KeyError, pwd
.getpwnam
, fakename
)
# Choose a non-existent uid.
fakeuid
= (fakeuid
* 3) % 0x10000
self
.assertRaises(KeyError, pwd
.getpwuid
, fakeuid
)
test_support
.run_unittest(PwdTest
)
if __name__
== "__main__":