summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozpack/test/test_pkg.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozpack/test/test_pkg.py')
-rw-r--r--python/mozbuild/mozpack/test/test_pkg.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/python/mozbuild/mozpack/test/test_pkg.py b/python/mozbuild/mozpack/test/test_pkg.py
new file mode 100644
index 0000000000..f1febbbae0
--- /dev/null
+++ b/python/mozbuild/mozpack/test/test_pkg.py
@@ -0,0 +1,138 @@
+# 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 mozunit
+
+import mozpack.pkg
+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()