[Python-checkins] python/dist/src/Lib/test test_pwd.py,1.12,1.13 test_grp.py,1.10,1.11 test___all__.py,1.28,1.29

doerwalter@users.sourceforge.net doerwalter@users.sourceforge.net
Tue, 15 Apr 2003 04:10:38 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv14955/Lib/test

Modified Files:
	test_pwd.py test_grp.py test___all__.py 
Log Message:
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.


Index: test_pwd.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_pwd.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** test_pwd.py	23 Jul 2002 19:03:59 -0000	1.12
--- test_pwd.py	15 Apr 2003 11:10:32 -0000	1.13
***************
*** 1,71 ****
! from test.test_support import verbose
  import pwd
  
! print 'pwd.getpwall()'
! entries = pwd.getpwall()
  
! 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
  
! # try to get some errors
! bynames = {}
! byuids = {}
! for n, p, u, g, gecos, d, s in entries:
!     bynames[n] = u
!     byuids[u] = n
  
! 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))
  
! try:
!     pwd.getpwnam(fakename)
! except KeyError:
!     print 'caught expected exception'
! else:
!     print 'fakename', fakename, 'did not except pwd.getpwnam()'
  
! # Choose a non-existent uid.
! fakeuid = 4127
! while byuids.has_key(fakeuid):
!     fakeuid = (fakeuid * 3) % 0x10000
  
- try:
-     pwd.getpwuid(fakeuid)
- except KeyError:
-     print 'caught expected exception'
- else:
-     print 'fakeuid', fakeuid, 'did not except pwd.getpwuid()'
--- 1,82 ----
! import unittest
! from test import test_support
! 
  import pwd
  
! class PwdTest(unittest.TestCase):
  
!     def test_values(self):
!         entries = pwd.getpwall()
  
!         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))
  
!             self.assertEqual(pwd.getpwnam(e.pw_name), e)
!             self.assertEqual(pwd.getpwuid(e.pw_uid), e)
  
!     def test_errors(self):
!         self.assertRaises(TypeError, pwd.getpwuid)
!         self.assertRaises(TypeError, pwd.getpwnam)
!         self.assertRaises(TypeError, pwd.getpwall, 42)
  
!         # try to get some errors
!         bynames = {}
!         byuids = {}
!         for (n, p, u, g, gecos, d, s) in pwd.getpwall():
!             bynames[n] = u
!             byuids[u] = 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, 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()
  

Index: test_grp.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_grp.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** test_grp.py	23 Jul 2002 19:03:54 -0000	1.10
--- test_grp.py	15 Apr 2003 11:10:33 -0000	1.11
***************
*** 1,6 ****
  """Test script for the grp module."""
  
- # XXX This really needs some work, but what are the expected invariants?
- 
  import grp
  import unittest
--- 1,4 ----
***************
*** 10,26 ****
  class GroupDatabaseTestCase(unittest.TestCase):
  
!     def setUp(self):
!         self.groups = grp.getgrall()
  
!     def test_getgrgid(self):
!         entry = grp.getgrgid(self.groups[0][2])
  
!     def test_getgrnam(self):
!         entry = grp.getgrnam(self.groups[0][0])
  
  
! def test_main():
!     test_support.run_unittest(GroupDatabaseTestCase)
  
  
  if __name__ == "__main__":
--- 8,76 ----
  class GroupDatabaseTestCase(unittest.TestCase):
  
!     def test_values(self):
!         entries = grp.getgrall()
  
!         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))
  
!             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():
+     suite = unittest.TestSuite()
+     suite.addTest(unittest.makeSuite(GroupDatabaseTestCase))
+     test_support.run_suite(suite)
  
  if __name__ == "__main__":

Index: test___all__.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test___all__.py,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -d -r1.28 -r1.29
*** test___all__.py	9 Oct 2002 18:17:06 -0000	1.28
--- test___all__.py	15 Apr 2003 11:10:33 -0000	1.29
***************
*** 1,2 ****
--- 1,5 ----
+ import unittest
+ from test import test_support
+ 
  from test.test_support import verify, verbose
  import sys
***************
*** 10,174 ****
                          r'statcache$')
  
! def check_all(modname):
!     names = {}
!     try:
!         exec "import %s" % modname in names
!     except ImportError:
!         # Silent fail here seems the best route since some modules
!         # may not be available in all environments.
!         # Since an ImportError may leave a partial module object in
!         # sys.modules, get rid of that first.  Here's what happens if
!         # you don't:  importing pty fails on Windows because pty tries to
!         # import FCNTL, which doesn't exist.  That raises an ImportError,
!         # caught here.  It also leaves a partial pty module in sys.modules.
!         # So when test_pty is called later, the import of pty succeeds,
!         # but shouldn't.  As a result, test_pty crashes with an
!         # AttributeError instead of an ImportError, and regrtest interprets
!         # the latter as a test failure (ImportError is treated as "test
!         # skipped" -- which is what test_pty should say on Windows).
          try:
!             del sys.modules[modname]
!         except KeyError:
!             pass
!         return
!     verify(hasattr(sys.modules[modname], "__all__"),
!            "%s has no __all__ attribute" % modname)
!     names = {}
!     exec "from %s import *" % modname in names
!     if names.has_key("__builtins__"):
!         del names["__builtins__"]
!     keys = names.keys()
!     keys.sort()
!     all = list(sys.modules[modname].__all__) # in case it's a tuple
!     all.sort()
!     verify(keys==all, "%s != %s" % (keys, all))
  
! if not sys.platform.startswith('java'):
!     # In case _socket fails to build, make this test fail more gracefully
!     # than an AttributeError somewhere deep in CGIHTTPServer.
!     import _socket
  
! check_all("BaseHTTPServer")
! check_all("CGIHTTPServer")
! check_all("ConfigParser")
! check_all("Cookie")
! check_all("MimeWriter")
! check_all("SimpleHTTPServer")
! check_all("SocketServer")
! check_all("StringIO")
! check_all("UserString")
! check_all("aifc")
! check_all("atexit")
! check_all("audiodev")
! check_all("base64")
! check_all("bdb")
! check_all("binhex")
! check_all("calendar")
! check_all("cgi")
! check_all("cmd")
! check_all("code")
! check_all("codecs")
! check_all("codeop")
! check_all("colorsys")
! check_all("commands")
! check_all("compileall")
! check_all("copy")
! check_all("copy_reg")
! check_all("dbhash")
! check_all("dircache")
! check_all("dis")
! check_all("doctest")
! check_all("dospath")
! check_all("filecmp")
! check_all("fileinput")
! check_all("fnmatch")
! check_all("fpformat")
! check_all("ftplib")
! check_all("getopt")
! check_all("getpass")
! check_all("gettext")
! check_all("glob")
! check_all("gopherlib")
! check_all("gzip")
! check_all("htmllib")
! check_all("httplib")
! check_all("ihooks")
! check_all("imaplib")
! check_all("imghdr")
! check_all("imputil")
! check_all("keyword")
! check_all("linecache")
! check_all("locale")
! check_all("macpath")
! check_all("macurl2path")
! check_all("mailbox")
! check_all("mhlib")
! check_all("mimetools")
! check_all("mimetypes")
! check_all("mimify")
! check_all("multifile")
! check_all("netrc")
! check_all("nntplib")
! check_all("ntpath")
! check_all("os")
! check_all("pdb")
! check_all("pickle")
! check_all("pipes")
! check_all("popen2")
! check_all("poplib")
! check_all("posixpath")
! check_all("pprint")
! check_all("pre")  # deprecated
! check_all("profile")
! check_all("pstats")
! check_all("pty")
! check_all("py_compile")
! check_all("pyclbr")
! check_all("quopri")
! check_all("random")
! check_all("re")
! check_all("reconvert")
! check_all("regsub")
! check_all("repr")
! check_all("rexec")
! check_all("rfc822")
! check_all("robotparser")
! check_all("sched")
! check_all("sgmllib")
! check_all("shelve")
! check_all("shlex")
! check_all("shutil")
! check_all("smtpd")
! check_all("smtplib")
! check_all("sndhdr")
! check_all("socket")
! check_all("sre")
! check_all("stat_cache")
! check_all("tabnanny")
! check_all("telnetlib")
! check_all("tempfile")
! check_all("toaiff")
! check_all("tokenize")
! check_all("traceback")
! check_all("tty")
! check_all("urllib")
! check_all("urlparse")
! check_all("uu")
! check_all("warnings")
! check_all("wave")
! check_all("weakref")
! check_all("webbrowser")
! check_all("xdrlib")
! check_all("zipfile")
  
! # rlcompleter needs special consideration; it import readline which
! # initializes GNU readline which calls setlocale(LC_CTYPE, "")... :-(
! try:
!     check_all("rlcompleter")
! finally:
!     try:
!         import locale
!     except ImportError:
!         pass
!     else:
!         locale.setlocale(locale.LC_CTYPE, 'C')
--- 13,200 ----
                          r'statcache$')
  
! class AllTest(unittest.TestCase):
! 
!     def check_all(self, modname):
!         names = {}
          try:
!             exec "import %s" % modname in names
!         except ImportError:
!             # Silent fail here seems the best route since some modules
!             # may not be available in all environments.
!             # Since an ImportError may leave a partial module object in
!             # sys.modules, get rid of that first.  Here's what happens if
!             # you don't:  importing pty fails on Windows because pty tries to
!             # import FCNTL, which doesn't exist.  That raises an ImportError,
!             # caught here.  It also leaves a partial pty module in sys.modules.
!             # So when test_pty is called later, the import of pty succeeds,
!             # but shouldn't.  As a result, test_pty crashes with an
!             # AttributeError instead of an ImportError, and regrtest interprets
!             # the latter as a test failure (ImportError is treated as "test
!             # skipped" -- which is what test_pty should say on Windows).
!             try:
!                 del sys.modules[modname]
!             except KeyError:
!                 pass
!             return
!         verify(hasattr(sys.modules[modname], "__all__"),
!                "%s has no __all__ attribute" % modname)
!         names = {}
!         exec "from %s import *" % modname in names
!         if names.has_key("__builtins__"):
!             del names["__builtins__"]
!         keys = names.keys()
!         keys.sort()
!         all = list(sys.modules[modname].__all__) # in case it's a tuple
!         all.sort()
!         verify(keys==all, "%s != %s" % (keys, all))
  
!     def test_all(self):
!         if not sys.platform.startswith('java'):
!             # In case _socket fails to build, make this test fail more gracefully
!             # than an AttributeError somewhere deep in CGIHTTPServer.
!             import _socket
  
!         self.check_all("BaseHTTPServer")
!         self.check_all("CGIHTTPServer")
!         self.check_all("ConfigParser")
!         self.check_all("Cookie")
!         self.check_all("MimeWriter")
!         self.check_all("SimpleHTTPServer")
!         self.check_all("SocketServer")
!         self.check_all("StringIO")
!         self.check_all("UserString")
!         self.check_all("aifc")
!         self.check_all("atexit")
!         self.check_all("audiodev")
!         self.check_all("base64")
!         self.check_all("bdb")
!         self.check_all("binhex")
!         self.check_all("calendar")
!         self.check_all("cgi")
!         self.check_all("cmd")
!         self.check_all("code")
!         self.check_all("codecs")
!         self.check_all("codeop")
!         self.check_all("colorsys")
!         self.check_all("commands")
!         self.check_all("compileall")
!         self.check_all("copy")
!         self.check_all("copy_reg")
!         self.check_all("dbhash")
!         self.check_all("difflib")
!         self.check_all("dircache")
!         self.check_all("dis")
!         self.check_all("doctest")
!         self.check_all("dummy_thread")
!         self.check_all("dummy_threading")
!         self.check_all("filecmp")
!         self.check_all("fileinput")
!         self.check_all("fnmatch")
!         self.check_all("fpformat")
!         self.check_all("ftplib")
!         self.check_all("getopt")
!         self.check_all("getpass")
!         self.check_all("gettext")
!         self.check_all("glob")
!         self.check_all("gopherlib")
!         self.check_all("gzip")
!         self.check_all("heapq")
!         self.check_all("htmllib")
!         self.check_all("httplib")
!         self.check_all("ihooks")
!         self.check_all("imaplib")
!         self.check_all("imghdr")
!         self.check_all("imputil")
!         self.check_all("keyword")
!         self.check_all("linecache")
!         self.check_all("locale")
!         self.check_all("macpath")
!         self.check_all("macurl2path")
!         self.check_all("mailbox")
!         self.check_all("mailcap")
!         self.check_all("mhlib")
!         self.check_all("mimetools")
!         self.check_all("mimetypes")
!         self.check_all("mimify")
!         self.check_all("multifile")
!         self.check_all("netrc")
!         self.check_all("nntplib")
!         self.check_all("ntpath")
!         self.check_all("opcode")
!         self.check_all("os")
!         self.check_all("os2emxpath")
!         self.check_all("pdb")
!         self.check_all("pickle")
!         self.check_all("pipes")
!         self.check_all("popen2")
!         self.check_all("poplib")
!         self.check_all("posixpath")
!         self.check_all("pprint")
!         self.check_all("pre")  # deprecated
!         self.check_all("profile")
!         self.check_all("pstats")
!         self.check_all("pty")
!         self.check_all("py_compile")
!         self.check_all("pyclbr")
!         self.check_all("quopri")
!         self.check_all("random")
!         self.check_all("re")
!         self.check_all("reconvert")
!         self.check_all("regsub")
!         self.check_all("repr")
!         self.check_all("rexec")
!         self.check_all("rfc822")
!         self.check_all("robotparser")
!         self.check_all("sched")
!         self.check_all("sets")
!         self.check_all("sgmllib")
!         self.check_all("shelve")
!         self.check_all("shlex")
!         self.check_all("shutil")
!         self.check_all("smtpd")
!         self.check_all("smtplib")
!         self.check_all("sndhdr")
!         self.check_all("socket")
!         self.check_all("sre")
!         self.check_all("statcache")
!         self.check_all("symtable")
!         self.check_all("tabnanny")
!         self.check_all("tarfile")
!         self.check_all("telnetlib")
!         self.check_all("tempfile")
!         self.check_all("textwrap")
!         self.check_all("threading")
!         self.check_all("toaiff")
!         self.check_all("tokenize")
!         self.check_all("traceback")
!         self.check_all("tty")
!         self.check_all("urllib")
!         self.check_all("urlparse")
!         self.check_all("uu")
!         self.check_all("warnings")
!         self.check_all("wave")
!         self.check_all("weakref")
!         self.check_all("webbrowser")
!         self.check_all("xdrlib")
!         self.check_all("zipfile")
  
!         # rlcompleter needs special consideration; it import readline which
!         # initializes GNU readline which calls setlocale(LC_CTYPE, "")... :-(
!         try:
!             self.check_all("rlcompleter")
!         finally:
!             try:
!                 import locale
!             except ImportError:
!                 pass
!             else:
!                 locale.setlocale(locale.LC_CTYPE, 'C')
! 
! 
! def test_main():
!     suite = unittest.TestSuite()
!     suite.addTest(unittest.makeSuite(AllTest))
!     test_support.run_suite(suite)
! 
! if __name__ == "__main__":
!     test_main()