symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_pwd.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 import unittest
       
     2 from test import test_support
       
     3 
       
     4 import pwd
       
     5 
       
     6 class PwdTest(unittest.TestCase):
       
     7 
       
     8     def test_values(self):
       
     9         entries = pwd.getpwall()
       
    10         entriesbyname = {}
       
    11         entriesbyuid = {}
       
    12 
       
    13         for e in entries:
       
    14             self.assertEqual(len(e), 7)
       
    15             self.assertEqual(e[0], e.pw_name)
       
    16             self.assert_(isinstance(e.pw_name, basestring))
       
    17             self.assertEqual(e[1], e.pw_passwd)
       
    18             self.assert_(isinstance(e.pw_passwd, basestring))
       
    19             self.assertEqual(e[2], e.pw_uid)
       
    20             self.assert_(isinstance(e.pw_uid, int))
       
    21             self.assertEqual(e[3], e.pw_gid)
       
    22             self.assert_(isinstance(e.pw_gid, int))
       
    23             self.assertEqual(e[4], e.pw_gecos)
       
    24             self.assert_(isinstance(e.pw_gecos, basestring))
       
    25             self.assertEqual(e[5], e.pw_dir)
       
    26             self.assert_(isinstance(e.pw_dir, basestring))
       
    27             self.assertEqual(e[6], e.pw_shell)
       
    28             self.assert_(isinstance(e.pw_shell, basestring))
       
    29 
       
    30             # The following won't work, because of duplicate entries
       
    31             # for one uid
       
    32             #    self.assertEqual(pwd.getpwuid(e.pw_uid), e)
       
    33             # instead of this collect all entries for one uid
       
    34             # and check afterwards
       
    35             entriesbyname.setdefault(e.pw_name, []).append(e)
       
    36             entriesbyuid.setdefault(e.pw_uid, []).append(e)
       
    37 
       
    38         if len(entries) > 1000:  # Huge passwd file (NIS?) -- skip the rest
       
    39             return
       
    40 
       
    41         # check whether the entry returned by getpwuid()
       
    42         # for each uid is among those from getpwall() for this uid
       
    43         for e in entries:
       
    44             if not e[0] or e[0] == '+':
       
    45                 continue # skip NIS entries etc.
       
    46             self.assert_(pwd.getpwnam(e.pw_name) in entriesbyname[e.pw_name])
       
    47             self.assert_(pwd.getpwuid(e.pw_uid) in entriesbyuid[e.pw_uid])
       
    48 
       
    49     def test_errors(self):
       
    50         self.assertRaises(TypeError, pwd.getpwuid)
       
    51         self.assertRaises(TypeError, pwd.getpwnam)
       
    52         self.assertRaises(TypeError, pwd.getpwall, 42)
       
    53 
       
    54         # try to get some errors
       
    55         bynames = {}
       
    56         byuids = {}
       
    57         for (n, p, u, g, gecos, d, s) in pwd.getpwall():
       
    58             bynames[n] = u
       
    59             byuids[u] = n
       
    60 
       
    61         allnames = bynames.keys()
       
    62         namei = 0
       
    63         fakename = allnames[namei]
       
    64         while fakename in bynames:
       
    65             chars = list(fakename)
       
    66             for i in xrange(len(chars)):
       
    67                 if chars[i] == 'z':
       
    68                     chars[i] = 'A'
       
    69                     break
       
    70                 elif chars[i] == 'Z':
       
    71                     continue
       
    72                 else:
       
    73                     chars[i] = chr(ord(chars[i]) + 1)
       
    74                     break
       
    75             else:
       
    76                 namei = namei + 1
       
    77                 try:
       
    78                     fakename = allnames[namei]
       
    79                 except IndexError:
       
    80                     # should never happen... if so, just forget it
       
    81                     break
       
    82             fakename = ''.join(chars)
       
    83 
       
    84         self.assertRaises(KeyError, pwd.getpwnam, fakename)
       
    85 
       
    86         # Choose a non-existent uid.
       
    87         fakeuid = 4127
       
    88         while fakeuid in byuids:
       
    89             fakeuid = (fakeuid * 3) % 0x10000
       
    90 
       
    91         self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
       
    92 
       
    93 def test_main():
       
    94     test_support.run_unittest(PwdTest)
       
    95 
       
    96 if __name__ == "__main__":
       
    97     test_main()