symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_grp.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """Test script for the grp module."""
       
     2 
       
     3 import grp
       
     4 import unittest
       
     5 from test import test_support
       
     6 
       
     7 class GroupDatabaseTestCase(unittest.TestCase):
       
     8 
       
     9     def check_value(self, value):
       
    10         # check that a grp tuple has the entries and
       
    11         # attributes promised by the docs
       
    12         self.assertEqual(len(value), 4)
       
    13         self.assertEqual(value[0], value.gr_name)
       
    14         self.assert_(isinstance(value.gr_name, basestring))
       
    15         self.assertEqual(value[1], value.gr_passwd)
       
    16         self.assert_(isinstance(value.gr_passwd, basestring))
       
    17         self.assertEqual(value[2], value.gr_gid)
       
    18         self.assert_(isinstance(value.gr_gid, int))
       
    19         self.assertEqual(value[3], value.gr_mem)
       
    20         self.assert_(isinstance(value.gr_mem, list))
       
    21 
       
    22     def test_values(self):
       
    23         entries = grp.getgrall()
       
    24 
       
    25         for e in entries:
       
    26             self.check_value(e)
       
    27 
       
    28         if len(entries) > 1000:  # Huge group file (NIS?) -- skip the rest
       
    29             return
       
    30 
       
    31         for e in entries:
       
    32             e2 = grp.getgrgid(e.gr_gid)
       
    33             self.check_value(e2)
       
    34             self.assertEqual(e2.gr_gid, e.gr_gid)
       
    35             e2 = grp.getgrnam(e.gr_name)
       
    36             self.check_value(e2)
       
    37             # There are instances where getgrall() returns group names in
       
    38             # lowercase while getgrgid() returns proper casing.
       
    39             # Discovered on Ubuntu 5.04 (custom).
       
    40             self.assertEqual(e2.gr_name.lower(), e.gr_name.lower())
       
    41 
       
    42     def test_errors(self):
       
    43         self.assertRaises(TypeError, grp.getgrgid)
       
    44         self.assertRaises(TypeError, grp.getgrnam)
       
    45         self.assertRaises(TypeError, grp.getgrall, 42)
       
    46 
       
    47         # try to get some errors
       
    48         bynames = {}
       
    49         bygids = {}
       
    50         for (n, p, g, mem) in grp.getgrall():
       
    51             if not n or n == '+':
       
    52                 continue # skip NIS entries etc.
       
    53             bynames[n] = g
       
    54             bygids[g] = n
       
    55 
       
    56         allnames = bynames.keys()
       
    57         namei = 0
       
    58         fakename = allnames[namei]
       
    59         while fakename in bynames:
       
    60             chars = list(fakename)
       
    61             for i in xrange(len(chars)):
       
    62                 if chars[i] == 'z':
       
    63                     chars[i] = 'A'
       
    64                     break
       
    65                 elif chars[i] == 'Z':
       
    66                     continue
       
    67                 else:
       
    68                     chars[i] = chr(ord(chars[i]) + 1)
       
    69                     break
       
    70             else:
       
    71                 namei = namei + 1
       
    72                 try:
       
    73                     fakename = allnames[namei]
       
    74                 except IndexError:
       
    75                     # should never happen... if so, just forget it
       
    76                     break
       
    77             fakename = ''.join(chars)
       
    78 
       
    79         self.assertRaises(KeyError, grp.getgrnam, fakename)
       
    80 
       
    81         # Choose a non-existent gid.
       
    82         fakegid = 4127
       
    83         while fakegid in bygids:
       
    84             fakegid = (fakegid * 3) % 0x10000
       
    85 
       
    86         self.assertRaises(KeyError, grp.getgrgid, fakegid)
       
    87 
       
    88 def test_main():
       
    89     test_support.run_unittest(GroupDatabaseTestCase)
       
    90 
       
    91 if __name__ == "__main__":
       
    92     test_main()