mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
Port test_pwd.py to PyUnit. Check that getpwall() and
getpwnam()/getpwuid() return consistent data. Change test_grp to check that getgrall() and getgrnam()/getgrgid() return consistent data. Add error checks similar to test_pwd.py. Port test___all__.py to PyUnit. From SF patch #662807.
This commit is contained in:
parent
255a3d08a1
commit
b1ded1e508
4 changed files with 319 additions and 239 deletions
|
|
@ -1,7 +1,5 @@
|
|||
"""Test script for the grp module."""
|
||||
|
||||
# XXX This really needs some work, but what are the expected invariants?
|
||||
|
||||
import grp
|
||||
import unittest
|
||||
from test import test_support
|
||||
|
|
@ -9,19 +7,71 @@ from test import test_support
|
|||
|
||||
class GroupDatabaseTestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.groups = grp.getgrall()
|
||||
def test_values(self):
|
||||
entries = grp.getgrall()
|
||||
|
||||
def test_getgrgid(self):
|
||||
entry = grp.getgrgid(self.groups[0][2])
|
||||
for e in entries:
|
||||
self.assertEqual(len(e), 4)
|
||||
self.assertEqual(e[0], e.gr_name)
|
||||
self.assert_(isinstance(e.gr_name, basestring))
|
||||
self.assertEqual(e[1], e.gr_passwd)
|
||||
self.assert_(isinstance(e.gr_passwd, basestring))
|
||||
self.assertEqual(e[2], e.gr_gid)
|
||||
self.assert_(isinstance(e.gr_gid, int))
|
||||
self.assertEqual(e[3], e.gr_mem)
|
||||
self.assert_(isinstance(e.gr_mem, list))
|
||||
|
||||
def test_getgrnam(self):
|
||||
entry = grp.getgrnam(self.groups[0][0])
|
||||
self.assertEqual(grp.getgrnam(e.gr_name), e)
|
||||
self.assertEqual(grp.getgrgid(e.gr_gid), e)
|
||||
|
||||
def test_errors(self):
|
||||
self.assertRaises(TypeError, grp.getgrgid)
|
||||
self.assertRaises(TypeError, grp.getgrnam)
|
||||
self.assertRaises(TypeError, grp.getgrall, 42)
|
||||
|
||||
# try to get some errors
|
||||
bynames = {}
|
||||
bygids = {}
|
||||
for (n, p, g, mem) in grp.getgrall():
|
||||
bynames[n] = g
|
||||
bygids[g] = n
|
||||
|
||||
allnames = bynames.keys()
|
||||
namei = 0
|
||||
fakename = allnames[namei]
|
||||
while fakename in bynames:
|
||||
chars = map(None, fakename)
|
||||
for i in xrange(len(chars)):
|
||||
if chars[i] == 'z':
|
||||
chars[i] = 'A'
|
||||
break
|
||||
elif chars[i] == 'Z':
|
||||
continue
|
||||
else:
|
||||
chars[i] = chr(ord(chars[i]) + 1)
|
||||
break
|
||||
else:
|
||||
namei = namei + 1
|
||||
try:
|
||||
fakename = allnames[namei]
|
||||
except IndexError:
|
||||
# should never happen... if so, just forget it
|
||||
break
|
||||
fakename = ''.join(map(None, chars))
|
||||
|
||||
self.assertRaises(KeyError, grp.getgrnam, fakename)
|
||||
|
||||
# Choose a non-existent gid.
|
||||
fakegid = 4127
|
||||
while fakegid in bygids:
|
||||
fakegid = (fakegid * 3) % 0x10000
|
||||
|
||||
self.assertRaises(KeyError, grp.getgrgid, fakegid)
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(GroupDatabaseTestCase)
|
||||
|
||||
suite = unittest.TestSuite()
|
||||
suite.addTest(unittest.makeSuite(GroupDatabaseTestCase))
|
||||
test_support.run_suite(suite)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue