17db96d56Sopenharmony_ci"""Tests for the md5sum script in the Tools directory.""" 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciimport sys 47db96d56Sopenharmony_ciimport os 57db96d56Sopenharmony_ciimport unittest 67db96d56Sopenharmony_cifrom test.support import os_helper 77db96d56Sopenharmony_cifrom test.support import hashlib_helper 87db96d56Sopenharmony_cifrom test.support.script_helper import assert_python_ok, assert_python_failure 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_cifrom test.test_tools import scriptsdir, skip_if_missing 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ciskip_if_missing() 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci@hashlib_helper.requires_hashdigest('md5', openssl=True) 157db96d56Sopenharmony_ciclass MD5SumTests(unittest.TestCase): 167db96d56Sopenharmony_ci @classmethod 177db96d56Sopenharmony_ci def setUpClass(cls): 187db96d56Sopenharmony_ci cls.script = os.path.join(scriptsdir, 'md5sum.py') 197db96d56Sopenharmony_ci os.mkdir(os_helper.TESTFN_ASCII) 207db96d56Sopenharmony_ci cls.fodder = os.path.join(os_helper.TESTFN_ASCII, 'md5sum.fodder') 217db96d56Sopenharmony_ci with open(cls.fodder, 'wb') as f: 227db96d56Sopenharmony_ci f.write(b'md5sum\r\ntest file\r\n') 237db96d56Sopenharmony_ci cls.fodder_md5 = b'd38dae2eb1ab346a292ef6850f9e1a0d' 247db96d56Sopenharmony_ci cls.fodder_textmode_md5 = b'a8b07894e2ca3f2a4c3094065fa6e0a5' 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci @classmethod 277db96d56Sopenharmony_ci def tearDownClass(cls): 287db96d56Sopenharmony_ci os_helper.rmtree(os_helper.TESTFN_ASCII) 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci def test_noargs(self): 317db96d56Sopenharmony_ci rc, out, err = assert_python_ok(self.script) 327db96d56Sopenharmony_ci self.assertEqual(rc, 0) 337db96d56Sopenharmony_ci self.assertTrue( 347db96d56Sopenharmony_ci out.startswith(b'd41d8cd98f00b204e9800998ecf8427e <stdin>')) 357db96d56Sopenharmony_ci self.assertFalse(err) 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci def test_checksum_fodder(self): 387db96d56Sopenharmony_ci rc, out, err = assert_python_ok(self.script, self.fodder) 397db96d56Sopenharmony_ci self.assertEqual(rc, 0) 407db96d56Sopenharmony_ci self.assertTrue(out.startswith(self.fodder_md5)) 417db96d56Sopenharmony_ci for part in self.fodder.split(os.path.sep): 427db96d56Sopenharmony_ci self.assertIn(part.encode(), out) 437db96d56Sopenharmony_ci self.assertFalse(err) 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci def test_dash_l(self): 467db96d56Sopenharmony_ci rc, out, err = assert_python_ok(self.script, '-l', self.fodder) 477db96d56Sopenharmony_ci self.assertEqual(rc, 0) 487db96d56Sopenharmony_ci self.assertIn(self.fodder_md5, out) 497db96d56Sopenharmony_ci parts = self.fodder.split(os.path.sep) 507db96d56Sopenharmony_ci self.assertIn(parts[-1].encode(), out) 517db96d56Sopenharmony_ci self.assertNotIn(parts[-2].encode(), out) 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci def test_dash_t(self): 547db96d56Sopenharmony_ci rc, out, err = assert_python_ok(self.script, '-t', self.fodder) 557db96d56Sopenharmony_ci self.assertEqual(rc, 0) 567db96d56Sopenharmony_ci self.assertTrue(out.startswith(self.fodder_textmode_md5)) 577db96d56Sopenharmony_ci self.assertNotIn(self.fodder_md5, out) 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci def test_dash_s(self): 607db96d56Sopenharmony_ci rc, out, err = assert_python_ok(self.script, '-s', '512', self.fodder) 617db96d56Sopenharmony_ci self.assertEqual(rc, 0) 627db96d56Sopenharmony_ci self.assertIn(self.fodder_md5, out) 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci def test_multiple_files(self): 657db96d56Sopenharmony_ci rc, out, err = assert_python_ok(self.script, self.fodder, self.fodder) 667db96d56Sopenharmony_ci self.assertEqual(rc, 0) 677db96d56Sopenharmony_ci lines = out.splitlines() 687db96d56Sopenharmony_ci self.assertEqual(len(lines), 2) 697db96d56Sopenharmony_ci self.assertEqual(*lines) 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci def test_usage(self): 727db96d56Sopenharmony_ci rc, out, err = assert_python_failure(self.script, '-h') 737db96d56Sopenharmony_ci self.assertEqual(rc, 2) 747db96d56Sopenharmony_ci self.assertEqual(out, b'') 757db96d56Sopenharmony_ci self.assertGreater(err, b'') 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ciif __name__ == '__main__': 797db96d56Sopenharmony_ci unittest.main() 80