tor-browser

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

test_pkg.py (4535B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 from pathlib import Path
      6 from string import Template
      7 from unittest.mock import patch
      8 
      9 import mozunit
     10 
     11 import mozpack.pkg
     12 from mozpack.pkg import (
     13    create_bom,
     14    create_payload,
     15    create_pkg,
     16    get_app_info_plist,
     17    get_apple_template,
     18    get_relative_glob_list,
     19    save_text_file,
     20    xar_package_folder,
     21 )
     22 from mozpack.test.test_files import TestWithTmpDir
     23 
     24 
     25 class TestPkg(TestWithTmpDir):
     26    maxDiff = None
     27 
     28    class MockSubprocessRun:
     29        stderr = ""
     30        stdout = ""
     31        returncode = 0
     32 
     33        def __init__(self, returncode=0):
     34            self.returncode = returncode
     35 
     36    def _mk_test_file(self, name, mode=0o777):
     37        tool = Path(self.tmpdir) / f"{name}"
     38        tool.touch()
     39        tool.chmod(mode)
     40        return tool
     41 
     42    def test_get_apple_template(self):
     43        tmpl = get_apple_template("Distribution.template")
     44        assert type(tmpl) is Template
     45 
     46    def test_get_apple_template_not_file(self):
     47        with self.assertRaises(Exception):
     48            get_apple_template("tmpl-should-not-exist")
     49 
     50    def test_save_text_file(self):
     51        content = "Hello"
     52        destination = Path(self.tmpdir) / "test_save_text_file"
     53        save_text_file(content, destination)
     54        with destination.open("r") as file:
     55            assert content == file.read()
     56 
     57    def test_get_app_info_plist(self):
     58        app_path = Path(self.tmpdir) / "app"
     59        (app_path / "Contents").mkdir(parents=True)
     60        (app_path / "Contents/Info.plist").touch()
     61        data = {"foo": "bar"}
     62        with patch.object(mozpack.pkg.plistlib, "load", lambda x: data):
     63            assert data == get_app_info_plist(app_path)
     64 
     65    def test_get_app_info_plist_not_file(self):
     66        app_path = Path(self.tmpdir) / "app-does-not-exist"
     67        with self.assertRaises(Exception):
     68            get_app_info_plist(app_path)
     69 
     70    def _mock_payload(self, returncode):
     71        def _mock_run(*args, **kwargs):
     72            return self.MockSubprocessRun(returncode)
     73 
     74        return _mock_run
     75 
     76    def test_create_payload(self):
     77        destination = Path(self.tmpdir) / "mockPayload"
     78        with patch.object(mozpack.pkg.subprocess, "run", self._mock_payload(0)):
     79            create_payload(destination, Path(self.tmpdir), "cpio")
     80 
     81    def test_create_bom(self):
     82        bom_path = Path(self.tmpdir) / "Bom"
     83        bom_path.touch()
     84        root_path = Path(self.tmpdir)
     85        tool_path = Path(self.tmpdir) / "not-really-used-during-test"
     86        with patch.object(mozpack.pkg.subprocess, "check_call", lambda *x: None):
     87            create_bom(bom_path, root_path, tool_path)
     88 
     89    def get_relative_glob_list(self):
     90        source = Path(self.tmpdir)
     91        (source / "testfile").touch()
     92        glob = "*"
     93        assert len(get_relative_glob_list(source, glob)) == 1
     94 
     95    def test_xar_package_folder(self):
     96        source = Path(self.tmpdir)
     97        dest = source / "fakedestination"
     98        dest.touch()
     99        tool = source / "faketool"
    100        with patch.object(mozpack.pkg.subprocess, "check_call", lambda *x, **y: None):
    101            xar_package_folder(source, dest, tool)
    102 
    103    def test_xar_package_folder_not_absolute(self):
    104        source = Path("./some/relative/path")
    105        dest = Path("./some/other/relative/path")
    106        tool = source / "faketool"
    107        with patch.object(mozpack.pkg.subprocess, "check_call", lambda: None):
    108            with self.assertRaises(Exception):
    109                xar_package_folder(source, dest, tool)
    110 
    111    def test_create_pkg(self):
    112        def noop(*x, **y):
    113            pass
    114 
    115        def mock_get_app_info_plist(*args):
    116            return {"CFBundleShortVersionString": "1.0.0"}
    117 
    118        def mock_get_apple_template(*args):
    119            return Template("fake template")
    120 
    121        source = Path(self.tmpdir) / "FakeApp.app"
    122        source.mkdir()
    123        output = Path(self.tmpdir) / "output.pkg"
    124        fake_tool = Path(self.tmpdir) / "faketool"
    125        with patch.multiple(
    126            mozpack.pkg,
    127            get_app_info_plist=mock_get_app_info_plist,
    128            get_apple_template=mock_get_apple_template,
    129            save_text_file=noop,
    130            create_payload=noop,
    131            create_bom=noop,
    132            xar_package_folder=noop,
    133        ):
    134            create_pkg(source, output, fake_tool, fake_tool, fake_tool)
    135 
    136 
    137 if __name__ == "__main__":
    138    mozunit.main()