summaryrefslogtreecommitdiff
path: root/Lib/test/test_grp.py
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2003-04-15 11:10:33 +0000
committerWalter Dörwald <walter@livinglogic.de>2003-04-15 11:10:33 +0000
commitb1ded1e508d67acfb71450b353d0939e991cb288 (patch)
tree1f137b1aa1c1a9d06b2ba4edebb85b400dd50e54 /Lib/test/test_grp.py
parent255a3d08a189fb6aa4acb16c2168eb396f63df0f (diff)
downloadcpython-git-b1ded1e508d67acfb71450b353d0939e991cb288.tar.gz
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.
Diffstat (limited to 'Lib/test/test_grp.py')
-rwxr-xr-xLib/test/test_grp.py70
1 files changed, 60 insertions, 10 deletions
diff --git a/Lib/test/test_grp.py b/Lib/test/test_grp.py
index a8d78ba274..85a52c1f2c 100755
--- a/Lib/test/test_grp.py
+++ b/Lib/test/test_grp.py
@@ -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)
-def test_main():
- test_support.run_unittest(GroupDatabaseTestCase)
+ # 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():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(GroupDatabaseTestCase))
+ test_support.run_suite(suite)
if __name__ == "__main__":
test_main()