python (3.11.7)

(root)/
lib/
python3.11/
test/
test_tools/
test_md5sum.py
       1  """Tests for the md5sum script in the Tools directory."""
       2  
       3  import sys
       4  import os
       5  import unittest
       6  from test.support import os_helper
       7  from test.support import hashlib_helper
       8  from test.support.script_helper import assert_python_ok, assert_python_failure
       9  
      10  from test.test_tools import scriptsdir, skip_if_missing
      11  
      12  skip_if_missing()
      13  
      14  @hashlib_helper.requires_hashdigest('md5', openssl=True)
      15  class ESC[4;38;5;81mMD5SumTests(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      16      @classmethod
      17      def setUpClass(cls):
      18          cls.script = os.path.join(scriptsdir, 'md5sum.py')
      19          os.mkdir(os_helper.TESTFN_ASCII)
      20          cls.fodder = os.path.join(os_helper.TESTFN_ASCII, 'md5sum.fodder')
      21          with open(cls.fodder, 'wb') as f:
      22              f.write(b'md5sum\r\ntest file\r\n')
      23          cls.fodder_md5 = b'd38dae2eb1ab346a292ef6850f9e1a0d'
      24          cls.fodder_textmode_md5 = b'a8b07894e2ca3f2a4c3094065fa6e0a5'
      25  
      26      @classmethod
      27      def tearDownClass(cls):
      28          os_helper.rmtree(os_helper.TESTFN_ASCII)
      29  
      30      def test_noargs(self):
      31          rc, out, err = assert_python_ok(self.script)
      32          self.assertEqual(rc, 0)
      33          self.assertTrue(
      34              out.startswith(b'd41d8cd98f00b204e9800998ecf8427e <stdin>'))
      35          self.assertFalse(err)
      36  
      37      def test_checksum_fodder(self):
      38          rc, out, err = assert_python_ok(self.script, self.fodder)
      39          self.assertEqual(rc, 0)
      40          self.assertTrue(out.startswith(self.fodder_md5))
      41          for part in self.fodder.split(os.path.sep):
      42              self.assertIn(part.encode(), out)
      43          self.assertFalse(err)
      44  
      45      def test_dash_l(self):
      46          rc, out, err = assert_python_ok(self.script, '-l', self.fodder)
      47          self.assertEqual(rc, 0)
      48          self.assertIn(self.fodder_md5, out)
      49          parts = self.fodder.split(os.path.sep)
      50          self.assertIn(parts[-1].encode(), out)
      51          self.assertNotIn(parts[-2].encode(), out)
      52  
      53      def test_dash_t(self):
      54          rc, out, err = assert_python_ok(self.script, '-t', self.fodder)
      55          self.assertEqual(rc, 0)
      56          self.assertTrue(out.startswith(self.fodder_textmode_md5))
      57          self.assertNotIn(self.fodder_md5, out)
      58  
      59      def test_dash_s(self):
      60          rc, out, err = assert_python_ok(self.script, '-s', '512', self.fodder)
      61          self.assertEqual(rc, 0)
      62          self.assertIn(self.fodder_md5, out)
      63  
      64      def test_multiple_files(self):
      65          rc, out, err = assert_python_ok(self.script, self.fodder, self.fodder)
      66          self.assertEqual(rc, 0)
      67          lines = out.splitlines()
      68          self.assertEqual(len(lines), 2)
      69          self.assertEqual(*lines)
      70  
      71      def test_usage(self):
      72          rc, out, err = assert_python_failure(self.script, '-h')
      73          self.assertEqual(rc, 2)
      74          self.assertEqual(out, b'')
      75          self.assertGreater(err, b'')
      76  
      77  
      78  if __name__ == '__main__':
      79      unittest.main()