(root)/
Python-3.11.7/
Lib/
test/
test_spwd.py
       1  import os
       2  import unittest
       3  from test.support import import_helper
       4  import warnings
       5  
       6  
       7  with warnings.catch_warnings():
       8      warnings.simplefilter("ignore", DeprecationWarning)
       9      spwd = import_helper.import_module('spwd')
      10  
      11  
      12  @unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0,
      13                       'root privileges required')
      14  class ESC[4;38;5;81mTestSpwdRoot(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      15  
      16      def test_getspall(self):
      17          entries = spwd.getspall()
      18          self.assertIsInstance(entries, list)
      19          for entry in entries:
      20              self.assertIsInstance(entry, spwd.struct_spwd)
      21  
      22      def test_getspnam(self):
      23          entries = spwd.getspall()
      24          if not entries:
      25              self.skipTest('empty shadow password database')
      26          random_name = entries[0].sp_namp
      27          entry = spwd.getspnam(random_name)
      28          self.assertIsInstance(entry, spwd.struct_spwd)
      29          self.assertEqual(entry.sp_namp, random_name)
      30          self.assertEqual(entry.sp_namp, entry[0])
      31          self.assertEqual(entry.sp_namp, entry.sp_nam)
      32          self.assertIsInstance(entry.sp_pwdp, str)
      33          self.assertEqual(entry.sp_pwdp, entry[1])
      34          self.assertEqual(entry.sp_pwdp, entry.sp_pwd)
      35          self.assertIsInstance(entry.sp_lstchg, int)
      36          self.assertEqual(entry.sp_lstchg, entry[2])
      37          self.assertIsInstance(entry.sp_min, int)
      38          self.assertEqual(entry.sp_min, entry[3])
      39          self.assertIsInstance(entry.sp_max, int)
      40          self.assertEqual(entry.sp_max, entry[4])
      41          self.assertIsInstance(entry.sp_warn, int)
      42          self.assertEqual(entry.sp_warn, entry[5])
      43          self.assertIsInstance(entry.sp_inact, int)
      44          self.assertEqual(entry.sp_inact, entry[6])
      45          self.assertIsInstance(entry.sp_expire, int)
      46          self.assertEqual(entry.sp_expire, entry[7])
      47          self.assertIsInstance(entry.sp_flag, int)
      48          self.assertEqual(entry.sp_flag, entry[8])
      49          with self.assertRaises(KeyError) as cx:
      50              spwd.getspnam('invalid user name')
      51          self.assertEqual(str(cx.exception), "'getspnam(): name not found'")
      52          self.assertRaises(TypeError, spwd.getspnam)
      53          self.assertRaises(TypeError, spwd.getspnam, 0)
      54          self.assertRaises(TypeError, spwd.getspnam, random_name, 0)
      55          try:
      56              bytes_name = os.fsencode(random_name)
      57          except UnicodeEncodeError:
      58              pass
      59          else:
      60              self.assertRaises(TypeError, spwd.getspnam, bytes_name)
      61  
      62  
      63  @unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() != 0,
      64                       'non-root user required')
      65  class ESC[4;38;5;81mTestSpwdNonRoot(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      66  
      67      def test_getspnam_exception(self):
      68          name = 'bin'
      69          try:
      70              with self.assertRaises(PermissionError) as cm:
      71                  spwd.getspnam(name)
      72          except KeyError as exc:
      73              self.skipTest("spwd entry %r doesn't exist: %s" % (name, exc))
      74  
      75  
      76  if __name__ == "__main__":
      77      unittest.main()