tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

common_unittests.py (5125B)


      1 #!/usr/bin/env vpython3
      2 # Copyright 2023 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 """File for testing common.py."""
      6 
      7 import os
      8 import tempfile
      9 import unittest
     10 import unittest.mock as mock
     11 
     12 from types import SimpleNamespace
     13 
     14 import common
     15 
     16 
     17 # Tests should use their names to explain the meaning of the tests rather than
     18 # relying on the extra docstrings.
     19 # pylint: disable=missing-function-docstring
     20 @unittest.skipIf(os.name == 'nt', 'Fuchsia tests not supported on Windows')
     21 class CommonTest(unittest.TestCase):
     22    """Test common.py methods."""
     23    def test_find_in_dir_returns_file_or_dir_if_searching(self) -> None:
     24        """Test |find_in_dir| returns files if searching for file, or None."""
     25        # Make the directory structure.
     26        with tempfile.TemporaryDirectory() as tmp_dir:
     27            with tempfile.NamedTemporaryFile(dir=tmp_dir) as tmp_file, \
     28                tempfile.TemporaryDirectory(dir=tmp_dir) as inner_tmp_dir:
     29 
     30                # Structure is now:
     31                # temp_dir/
     32                # temp_dir/inner_dir1
     33                # temp_dir/tempfile1
     34                # File is not a dir, so returns None.
     35                self.assertIsNone(
     36                    common.find_in_dir(os.path.basename(tmp_file.name),
     37                                       parent_dir=tmp_dir))
     38 
     39                # Repeat for directory.
     40                self.assertEqual(
     41                    common.find_in_dir(inner_tmp_dir, parent_dir=tmp_dir),
     42                    inner_tmp_dir)
     43 
     44    def test_find_image_in_sdk_searches_images_in_product_bundle(self):
     45        """Test |find_image_in_sdk| searches for 'images' if product-bundle."""
     46        with tempfile.TemporaryDirectory() as tmp_dir:
     47            os.makedirs(os.path.join(tmp_dir, 'sdk'), exist_ok=True)
     48            os.makedirs(os.path.join(tmp_dir, 'images', 'workstation-product',
     49                                     'images'),
     50                        exist_ok=True)
     51            with mock.patch('common.SDK_ROOT', os.path.join(tmp_dir, 'sdk')):
     52                self.assertEqual(
     53                    common.find_image_in_sdk('workstation-product'),
     54                    os.path.join(tmp_dir, 'images', 'workstation-product',
     55                                 'images'))
     56 
     57    def test_images_root_should_not_end_with_path_sep(self):
     58        """INTERNAL_IMAGES_ROOT appends -internal at the end of the IMAGES_ROOT,
     59        so the later one should not end with a /, otherwise the folder name will
     60        become 'images/-internal'."""
     61        # Avoid the logic being bypassed.
     62        self.assertIsNone(os.environ.get('FUCHSIA_INTERNAL_IMAGES_ROOT'))
     63        self.assertFalse(common.IMAGES_ROOT.endswith(os.path.sep))
     64 
     65    @mock.patch('common.run_ffx_command')
     66    def test_get_system_info_parse_version_and_product(self, ffx_mock):
     67        ffx_mock.return_value = SimpleNamespace(
     68            returncode=0, stdout='{"build": {"version": "v", "product": "p"}}')
     69        self.assertEqual(common.get_system_info(), ('p', 'v'))
     70 
     71    @mock.patch('common.run_ffx_command')
     72    def test_get_system_info_parse_version_only(self, ffx_mock):
     73        ffx_mock.return_value = SimpleNamespace(
     74            returncode=0, stdout='{"build": {"version": "v"}}')
     75        self.assertEqual(common.get_system_info(), ('', 'v'))
     76 
     77    @mock.patch('common.run_ffx_command')
     78    def test_get_system_info_ffx_error(self, ffx_mock):
     79        ffx_mock.return_value = SimpleNamespace(returncode=100,
     80                                                stdout='{"build": {}}')
     81        self.assertEqual(common.get_system_info(), ('', ''))
     82 
     83    @mock.patch('common.run_ffx_command')
     84    def test_get_system_info_never_returns_none(self, ffx_mock):
     85        ffx_mock.return_value = SimpleNamespace(returncode=0,
     86                                                stdout='{"build": {}}')
     87        self.assertEqual(common.get_system_info(), ('', ''))
     88 
     89    @mock.patch('common.run_ffx_command')
     90    def test_get_system_info_ignore_no_build(self, ffx_mock):
     91        ffx_mock.return_value = SimpleNamespace(
     92            returncode=0, stdout='{"thisisnotbuild": {}}')
     93        self.assertEqual(common.get_system_info(), ('', ''))
     94 
     95    @mock.patch('common.run_ffx_command')
     96    def test_get_system_info_ignore_bad_build_type(self, ffx_mock):
     97        ffx_mock.return_value = SimpleNamespace(returncode=0,
     98                                                stdout='{"build": []}')
     99        self.assertEqual(common.get_system_info(), ('', ''))
    100 
    101    @mock.patch('common.run_ffx_command')
    102    def test_get_system_info_ignore_bad_build_type2(self, ffx_mock):
    103        ffx_mock.return_value = SimpleNamespace(returncode=0,
    104                                                stdout='{"build": "hello"}')
    105        self.assertEqual(common.get_system_info(), ('', ''))
    106 
    107    @mock.patch('common.run_ffx_command')
    108    def test_get_system_info_not_a_json(self, ffx_mock):
    109        ffx_mock.return_value = SimpleNamespace(returncode=0, stdout='hello')
    110        self.assertEqual(common.get_system_info(), ('', ''))
    111 
    112 if __name__ == '__main__':
    113    unittest.main()