mirror of
https://github.com/python/cpython.git
synced 2024-12-14 04:17:19 +08:00
805365ee39
svn+ssh://pythondev@svn.python.org/python/branches/p3yk ........ r55077 | guido.van.rossum | 2007-05-02 11:54:37 -0700 (Wed, 02 May 2007) | 2 lines Use the new print syntax, at least. ........ r55142 | fred.drake | 2007-05-04 21:27:30 -0700 (Fri, 04 May 2007) | 1 line remove old cruftiness ........ r55143 | fred.drake | 2007-05-04 21:52:16 -0700 (Fri, 04 May 2007) | 1 line make this work with the new Python ........ r55162 | neal.norwitz | 2007-05-06 22:29:18 -0700 (Sun, 06 May 2007) | 1 line Get asdl code gen working with Python 2.3. Should continue to work with 3.0 ........ r55164 | neal.norwitz | 2007-05-07 00:00:38 -0700 (Mon, 07 May 2007) | 1 line Verify checkins to p3yk (sic) branch go to 3000 list. ........ r55166 | neal.norwitz | 2007-05-07 00:12:35 -0700 (Mon, 07 May 2007) | 1 line Fix this test so it runs again by importing warnings_test properly. ........ r55167 | neal.norwitz | 2007-05-07 01:03:22 -0700 (Mon, 07 May 2007) | 8 lines So long xrange. range() now supports values that are outside -sys.maxint to sys.maxint. floats raise a TypeError. This has been sitting for a long time. It probably has some problems and needs cleanup. Objects/rangeobject.c now uses 4-space indents since it is almost completely new. ........ r55171 | guido.van.rossum | 2007-05-07 10:21:26 -0700 (Mon, 07 May 2007) | 4 lines Fix two tests that were previously depending on significant spaces at the end of a line (and before that on Python 2.x print behavior that has no exact equivalent in 3.0). ........
90 lines
2.9 KiB
Python
Executable File
90 lines
2.9 KiB
Python
Executable File
"""Test script for the grp module."""
|
|
|
|
import grp
|
|
import unittest
|
|
from test import test_support
|
|
|
|
class GroupDatabaseTestCase(unittest.TestCase):
|
|
|
|
def check_value(self, value):
|
|
# check that a grp tuple has the entries and
|
|
# attributes promised by the docs
|
|
self.assertEqual(len(value), 4)
|
|
self.assertEqual(value[0], value.gr_name)
|
|
self.assert_(isinstance(value.gr_name, basestring))
|
|
self.assertEqual(value[1], value.gr_passwd)
|
|
self.assert_(isinstance(value.gr_passwd, basestring))
|
|
self.assertEqual(value[2], value.gr_gid)
|
|
self.assert_(isinstance(value.gr_gid, int))
|
|
self.assertEqual(value[3], value.gr_mem)
|
|
self.assert_(isinstance(value.gr_mem, list))
|
|
|
|
def test_values(self):
|
|
entries = grp.getgrall()
|
|
|
|
for e in entries:
|
|
self.check_value(e)
|
|
|
|
for e in entries:
|
|
e2 = grp.getgrgid(e.gr_gid)
|
|
self.check_value(e2)
|
|
self.assertEqual(e2.gr_gid, e.gr_gid)
|
|
e2 = grp.getgrnam(e.gr_name)
|
|
self.check_value(e2)
|
|
# There are instances where getgrall() returns group names in
|
|
# lowercase while getgrgid() returns proper casing.
|
|
# Discovered on Ubuntu 5.04 (custom).
|
|
self.assertEqual(e2.gr_name.lower(), e.gr_name.lower())
|
|
|
|
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():
|
|
if not n or n == '+':
|
|
continue # skip NIS entries etc.
|
|
bynames[n] = g
|
|
bygids[g] = n
|
|
|
|
allnames = list(bynames.keys())
|
|
namei = 0
|
|
fakename = allnames[namei]
|
|
while fakename in bynames:
|
|
chars = map(None, fakename)
|
|
for i in range(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)
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|