forked from mirrors/gecko-dev
Backed out changeset e8fcfc7f8108 (bug 1811850) Backed out changeset f8950d716c9e (bug 1811850) Backed out changeset f650123cc188 (bug 1811850) Backed out changeset d96f90c2c58b (bug 1811850) Backed out changeset c3b0f9666183 (bug 1811850)
137 lines
4.4 KiB
Python
137 lines
4.4 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from pathlib import Path
|
|
from string import Template
|
|
from unittest.mock import patch
|
|
|
|
import mozpack.pkg
|
|
import mozunit
|
|
from mozpack.pkg import (
|
|
create_bom,
|
|
create_payload,
|
|
create_pkg,
|
|
get_app_info_plist,
|
|
get_apple_template,
|
|
get_relative_glob_list,
|
|
save_text_file,
|
|
xar_package_folder,
|
|
)
|
|
from mozpack.test.test_files import TestWithTmpDir
|
|
|
|
|
|
class TestPkg(TestWithTmpDir):
|
|
maxDiff = None
|
|
|
|
class MockSubprocessRun:
|
|
stderr = ""
|
|
stdout = ""
|
|
returncode = 0
|
|
|
|
def __init__(self, returncode=0):
|
|
self.returncode = returncode
|
|
|
|
def _mk_test_file(self, name, mode=0o777):
|
|
tool = Path(self.tmpdir) / f"{name}"
|
|
tool.touch()
|
|
tool.chmod(mode)
|
|
return tool
|
|
|
|
def test_get_apple_template(self):
|
|
tmpl = get_apple_template("Distribution.template")
|
|
assert type(tmpl) == Template
|
|
|
|
def test_get_apple_template_not_file(self):
|
|
with self.assertRaises(Exception):
|
|
get_apple_template("tmpl-should-not-exist")
|
|
|
|
def test_save_text_file(self):
|
|
content = "Hello"
|
|
destination = Path(self.tmpdir) / "test_save_text_file"
|
|
save_text_file(content, destination)
|
|
with destination.open("r") as file:
|
|
assert content == file.read()
|
|
|
|
def test_get_app_info_plist(self):
|
|
app_path = Path(self.tmpdir) / "app"
|
|
(app_path / "Contents").mkdir(parents=True)
|
|
(app_path / "Contents/Info.plist").touch()
|
|
data = {"foo": "bar"}
|
|
with patch.object(mozpack.pkg.plistlib, "load", lambda x: data):
|
|
assert data == get_app_info_plist(app_path)
|
|
|
|
def test_get_app_info_plist_not_file(self):
|
|
app_path = Path(self.tmpdir) / "app-does-not-exist"
|
|
with self.assertRaises(Exception):
|
|
get_app_info_plist(app_path)
|
|
|
|
def _mock_payload(self, returncode):
|
|
def _mock_run(*args, **kwargs):
|
|
return self.MockSubprocessRun(returncode)
|
|
|
|
return _mock_run
|
|
|
|
def test_create_payload(self):
|
|
destination = Path(self.tmpdir) / "mockPayload"
|
|
with patch.object(mozpack.pkg.subprocess, "run", self._mock_payload(0)):
|
|
create_payload(destination, Path(self.tmpdir), "cpio")
|
|
|
|
def test_create_bom(self):
|
|
bom_path = Path(self.tmpdir) / "Bom"
|
|
bom_path.touch()
|
|
root_path = Path(self.tmpdir)
|
|
tool_path = Path(self.tmpdir) / "not-really-used-during-test"
|
|
with patch.object(mozpack.pkg.subprocess, "check_call", lambda *x: None):
|
|
create_bom(bom_path, root_path, tool_path)
|
|
|
|
def get_relative_glob_list(self):
|
|
source = Path(self.tmpdir)
|
|
(source / "testfile").touch()
|
|
glob = "*"
|
|
assert len(get_relative_glob_list(source, glob)) == 1
|
|
|
|
def test_xar_package_folder(self):
|
|
source = Path(self.tmpdir)
|
|
dest = source / "fakedestination"
|
|
dest.touch()
|
|
tool = source / "faketool"
|
|
with patch.object(mozpack.pkg.subprocess, "check_call", lambda *x, **y: None):
|
|
xar_package_folder(source, dest, tool)
|
|
|
|
def test_xar_package_folder_not_absolute(self):
|
|
source = Path("./some/relative/path")
|
|
dest = Path("./some/other/relative/path")
|
|
tool = source / "faketool"
|
|
with patch.object(mozpack.pkg.subprocess, "check_call", lambda: None):
|
|
with self.assertRaises(Exception):
|
|
xar_package_folder(source, dest, tool)
|
|
|
|
def test_create_pkg(self):
|
|
def noop(*x, **y):
|
|
pass
|
|
|
|
def mock_get_app_info_plist(*args):
|
|
return {"CFBundleShortVersionString": "1.0.0"}
|
|
|
|
def mock_get_apple_template(*args):
|
|
return Template("fake template")
|
|
|
|
source = Path(self.tmpdir) / "FakeApp.app"
|
|
source.mkdir()
|
|
output = Path(self.tmpdir) / "output.pkg"
|
|
fake_tool = Path(self.tmpdir) / "faketool"
|
|
with patch.multiple(
|
|
mozpack.pkg,
|
|
get_app_info_plist=mock_get_app_info_plist,
|
|
get_apple_template=mock_get_apple_template,
|
|
save_text_file=noop,
|
|
create_payload=noop,
|
|
create_bom=noop,
|
|
xar_package_folder=noop,
|
|
):
|
|
create_pkg(source, output, fake_tool, fake_tool, fake_tool)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
mozunit.main()
|