| #!/usr/bin/env python3 |
| |
| # Copyright 2020 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Tests for sqlite_cherry_picker.py. |
| |
| These tests should be getting picked up by the PRESUBMIT.py in the parent |
| directory. |
| """ |
| |
| from pathlib import Path |
| import io |
| import os |
| import shutil |
| import tempfile |
| import unittest |
| import sqlite_cherry_picker |
| |
| # pylint: disable=W0212,C0103,C0115,C0116 |
| |
| |
| class CherryPickerUnittest(unittest.TestCase): |
| def setUp(self): |
| self.test_root = tempfile.mkdtemp() |
| |
| def tearDown(self): |
| if self.test_root: |
| shutil.rmtree(self.test_root) |
| |
| def testManifestEntryConstructor(self): |
| with self.assertRaises(sqlite_cherry_picker.IncorrectType): |
| entry = sqlite_cherry_picker.ManifestEntry('DD', [ |
| 'vsixtest/vsixtest.tcl', |
| '6a9a6ab600c25a91a7acc6293828957a386a8a93' |
| ]) |
| del entry # unused because exception will be raised. |
| |
| def testManifestEntryHashType(self): |
| entry = sqlite_cherry_picker.ManifestEntry('F', [ |
| 'vsixtest/vsixtest.tcl', '6a9a6ab600c25a91a7acc6293828957a386a8a93' |
| ]) |
| self.assertEqual(entry.get_hash_type(), 'sha1') |
| |
| entry = sqlite_cherry_picker.ManifestEntry('F', [ |
| 'tool/warnings-clang.sh', |
| 'bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7' |
| ]) |
| self.assertEqual(entry.get_hash_type(), 'sha3') |
| |
| # test a bad hash which is too short and cannot be identified as either |
| # a sha1 or sha3 hash. |
| with self.assertRaises(sqlite_cherry_picker.UnknownHash): |
| entry = sqlite_cherry_picker.ManifestEntry( |
| 'F', ['file/path.sh', '12345678']) |
| entry.get_hash_type() |
| |
| def testManifestEntryHashCalc(self): |
| data = 'abcdefghijklmnopqrstuvwxyDEFGHIJKLMUVWXYZ0123456789'.encode( |
| 'utf-8') |
| self.assertEqual( |
| sqlite_cherry_picker.ManifestEntry.calc_hash(data, 'sha1'), |
| 'e117bfe4bcb1429cf8a0f72f8f4ea322a9a500eb') |
| self.assertEqual( |
| sqlite_cherry_picker.ManifestEntry.calc_hash(data, 'sha3'), |
| '2cb59ee01402c45e7c56008b7ca33d006dbd980a5e222fac3a584f5639a450d7') |
| |
| def testManifestFindEntry(self): |
| manifest = sqlite_cherry_picker.Manifest() |
| self.assertIsNone(manifest.find_file_entry('nonexistent')) |
| manifest.entries = [ |
| sqlite_cherry_picker.ManifestEntry('F', [ |
| 'tool/warnings-clang.sh', |
| 'bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7' |
| ]), |
| sqlite_cherry_picker.ManifestEntry('T', |
| ['+bgcolor', '*', '#d0c0ff']) |
| ] |
| |
| entry = manifest.find_file_entry('tool/warnings-clang.sh') |
| self.assertIsNotNone(entry) |
| self.assertEqual(entry.items[0], 'tool/warnings-clang.sh') |
| |
| # Should only find files. |
| self.assertIsNone(manifest.find_file_entry('+bgcolor')) |
| |
| def testManifestDeserialize(self): |
| manfest_path = os.path.join( |
| os.path.dirname(os.path.realpath(__file__)), 'test_data', |
| 'test_manifest') |
| manifest_data = Path(manfest_path).read_text() |
| input_stream = io.StringIO(manifest_data) |
| manifest = sqlite_cherry_picker.ManifestSerializer.read_stream( |
| input_stream) |
| self.assertEqual(len(manifest.entries), 9) |
| |
| output_stream = io.StringIO() |
| sqlite_cherry_picker.ManifestSerializer.write_stream( |
| manifest, output_stream) |
| self.assertEqual(output_stream.getvalue(), manifest_data) |
| |
| def testGitHash(self): |
| valid_git_commit_id = '61c3ca1b1c77bbcaa35f9326decf3658bdb5626a' |
| self.assertTrue( |
| sqlite_cherry_picker.CherryPicker._is_git_commit_id( |
| valid_git_commit_id)) |
| |
| invalid_git_commit_id = 'f3658bdb5626a' |
| self.assertFalse( |
| sqlite_cherry_picker.CherryPicker._is_git_commit_id( |
| invalid_git_commit_id)) |
| |
| def testIsBinaryFile(self): |
| self.assertTrue( |
| sqlite_cherry_picker.CherryPicker._is_binary_file( |
| 'path/test.data')) |
| self.assertTrue( |
| sqlite_cherry_picker.CherryPicker._is_binary_file('path/test.db')) |
| self.assertTrue( |
| sqlite_cherry_picker.CherryPicker._is_binary_file('path/test.ico')) |
| self.assertTrue( |
| sqlite_cherry_picker.CherryPicker._is_binary_file('path/test.jpg')) |
| self.assertTrue( |
| sqlite_cherry_picker.CherryPicker._is_binary_file('path/test.png')) |
| |
| self.assertFalse( |
| sqlite_cherry_picker.CherryPicker._is_binary_file('path/test.c')) |
| self.assertFalse( |
| sqlite_cherry_picker.CherryPicker._is_binary_file('path/test.h')) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |