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.
diff --git a/Lib/test/test_pwd.py b/Lib/test/test_pwd.py
index 75d083b..78f9a69 100644
--- a/Lib/test/test_pwd.py
+++ b/Lib/test/test_pwd.py
@@ -1,71 +1,82 @@
-from test.test_support import verbose
+import unittest
+from test import test_support
+
import pwd
-print 'pwd.getpwall()'
-entries = pwd.getpwall()
+class PwdTest(unittest.TestCase):
-for e in entries:
- name = e[0]
- uid = e[2]
- if verbose:
- print name, uid
- print 'pwd.getpwuid()'
- dbuid = pwd.getpwuid(uid)
- if dbuid[0] != name:
- print 'Mismatch in pwd.getpwuid()'
- print 'pwd.getpwnam()'
- dbname = pwd.getpwnam(name)
- if dbname[2] != uid:
- print 'Mismatch in pwd.getpwnam()'
- else:
- print 'name matches uid'
- break
+ def test_values(self):
+ entries = pwd.getpwall()
-# try to get some errors
-bynames = {}
-byuids = {}
-for n, p, u, g, gecos, d, s in entries:
- bynames[n] = u
- byuids[u] = n
+ for e in entries:
+ 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))
-allnames = bynames.keys()
-namei = 0
-fakename = allnames[namei]
-while bynames.has_key(fakename):
- 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.assertEqual(pwd.getpwnam(e.pw_name), e)
+ self.assertEqual(pwd.getpwuid(e.pw_uid), e)
-try:
- pwd.getpwnam(fakename)
-except KeyError:
- print 'caught expected exception'
-else:
- print 'fakename', fakename, 'did not except pwd.getpwnam()'
+ def test_errors(self):
+ self.assertRaises(TypeError, pwd.getpwuid)
+ self.assertRaises(TypeError, pwd.getpwnam)
+ self.assertRaises(TypeError, pwd.getpwall, 42)
-# Choose a non-existent uid.
-fakeuid = 4127
-while byuids.has_key(fakeuid):
- fakeuid = (fakeuid * 3) % 0x10000
+ # try to get some errors
+ bynames = {}
+ byuids = {}
+ for (n, p, u, g, gecos, d, s) in pwd.getpwall():
+ bynames[n] = u
+ byuids[u] = n
-try:
- pwd.getpwuid(fakeuid)
-except KeyError:
- print 'caught expected exception'
-else:
- print 'fakeuid', fakeuid, 'did not except pwd.getpwuid()'
+ 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, pwd.getpwnam, fakename)
+
+ # Choose a non-existent uid.
+ fakeuid = 4127
+ while fakeuid in byuids:
+ fakeuid = (fakeuid * 3) % 0x10000
+
+ self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
+
+def test_main():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(PwdTest))
+ test_support.run_suite(suite)
+
+if __name__ == "__main__":
+ test_main()
+